ETH Price: $3,341.56 (-1.06%)

Token

Ether Orcs (ORC)
 

Overview

Max Total Supply

4,355 ORC

Holders

473

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ajnin.eth
Balance
0 ORC
0x9dBd781eEBA135aD2A779926880AdC89196A3265
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EtherOrcs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 3: EtherOrcs.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.7;

import "./ERC20.sol";
import "./ERC721.sol"; 

//    ___ _   _               ___            
//  | __| |_| |_  ___ _ _   / _ \ _ _ __ ___
//  | _||  _| ' \/ -_) '_| | (_) | '_/ _(_-<
//  |___|\__|_||_\___|_|    \___/|_| \__/__/
//

interface MetadataHandlerLike {
    function getTokenURI(uint16 id, uint8 body, uint8 helm, uint8 mainhand, uint8 offhand, uint16 level, uint16 zugModifier) external view returns (string memory);
}

interface ListLike {
    function register(address buyer) external;
}

contract EtherOrcs is ERC721 {

    /*///////////////////////////////////////////////////////////////
                    Global STATE
    //////////////////////////////////////////////////////////////*/

    uint256 public constant  cooldown = 10 minutes;
    uint256 public immutable startingTime;
    uint256 public immutable mintingTime;
    address public           owner; //Lame requirement from opensea

    bytes32 internal entropySauce;

    ERC20 public zug;

    mapping (uint256 => Orc)      public orcs;
    mapping (uint256 => Action)   public activities;
    mapping (Places  => LootPool) public lootPools;

    MetadataHandlerLike metadaHandler;
    ListLike            list;

    function setAddresses(address meta, address list_) external {
        require(msg.sender == owner, "not allowed");
        list          = ListLike(list_);
        metadaHandler = MetadataHandlerLike(meta);
    }

    function transferOwnership(address newOwner) external {
        require(msg.sender == owner, "not allowed");
        owner = newOwner;
    }

    function tokenURI(uint256 id) external view returns(string memory) {
        Orc memory orc = orcs[id];
        return metadaHandler.getTokenURI(uint16(id), orc.body, orc.helm, orc.mainhand, orc.offhand, orc.level, orc.zugModifier);
    }

    event ActionMade(address owner, uint256 id, uint256 timestamp, uint8 activity);


    /*///////////////////////////////////////////////////////////////
                DATA STRUCTURES 
    //////////////////////////////////////////////////////////////*/

    struct LootPool { 
        uint8  minLevel; uint8  minLootTier; uint16  cost;   uint16 total;
        uint16 tier_1;   uint16 tier_2;      uint16 tier_3; uint16 tier_4;
    }

    struct Orc { uint8 body; uint8 helm; uint8 mainhand; uint8 offhand; uint16 level; uint16 zugModifier; uint32 lvlProgress; }

    enum   Actions { UNSTAKED, FARMING, TRAINING }
    struct Action  { address owner; uint88 timestamp; Actions action; }

    // These are all the places you can go search for loot
    enum Places { 
        TOWN, DUNGEON, CRYPT, CASTLE, DRAGONS_LAIR, THE_ETHER, 
        TAINTED_KINGDOM, OOZING_DEN, ANCIENT_CHAMBER, ORC_GODS 
    }   

    /*///////////////////////////////////////////////////////////////
                    CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/
    constructor( ) ERC721("Ether Orcs", "ORC") {

        // Here's whats available in each place
        LootPool memory town           = LootPool({ minLevel: 1,  minLootTier:  1, cost:   0, total: 1000, tier_1: 800,  tier_2: 150,  tier_3: 50,  tier_4:   0 });
        LootPool memory dungeon        = LootPool({ minLevel: 3,  minLootTier:  2, cost:   0, total: 1000, tier_1: 800,  tier_2: 150,  tier_3: 50,  tier_4:   0 });
        LootPool memory crypt          = LootPool({ minLevel: 6,  minLootTier:  3, cost:   0, total: 9000, tier_1: 4950, tier_2: 3600, tier_3: 450, tier_4:   0 }); 
        LootPool memory castle         = LootPool({ minLevel: 15, minLootTier:  4, cost:   0, total: 6000, tier_1: 3300, tier_2: 2400, tier_3: 300, tier_4:   0 });
        LootPool memory dragonsLair    = LootPool({ minLevel: 25, minLootTier:  5, cost:   0, total: 6000, tier_1: 3300, tier_2: 2400, tier_3: 300, tier_4:   0 });
        LootPool memory theEther       = LootPool({ minLevel: 36, minLootTier:  6, cost:   0, total: 3000, tier_1: 1200, tier_2: 1500, tier_3: 300, tier_4:   0 });
        LootPool memory taintedKingdom = LootPool({ minLevel: 15, minLootTier:  4, cost:  50, total:  600, tier_1:  150, tier_2:  150, tier_3: 150, tier_4: 150 });
        LootPool memory oozingDen      = LootPool({ minLevel: 25, minLootTier:  5, cost:  50, total:  600, tier_1:  150, tier_2:  150, tier_3: 150, tier_4: 150 });
        LootPool memory ancientChamber = LootPool({ minLevel: 45, minLootTier:  9, cost: 125, total:  225, tier_1:  225, tier_2:    0, tier_3:   0, tier_4:   0 });
        LootPool memory orcGods        = LootPool({ minLevel: 52, minLootTier: 10, cost: 300, total:   12, tier_1:    0, tier_2:    0, tier_3:   0, tier_4:   0 });

        lootPools[Places.TOWN]            = town;
        lootPools[Places.DUNGEON]         = dungeon;
        lootPools[Places.CRYPT]           = crypt;
        lootPools[Places.CASTLE]          = castle;
        lootPools[Places.DRAGONS_LAIR]    = dragonsLair;
        lootPools[Places.THE_ETHER]       = theEther;
        lootPools[Places.TAINTED_KINGDOM] = taintedKingdom;
        lootPools[Places.OOZING_DEN]      = oozingDen;
        lootPools[Places.ANCIENT_CHAMBER] = ancientChamber;
        lootPools[Places.ORC_GODS]        = orcGods;

        mintingTime  = 1633951800;
        startingTime = 1633951800 + 4.5 hours;

        // Deploy Zug
        zug = new ERC20();
        zug.setMinter(address(this), true);
        zug.setRuler(address(msg.sender));

        owner = msg.sender;
    }

    /*///////////////////////////////////////////////////////////////
                    MODIFIERS 
    //////////////////////////////////////////////////////////////*/

    modifier noCheaters() {
        uint256 size = 0;
        address acc = msg.sender;
        assembly { size := extcodesize(acc)}

        require(msg.sender == tx.origin , "you're trying to cheat!");
        require(size == 0,                "you're trying to cheat!");
        _;

        // We'll use the last caller hash to add entropy to next caller
        entropySauce = keccak256(abi.encodePacked(acc, block.coinbase));
    }

    modifier ownerOfOrc(uint256 id) { 
        require(ownerOf[id] == msg.sender || activities[id].owner == msg.sender, "not your orc");
        _;
    }


    /*///////////////////////////////////////////////////////////////
                    PUBLIC FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    function mint() public noCheaters returns (uint256 id) {
        require(block.timestamp >= mintingTime, "not open");

        uint256 cost = _getMintingPrice();
        uint256 rand = _rand();

        if (block.timestamp < startingTime) list.register(msg.sender);
        if (cost > 0) zug.burn(msg.sender, cost);

        return _mintOrc(rand);
    }

    function doAction(uint256 id, Actions action_) public ownerOfOrc(id) noCheaters {
        Action memory action = activities[id];
        require(action.action != action_, "already doing that");

        // Picking the largest value between block.timestamp, action.timestamp and startingTime
        uint88 timestamp = uint88(startingTime > (block.timestamp > action.timestamp ? block.timestamp : action.timestamp) ?
                                  startingTime : (block.timestamp > action.timestamp ? block.timestamp : action.timestamp));

        if (action.action == Actions.UNSTAKED)  _transfer(msg.sender, address(this), id);
     
        else {
            if (block.timestamp > action.timestamp) _claim(id);
            timestamp = timestamp > action.timestamp ? timestamp : action.timestamp;
        }

        if (action_ == Actions.UNSTAKED) _transfer(address(this), activities[id].owner, id);

        activities[id] = Action({owner: msg.sender, action: action_,timestamp: timestamp});
        emit ActionMade(msg.sender, id, block.timestamp, uint8(action_));
    }

    function doActionWithManyOrcs(uint256[] calldata ids, Actions action_) external {
        for (uint256 index = 0; index < ids.length; index++) {
            doAction(ids[index], action_);
        }
    }

    function claim(uint256[] calldata ids) external {
        for (uint256 index = 0; index < ids.length; index++) {
            _claim(ids[index]);
        }
    }

    function _claim(uint256 id) internal noCheaters {
        Orc    memory orc    = orcs[id];
        Action memory action = activities[id];

        if(block.timestamp <= action.timestamp) return;

        uint256 timeDiff = uint256(block.timestamp - action.timestamp);

        if (action.action == Actions.FARMING) zug.mint(action.owner, claimableZug(timeDiff, orc.zugModifier));
       
        if (action.action == Actions.TRAINING) {
            orcs[id].lvlProgress += uint16(timeDiff * 3000 / 1 days);
            orcs[id].level        = uint16(orcs[id].lvlProgress / 1000);
        }

        activities[id].timestamp = uint88(block.timestamp);
    }

    function pillage(uint256 id, Places place, bool tryHelm, bool tryMainhand, bool tryOffhand) public ownerOfOrc(id) noCheaters {
        require(block.timestamp >= uint256(activities[id].timestamp), "on cooldown");
        require(place != Places.ORC_GODS,  "You can't pillage the Orc God");

        if(activities[id].timestamp < block.timestamp) _claim(id); // Need to claim to not have equipment reatroactively multiplying

        uint256 rand_ = _rand();
  
        LootPool memory pool = lootPools[place];
        require(orcs[id].level >= uint16(pool.minLevel), "below minimum level");

        if (pool.cost > 0) {
            require(block.timestamp - startingTime > 14 days);
            zug.burn(msg.sender, uint256(pool.cost) * 1 ether);
        } 

        uint8 item;
        if (tryHelm) {
            ( pool, item ) = _getItemFromPool(pool, _randomize(rand_,"HELM", id));
            if (item != 0 ) orcs[id].helm = item;
        }
        if (tryMainhand) {
            ( pool, item ) = _getItemFromPool(pool, _randomize(rand_,"MAINHAND", id));
            if (item != 0 ) orcs[id].mainhand = item;
        }
        if (tryOffhand) {
            ( pool, item ) = _getItemFromPool(pool, _randomize(rand_,"OFFHAND", id));
            if (item != 0 ) orcs[id].offhand = item;
        }

        if (uint(place) > 1) lootPools[place] = pool;

        // Update zug modifier
        Orc memory orc = orcs[id];
        uint16 zugModifier_ = _tier(orc.helm) + _tier(orc.mainhand) + _tier(orc.offhand);

        orcs[id].zugModifier = zugModifier_;

        activities[id].timestamp = uint88(block.timestamp + cooldown);
    } 

    function update(uint256 id) public ownerOfOrc(id) noCheaters {
        require(_tier(orcs[id].mainhand) < 10);
        require(block.timestamp - startingTime >= 14 days);
        require(orcs[id].level >= 32);
        
        LootPool memory pool = lootPools[Places.ORC_GODS];

        zug.burn(msg.sender, uint256(pool.cost) * 1 ether);

        _claim(id); // Need to claim to not have equipment reatroactively multiplying

        uint8 item = uint8(lootPools[Places.ORC_GODS].total--);
        orcs[id].zugModifier = 30;
        orcs[id].body = orcs[id].helm = orcs[id].mainhand = orcs[id].offhand = item + 40;
    }

    /*///////////////////////////////////////////////////////////////
                    VIEWERS
    //////////////////////////////////////////////////////////////*/

    function claimable(uint256 id) external view returns (uint256 amount) {
        uint256 timeDiff = uint256(block.timestamp - activities[id].timestamp);
        amount = activities[id].action == Actions.FARMING ? claimableZug(timeDiff, orcs[id].zugModifier) : timeDiff * 2000 / 1 days;
    }

    /*///////////////////////////////////////////////////////////////
                    MINT FUNCTION
    //////////////////////////////////////////////////////////////*/

    function _mintOrc(uint256 rand) internal returns (uint16 id) {
        (uint8 body,uint8 helm,uint8 mainhand,uint8 offhand) = (0,0,0,0);

        {
            // Helpers to get Percentages
            uint256 sevenOnePct   = type(uint16).max / 100 * 75;
            uint256 eightyPct     = type(uint16).max / 100 * 80;
            uint256 nineFivePct   = type(uint16).max / 100 * 95;
            uint256 nineNinePct   = type(uint16).max / 100 * 99;
    
            id = uint16(totalSupply + 1);
    
            // Getting Random traits
            uint16 randBody = uint16(_randomize(rand, "BODY", id));
                   body     = uint8(randBody > nineNinePct ? randBody % 3 + 25 : 
                              randBody > sevenOnePct  ? randBody % 12 + 13 : randBody % 13 + 1 );
    
            uint16 randHelm = uint16(_randomize(rand, "HELM", id));
                   helm     = uint8(randHelm < eightyPct ? 0 : randHelm % 4 + 5);
    
            uint16 randOffhand = uint16(_randomize(rand, "OFFHAND", id));
                   offhand     = uint8(randOffhand < eightyPct ? 0 : randOffhand % 4 + 5);
    
            uint16 randMainhand = uint16(_randomize(rand, "MAINHAND", id));
                   mainhand     = uint8(randMainhand < nineFivePct ? randMainhand % 4 + 1: randMainhand % 4 + 5);
        }

        _mint(msg.sender, id);

        uint16 zugModifier = _tier(helm) + _tier(mainhand) + _tier(offhand);
        orcs[uint256(id)] = Orc({body: body, helm: helm, mainhand: mainhand, offhand: offhand, level: 0, lvlProgress: 0, zugModifier:zugModifier});
    }

    /*///////////////////////////////////////////////////////////////
                    INTERNAL  HELPERS
    //////////////////////////////////////////////////////////////*/

    /// @dev take an available item from a pool
    function _getItemFromPool(LootPool memory pool, uint256 rand) internal pure returns (LootPool memory, uint8 item) {
        uint draw = rand % pool.total--; 

        if (draw > pool.tier_1 + pool.tier_2 + pool.tier_3 && pool.tier_4 > 0) {
            item = uint8((pool.tier_4-- % 4 + 1) + (pool.minLootTier + 3) * 4);     
            return (pool, item);
        }

        if (draw > pool.tier_1 + pool.tier_2 && pool.tier_3 > 0) {
            item = uint8((pool.tier_3-- % 4 + 1) + (pool.minLootTier + 2) * 4);
            return (pool, item);
        }

        if (draw > pool.tier_1 && pool.tier_2 > 0) {
            item = uint8((pool.tier_2-- % 4 + 1) + (pool.minLootTier + 1) * 4);
            return (pool, item);
        }

        if (pool.tier_1 > 0) {
            item = uint8((pool.tier_1-- % 4 + 1) + pool.minLootTier * 4);
            return (pool, item);
        }
    }

    function claimableZug(uint256 timeDiff, uint16 zugModifier) internal pure returns (uint256 zugAmount) {
        zugAmount = timeDiff * (4 + zugModifier) * 1 ether / 1 days;
    }

    /// @dev Convert an id to its tier
    function _tier(uint16 id) internal pure returns (uint16) {
        if (id == 0) return 0;
        return ((id - 1) / 4 );
    }

    /// @dev Create a bit more of randomness
    function _randomize(uint256 rand, string memory val, uint256 spicy) internal pure returns (uint256) {
        return uint256(keccak256(abi.encode(rand, val, spicy)));
    }

    function _rand() internal view returns (uint256) {
        return uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, block.basefee, block.timestamp, entropySauce)));
    }

    function _getMintingPrice() internal view returns (uint256) {
        if (totalSupply < 1550) return   0;
        if (totalSupply < 2050) return   4 ether;
        if (totalSupply < 2550) return   8 ether;
        if (totalSupply < 3050) return  12 ether;
        if (totalSupply < 3550) return  24 ether;
        if (totalSupply < 4050) return  40 ether;
        if (totalSupply < 4550) return  60 ether;
        if (totalSupply < 5050) return 130 ether;
    }
}

File 1 of 3: ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.7;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// Taken from Solmate: https://github.com/Rari-Capital/solmate

contract ERC20 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public constant name     = "ZUG";
    string public constant symbol   = "ZUG";
    uint8  public constant decimals = 18;

    /*///////////////////////////////////////////////////////////////
                             ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    mapping(address => bool) public isMinter;

    address public ruler;

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    constructor() { ruler = msg.sender;}

    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        balanceOf[msg.sender] -= value;

        // This is safe because the sum of all user
        // balances can't exceed type(uint256).max!
        unchecked {
            balanceOf[to] += value;
        }

        emit Transfer(msg.sender, to, value);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        if (allowance[from][msg.sender] != type(uint256).max) {
            allowance[from][msg.sender] -= value;
        }

        balanceOf[from] -= value;

        // This is safe because the sum of all user
        // balances can't exceed type(uint256).max!
        unchecked {
            balanceOf[to] += value;
        }

        emit Transfer(from, to, value);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                             ORC PRIVILEGE
    //////////////////////////////////////////////////////////////*/

    function mint(address to, uint256 value) external {
        require(isMinter[msg.sender], "FORBIDDEN TO MINT");
        _mint(to, value);
    }

    function burn(address from, uint256 value) external {
        require(isMinter[msg.sender], "FORBIDDEN TO BURN");
        _burn(from, value);
    }

    /*///////////////////////////////////////////////////////////////
                         Ruler Function
    //////////////////////////////////////////////////////////////*/

    function setMinter(address minter, bool status) external {
        require(msg.sender == ruler, "NOT ALLOWED TO RULE");

        isMinter[minter] = status;
    }

    function setRuler(address ruler_) external {
        require(msg.sender == ruler ||ruler == address(0), "NOT ALLOWED TO RULE");

        ruler = ruler_;
    }


    /*///////////////////////////////////////////////////////////////
                          INTERNAL UTILS
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 value) internal {
        totalSupply += value;

        // This is safe because the sum of all user
        // balances can't exceed type(uint256).max!
        unchecked {
            balanceOf[to] += value;
        }

        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] -= value;

        // This is safe because a user won't ever
        // have a balance larger than totalSupply!
        unchecked {
            totalSupply -= value;
        }

        emit Transfer(from, address(0), value);
    }
}

File 2 of 3: ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.7;


/// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation,
/// including the MetaData, and partially, Enumerable extensions.
contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/
    
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    
    event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId);
    
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    
    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/
    
    string public name;
    
    string public symbol;
    
    /*///////////////////////////////////////////////////////////////
                             ERC-721 STORAGE
    //////////////////////////////////////////////////////////////*/
    
    uint256 public totalSupply;
    
    mapping(address => uint256) public balanceOf;
    
    mapping(uint256 => address) public ownerOf;
        
    mapping(uint256 => address) public getApproved;
 
    mapping(address => mapping(address => bool)) public isApprovedForAll;
    
    constructor(
        string memory _name,
        string memory _symbol
    ) {
        name = _name;
        symbol = _symbol;
    }
    
    /*///////////////////////////////////////////////////////////////
                              ERC-20-LIKE LOGIC
    //////////////////////////////////////////////////////////////*/
    
    function transfer(address to, uint256 tokenId) external {
        require(msg.sender == ownerOf[tokenId], "NOT_OWNER");
        
        _transfer(msg.sender, to, tokenId);
        
    }
    
    /*///////////////////////////////////////////////////////////////
                              ERC-721 LOGIC
    //////////////////////////////////////////////////////////////*/
    
    function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) {
        supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;
    }
    
    function approve(address spender, uint256 tokenId) external {
        address owner = ownerOf[tokenId];
        
        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_APPROVED");
        
        getApproved[tokenId] = spender;
        
        emit Approval(owner, spender, tokenId); 
    }
    
    function setApprovalForAll(address operator, bool approved) external {
        isApprovedForAll[msg.sender][operator] = approved;
        
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(address, address to, uint256 tokenId) public {
        address owner = ownerOf[tokenId];
        
        require(
            msg.sender == owner 
            || msg.sender == getApproved[tokenId]
            || isApprovedForAll[owner][msg.sender], 
            "NOT_APPROVED"
        );
        
        _transfer(owner, to, tokenId);
        
    }
    
    function safeTransferFrom(address, address to, uint256 tokenId) external {
        safeTransferFrom(address(0), to, tokenId, "");
    }
    
    function safeTransferFrom(address, address to, uint256 tokenId, bytes memory data) public {
        transferFrom(address(0), to, tokenId); 
        
        if (to.code.length != 0) {
            // selector = `onERC721Received(address,address,uint,bytes)`
            (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02,
                msg.sender, address(0), tokenId, data));
                
            bytes4 selector = abi.decode(returned, (bytes4));
            
            require(selector == 0x150b7a02, "NOT_ERC721_RECEIVER");
        }
    }
    
    
    /*///////////////////////////////////////////////////////////////
                          INTERNAL UTILS
    //////////////////////////////////////////////////////////////*/

    function _transfer(address from, address to, uint256 tokenId) internal {
        balanceOf[from]--; 
        balanceOf[to]++;
        
        delete getApproved[tokenId];
        
        ownerOf[tokenId] = to;
        emit Transfer(msg.sender, to, tokenId); 

    }

    function _mint(address to, uint256 tokenId) internal { 
        require(ownerOf[tokenId] == address(0), "ALREADY_MINTED");

        uint maxSupply = 5050;
        require(totalSupply++ <= maxSupply, "MAX SUPPLY REACHED");
                
        // This is safe because the sum of all user
        // balances can't exceed type(uint256).max!
        unchecked {
            balanceOf[to]++;
        }
        
        ownerOf[tokenId] = to;
                
        emit Transfer(address(0), to, tokenId); 
    }
    
    function _burn(uint256 tokenId) internal { 
        address owner = ownerOf[tokenId];
        
        require(ownerOf[tokenId] != address(0), "NOT_MINTED");
        
        totalSupply--;
        balanceOf[owner]--;
        
        delete ownerOf[tokenId];
                
        emit Transfer(owner, address(0), tokenId); 
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"activity","type":"uint8"}],"name":"ActionMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activities","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint88","name":"timestamp","type":"uint88"},{"internalType":"enum EtherOrcs.Actions","name":"action","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum EtherOrcs.Actions","name":"action_","type":"uint8"}],"name":"doAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"enum EtherOrcs.Actions","name":"action_","type":"uint8"}],"name":"doActionWithManyOrcs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum EtherOrcs.Places","name":"","type":"uint8"}],"name":"lootPools","outputs":[{"internalType":"uint8","name":"minLevel","type":"uint8"},{"internalType":"uint8","name":"minLootTier","type":"uint8"},{"internalType":"uint16","name":"cost","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"},{"internalType":"uint16","name":"tier_1","type":"uint16"},{"internalType":"uint16","name":"tier_2","type":"uint16"},{"internalType":"uint16","name":"tier_3","type":"uint16"},{"internalType":"uint16","name":"tier_4","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orcs","outputs":[{"internalType":"uint8","name":"body","type":"uint8"},{"internalType":"uint8","name":"helm","type":"uint8"},{"internalType":"uint8","name":"mainhand","type":"uint8"},{"internalType":"uint8","name":"offhand","type":"uint8"},{"internalType":"uint16","name":"level","type":"uint16"},{"internalType":"uint16","name":"zugModifier","type":"uint16"},{"internalType":"uint32","name":"lvlProgress","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum EtherOrcs.Places","name":"place","type":"uint8"},{"internalType":"bool","name":"tryHelm","type":"bool"},{"internalType":"bool","name":"tryMainhand","type":"bool"},{"internalType":"bool","name":"tryOffhand","type":"bool"}],"name":"pillage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"meta","type":"address"},{"internalType":"address","name":"list_","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zug","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b506040518060400160405280600a81526020017f4574686572204f726373000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f5243000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062001405565b508060019080519060200190620000af92919062001405565b5050506000604051806101000160405280600160ff168152602001600160ff168152602001600061ffff1681526020016103e861ffff16815260200161032061ffff168152602001609661ffff168152602001603261ffff168152602001600061ffff1681525090506000604051806101000160405280600360ff168152602001600260ff168152602001600061ffff1681526020016103e861ffff16815260200161032061ffff168152602001609661ffff168152602001603261ffff168152602001600061ffff1681525090506000604051806101000160405280600660ff168152602001600360ff168152602001600061ffff16815260200161232861ffff16815260200161135661ffff168152602001610e1061ffff1681526020016101c261ffff168152602001600061ffff1681525090506000604051806101000160405280600f60ff168152602001600460ff168152602001600061ffff16815260200161177061ffff168152602001610ce461ffff16815260200161096061ffff16815260200161012c61ffff168152602001600061ffff1681525090506000604051806101000160405280601960ff168152602001600560ff168152602001600061ffff16815260200161177061ffff168152602001610ce461ffff16815260200161096061ffff16815260200161012c61ffff168152602001600061ffff1681525090506000604051806101000160405280602460ff168152602001600660ff168152602001600061ffff168152602001610bb861ffff1681526020016104b061ffff1681526020016105dc61ffff16815260200161012c61ffff168152602001600061ffff1681525090506000604051806101000160405280600f60ff168152602001600460ff168152602001603261ffff16815260200161025861ffff168152602001609661ffff168152602001609661ffff168152602001609661ffff168152602001609661ffff1681525090506000604051806101000160405280601960ff168152602001600560ff168152602001603261ffff16815260200161025861ffff168152602001609661ffff168152602001609661ffff168152602001609661ffff168152602001609661ffff1681525090506000604051806101000160405280602d60ff168152602001600960ff168152602001607d61ffff16815260200160e161ffff16815260200160e161ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090506000604051806101000160405280603460ff168152602001600a60ff16815260200161012c61ffff168152602001600c61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815250905089600c6000806009811115620004cc57620004cb620015a5565b5b6009811115620004e157620004e0620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505088600c600060016009811115620006225762000621620015a5565b5b6009811115620006375762000636620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505087600c600060026009811115620007785762000777620015a5565b5b60098111156200078d576200078c620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505086600c600060036009811115620008ce57620008cd620015a5565b5b6009811115620008e357620008e2620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505085600c60006004600981111562000a245762000a23620015a5565b5b600981111562000a395762000a38620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505084600c60006005600981111562000b7a5762000b79620015a5565b5b600981111562000b8f5762000b8e620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505083600c60006006600981111562000cd05762000ccf620015a5565b5b600981111562000ce55762000ce4620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505082600c60006007600981111562000e265762000e25620015a5565b5b600981111562000e3b5762000e3a620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505081600c60006008600981111562000f7c5762000f7b620015a5565b5b600981111562000f915762000f90620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff16021790555090505080600c6000600980811115620010d157620010d0620015a5565b5b6009811115620010e657620010e5620015a5565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff160217905550905050636164203860a081815250506361645f8060808181525050604051620012319062001496565b604051809103906000f0801580156200124e573d6000803e3d6000fd5b50600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf456ae73060016040518363ffffffff1660e01b8152600401620012ef92919062001502565b600060405180830381600087803b1580156200130a57600080fd5b505af11580156200131f573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fa4c5d7336040518263ffffffff1660e01b8152600401620013809190620014e5565b600060405180830381600087803b1580156200139b57600080fd5b505af1158015620013b0573d6000803e3d6000fd5b5050505033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050505062001603565b82805462001413906200156f565b90600052602060002090601f01602090048101928262001437576000855562001483565b82601f106200145257805160ff191683800117855562001483565b8280016001018555821562001483579182015b828111156200148257825182559160200191906001019062001465565b5b509050620014929190620014a4565b5090565b611371806200733e83390190565b5b80821115620014bf576000816000905550600101620014a5565b5090565b620014ce816200152f565b82525050565b620014df8162001543565b82525050565b6000602082019050620014fc6000830184620014c3565b92915050565b6000604082019050620015196000830185620014c3565b620015286020830184620014d4565b9392505050565b60006200153c826200154f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200158857607f821691505b602082108114156200159f576200159e620015d4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60805160a051615ceb62001653600039600081816109ff0152610ae4015260008181610b5f01528181610eaa015281816113c001528181611dfc01528181611e5801526123d00152615ceb6000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806370a082311161010f578063962b2df2116100a2578063c87b56dd11610071578063c87b56dd146105b1578063d1d58b25146105e1578063e985e9c514610611578063f2fde38b14610641576101ef565b8063962b2df214610526578063a22cb4651461055d578063a9059cbb14610579578063b88d4fde14610595576101ef565b806382ab890a116100de57806382ab890a146104b25780638da5cb5b146104ce57806390107afe146104ec57806395d89b4114610508576101ef565b806370a082311461041257806376f0d51a14610442578063787a08a61461045e57806379388c251461047c576101ef565b806318160ddd116101875780634635047911610156578063463504791461038e57806352b104a7146103aa5780636352211e146103c65780636ba4c138146103f6576101ef565b806318160ddd1461031a57806323b872dd1461033857806339518b5e1461035457806342842e0e14610372576101ef565b8063095ea7b3116101c3578063095ea7b3146102905780630d1657e8146102ac5780630d5a5a77146102de5780631249c58b146102fc576101ef565b8062f66038146101f457806301ffc9a71461021257806306fdde0314610242578063081812fc14610260575b600080fd5b6101fc61065d565b6040516102099190614e78565b60405180910390f35b61022c600480360381019061022791906147aa565b610683565b6040516102399190614e5d565b60405180910390f35b61024a6106e5565b6040516102579190614e93565b60405180910390f35b61027a6004803603810190610275919061487a565b610773565b6040516102879190614d51565b60405180910390f35b6102aa60048036038101906102a591906146bd565b6107a6565b005b6102c660048036038101906102c1919061487a565b61098f565b6040516102d593929190614e26565b60405180910390f35b6102e66109fd565b6040516102f391906150c4565b60405180910390f35b610304610a21565b60405161031191906150c4565b60405180910390f35b610322610cf1565b60405161032f91906150c4565b60405180910390f35b610352600480360381019061034d91906145a7565b610cf7565b005b61035c610ea8565b60405161036991906150c4565b60405180910390f35b61038c600480360381019061038791906145a7565b610ecc565b005b6103a860048036038101906103a391906148e7565b610eed565b005b6103c460048036038101906103bf919061474a565b6119c8565b005b6103e060048036038101906103db919061487a565b611a12565b6040516103ed9190614d51565b60405180910390f35b610410600480360381019061040b91906146fd565b611a45565b005b61042c6004803603810190610427919061453a565b611a8d565b60405161043991906150c4565b60405180910390f35b61045c600480360381019061045791906148a7565b611aa5565b005b61046661211a565b60405161047391906150c4565b60405180910390f35b6104966004803603810190610491919061487a565b612120565b6040516104a9979695949392919061519b565b60405180910390f35b6104cc60048036038101906104c7919061487a565b6121c2565b005b6104d66127d0565b6040516104e39190614d51565b60405180910390f35b61050660048036038101906105019190614567565b6127f6565b005b61051061290c565b60405161051d9190614e93565b60405180910390f35b610540600480360381019061053b9190614804565b61299a565b60405161055498979695949392919061511d565b60405180910390f35b6105776004803603810190610572919061467d565b612a50565b005b610593600480360381019061058e91906146bd565b612b4d565b005b6105af60048036038101906105aa91906145fa565b612bfd565b005b6105cb60048036038101906105c6919061487a565b612d79565b6040516105d89190614e93565b60405180910390f35b6105fb60048036038101906105f6919061487a565b612f53565b60405161060891906150c4565b60405180910390f35b61062b60048036038101906106269190614567565b613045565b6040516106389190614e5d565b60405180910390f35b61065b6004803603810190610656919061453a565b613074565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106de5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546106f290615762565b80601f016020809104026020016040519081016040528092919081815260200182805461071e90615762565b801561076b5780601f106107405761010080835404028352916020019161076b565b820191906000526020600020905b81548152906001019060200180831161074e57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061089e5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490614ed5565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600b6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046affffffffffffffffffffff169080600001601f9054906101000a900460ff16905083565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600090506000339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690614ef5565b60405180910390fd5b60008214610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990614ef5565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000421015610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90614f15565b60405180910390fd5b6000610b4f613148565b90506000610b5b61322b565b90507f0000000000000000000000000000000000000000000000000000000000000000421015610c1357600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634420e486336040518263ffffffff1660e01b8152600401610be09190614d51565b600060405180830381600087803b158015610bfa57600080fd5b505af1158015610c0e573d6000803e3d6000fd5b505050505b6000821115610cac57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b8152600401610c79929190614db8565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505b610cb581613266565b61ffff16945050508041604051602001610cd0929190614caf565b60405160208183030381529060405280519060200120600881905550505090565b60025481565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dc757506005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e585750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614ed5565b60405180910390fd5b610ea28184846136ff565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ee86000838360405180602001604052806000815250612bfd565b505050565b843373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fbc57503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614ef5565b60405180910390fd5b600082146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90614ef5565b60405180910390fd5b600b600089815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff16421015611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614eb5565b60405180910390fd5b60098081111561114657611145615918565b5b87600981111561115957611158615918565b5b141561119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190615035565b60405180910390fd5b42600b60008a815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff1610156111e6576111e588613891565b5b60006111f061322b565b90506000600c60008a600981111561120b5761120a615918565b5b600981111561121d5761121c615918565b5b8152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815260200160008201600a9054906101000a900461ffff1661ffff1661ffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815250509050806000015160ff1661ffff16600a60008c815260200190815260200160002060000160049054906101000a900461ffff1661ffff1610156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090615015565b60405180910390fd5b6000816040015161ffff16111561149f57621275007f0000000000000000000000000000000000000000000000000000000000000000426113ea919061556b565b116113f457600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a7640000846040015161ffff1661144f91906154a2565b6040518363ffffffff1660e01b815260040161146c929190614db8565b600060405180830381600087803b15801561148657600080fd5b505af115801561149a573d6000803e3d6000fd5b505050505b60008815611534576114f0826114eb856040518060400160405280600481526020017f48454c4d000000000000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146115335780600a60008d815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b5b87156115c7576115838261157e856040518060400160405280600881526020017f4d41494e48414e440000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146115c65780600a60008d815260200190815260200160002060000160026101000a81548160ff021916908360ff1602179055505b5b861561165a5761161682611611856040518060400160405280600781526020017f4f464648414e44000000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146116595780600a60008d815260200190815260200160002060000160036101000a81548160ff021916908360ff1602179055505b5b60018a600981111561166f5761166e615918565b5b11156117c55781600c60008c600981111561168d5761168c615918565b5b600981111561169f5761169e615918565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff1602179055509050505b6000600a60008d81526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060006118d3826060015160ff1661408b565b6118e3836040015160ff1661408b565b6118f3846020015160ff1661408b565b6118fd91906152d4565b61190791906152d4565b905080600a60008f815260200190815260200160002060000160066101000a81548161ffff021916908361ffff16021790555061025842611948919061530c565b600b60008f815260200190815260200160002060000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff160217905550505050505080416040516020016119a2929190614caf565b604051602081830303815290604052805190602001206008819055505050505050505050565b60005b83839050811015611a0c576119f98484838181106119ec576119eb615976565b5b9050602002013583611aa5565b8080611a04906157c5565b9150506119cb565b50505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005b82829050811015611a8857611a75838383818110611a6957611a68615976565b5b90506020020135613891565b8080611a80906157c5565b915050611a48565b505050565b60036020528060005260406000206000915090505481565b813373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611b7457503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614ef5565b60405180910390fd5b60008214611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590614ef5565b60405180910390fd5b6000600b60008781526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff166affffffffffffffffffffff16815260200160008201601f9054906101000a900460ff166002811115611d4457611d43615918565b5b6002811115611d5657611d55615918565b5b815250509050846002811115611d6f57611d6e615918565b5b81604001516002811115611d8657611d85615918565b5b1415611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614fd5565b60405180910390fd5b600081602001516affffffffffffffffffffff164211611df85781602001516affffffffffffffffffffff16611dfa565b425b7f000000000000000000000000000000000000000000000000000000000000000011611e565781602001516affffffffffffffffffffff164211611e4f5781602001516affffffffffffffffffffff16611e51565b425b611e78565b7f00000000000000000000000000000000000000000000000000000000000000005b905060006002811115611e8e57611e8d615918565b5b82604001516002811115611ea557611ea4615918565b5b1415611ebb57611eb63330896136ff565b611f12565b81602001516affffffffffffffffffffff16421115611ede57611edd87613891565b5b81602001516affffffffffffffffffffff16816affffffffffffffffffffff1611611f0d578160200151611f0f565b805b90505b60006002811115611f2657611f25615918565b5b866002811115611f3957611f38615918565b5b1415611f8157611f8030600b60008a815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896136ff565b5b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001826affffffffffffffffffffff168152602001876002811115611fce57611fcd615918565b5b815250600b600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff160217905550604082015181600001601f6101000a81548160ff0219169083600281111561208b5761208a615918565b5b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c0363388428960028111156120ca576120c9615918565b5b6040516120da9493929190614de1565b60405180910390a1505080416040516020016120f7929190614caf565b604051602081830303815290604052805190602001206008819055505050505050565b61025881565b600a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900461ffff16908060000160069054906101000a900461ffff16908060000160089054906101000a900463ffffffff16905087565b803373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061229157503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c790614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f90614ef5565b60405180910390fd5b6000821461238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614ef5565b60405180910390fd5b600a6123bc600a600087815260200190815260200160002060000160029054906101000a900460ff1660ff1661408b565b61ffff16106123ca57600080fd5b621275007f0000000000000000000000000000000000000000000000000000000000000000426123fa919061556b565b101561240557600080fd5b6020600a600086815260200190815260200160002060000160049054906101000a900461ffff1661ffff16101561243b57600080fd5b6000600c600060098081111561245457612453615918565b5b600981111561246657612465615918565b5b8152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815260200160008201600a9054906101000a900461ffff1661ffff1661ffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815250509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a7640000846040015161ffff166125d791906154a2565b6040518363ffffffff1660e01b81526004016125f4929190614db8565b600060405180830381600087803b15801561260e57600080fd5b505af1158015612622573d6000803e3d6000fd5b5050505061262f85613891565b6000600c600060098081111561264857612647615918565b5b600981111561265a57612659615918565b5b8152602001908152602001600020600001600481819054906101000a900461ffff16809291906126899061570e565b91906101000a81548161ffff021916908361ffff1602179055509050601e600a600088815260200190815260200160002060000160066101000a81548161ffff021916908361ffff1602179055506028816126e4919061539c565b600a600088815260200190815260200160002060000160036101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160026101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550505080416040516020016127ae929190614caf565b6040516020818303038152906040528051906020012060088190555050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d90614f35565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6001805461291990615762565b80601f016020809104026020016040519081016040528092919081815260200182805461294590615762565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b505050505081565b600c6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900461ffff16908060000160049054906101000a900461ffff16908060000160069054906101000a900461ffff16908060000160089054906101000a900461ffff169080600001600a9054906101000a900461ffff169080600001600c9054906101000a900461ffff16905088565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b419190614e5d565b60405180910390a35050565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be590614fb5565b60405180910390fd5b612bf93383836136ff565b5050565b612c0960008484610cf7565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612d735760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a023360008686604051602401612c5e9493929190614d6c565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612cac9190614d3a565b600060405180830381855afa9150503d8060008114612ce7576040519150601f19603f3d011682016040523d82523d6000602084013e612cec565b606091505b50915050600081806020019051810190612d0691906147d7565b905063150b7a0260e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614f95565b60405180910390fd5b50505b50505050565b60606000600a60008481526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac4b378a84836000015184602001518560400151866060015187608001518860a001516040518863ffffffff1660e01b8152600401612ef69796959493929190615055565b60006040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612f4b9190614831565b915050919050565b600080600b600084815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff1642612f9c919061556b565b905060016002811115612fb257612fb1615918565b5b600b6000858152602001908152602001600020600001601f9054906101000a900460ff166002811115612fe857612fe7615918565b5b1461300e57620151806107d082612fff91906154a2565b6130099190615404565b61303d565b61303c81600a600086815260200190815260200160002060000160069054906101000a900461ffff166140c3565b5b915050919050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb90614f35565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061060e600254101561315f5760009050613228565b610802600254101561317b57673782dace9d9000009050613228565b6109f6600254101561319757676f05b59d3b2000009050613228565b610bea60025410156131b35767a688906bd8b000009050613228565b610dde60025410156131d05768014d1120d7b16000009050613228565b610fd260025410156131ed5768022b1c8c1227a000009050613228565b6111c6600254101561320a57680340aad21b3b7000009050613228565b6113ba60025410156132275768070c1cc73b00c800009050613228565b5b90565b600033424842600854604051602001613248959493929190614cdb565b6040516020818303038152906040528051906020012060001c905090565b600080600080600080600080600093509350935093506000604b606461ffff61328f91906153d3565b6132999190615466565b61ffff16905060006050606461ffff6132b291906153d3565b6132bc9190615466565b61ffff1690506000605f606461ffff6132d591906153d3565b6132df9190615466565b61ffff16905060006063606461ffff6132f891906153d3565b6133029190615466565b61ffff1690506001600254613317919061530c565b9850600061335f8b6040518060400160405280600481526020017f424f4459000000000000000000000000000000000000000000000000000000008152508c61ffff16613dca565b9050818161ffff16116133b457848161ffff1611613395576001600d826133869190615858565b61339091906152d4565b6133af565b600d600c826133a49190615858565b6133ae91906152d4565b5b6133ce565b60196003826133c39190615858565b6133cd91906152d4565b5b985060006134168c6040518060400160405280600481526020017f48454c4d000000000000000000000000000000000000000000000000000000008152508d61ffff16613dca565b9050848161ffff16106134415760056004826134329190615858565b61343c91906152d4565b613444565b60005b9850600061348c8d6040518060400160405280600781526020017f4f464648414e44000000000000000000000000000000000000000000000000008152508e61ffff16613dca565b9050858161ffff16106134b75760056004826134a89190615858565b6134b291906152d4565b6134ba565b60005b975060006135028e6040518060400160405280600881526020017f4d41494e48414e440000000000000000000000000000000000000000000000008152508f61ffff16613dca565b9050858161ffff161061352d57600560048261351e9190615858565b61352891906152d4565b613547565b600160048261353c9190615858565b61354691906152d4565b5b9950505050505050505061355f338661ffff1661410a565b600061356d8260ff1661408b565b6135798460ff1661408b565b6135858660ff1661408b565b61358f91906152d4565b61359991906152d4565b90506040518060e001604052808660ff1681526020018560ff1681526020018460ff1681526020018360ff168152602001600061ffff1681526020018261ffff168152602001600063ffffffff16815250600a60008861ffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548161ffff021916908361ffff16021790555060a08201518160000160066101000a81548161ffff021916908361ffff16021790555060c08201518160000160086101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050919050565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061374f90615738565b9190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906137a4906157c5565b91905055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390090614ef5565b60405180910390fd5b6000821461394c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394390614ef5565b60405180910390fd5b6000600a60008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000600b60008681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff166affffffffffffffffffffff16815260200160008201601f9054906101000a900460ff166002811115613b1e57613b1d615918565b5b6002811115613b3057613b2f615918565b5b81525050905080602001516affffffffffffffffffffff164211613b55575050613d96565b600081602001516affffffffffffffffffffff1642613b74919061556b565b905060016002811115613b8a57613b89615918565b5b82604001516002811115613ba157613ba0615918565b5b1415613c4857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198360000151613bf8848760a001516140c3565b6040518363ffffffff1660e01b8152600401613c15929190614db8565b600060405180830381600087803b158015613c2f57600080fd5b505af1158015613c43573d6000803e3d6000fd5b505050505b600280811115613c5b57613c5a615918565b5b82604001516002811115613c7257613c71615918565b5b1415613d4f5762015180610bb882613c8a91906154a2565b613c949190615404565b61ffff16600a600088815260200190815260200160002060000160088282829054906101000a900463ffffffff16613ccc9190615362565b92506101000a81548163ffffffff021916908363ffffffff1602179055506103e8600a600088815260200190815260200160002060000160089054906101000a900463ffffffff16613d1e9190615435565b600a600088815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055505b42600b600088815260200190815260200160002060000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff1602179055505050505b8041604051602001613da9929190614caf565b60405160208183030381529060405280519060200120600881905550505050565b6000838383604051602001613de1939291906150df565b6040516020818303038152906040528051906020012060001c90509392505050565b613e0b61430e565b600080846060018051809190613e209061570e565b61ffff1661ffff1681525061ffff1684613e3a9190615889565b90508460c001518560a001518660800151613e5591906152d4565b613e5f91906152d4565b61ffff1681118015613e79575060008560e0015161ffff16115b15613ee857600460038660200151613e91919061539c565b613e9b91906154fc565b60ff16600160048760e0018051809190613eb49061570e565b61ffff1661ffff16815250613ec99190615858565b613ed391906152d4565b613edd91906152d4565b915084925050614084565b8460a001518560800151613efc91906152d4565b61ffff1681118015613f16575060008560c0015161ffff16115b15613f8557600460028660200151613f2e919061539c565b613f3891906154fc565b60ff16600160048760c0018051809190613f519061570e565b61ffff1661ffff16815250613f669190615858565b613f7091906152d4565b613f7a91906152d4565b915084925050614084565b846080015161ffff1681118015613fa4575060008560a0015161ffff16115b1561401357600460018660200151613fbc919061539c565b613fc691906154fc565b60ff16600160048760a0018051809190613fdf9061570e565b61ffff1661ffff16815250613ff49190615858565b613ffe91906152d4565b61400891906152d4565b915084925050614084565b6000856080015161ffff161115614082576004856020015161403591906154fc565b60ff166001600487608001805180919061404e9061570e565b61ffff1661ffff168152506140639190615858565b61406d91906152d4565b61407791906152d4565b915084925050614084565b505b9250929050565b6000808261ffff1614156140a257600090506140be565b60046001836140b19190615537565b6140bb91906153d3565b90505b919050565b600062015180670de0b6b3a76400008360046140df91906152d4565b61ffff16856140ee91906154a2565b6140f891906154a2565b6141029190615404565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146141ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a390614ff5565b60405180910390fd5b60006113ba905080600260008154809291906141c7906157c5565b91905055111561420c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420390614f55565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b604051806101000160405280600060ff168152602001600060ff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b600061438461437f8461522f565b61520a565b9050828152602081018484840111156143a05761439f6159e3565b5b6143ab8482856156cc565b509392505050565b60006143c66143c184615260565b61520a565b9050828152602081018484840111156143e2576143e16159e3565b5b6143ed8482856156db565b509392505050565b60008135905061440481615c39565b92915050565b60008083601f8401126144205761441f6159d9565b5b8235905067ffffffffffffffff81111561443d5761443c6159d4565b5b602083019150836020820283011115614459576144586159de565b5b9250929050565b60008135905061446f81615c50565b92915050565b60008135905061448481615c67565b92915050565b60008151905061449981615c67565b92915050565b600082601f8301126144b4576144b36159d9565b5b81356144c4848260208601614371565b91505092915050565b6000813590506144dc81615c7e565b92915050565b6000813590506144f181615c8e565b92915050565b600082601f83011261450c5761450b6159d9565b5b815161451c8482602086016143b3565b91505092915050565b60008135905061453481615c9e565b92915050565b6000602082840312156145505761454f6159ed565b5b600061455e848285016143f5565b91505092915050565b6000806040838503121561457e5761457d6159ed565b5b600061458c858286016143f5565b925050602061459d858286016143f5565b9150509250929050565b6000806000606084860312156145c0576145bf6159ed565b5b60006145ce868287016143f5565b93505060206145df868287016143f5565b92505060406145f086828701614525565b9150509250925092565b60008060008060808587031215614614576146136159ed565b5b6000614622878288016143f5565b9450506020614633878288016143f5565b935050604061464487828801614525565b925050606085013567ffffffffffffffff811115614665576146646159e8565b5b6146718782880161449f565b91505092959194509250565b60008060408385031215614694576146936159ed565b5b60006146a2858286016143f5565b92505060206146b385828601614460565b9150509250929050565b600080604083850312156146d4576146d36159ed565b5b60006146e2858286016143f5565b92505060206146f385828601614525565b9150509250929050565b60008060208385031215614714576147136159ed565b5b600083013567ffffffffffffffff811115614732576147316159e8565b5b61473e8582860161440a565b92509250509250929050565b600080600060408486031215614763576147626159ed565b5b600084013567ffffffffffffffff811115614781576147806159e8565b5b61478d8682870161440a565b935093505060206147a0868287016144cd565b9150509250925092565b6000602082840312156147c0576147bf6159ed565b5b60006147ce84828501614475565b91505092915050565b6000602082840312156147ed576147ec6159ed565b5b60006147fb8482850161448a565b91505092915050565b60006020828403121561481a576148196159ed565b5b6000614828848285016144e2565b91505092915050565b600060208284031215614847576148466159ed565b5b600082015167ffffffffffffffff811115614865576148646159e8565b5b614871848285016144f7565b91505092915050565b6000602082840312156148905761488f6159ed565b5b600061489e84828501614525565b91505092915050565b600080604083850312156148be576148bd6159ed565b5b60006148cc85828601614525565b92505060206148dd858286016144cd565b9150509250929050565b600080600080600060a08688031215614903576149026159ed565b5b600061491188828901614525565b9550506020614922888289016144e2565b945050604061493388828901614460565b935050606061494488828901614460565b925050608061495588828901614460565b9150509295509295909350565b61497361496e826155b1565b615820565b82525050565b6149828161559f565b82525050565b6149996149948261559f565b61580e565b82525050565b6149a8816155c3565b82525050565b6149bf6149ba826155cf565b615832565b82525050565b60006149d082615291565b6149da81856152a7565b93506149ea8185602086016156db565b6149f3816159f2565b840191505092915050565b6000614a0982615291565b614a1381856152b8565b9350614a238185602086016156db565b80840191505092915050565b614a3881615684565b82525050565b614a4781615696565b82525050565b6000614a588261529c565b614a6281856152c3565b9350614a728185602086016156db565b614a7b816159f2565b840191505092915050565b6000614a93600b836152c3565b9150614a9e82615a10565b602082019050919050565b6000614ab6600c836152c3565b9150614ac182615a39565b602082019050919050565b6000614ad96017836152c3565b9150614ae482615a62565b602082019050919050565b6000614afc6008836152c3565b9150614b0782615a8b565b602082019050919050565b6000614b1f600b836152c3565b9150614b2a82615ab4565b602082019050919050565b6000614b426012836152c3565b9150614b4d82615add565b602082019050919050565b6000614b65600c836152c3565b9150614b7082615b06565b602082019050919050565b6000614b886013836152c3565b9150614b9382615b2f565b602082019050919050565b6000614bab6009836152c3565b9150614bb682615b58565b602082019050919050565b6000614bce6012836152c3565b9150614bd982615b81565b602082019050919050565b6000614bf1600e836152c3565b9150614bfc82615baa565b602082019050919050565b6000614c146013836152c3565b9150614c1f82615bd3565b602082019050919050565b6000614c37601d836152c3565b9150614c4282615bfc565b602082019050919050565b614c5681615618565b82525050565b614c6581615646565b82525050565b614c7c614c7782615646565b61584e565b82525050565b614c8b81615650565b82525050565b614c9a8161566d565b82525050565b614ca981615660565b82525050565b6000614cbb8285614988565b601482019150614ccb8284614962565b6014820191508190509392505050565b6000614ce78288614988565b601482019150614cf78287614c6b565b602082019150614d078286614c6b565b602082019150614d178285614c6b565b602082019150614d2782846149ae565b6020820191508190509695505050505050565b6000614d4682846149fe565b915081905092915050565b6000602082019050614d666000830184614979565b92915050565b6000608082019050614d816000830187614979565b614d8e6020830186614979565b614d9b6040830185614c5c565b8181036060830152614dad81846149c5565b905095945050505050565b6000604082019050614dcd6000830185614979565b614dda6020830184614c5c565b9392505050565b6000608082019050614df66000830187614979565b614e036020830186614c5c565b614e106040830185614c5c565b614e1d6060830184614ca0565b95945050505050565b6000606082019050614e3b6000830186614979565b614e486020830185614c91565b614e556040830184614a3e565b949350505050565b6000602082019050614e72600083018461499f565b92915050565b6000602082019050614e8d6000830184614a2f565b92915050565b60006020820190508181036000830152614ead8184614a4d565b905092915050565b60006020820190508181036000830152614ece81614a86565b9050919050565b60006020820190508181036000830152614eee81614aa9565b9050919050565b60006020820190508181036000830152614f0e81614acc565b9050919050565b60006020820190508181036000830152614f2e81614aef565b9050919050565b60006020820190508181036000830152614f4e81614b12565b9050919050565b60006020820190508181036000830152614f6e81614b35565b9050919050565b60006020820190508181036000830152614f8e81614b58565b9050919050565b60006020820190508181036000830152614fae81614b7b565b9050919050565b60006020820190508181036000830152614fce81614b9e565b9050919050565b60006020820190508181036000830152614fee81614bc1565b9050919050565b6000602082019050818103600083015261500e81614be4565b9050919050565b6000602082019050818103600083015261502e81614c07565b9050919050565b6000602082019050818103600083015261504e81614c2a565b9050919050565b600060e08201905061506a600083018a614c4d565b6150776020830189614ca0565b6150846040830188614ca0565b6150916060830187614ca0565b61509e6080830186614ca0565b6150ab60a0830185614c4d565b6150b860c0830184614c4d565b98975050505050505050565b60006020820190506150d96000830184614c5c565b92915050565b60006060820190506150f46000830186614c5c565b81810360208301526151068185614a4d565b90506151156040830184614c5c565b949350505050565b600061010082019050615133600083018b614ca0565b615140602083018a614ca0565b61514d6040830189614c4d565b61515a6060830188614c4d565b6151676080830187614c4d565b61517460a0830186614c4d565b61518160c0830185614c4d565b61518e60e0830184614c4d565b9998505050505050505050565b600060e0820190506151b0600083018a614ca0565b6151bd6020830189614ca0565b6151ca6040830188614ca0565b6151d76060830187614ca0565b6151e46080830186614c4d565b6151f160a0830185614c4d565b6151fe60c0830184614c82565b98975050505050505050565b6000615214615225565b90506152208282615794565b919050565b6000604051905090565b600067ffffffffffffffff82111561524a576152496159a5565b5b615253826159f2565b9050602081019050919050565b600067ffffffffffffffff82111561527b5761527a6159a5565b5b615284826159f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006152df82615618565b91506152ea83615618565b92508261ffff03821115615301576153006158ba565b5b828201905092915050565b600061531782615646565b915061532283615646565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615357576153566158ba565b5b828201905092915050565b600061536d82615650565b915061537883615650565b92508263ffffffff03821115615391576153906158ba565b5b828201905092915050565b60006153a782615660565b91506153b283615660565b92508260ff038211156153c8576153c76158ba565b5b828201905092915050565b60006153de82615618565b91506153e983615618565b9250826153f9576153f86158e9565b5b828204905092915050565b600061540f82615646565b915061541a83615646565b92508261542a576154296158e9565b5b828204905092915050565b600061544082615650565b915061544b83615650565b92508261545b5761545a6158e9565b5b828204905092915050565b600061547182615618565b915061547c83615618565b92508161ffff0483118215151615615497576154966158ba565b5b828202905092915050565b60006154ad82615646565b91506154b883615646565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154f1576154f06158ba565b5b828202905092915050565b600061550782615660565b915061551283615660565b92508160ff048311821515161561552c5761552b6158ba565b5b828202905092915050565b600061554282615618565b915061554d83615618565b9250828210156155605761555f6158ba565b5b828203905092915050565b600061557682615646565b915061558183615646565b925082821015615594576155936158ba565b5b828203905092915050565b60006155aa82615626565b9050919050565b60006155bc82615626565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061561382615c25565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006affffffffffffffffffffff82169050919050565b600061568f826156a8565b9050919050565b60006156a182615605565b9050919050565b60006156b3826156ba565b9050919050565b60006156c582615626565b9050919050565b82818337600083830152505050565b60005b838110156156f95780820151818401526020810190506156de565b83811115615708576000848401525b50505050565b600061571982615618565b9150600082141561572d5761572c6158ba565b5b600182039050919050565b600061574382615646565b91506000821415615757576157566158ba565b5b600182039050919050565b6000600282049050600182168061577a57607f821691505b6020821081141561578e5761578d615947565b5b50919050565b61579d826159f2565b810181811067ffffffffffffffff821117156157bc576157bb6159a5565b5b80604052505050565b60006157d082615646565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615803576158026158ba565b5b600182019050919050565b60006158198261583c565b9050919050565b600061582b8261583c565b9050919050565b6000819050919050565b600061584782615a03565b9050919050565b6000819050919050565b600061586382615618565b915061586e83615618565b92508261587e5761587d6158e9565b5b828206905092915050565b600061589482615646565b915061589f83615646565b9250826158af576158ae6158e9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f6f6e20636f6f6c646f776e000000000000000000000000000000000000000000600082015250565b7f4e4f545f415050524f5645440000000000000000000000000000000000000000600082015250565b7f796f7527726520747279696e6720746f20636865617421000000000000000000600082015250565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f4d415820535550504c5920524541434845440000000000000000000000000000600082015250565b7f6e6f7420796f7572206f72630000000000000000000000000000000000000000600082015250565b7f4e4f545f4552433732315f524543454956455200000000000000000000000000600082015250565b7f4e4f545f4f574e45520000000000000000000000000000000000000000000000600082015250565b7f616c726561647920646f696e6720746861740000000000000000000000000000600082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f62656c6f77206d696e696d756d206c6576656c00000000000000000000000000600082015250565b7f596f752063616e27742070696c6c61676520746865204f726320476f64000000600082015250565b60038110615c3657615c35615918565b5b50565b615c428161559f565b8114615c4d57600080fd5b50565b615c59816155c3565b8114615c6457600080fd5b50565b615c70816155d9565b8114615c7b57600080fd5b50565b60038110615c8b57600080fd5b50565b600a8110615c9b57600080fd5b50565b615ca781615646565b8114615cb257600080fd5b5056fea264697066735822122019e347eb1855487b787df65744e43733039b5c9c803b256e4872f30c1e88051e64736f6c63430008070033608060405234801561001057600080fd5b5033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611310806100616000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610274578063aa271e1a146102a4578063cf456ae7146102d4578063dd62ed3e146102f0576100f5565b806370a08231146101ec57806395d89b411461021c5780639dc29fac1461023a578063a51dd75d14610256576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806340c10f19146101b45780634fa4c5d7146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610320565b60405161010f9190610fef565b60405180910390f35b610132600480360381019061012d9190610e9b565b610359565b60405161013f9190610fd4565b60405180910390f35b61015061044b565b60405161015d9190611071565b60405180910390f35b610180600480360381019061017b9190610e08565b610451565b60405161018d9190610fd4565b60405180910390f35b61019e61069d565b6040516101ab919061108c565b60405180910390f35b6101ce60048036038101906101c99190610e9b565b6106a2565b005b6101ea60048036038101906101e59190610d9b565b61073c565b005b61020660048036038101906102019190610d9b565b610869565b6040516102139190611071565b60405180910390f35b610224610881565b6040516102319190610fef565b60405180910390f35b610254600480360381019061024f9190610e9b565b6108ba565b005b61025e610954565b60405161026b9190610fb9565b60405180910390f35b61028e60048036038101906102899190610e9b565b61097a565b60405161029b9190610fd4565b60405180910390f35b6102be60048036038101906102b99190610d9b565b610a8e565b6040516102cb9190610fd4565b60405180910390f35b6102ee60048036038101906102e99190610e5b565b610aae565b005b61030a60048036038101906103059190610dc8565b610b99565b6040516103179190611071565b60405180910390f35b6040518060400160405280600381526020017f5a5547000000000000000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104399190611071565b60405180910390a36001905092915050565b60005481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461058a5781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105829190611119565b925050819055505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105d99190611119565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161068a9190611071565b60405180910390a3600190509392505050565b601281565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072590611031565b60405180910390fd5b6107388282610bbe565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107e65750600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c90611011565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60016020528060005260406000206000915090505481565b6040518060400160405280600381526020017f5a5547000000000000000000000000000000000000000000000000000000000081525081565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90611051565b60405180910390fd5b6109508282610c8d565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109cb9190611119565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a7c9190611071565b60405180910390a36001905092915050565b60036020528060005260406000206000915054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590611011565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b80600080828254610bcf91906110c3565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c819190611071565b60405180910390a35050565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cdc9190611119565b92505081905550806000808282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d509190611071565b60405180910390a35050565b600081359050610d6b81611295565b92915050565b600081359050610d80816112ac565b92915050565b600081359050610d95816112c3565b92915050565b600060208284031215610db157610db0611204565b5b6000610dbf84828501610d5c565b91505092915050565b60008060408385031215610ddf57610dde611204565b5b6000610ded85828601610d5c565b9250506020610dfe85828601610d5c565b9150509250929050565b600080600060608486031215610e2157610e20611204565b5b6000610e2f86828701610d5c565b9350506020610e4086828701610d5c565b9250506040610e5186828701610d86565b9150509250925092565b60008060408385031215610e7257610e71611204565b5b6000610e8085828601610d5c565b9250506020610e9185828601610d71565b9150509250929050565b60008060408385031215610eb257610eb1611204565b5b6000610ec085828601610d5c565b9250506020610ed185828601610d86565b9150509250929050565b610ee48161114d565b82525050565b610ef38161115f565b82525050565b6000610f04826110a7565b610f0e81856110b2565b9350610f1e8185602086016111a2565b610f2781611209565b840191505092915050565b6000610f3f6013836110b2565b9150610f4a8261121a565b602082019050919050565b6000610f626011836110b2565b9150610f6d82611243565b602082019050919050565b6000610f856011836110b2565b9150610f908261126c565b602082019050919050565b610fa48161118b565b82525050565b610fb381611195565b82525050565b6000602082019050610fce6000830184610edb565b92915050565b6000602082019050610fe96000830184610eea565b92915050565b600060208201905081810360008301526110098184610ef9565b905092915050565b6000602082019050818103600083015261102a81610f32565b9050919050565b6000602082019050818103600083015261104a81610f55565b9050919050565b6000602082019050818103600083015261106a81610f78565b9050919050565b60006020820190506110866000830184610f9b565b92915050565b60006020820190506110a16000830184610faa565b92915050565b600081519050919050565b600082825260208201905092915050565b60006110ce8261118b565b91506110d98361118b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561110e5761110d6111d5565b5b828201905092915050565b60006111248261118b565b915061112f8361118b565b925082821015611142576111416111d5565b5b828203905092915050565b60006111588261116b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156111c05780820151818401526020810190506111a5565b838111156111cf576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4e4f5420414c4c4f57454420544f2052554c4500000000000000000000000000600082015250565b7f464f5242494444454e20544f204d494e54000000000000000000000000000000600082015250565b7f464f5242494444454e20544f204255524e000000000000000000000000000000600082015250565b61129e8161114d565b81146112a957600080fd5b50565b6112b58161115f565b81146112c057600080fd5b50565b6112cc8161118b565b81146112d757600080fd5b5056fea2646970667358221220d03456f2cce2d3fc68dc618a733a8c6a1e787e5322679cf242119eb806aae1ec64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c806370a082311161010f578063962b2df2116100a2578063c87b56dd11610071578063c87b56dd146105b1578063d1d58b25146105e1578063e985e9c514610611578063f2fde38b14610641576101ef565b8063962b2df214610526578063a22cb4651461055d578063a9059cbb14610579578063b88d4fde14610595576101ef565b806382ab890a116100de57806382ab890a146104b25780638da5cb5b146104ce57806390107afe146104ec57806395d89b4114610508576101ef565b806370a082311461041257806376f0d51a14610442578063787a08a61461045e57806379388c251461047c576101ef565b806318160ddd116101875780634635047911610156578063463504791461038e57806352b104a7146103aa5780636352211e146103c65780636ba4c138146103f6576101ef565b806318160ddd1461031a57806323b872dd1461033857806339518b5e1461035457806342842e0e14610372576101ef565b8063095ea7b3116101c3578063095ea7b3146102905780630d1657e8146102ac5780630d5a5a77146102de5780631249c58b146102fc576101ef565b8062f66038146101f457806301ffc9a71461021257806306fdde0314610242578063081812fc14610260575b600080fd5b6101fc61065d565b6040516102099190614e78565b60405180910390f35b61022c600480360381019061022791906147aa565b610683565b6040516102399190614e5d565b60405180910390f35b61024a6106e5565b6040516102579190614e93565b60405180910390f35b61027a6004803603810190610275919061487a565b610773565b6040516102879190614d51565b60405180910390f35b6102aa60048036038101906102a591906146bd565b6107a6565b005b6102c660048036038101906102c1919061487a565b61098f565b6040516102d593929190614e26565b60405180910390f35b6102e66109fd565b6040516102f391906150c4565b60405180910390f35b610304610a21565b60405161031191906150c4565b60405180910390f35b610322610cf1565b60405161032f91906150c4565b60405180910390f35b610352600480360381019061034d91906145a7565b610cf7565b005b61035c610ea8565b60405161036991906150c4565b60405180910390f35b61038c600480360381019061038791906145a7565b610ecc565b005b6103a860048036038101906103a391906148e7565b610eed565b005b6103c460048036038101906103bf919061474a565b6119c8565b005b6103e060048036038101906103db919061487a565b611a12565b6040516103ed9190614d51565b60405180910390f35b610410600480360381019061040b91906146fd565b611a45565b005b61042c6004803603810190610427919061453a565b611a8d565b60405161043991906150c4565b60405180910390f35b61045c600480360381019061045791906148a7565b611aa5565b005b61046661211a565b60405161047391906150c4565b60405180910390f35b6104966004803603810190610491919061487a565b612120565b6040516104a9979695949392919061519b565b60405180910390f35b6104cc60048036038101906104c7919061487a565b6121c2565b005b6104d66127d0565b6040516104e39190614d51565b60405180910390f35b61050660048036038101906105019190614567565b6127f6565b005b61051061290c565b60405161051d9190614e93565b60405180910390f35b610540600480360381019061053b9190614804565b61299a565b60405161055498979695949392919061511d565b60405180910390f35b6105776004803603810190610572919061467d565b612a50565b005b610593600480360381019061058e91906146bd565b612b4d565b005b6105af60048036038101906105aa91906145fa565b612bfd565b005b6105cb60048036038101906105c6919061487a565b612d79565b6040516105d89190614e93565b60405180910390f35b6105fb60048036038101906105f6919061487a565b612f53565b60405161060891906150c4565b60405180910390f35b61062b60048036038101906106269190614567565b613045565b6040516106389190614e5d565b60405180910390f35b61065b6004803603810190610656919061453a565b613074565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106de5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546106f290615762565b80601f016020809104026020016040519081016040528092919081815260200182805461071e90615762565b801561076b5780601f106107405761010080835404028352916020019161076b565b820191906000526020600020905b81548152906001019060200180831161074e57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061089e5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490614ed5565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600b6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046affffffffffffffffffffff169080600001601f9054906101000a900460ff16905083565b7f000000000000000000000000000000000000000000000000000000006164203881565b600080600090506000339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690614ef5565b60405180910390fd5b60008214610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990614ef5565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000061642038421015610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90614f15565b60405180910390fd5b6000610b4f613148565b90506000610b5b61322b565b90507f0000000000000000000000000000000000000000000000000000000061645f80421015610c1357600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634420e486336040518263ffffffff1660e01b8152600401610be09190614d51565b600060405180830381600087803b158015610bfa57600080fd5b505af1158015610c0e573d6000803e3d6000fd5b505050505b6000821115610cac57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b8152600401610c79929190614db8565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505b610cb581613266565b61ffff16945050508041604051602001610cd0929190614caf565b60405160208183030381529060405280519060200120600881905550505090565b60025481565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dc757506005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e585750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614ed5565b60405180910390fd5b610ea28184846136ff565b50505050565b7f0000000000000000000000000000000000000000000000000000000061645f8081565b610ee86000838360405180602001604052806000815250612bfd565b505050565b843373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fbc57503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614ef5565b60405180910390fd5b600082146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90614ef5565b60405180910390fd5b600b600089815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff16421015611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614eb5565b60405180910390fd5b60098081111561114657611145615918565b5b87600981111561115957611158615918565b5b141561119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190615035565b60405180910390fd5b42600b60008a815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff1610156111e6576111e588613891565b5b60006111f061322b565b90506000600c60008a600981111561120b5761120a615918565b5b600981111561121d5761121c615918565b5b8152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815260200160008201600a9054906101000a900461ffff1661ffff1661ffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815250509050806000015160ff1661ffff16600a60008c815260200190815260200160002060000160049054906101000a900461ffff1661ffff1610156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090615015565b60405180910390fd5b6000816040015161ffff16111561149f57621275007f0000000000000000000000000000000000000000000000000000000061645f80426113ea919061556b565b116113f457600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a7640000846040015161ffff1661144f91906154a2565b6040518363ffffffff1660e01b815260040161146c929190614db8565b600060405180830381600087803b15801561148657600080fd5b505af115801561149a573d6000803e3d6000fd5b505050505b60008815611534576114f0826114eb856040518060400160405280600481526020017f48454c4d000000000000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146115335780600a60008d815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b5b87156115c7576115838261157e856040518060400160405280600881526020017f4d41494e48414e440000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146115c65780600a60008d815260200190815260200160002060000160026101000a81548160ff021916908360ff1602179055505b5b861561165a5761161682611611856040518060400160405280600781526020017f4f464648414e44000000000000000000000000000000000000000000000000008152508f613dca565b613e03565b809250819350505060008160ff16146116595780600a60008d815260200190815260200160002060000160036101000a81548160ff021916908360ff1602179055505b5b60018a600981111561166f5761166e615918565b5b11156117c55781600c60008c600981111561168d5761168c615918565b5b600981111561169f5761169e615918565b5b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548161ffff021916908361ffff16021790555060a08201518160000160086101000a81548161ffff021916908361ffff16021790555060c082015181600001600a6101000a81548161ffff021916908361ffff16021790555060e082015181600001600c6101000a81548161ffff021916908361ffff1602179055509050505b6000600a60008d81526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060006118d3826060015160ff1661408b565b6118e3836040015160ff1661408b565b6118f3846020015160ff1661408b565b6118fd91906152d4565b61190791906152d4565b905080600a60008f815260200190815260200160002060000160066101000a81548161ffff021916908361ffff16021790555061025842611948919061530c565b600b60008f815260200190815260200160002060000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff160217905550505050505080416040516020016119a2929190614caf565b604051602081830303815290604052805190602001206008819055505050505050505050565b60005b83839050811015611a0c576119f98484838181106119ec576119eb615976565b5b9050602002013583611aa5565b8080611a04906157c5565b9150506119cb565b50505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005b82829050811015611a8857611a75838383818110611a6957611a68615976565b5b90506020020135613891565b8080611a80906157c5565b915050611a48565b505050565b60036020528060005260406000206000915090505481565b813373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611b7457503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614ef5565b60405180910390fd5b60008214611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590614ef5565b60405180910390fd5b6000600b60008781526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff166affffffffffffffffffffff16815260200160008201601f9054906101000a900460ff166002811115611d4457611d43615918565b5b6002811115611d5657611d55615918565b5b815250509050846002811115611d6f57611d6e615918565b5b81604001516002811115611d8657611d85615918565b5b1415611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614fd5565b60405180910390fd5b600081602001516affffffffffffffffffffff164211611df85781602001516affffffffffffffffffffff16611dfa565b425b7f0000000000000000000000000000000000000000000000000000000061645f8011611e565781602001516affffffffffffffffffffff164211611e4f5781602001516affffffffffffffffffffff16611e51565b425b611e78565b7f0000000000000000000000000000000000000000000000000000000061645f805b905060006002811115611e8e57611e8d615918565b5b82604001516002811115611ea557611ea4615918565b5b1415611ebb57611eb63330896136ff565b611f12565b81602001516affffffffffffffffffffff16421115611ede57611edd87613891565b5b81602001516affffffffffffffffffffff16816affffffffffffffffffffff1611611f0d578160200151611f0f565b805b90505b60006002811115611f2657611f25615918565b5b866002811115611f3957611f38615918565b5b1415611f8157611f8030600b60008a815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896136ff565b5b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001826affffffffffffffffffffff168152602001876002811115611fce57611fcd615918565b5b815250600b600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff160217905550604082015181600001601f6101000a81548160ff0219169083600281111561208b5761208a615918565b5b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c0363388428960028111156120ca576120c9615918565b5b6040516120da9493929190614de1565b60405180910390a1505080416040516020016120f7929190614caf565b604051602081830303815290604052805190602001206008819055505050505050565b61025881565b600a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900461ffff16908060000160069054906101000a900461ffff16908060000160089054906101000a900463ffffffff16905087565b803373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061229157503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c790614f75565b60405180910390fd5b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f90614ef5565b60405180910390fd5b6000821461238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614ef5565b60405180910390fd5b600a6123bc600a600087815260200190815260200160002060000160029054906101000a900460ff1660ff1661408b565b61ffff16106123ca57600080fd5b621275007f0000000000000000000000000000000000000000000000000000000061645f80426123fa919061556b565b101561240557600080fd5b6020600a600086815260200190815260200160002060000160049054906101000a900461ffff1661ffff16101561243b57600080fd5b6000600c600060098081111561245457612453615918565b5b600981111561246657612465615918565b5b8152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815260200160008201600a9054906101000a900461ffff1661ffff1661ffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815250509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a7640000846040015161ffff166125d791906154a2565b6040518363ffffffff1660e01b81526004016125f4929190614db8565b600060405180830381600087803b15801561260e57600080fd5b505af1158015612622573d6000803e3d6000fd5b5050505061262f85613891565b6000600c600060098081111561264857612647615918565b5b600981111561265a57612659615918565b5b8152602001908152602001600020600001600481819054906101000a900461ffff16809291906126899061570e565b91906101000a81548161ffff021916908361ffff1602179055509050601e600a600088815260200190815260200160002060000160066101000a81548161ffff021916908361ffff1602179055506028816126e4919061539c565b600a600088815260200190815260200160002060000160036101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160026101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055600a600088815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550505080416040516020016127ae929190614caf565b6040516020818303038152906040528051906020012060088190555050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d90614f35565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6001805461291990615762565b80601f016020809104026020016040519081016040528092919081815260200182805461294590615762565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b505050505081565b600c6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900461ffff16908060000160049054906101000a900461ffff16908060000160069054906101000a900461ffff16908060000160089054906101000a900461ffff169080600001600a9054906101000a900461ffff169080600001600c9054906101000a900461ffff16905088565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b419190614e5d565b60405180910390a35050565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be590614fb5565b60405180910390fd5b612bf93383836136ff565b5050565b612c0960008484610cf7565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612d735760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a023360008686604051602401612c5e9493929190614d6c565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612cac9190614d3a565b600060405180830381855afa9150503d8060008114612ce7576040519150601f19603f3d011682016040523d82523d6000602084013e612cec565b606091505b50915050600081806020019051810190612d0691906147d7565b905063150b7a0260e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614f95565b60405180910390fd5b50505b50505050565b60606000600a60008481526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac4b378a84836000015184602001518560400151866060015187608001518860a001516040518863ffffffff1660e01b8152600401612ef69796959493929190615055565b60006040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612f4b9190614831565b915050919050565b600080600b600084815260200190815260200160002060000160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff1642612f9c919061556b565b905060016002811115612fb257612fb1615918565b5b600b6000858152602001908152602001600020600001601f9054906101000a900460ff166002811115612fe857612fe7615918565b5b1461300e57620151806107d082612fff91906154a2565b6130099190615404565b61303d565b61303c81600a600086815260200190815260200160002060000160069054906101000a900461ffff166140c3565b5b915050919050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb90614f35565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061060e600254101561315f5760009050613228565b610802600254101561317b57673782dace9d9000009050613228565b6109f6600254101561319757676f05b59d3b2000009050613228565b610bea60025410156131b35767a688906bd8b000009050613228565b610dde60025410156131d05768014d1120d7b16000009050613228565b610fd260025410156131ed5768022b1c8c1227a000009050613228565b6111c6600254101561320a57680340aad21b3b7000009050613228565b6113ba60025410156132275768070c1cc73b00c800009050613228565b5b90565b600033424842600854604051602001613248959493929190614cdb565b6040516020818303038152906040528051906020012060001c905090565b600080600080600080600080600093509350935093506000604b606461ffff61328f91906153d3565b6132999190615466565b61ffff16905060006050606461ffff6132b291906153d3565b6132bc9190615466565b61ffff1690506000605f606461ffff6132d591906153d3565b6132df9190615466565b61ffff16905060006063606461ffff6132f891906153d3565b6133029190615466565b61ffff1690506001600254613317919061530c565b9850600061335f8b6040518060400160405280600481526020017f424f4459000000000000000000000000000000000000000000000000000000008152508c61ffff16613dca565b9050818161ffff16116133b457848161ffff1611613395576001600d826133869190615858565b61339091906152d4565b6133af565b600d600c826133a49190615858565b6133ae91906152d4565b5b6133ce565b60196003826133c39190615858565b6133cd91906152d4565b5b985060006134168c6040518060400160405280600481526020017f48454c4d000000000000000000000000000000000000000000000000000000008152508d61ffff16613dca565b9050848161ffff16106134415760056004826134329190615858565b61343c91906152d4565b613444565b60005b9850600061348c8d6040518060400160405280600781526020017f4f464648414e44000000000000000000000000000000000000000000000000008152508e61ffff16613dca565b9050858161ffff16106134b75760056004826134a89190615858565b6134b291906152d4565b6134ba565b60005b975060006135028e6040518060400160405280600881526020017f4d41494e48414e440000000000000000000000000000000000000000000000008152508f61ffff16613dca565b9050858161ffff161061352d57600560048261351e9190615858565b61352891906152d4565b613547565b600160048261353c9190615858565b61354691906152d4565b5b9950505050505050505061355f338661ffff1661410a565b600061356d8260ff1661408b565b6135798460ff1661408b565b6135858660ff1661408b565b61358f91906152d4565b61359991906152d4565b90506040518060e001604052808660ff1681526020018560ff1681526020018460ff1681526020018360ff168152602001600061ffff1681526020018261ffff168152602001600063ffffffff16815250600a60008861ffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548161ffff021916908361ffff16021790555060a08201518160000160066101000a81548161ffff021916908361ffff16021790555060c08201518160000160086101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050919050565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061374f90615738565b9190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906137a4906157c5565b91905055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080339050803b91503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390090614ef5565b60405180910390fd5b6000821461394c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394390614ef5565b60405180910390fd5b6000600a60008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000600b60008681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046affffffffffffffffffffff166affffffffffffffffffffff166affffffffffffffffffffff16815260200160008201601f9054906101000a900460ff166002811115613b1e57613b1d615918565b5b6002811115613b3057613b2f615918565b5b81525050905080602001516affffffffffffffffffffff164211613b55575050613d96565b600081602001516affffffffffffffffffffff1642613b74919061556b565b905060016002811115613b8a57613b89615918565b5b82604001516002811115613ba157613ba0615918565b5b1415613c4857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198360000151613bf8848760a001516140c3565b6040518363ffffffff1660e01b8152600401613c15929190614db8565b600060405180830381600087803b158015613c2f57600080fd5b505af1158015613c43573d6000803e3d6000fd5b505050505b600280811115613c5b57613c5a615918565b5b82604001516002811115613c7257613c71615918565b5b1415613d4f5762015180610bb882613c8a91906154a2565b613c949190615404565b61ffff16600a600088815260200190815260200160002060000160088282829054906101000a900463ffffffff16613ccc9190615362565b92506101000a81548163ffffffff021916908363ffffffff1602179055506103e8600a600088815260200190815260200160002060000160089054906101000a900463ffffffff16613d1e9190615435565b600a600088815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055505b42600b600088815260200190815260200160002060000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff1602179055505050505b8041604051602001613da9929190614caf565b60405160208183030381529060405280519060200120600881905550505050565b6000838383604051602001613de1939291906150df565b6040516020818303038152906040528051906020012060001c90509392505050565b613e0b61430e565b600080846060018051809190613e209061570e565b61ffff1661ffff1681525061ffff1684613e3a9190615889565b90508460c001518560a001518660800151613e5591906152d4565b613e5f91906152d4565b61ffff1681118015613e79575060008560e0015161ffff16115b15613ee857600460038660200151613e91919061539c565b613e9b91906154fc565b60ff16600160048760e0018051809190613eb49061570e565b61ffff1661ffff16815250613ec99190615858565b613ed391906152d4565b613edd91906152d4565b915084925050614084565b8460a001518560800151613efc91906152d4565b61ffff1681118015613f16575060008560c0015161ffff16115b15613f8557600460028660200151613f2e919061539c565b613f3891906154fc565b60ff16600160048760c0018051809190613f519061570e565b61ffff1661ffff16815250613f669190615858565b613f7091906152d4565b613f7a91906152d4565b915084925050614084565b846080015161ffff1681118015613fa4575060008560a0015161ffff16115b1561401357600460018660200151613fbc919061539c565b613fc691906154fc565b60ff16600160048760a0018051809190613fdf9061570e565b61ffff1661ffff16815250613ff49190615858565b613ffe91906152d4565b61400891906152d4565b915084925050614084565b6000856080015161ffff161115614082576004856020015161403591906154fc565b60ff166001600487608001805180919061404e9061570e565b61ffff1661ffff168152506140639190615858565b61406d91906152d4565b61407791906152d4565b915084925050614084565b505b9250929050565b6000808261ffff1614156140a257600090506140be565b60046001836140b19190615537565b6140bb91906153d3565b90505b919050565b600062015180670de0b6b3a76400008360046140df91906152d4565b61ffff16856140ee91906154a2565b6140f891906154a2565b6141029190615404565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146141ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a390614ff5565b60405180910390fd5b60006113ba905080600260008154809291906141c7906157c5565b91905055111561420c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420390614f55565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b604051806101000160405280600060ff168152602001600060ff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b600061438461437f8461522f565b61520a565b9050828152602081018484840111156143a05761439f6159e3565b5b6143ab8482856156cc565b509392505050565b60006143c66143c184615260565b61520a565b9050828152602081018484840111156143e2576143e16159e3565b5b6143ed8482856156db565b509392505050565b60008135905061440481615c39565b92915050565b60008083601f8401126144205761441f6159d9565b5b8235905067ffffffffffffffff81111561443d5761443c6159d4565b5b602083019150836020820283011115614459576144586159de565b5b9250929050565b60008135905061446f81615c50565b92915050565b60008135905061448481615c67565b92915050565b60008151905061449981615c67565b92915050565b600082601f8301126144b4576144b36159d9565b5b81356144c4848260208601614371565b91505092915050565b6000813590506144dc81615c7e565b92915050565b6000813590506144f181615c8e565b92915050565b600082601f83011261450c5761450b6159d9565b5b815161451c8482602086016143b3565b91505092915050565b60008135905061453481615c9e565b92915050565b6000602082840312156145505761454f6159ed565b5b600061455e848285016143f5565b91505092915050565b6000806040838503121561457e5761457d6159ed565b5b600061458c858286016143f5565b925050602061459d858286016143f5565b9150509250929050565b6000806000606084860312156145c0576145bf6159ed565b5b60006145ce868287016143f5565b93505060206145df868287016143f5565b92505060406145f086828701614525565b9150509250925092565b60008060008060808587031215614614576146136159ed565b5b6000614622878288016143f5565b9450506020614633878288016143f5565b935050604061464487828801614525565b925050606085013567ffffffffffffffff811115614665576146646159e8565b5b6146718782880161449f565b91505092959194509250565b60008060408385031215614694576146936159ed565b5b60006146a2858286016143f5565b92505060206146b385828601614460565b9150509250929050565b600080604083850312156146d4576146d36159ed565b5b60006146e2858286016143f5565b92505060206146f385828601614525565b9150509250929050565b60008060208385031215614714576147136159ed565b5b600083013567ffffffffffffffff811115614732576147316159e8565b5b61473e8582860161440a565b92509250509250929050565b600080600060408486031215614763576147626159ed565b5b600084013567ffffffffffffffff811115614781576147806159e8565b5b61478d8682870161440a565b935093505060206147a0868287016144cd565b9150509250925092565b6000602082840312156147c0576147bf6159ed565b5b60006147ce84828501614475565b91505092915050565b6000602082840312156147ed576147ec6159ed565b5b60006147fb8482850161448a565b91505092915050565b60006020828403121561481a576148196159ed565b5b6000614828848285016144e2565b91505092915050565b600060208284031215614847576148466159ed565b5b600082015167ffffffffffffffff811115614865576148646159e8565b5b614871848285016144f7565b91505092915050565b6000602082840312156148905761488f6159ed565b5b600061489e84828501614525565b91505092915050565b600080604083850312156148be576148bd6159ed565b5b60006148cc85828601614525565b92505060206148dd858286016144cd565b9150509250929050565b600080600080600060a08688031215614903576149026159ed565b5b600061491188828901614525565b9550506020614922888289016144e2565b945050604061493388828901614460565b935050606061494488828901614460565b925050608061495588828901614460565b9150509295509295909350565b61497361496e826155b1565b615820565b82525050565b6149828161559f565b82525050565b6149996149948261559f565b61580e565b82525050565b6149a8816155c3565b82525050565b6149bf6149ba826155cf565b615832565b82525050565b60006149d082615291565b6149da81856152a7565b93506149ea8185602086016156db565b6149f3816159f2565b840191505092915050565b6000614a0982615291565b614a1381856152b8565b9350614a238185602086016156db565b80840191505092915050565b614a3881615684565b82525050565b614a4781615696565b82525050565b6000614a588261529c565b614a6281856152c3565b9350614a728185602086016156db565b614a7b816159f2565b840191505092915050565b6000614a93600b836152c3565b9150614a9e82615a10565b602082019050919050565b6000614ab6600c836152c3565b9150614ac182615a39565b602082019050919050565b6000614ad96017836152c3565b9150614ae482615a62565b602082019050919050565b6000614afc6008836152c3565b9150614b0782615a8b565b602082019050919050565b6000614b1f600b836152c3565b9150614b2a82615ab4565b602082019050919050565b6000614b426012836152c3565b9150614b4d82615add565b602082019050919050565b6000614b65600c836152c3565b9150614b7082615b06565b602082019050919050565b6000614b886013836152c3565b9150614b9382615b2f565b602082019050919050565b6000614bab6009836152c3565b9150614bb682615b58565b602082019050919050565b6000614bce6012836152c3565b9150614bd982615b81565b602082019050919050565b6000614bf1600e836152c3565b9150614bfc82615baa565b602082019050919050565b6000614c146013836152c3565b9150614c1f82615bd3565b602082019050919050565b6000614c37601d836152c3565b9150614c4282615bfc565b602082019050919050565b614c5681615618565b82525050565b614c6581615646565b82525050565b614c7c614c7782615646565b61584e565b82525050565b614c8b81615650565b82525050565b614c9a8161566d565b82525050565b614ca981615660565b82525050565b6000614cbb8285614988565b601482019150614ccb8284614962565b6014820191508190509392505050565b6000614ce78288614988565b601482019150614cf78287614c6b565b602082019150614d078286614c6b565b602082019150614d178285614c6b565b602082019150614d2782846149ae565b6020820191508190509695505050505050565b6000614d4682846149fe565b915081905092915050565b6000602082019050614d666000830184614979565b92915050565b6000608082019050614d816000830187614979565b614d8e6020830186614979565b614d9b6040830185614c5c565b8181036060830152614dad81846149c5565b905095945050505050565b6000604082019050614dcd6000830185614979565b614dda6020830184614c5c565b9392505050565b6000608082019050614df66000830187614979565b614e036020830186614c5c565b614e106040830185614c5c565b614e1d6060830184614ca0565b95945050505050565b6000606082019050614e3b6000830186614979565b614e486020830185614c91565b614e556040830184614a3e565b949350505050565b6000602082019050614e72600083018461499f565b92915050565b6000602082019050614e8d6000830184614a2f565b92915050565b60006020820190508181036000830152614ead8184614a4d565b905092915050565b60006020820190508181036000830152614ece81614a86565b9050919050565b60006020820190508181036000830152614eee81614aa9565b9050919050565b60006020820190508181036000830152614f0e81614acc565b9050919050565b60006020820190508181036000830152614f2e81614aef565b9050919050565b60006020820190508181036000830152614f4e81614b12565b9050919050565b60006020820190508181036000830152614f6e81614b35565b9050919050565b60006020820190508181036000830152614f8e81614b58565b9050919050565b60006020820190508181036000830152614fae81614b7b565b9050919050565b60006020820190508181036000830152614fce81614b9e565b9050919050565b60006020820190508181036000830152614fee81614bc1565b9050919050565b6000602082019050818103600083015261500e81614be4565b9050919050565b6000602082019050818103600083015261502e81614c07565b9050919050565b6000602082019050818103600083015261504e81614c2a565b9050919050565b600060e08201905061506a600083018a614c4d565b6150776020830189614ca0565b6150846040830188614ca0565b6150916060830187614ca0565b61509e6080830186614ca0565b6150ab60a0830185614c4d565b6150b860c0830184614c4d565b98975050505050505050565b60006020820190506150d96000830184614c5c565b92915050565b60006060820190506150f46000830186614c5c565b81810360208301526151068185614a4d565b90506151156040830184614c5c565b949350505050565b600061010082019050615133600083018b614ca0565b615140602083018a614ca0565b61514d6040830189614c4d565b61515a6060830188614c4d565b6151676080830187614c4d565b61517460a0830186614c4d565b61518160c0830185614c4d565b61518e60e0830184614c4d565b9998505050505050505050565b600060e0820190506151b0600083018a614ca0565b6151bd6020830189614ca0565b6151ca6040830188614ca0565b6151d76060830187614ca0565b6151e46080830186614c4d565b6151f160a0830185614c4d565b6151fe60c0830184614c82565b98975050505050505050565b6000615214615225565b90506152208282615794565b919050565b6000604051905090565b600067ffffffffffffffff82111561524a576152496159a5565b5b615253826159f2565b9050602081019050919050565b600067ffffffffffffffff82111561527b5761527a6159a5565b5b615284826159f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006152df82615618565b91506152ea83615618565b92508261ffff03821115615301576153006158ba565b5b828201905092915050565b600061531782615646565b915061532283615646565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615357576153566158ba565b5b828201905092915050565b600061536d82615650565b915061537883615650565b92508263ffffffff03821115615391576153906158ba565b5b828201905092915050565b60006153a782615660565b91506153b283615660565b92508260ff038211156153c8576153c76158ba565b5b828201905092915050565b60006153de82615618565b91506153e983615618565b9250826153f9576153f86158e9565b5b828204905092915050565b600061540f82615646565b915061541a83615646565b92508261542a576154296158e9565b5b828204905092915050565b600061544082615650565b915061544b83615650565b92508261545b5761545a6158e9565b5b828204905092915050565b600061547182615618565b915061547c83615618565b92508161ffff0483118215151615615497576154966158ba565b5b828202905092915050565b60006154ad82615646565b91506154b883615646565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154f1576154f06158ba565b5b828202905092915050565b600061550782615660565b915061551283615660565b92508160ff048311821515161561552c5761552b6158ba565b5b828202905092915050565b600061554282615618565b915061554d83615618565b9250828210156155605761555f6158ba565b5b828203905092915050565b600061557682615646565b915061558183615646565b925082821015615594576155936158ba565b5b828203905092915050565b60006155aa82615626565b9050919050565b60006155bc82615626565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061561382615c25565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006affffffffffffffffffffff82169050919050565b600061568f826156a8565b9050919050565b60006156a182615605565b9050919050565b60006156b3826156ba565b9050919050565b60006156c582615626565b9050919050565b82818337600083830152505050565b60005b838110156156f95780820151818401526020810190506156de565b83811115615708576000848401525b50505050565b600061571982615618565b9150600082141561572d5761572c6158ba565b5b600182039050919050565b600061574382615646565b91506000821415615757576157566158ba565b5b600182039050919050565b6000600282049050600182168061577a57607f821691505b6020821081141561578e5761578d615947565b5b50919050565b61579d826159f2565b810181811067ffffffffffffffff821117156157bc576157bb6159a5565b5b80604052505050565b60006157d082615646565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615803576158026158ba565b5b600182019050919050565b60006158198261583c565b9050919050565b600061582b8261583c565b9050919050565b6000819050919050565b600061584782615a03565b9050919050565b6000819050919050565b600061586382615618565b915061586e83615618565b92508261587e5761587d6158e9565b5b828206905092915050565b600061589482615646565b915061589f83615646565b9250826158af576158ae6158e9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f6f6e20636f6f6c646f776e000000000000000000000000000000000000000000600082015250565b7f4e4f545f415050524f5645440000000000000000000000000000000000000000600082015250565b7f796f7527726520747279696e6720746f20636865617421000000000000000000600082015250565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f4d415820535550504c5920524541434845440000000000000000000000000000600082015250565b7f6e6f7420796f7572206f72630000000000000000000000000000000000000000600082015250565b7f4e4f545f4552433732315f524543454956455200000000000000000000000000600082015250565b7f4e4f545f4f574e45520000000000000000000000000000000000000000000000600082015250565b7f616c726561647920646f696e6720746861740000000000000000000000000000600082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f62656c6f77206d696e696d756d206c6576656c00000000000000000000000000600082015250565b7f596f752063616e27742070696c6c61676520746865204f726320476f64000000600082015250565b60038110615c3657615c35615918565b5b50565b615c428161559f565b8114615c4d57600080fd5b50565b615c59816155c3565b8114615c6457600080fd5b50565b615c70816155d9565b8114615c7b57600080fd5b50565b60038110615c8b57600080fd5b50565b600a8110615c9b57600080fd5b50565b615ca781615646565b8114615cb257600080fd5b5056fea264697066735822122019e347eb1855487b787df65744e43733039b5c9c803b256e4872f30c1e88051e64736f6c63430008070033

Deployed Bytecode Sourcemap

564:15193:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1015:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2150:169:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;899:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1297:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2329:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1085:47:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;868:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6431:353;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1148:26:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2868:373;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;825:37:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:135:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8911:1634:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7874:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1240:42:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8083:160:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1185:44:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6790:1078:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;773:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1038:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;10552:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;910:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1261:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;928:20:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1138:46:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2657:205:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1765:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3396:578;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1625:238:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11347:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1351:68:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1479:140:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1015:16;;;;;;;;;;;;;:::o;2150:169:1:-;2220:14;2273:10;2258:25;;:11;:25;;;;:54;;;;2302:10;2287:25;;:11;:25;;;;2258:54;2246:66;;2150:169;;;:::o;899:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1297:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2329:318::-;2399:13;2415:7;:16;2423:7;2415:16;;;;;;;;;;;;;;;;;;;;;2399:32;;2472:5;2458:19;;:10;:19;;;:58;;;;2481:16;:23;2498:5;2481:23;;;;;;;;;;;;;;;:35;2505:10;2481:35;;;;;;;;;;;;;;;;;;;;;;;;;2458:58;2450:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2575:7;2552:11;:20;2564:7;2552:20;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;2631:7;2622;2606:33;;2615:5;2606:33;;;;;;;;;;;;2389:258;2329:318;;:::o;1085:47:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;868:36::-;;;:::o;6431:353::-;6474:10;5692:12;5707:1;5692:16;;5718:11;5732:10;5718:24;;5783:3;5771:16;5763:24;;5820:9;5806:23;;:10;:23;;;5798:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5884:1;5876:4;:9;5868:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6523:11:::1;6504:15;:30;;6496:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;6558:12;6573:18;:16;:18::i;:::-;6558:33;;6601:12;6616:7;:5;:7::i;:::-;6601:22;;6656:12;6638:15;:30;6634:61;;;6670:4;;;;;;;;;;;:13;;;6684:10;6670:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6634:61;6716:1;6709:4;:8;6705:40;;;6719:3;;;;;;;;;;;:8;;;6728:10;6740:4;6719:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6705:40;6763:14;6772:4;6763:8;:14::i;:::-;6756:21;;;;;;6064:3:::0;6069:14;6047:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6037:48;;;;;;6022:12;:63;;;;5682:410;;6431:353;:::o;1148:26:1:-;;;;:::o;2868:373::-;2945:13;2961:7;:16;2969:7;2961:16;;;;;;;;;;;;;;;;;;;;;2945:32;;3031:5;3017:19;;:10;:19;;;:70;;;;3067:11;:20;3079:7;3067:20;;;;;;;;;;;;;;;;;;;;;3053:34;;:10;:34;;;3017:70;:121;;;;3103:16;:23;3120:5;3103:23;;;;;;;;;;;;;;;:35;3127:10;3103:35;;;;;;;;;;;;;;;;;;;;;;;;;3017:121;2996:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;3196:29;3206:5;3213:2;3217:7;3196:9;:29::i;:::-;2935:306;2868:373;;;:::o;825:37:2:-;;;:::o;3251:135:1:-;3334:45;3359:1;3363:2;3367:7;3334:45;;;;;;;;;;;;:16;:45::i;:::-;3251:135;;;:::o;8911:1634:2:-;9021:2;6164:10;6149:25;;:7;:11;6157:2;6149:11;;;;;;;;;;;;;;;;;;;;;:25;;;:63;;;;6202:10;6178:34;;:10;:14;6189:2;6178:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;6149:63;6141:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;5692:12:::1;5718:11:::0;5732:10:::1;5718:24;;5783:3;5771:16;5763:24;;5820:9;5806:23;;:10;:23;;;5798:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5884:1;5876:4;:9;5868:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9081:10:::2;:14;9092:2;9081:14;;;;;;;;;;;:24;;;;;;;;;;;;9073:33;;9054:15;:52;;9046:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:15;9140:24:::0;::::2;;;;;;;:::i;:::-;;:5;:24;;;;;;;;:::i;:::-;;;;9132:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9240:15;9213:10;:14;9224:2;9213:14;;;;;;;;;;;:24;;;;;;;;;;;;:42;;;9210:57;;;9257:10;9264:2;9257:6;:10::i;:::-;9210:57;9344:13;9360:7;:5;:7::i;:::-;9344:23;;9380:20;9403:9;:16;9413:5;9403:16;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9380:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;9462:4;:13;;;9455:21;;9437:39;;:4;:8;9442:2;9437:8;;;;;;;;;;;:14;;;;;;;;;;;;:39;;;;9429:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9527:1;9515:4;:9;;;:13;;;9511:157;;;9585:7;9570:12;9552:15;:30;;;;:::i;:::-;:40;9544:49;;;::::0;::::2;;9607:3;;;;;;;;;;;:8;;;9616:10;9649:7;9636:4;:9;;;9628:18;;:28;;;;:::i;:::-;9607:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;9511:157;9679:10;9703:7;9699:157;;;9743:52;9760:4;9766:28;9777:5;9766:28;;;;;;;;;;;;;;;;::::0;9791:2:::2;9766:10;:28::i;:::-;9743:16;:52::i;:::-;9726:69;;;;;;;;9821:1;9813:4;:9;;;9809:36;;9841:4;9825;:8;9830:2;9825:8;;;;;;;;;;;:13;;;:20;;;;;;;;;;;;;;;;;;9809:36;9699:157;9869:11;9865:169;;;9913:56;9930:4;9936:32;9947:5;9936:32;;;;;;;;;;;;;;;;::::0;9965:2:::2;9936:10;:32::i;:::-;9913:16;:56::i;:::-;9896:73;;;;;;;;9995:1;9987:4;:9;;;9983:40;;10019:4;9999;:8;10004:2;9999:8;;;;;;;;;;;:17;;;:24;;;;;;;;;;;;;;;;;;9983:40;9865:169;10047:10;10043:166;;;10090:55;10107:4;10113:31;10124:5;10113:31;;;;;;;;;;;;;;;;::::0;10141:2:::2;10113:10;:31::i;:::-;10090:16;:55::i;:::-;10073:72;;;;;;;;10171:1;10163:4;:9;;;10159:39;;10194:4;10175;:8;10180:2;10175:8;;;;;;;;;;;:16;;;:23;;;;;;;;;;;;;;;;;;10159:39;10043:166;10237:1;10228:5;10223:11;;;;;;;;:::i;:::-;;:15;10219:44;;;10259:4;10240:9;:16;10250:5;10240:16;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10219:44;10305:14;10322:4;:8;10327:2;10322:8;;;;;;;;;;;10305:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;10340:19;10402:18;10408:3;:11;;;10402:18;;:5;:18::i;:::-;10380:19;10386:3;:12;;;10380:19;;:5;:19::i;:::-;10362:15;10368:3;:8;;;10362:15;;:5;:15::i;:::-;:37;;;;:::i;:::-;:58;;;;:::i;:::-;10340:80;;10454:12;10431:4;:8;10436:2;10431:8;;;;;;;;;;;:20;;;:35;;;;;;;;;;;;;;;;;;809:10;10511:15;:26;;;;:::i;:::-;10477:10;:14;10488:2;10477:14;;;;;;;;;;;:24;;;:61;;;;;;;;;;;;;;;;;;9036:1509;;;;;6064:3:::1;6069:14;6047:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6037:48;;;;;;6022:12;:63;;;;5682:410;;8911:1634:::0;;;;;;:::o;7874:203::-;7969:13;7964:107;7996:3;;:10;;7988:5;:18;7964:107;;;8031:29;8040:3;;8044:5;8040:10;;;;;;;:::i;:::-;;;;;;;;8052:7;8031:8;:29::i;:::-;8008:7;;;;;:::i;:::-;;;;7964:107;;;;7874:203;;;:::o;1240:42:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;8083:160:2:-;8146:13;8141:96;8173:3;;:10;;8165:5;:18;8141:96;;;8208:18;8215:3;;8219:5;8215:10;;;;;;;:::i;:::-;;;;;;;;8208:6;:18::i;:::-;8185:7;;;;;:::i;:::-;;;;8141:96;;;;8083:160;;:::o;1185:44:1:-;;;;;;;;;;;;;;;;;:::o;6790:1078:2:-;6855:2;6164:10;6149:25;;:7;:11;6157:2;6149:11;;;;;;;;;;;;;;;;;;;;;:25;;;:63;;;;6202:10;6178:34;;:10;:14;6189:2;6178:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;6149:63;6141:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;5692:12:::1;5718:11:::0;5732:10:::1;5718:24;;5783:3;5771:16;5763:24;;5820:9;5806:23;;:10;:23;;;5798:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5884:1;5876:4;:9;5868:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6880:20:::2;6903:10;:14;6914:2;6903:14;;;;;;;;;;;6880:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;::::0;::::2;;;6952:7;6935:24;;;;;;;;:::i;:::-;;:6;:13;;;:24;;;;;;;;:::i;:::-;;;;6927:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;7089:16;7149:6;:16;;;7131:34;;:15;:34;:71;;7186:6;:16;;;7131:71;;;;;7168:15;7131:71;7115:12;:88;:213;;7274:6;:16;;;7256:34;;:15;:34;:71;;7311:6;:16;;;7256:71;;;;;7293:15;7256:71;7115:213;;;7240:12;7115:213;7089:240;;7361:16;7344:33;;;;;;;;:::i;:::-;;:6;:13;;;:33;;;;;;;;:::i;:::-;;;7340:261;;;7380:40;7390:10;7410:4;7417:2;7380:9;:40::i;:::-;7340:261;;;7477:6;:16;;;7459:34;;:15;:34;7455:50;;;7495:10;7502:2;7495:6;:10::i;:::-;7455:50;7543:6;:16;;;7531:28;;:9;:28;;;:59;;7574:6;:16;;;7531:59;;;7562:9;7531:59;7519:71;;7340:261;7626:16;7615:27;;;;;;;;:::i;:::-;;:7;:27;;;;;;;;:::i;:::-;;;7611:83;;;7644:50;7662:4;7669:10;:14;7680:2;7669:14;;;;;;;;;;;:20;;;;;;;;;;;;7691:2;7644:9;:50::i;:::-;7611:83;7722:65;;;;;;;;7737:10;7722:65;;;;;;7776:9;7722:65;;;;;;7757:7;7722:65;;;;;;;;:::i;:::-;;;;::::0;7705:10:::2;:14;7716:2;7705:14;;;;;;;;;;;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7802:59;7813:10;7825:2;7829:15;7852:7;7846:14;;;;;;;;:::i;:::-;;7802:59;;;;;;;;;:::i;:::-;;;;;;;;6870:998;;6064:3:::1;6069:14;6047:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6037:48;;;;;;6022:12;:63;;;;5682:410;;6790:1078:::0;;;:::o;773:46::-;809:10;773:46;:::o;1038:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10552:621::-;10598:2;6164:10;6149:25;;:7;:11;6157:2;6149:11;;;;;;;;;;;;;;;;;;;;;:25;;;:63;;;;6202:10;6178:34;;:10;:14;6189:2;6178:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;6149:63;6141:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;5692:12:::1;5718:11:::0;5732:10:::1;5718:24;;5783:3;5771:16;5763:24;;5820:9;5806:23;;:10;:23;;;5798:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5884:1;5876:4;:9;5868:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10658:2:::2;10631:24;10637:4;:8;10642:2;10637:8;;;;;;;;;;;:17;;;;;;;;;;;;10631:24;;:5;:24::i;:::-;:29;;;10623:38;;;::::0;::::2;;10713:7;10697:12;10679:15;:30;;;;:::i;:::-;:41;;10671:50;;;::::0;::::2;;10757:2;10739:4;:8;10744:2;10739:8;;;;;;;;;;;:14;;;;;;;;;;;;:20;;;;10731:29;;;::::0;::::2;;10779:20;10802:9;:26;10812:15;10802:26:::0;::::2;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10779:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;10839:3;;;;;;;;;;;:8;;;10848:10;10881:7;10868:4;:9;;;10860:18;;:28;;;;:::i;:::-;10839:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10900:10;10907:2;10900:6;:10::i;:::-;10987;11006:9;:26;11016:15;11006:26:::0;::::2;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10987:54;;11074:2;11051:4;:8;11056:2;11051:8;;;;;;;;;;;:20;;;:25;;;;;;;;;;;;;;;;;;11164:2;11157:4;:9;;;;:::i;:::-;11138:4;:8;11143:2;11138:8;;;;;;;;;;;:16;;;:28;;;;;;;;;;;;;;;;;11118:4;:8;11123:2;11118:8;;;;;;;;;;;:17;;;:48;;;;;;;;;;;;;;;;;11102:4;:8;11107:2;11102:8;;;;;;;;;;;:13;;;:64;;;;;;;;;;;;;;;;;11086:4;:8;11091:2;11086:8;;;;;;;;;;;:13;;;:80;;;;;;;;;;;;;;;;;;10613:560;;6064:3:::1;6069:14;6047:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6037:48;;;;;;6022:12;:63;;;;5682:410;;10552:621:::0;;:::o;910:30::-;;;;;;;;;;;;;:::o;1261:212::-;1353:5;;;;;;;;;;;1339:19;;:10;:19;;;1331:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;1409:5;1384:4;;:31;;;;;;;;;;;;;;;;;;1461:4;1425:13;;:41;;;;;;;;;;;;;;;;;;1261:212;;:::o;928:20:1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1138:46:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2657:205:1:-;2777:8;2736:16;:28;2753:10;2736:28;;;;;;;;;;;;;;;:38;2765:8;2736:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;2836:8;2809:46;;2824:10;2809:46;;;2846:8;2809:46;;;;;;:::i;:::-;;;;;;;;2657:205;;:::o;1765:187::-;1853:7;:16;1861:7;1853:16;;;;;;;;;;;;;;;;;;;;;1839:30;;:10;:30;;;1831:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1902:34;1912:10;1924:2;1928:7;1902:9;:34::i;:::-;1765:187;;:::o;3396:578::-;3496:37;3517:1;3521:2;3525:7;3496:12;:37::i;:::-;3575:1;3557:2;:14;;;:19;3553:415;;3668:21;3693:2;:13;;3730:10;3758;3778:1;3782:7;3791:4;3707:89;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3693:104;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3665:132;;;3828:15;3857:8;3846:30;;;;;;;;;;;;:::i;:::-;3828:48;;3923:10;3911:22;;:8;:22;;;;3903:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3578:390;;3553:415;3396:578;;;;:::o;1625:238:2:-;1677:13;1702:14;1719:4;:8;1724:2;1719:8;;;;;;;;;;;1702:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1744:13;;;;;;;;;;;:25;;;1777:2;1782:3;:8;;;1792:3;:8;;;1802:3;:12;;;1816:3;:11;;;1829:3;:9;;;1840:3;:15;;;1744:112;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1737:119;;;1625:238;;;:::o;11347:290::-;11401:14;11427:16;11472:10;:14;11483:2;11472:14;;;;;;;;;;;:24;;;;;;;;;;;;11454:42;;:15;:42;;;;:::i;:::-;11427:70;;11541:15;11516:40;;;;;;;;:::i;:::-;;:10;:14;11527:2;11516:14;;;;;;;;;;;:21;;;;;;;;;;;;:40;;;;;;;;:::i;:::-;;;:114;;11624:6;11617:4;11606:8;:15;;;;:::i;:::-;:24;;;;:::i;:::-;11516:114;;;11559:44;11572:8;11582:4;:8;11587:2;11582:8;;;;;;;;;;;:20;;;;;;;;;;;;11559:12;:44::i;:::-;11516:114;11507:123;;11417:220;11347:290;;;:::o;1351:68:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1479:140:2:-;1565:5;;;;;;;;;;;1551:19;;:10;:19;;;1543:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;1604:8;1596:5;;:16;;;;;;;;;;;;;;;;;;1479:140;:::o;15294:461::-;15345:7;15382:4;15368:11;;:18;15364:34;;;15397:1;15388:10;;;;15364:34;15426:4;15412:11;;:18;15408:40;;;15441:7;15432:16;;;;15408:40;15476:4;15462:11;;:18;15458:40;;;15491:7;15482:16;;;;15458:40;15526:4;15512:11;;:18;15508:40;;;15540:8;15532:16;;;;15508:40;15576:4;15562:11;;:18;15558:40;;;15590:8;15582:16;;;;15558:40;15626:4;15612:11;;:18;15608:40;;;15640:8;15632:16;;;;15608:40;15676:4;15662:11;;:18;15658:40;;;15690:8;15682:16;;;;15658:40;15726:4;15712:11;;:18;15708:40;;;15739:9;15732:16;;;;15708:40;15294:461;;:::o;15104:184::-;15144:7;15205:10;15217:15;15234:13;15249:15;15266:12;;15188:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15178:102;;;;;;15170:111;;15163:118;;15104:184;:::o;11817:1580::-;11867:9;11889:10;11900;11911:14;11926:13;11944:1;11946;11948;11950;11888:64;;;;;;;;12019:19;12068:2;12062:3;12043:16;:22;;;;:::i;:::-;:27;;;;:::i;:::-;12019:51;;;;12084:17;12133:2;12127:3;12108:16;:22;;;;:::i;:::-;:27;;;;:::i;:::-;12084:51;;;;12149:19;12198:2;12192:3;12173:16;:22;;;;:::i;:::-;:27;;;;:::i;:::-;12149:51;;;;12214:19;12263:2;12257:3;12238:16;:22;;;;:::i;:::-;:27;;;;:::i;:::-;12214:51;;;;12310:1;12296:11;;:15;;;;:::i;:::-;12284:28;;12368:15;12393:28;12404:4;12393:28;;;;;;;;;;;;;;;;;12418:2;12393:28;;:10;:28::i;:::-;12368:54;;12471:11;12460:8;:22;;;:140;;12547:11;12536:8;:22;;;:64;;12599:1;12594:2;12583:8;:13;;;;:::i;:::-;:17;;;;:::i;:::-;12536:64;;;12578:2;12573;12562:8;:13;;;;:::i;:::-;:18;;;;:::i;:::-;12536:64;12460:140;;;12500:2;12496:1;12485:8;:12;;;;:::i;:::-;:17;;;;:::i;:::-;12460:140;12443:159;;12621:15;12646:28;12657:4;12646:28;;;;;;;;;;;;;;;;;12671:2;12646:28;;:10;:28::i;:::-;12621:54;;12724:9;12713:8;:20;;;:43;;12755:1;12751;12740:8;:12;;;;:::i;:::-;:16;;;;:::i;:::-;12713:43;;;12736:1;12713:43;12696:61;;12776:18;12804:31;12815:4;12804:31;;;;;;;;;;;;;;;;;12832:2;12804:31;;:10;:31::i;:::-;12776:60;;12891:9;12877:11;:23;;;:49;;12925:1;12921;12907:11;:15;;;;:::i;:::-;:19;;;;:::i;:::-;12877:49;;;12903:1;12877:49;12857:70;;12946:19;12975:32;12986:4;12975:32;;;;;;;;;;;;;;;;;13004:2;12975:32;;:10;:32::i;:::-;12946:62;;13065:11;13050:12;:26;;;:71;;13120:1;13116;13101:12;:16;;;;:::i;:::-;:20;;;;:::i;:::-;13050:71;;;13098:1;13094;13079:12;:16;;;;:::i;:::-;:20;;;;:::i;:::-;13050:71;13029:93;;11963:1170;;;;;;;;13143:21;13149:10;13161:2;13143:21;;:5;:21::i;:::-;13175:18;13228:14;13234:7;13228:14;;:5;:14::i;:::-;13210:15;13216:8;13210:15;;:5;:15::i;:::-;13196:11;13202:4;13196:11;;:5;:11::i;:::-;:29;;;;:::i;:::-;:46;;;;:::i;:::-;13175:67;;13272:118;;;;;;;;13283:4;13272:118;;;;;;13295:4;13272:118;;;;;;13311:8;13272:118;;;;;;13330:7;13272:118;;;;;;13346:1;13272:118;;;;;;13377:11;13272:118;;;;;;13362:1;13272:118;;;;;13252:4;:17;13265:2;13257:11;;13252:17;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11878:1519;;;;;11817:1580;;;:::o;4170:267:1:-;4251:9;:15;4261:4;4251:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;4279:9;:13;4289:2;4279:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;;4320:11;:20;4332:7;4320:20;;;;;;;;;;;;4313:27;;;;;;;;;;;4378:2;4359:7;:16;4367:7;4359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;4420:7;4416:2;4395:33;;4404:10;4395:33;;;;;;;;;;;;4170:267;;;:::o;8249:656:2:-;5692:12;5718:11;5732:10;5718:24;;5783:3;5771:16;5763:24;;5820:9;5806:23;;:10;:23;;;5798:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5884:1;5876:4;:9;5868:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8307:17:::1;8330:4;:8;8335:2;8330:8;;;;;;;;;;;8307:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;8348:20;8371:10;:14;8382:2;8371:14;;;;;;;;;;;8348:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;::::0;::::1;;;8418:6;:16;;;8399:35;;:15;:35;8396:47;;8436:7;;;;8396:47;8453:16;8498:6;:16;;;8480:34;;:15;:34;;;;:::i;:::-;8453:62;;8547:15;8530:32;;;;;;;;:::i;:::-;;:6;:13;;;:32;;;;;;;;:::i;:::-;;;8526:101;;;8564:3;;;;;;;;;;;:8;;;8573:6;:12;;;8587:39;8600:8;8610:3;:15;;;8587:12;:39::i;:::-;8564:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8526:101;8666:16;8649:33:::0;::::1;;;;;;;:::i;:::-;;:6;:13;;;:33;;;;;;;;:::i;:::-;;;8645:193;;;8747:6;8740:4;8729:8;:15;;;;:::i;:::-;:24;;;;:::i;:::-;8698:56;;:4;:8;8703:2;8698:8;;;;;;;;;;;:20;;;:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8822:4;8799;:8;8804:2;8799:8;;;;;;;;;;;:20;;;;;;;;;;;;:27;;;;:::i;:::-;8768:4;:8;8773:2;8768:8;;;;;;;;;;;:14;;;:59;;;;;;;;;;;;;;;;;;8645:193;8882:15;8848:10;:14;8859:2;8848:14;;;;;;;;;;;:24;;;:50;;;;;;;;;;;;;;;;;;8297:608;;;5938:1;6064:3:::0;6069:14;6047:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6037:48;;;;;;6022:12;:63;;;;5682:410;;8249:656;:::o;14926:172::-;15017:7;15072:4;15078:3;15083:5;15061:28;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15051:39;;;;;;15043:48;;15036:55;;14926:172;;;;;:::o;13629:890::-;13714:15;;:::i;:::-;13731:10;13753:9;13772:4;:10;;:12;;;;;;;;:::i;:::-;;;;;;;;13765:19;;:4;:19;;;;:::i;:::-;13753:31;;13835:4;:11;;;13821:4;:11;;;13807:4;:11;;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;13800:46;;:4;:46;:65;;;;;13864:1;13850:4;:11;;;:15;;;13800:65;13796:200;;;13945:1;13940;13921:4;:16;;;:20;;;;:::i;:::-;13920:26;;;;:::i;:::-;13894:52;;13915:1;13911;13895:4;:11;;:13;;;;;;;;:::i;:::-;;;;;;;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;13894:52;;;;:::i;:::-;13881:66;;13974:4;13966:19;;;;;13796:200;14031:4;:11;;;14017:4;:11;;;:25;;;;:::i;:::-;14010:32;;:4;:32;:51;;;;;14060:1;14046:4;:11;;;:15;;;14010:51;14006:181;;;14141:1;14136;14117:4;:16;;;:20;;;;:::i;:::-;14116:26;;;;:::i;:::-;14090:52;;14111:1;14107;14091:4;:11;;:13;;;;;;;;:::i;:::-;;;;;;;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;14090:52;;;;:::i;:::-;14077:66;;14165:4;14157:19;;;;;14006:181;14208:4;:11;;;14201:18;;:4;:18;:37;;;;;14237:1;14223:4;:11;;;:15;;;14201:37;14197:167;;;14318:1;14313;14294:4;:16;;;:20;;;;:::i;:::-;14293:26;;;;:::i;:::-;14267:52;;14288:1;14284;14268:4;:11;;:13;;;;;;;;:::i;:::-;;;;;;;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;14267:52;;;;:::i;:::-;14254:66;;14342:4;14334:19;;;;;14197:167;14392:1;14378:4;:11;;;:15;;;14374:139;;;14467:1;14448:4;:16;;;:20;;;;:::i;:::-;14422:46;;14443:1;14439;14423:4;:11;;:13;;;;;;;;:::i;:::-;;;;;;;;:17;;;;:::i;:::-;:21;;;;:::i;:::-;14422:46;;;;:::i;:::-;14409:60;;14491:4;14483:19;;;;;14374:139;13743:776;13629:890;;;;;;:::o;14748:127::-;14797:6;14825:1;14819:2;:7;;;14815:21;;;14835:1;14828:8;;;;14815:21;14865:1;14860;14855:2;:6;;;;:::i;:::-;14854:12;;;;:::i;:::-;14846:22;;14748:127;;;;:::o;14525:178::-;14608:17;14690:6;14680:7;14665:11;14661:1;:15;;;;:::i;:::-;14649:28;;:8;:28;;;;:::i;:::-;:38;;;;:::i;:::-;:47;;;;:::i;:::-;14637:59;;14525:178;;;;:::o;4443:513:1:-;4543:1;4515:30;;:7;:16;4523:7;4515:16;;;;;;;;;;;;;;;;;;;;;:30;;;4507:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4575:14;4592:4;4575:21;;4631:9;4614:11;;:13;;;;;;;;;:::i;:::-;;;;;:26;;4606:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4818:9;:13;4828:2;4818:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;4881:2;4862:7;:16;4870:7;4862:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;4940:7;4936:2;4915:33;;4932:1;4915:33;;;;;;;;;;;;4496:460;4443:513;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:3:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:421::-;512:5;537:66;553:49;595:6;553:49;:::i;:::-;537:66;:::i;:::-;528:75;;626:6;619:5;612:21;664:4;657:5;653:16;702:3;693:6;688:3;684:16;681:25;678:112;;;709:79;;:::i;:::-;678:112;799:39;831:6;826:3;821;799:39;:::i;:::-;518:326;423:421;;;;;:::o;850:139::-;896:5;934:6;921:20;912:29;;950:33;977:5;950:33;:::i;:::-;850:139;;;;:::o;1012:568::-;1085:8;1095:6;1145:3;1138:4;1130:6;1126:17;1122:27;1112:122;;1153:79;;:::i;:::-;1112:122;1266:6;1253:20;1243:30;;1296:18;1288:6;1285:30;1282:117;;;1318:79;;:::i;:::-;1282:117;1432:4;1424:6;1420:17;1408:29;;1486:3;1478:4;1470:6;1466:17;1456:8;1452:32;1449:41;1446:128;;;1493:79;;:::i;:::-;1446:128;1012:568;;;;;:::o;1586:133::-;1629:5;1667:6;1654:20;1645:29;;1683:30;1707:5;1683:30;:::i;:::-;1586:133;;;;:::o;1725:137::-;1770:5;1808:6;1795:20;1786:29;;1824:32;1850:5;1824:32;:::i;:::-;1725:137;;;;:::o;1868:141::-;1924:5;1955:6;1949:13;1940:22;;1971:32;1997:5;1971:32;:::i;:::-;1868:141;;;;:::o;2028:338::-;2083:5;2132:3;2125:4;2117:6;2113:17;2109:27;2099:122;;2140:79;;:::i;:::-;2099:122;2257:6;2244:20;2282:78;2356:3;2348:6;2341:4;2333:6;2329:17;2282:78;:::i;:::-;2273:87;;2089:277;2028:338;;;;:::o;2372:161::-;2429:5;2467:6;2454:20;2445:29;;2483:44;2521:5;2483:44;:::i;:::-;2372:161;;;;:::o;2539:159::-;2595:5;2633:6;2620:20;2611:29;;2649:43;2686:5;2649:43;:::i;:::-;2539:159;;;;:::o;2718:355::-;2785:5;2834:3;2827:4;2819:6;2815:17;2811:27;2801:122;;2842:79;;:::i;:::-;2801:122;2952:6;2946:13;2977:90;3063:3;3055:6;3048:4;3040:6;3036:17;2977:90;:::i;:::-;2968:99;;2791:282;2718:355;;;;:::o;3079:139::-;3125:5;3163:6;3150:20;3141:29;;3179:33;3206:5;3179:33;:::i;:::-;3079:139;;;;:::o;3224:329::-;3283:6;3332:2;3320:9;3311:7;3307:23;3303:32;3300:119;;;3338:79;;:::i;:::-;3300:119;3458:1;3483:53;3528:7;3519:6;3508:9;3504:22;3483:53;:::i;:::-;3473:63;;3429:117;3224:329;;;;:::o;3559:474::-;3627:6;3635;3684:2;3672:9;3663:7;3659:23;3655:32;3652:119;;;3690:79;;:::i;:::-;3652:119;3810:1;3835:53;3880:7;3871:6;3860:9;3856:22;3835:53;:::i;:::-;3825:63;;3781:117;3937:2;3963:53;4008:7;3999:6;3988:9;3984:22;3963:53;:::i;:::-;3953:63;;3908:118;3559:474;;;;;:::o;4039:619::-;4116:6;4124;4132;4181:2;4169:9;4160:7;4156:23;4152:32;4149:119;;;4187:79;;:::i;:::-;4149:119;4307:1;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4278:117;4434:2;4460:53;4505:7;4496:6;4485:9;4481:22;4460:53;:::i;:::-;4450:63;;4405:118;4562:2;4588:53;4633:7;4624:6;4613:9;4609:22;4588:53;:::i;:::-;4578:63;;4533:118;4039:619;;;;;:::o;4664:943::-;4759:6;4767;4775;4783;4832:3;4820:9;4811:7;4807:23;4803:33;4800:120;;;4839:79;;:::i;:::-;4800:120;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5370:2;5359:9;5355:18;5342:32;5401:18;5393:6;5390:30;5387:117;;;5423:79;;:::i;:::-;5387:117;5528:62;5582:7;5573:6;5562:9;5558:22;5528:62;:::i;:::-;5518:72;;5313:287;4664:943;;;;;;;:::o;5613:468::-;5678:6;5686;5735:2;5723:9;5714:7;5710:23;5706:32;5703:119;;;5741:79;;:::i;:::-;5703:119;5861:1;5886:53;5931:7;5922:6;5911:9;5907:22;5886:53;:::i;:::-;5876:63;;5832:117;5988:2;6014:50;6056:7;6047:6;6036:9;6032:22;6014:50;:::i;:::-;6004:60;;5959:115;5613:468;;;;;:::o;6087:474::-;6155:6;6163;6212:2;6200:9;6191:7;6187:23;6183:32;6180:119;;;6218:79;;:::i;:::-;6180:119;6338:1;6363:53;6408:7;6399:6;6388:9;6384:22;6363:53;:::i;:::-;6353:63;;6309:117;6465:2;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6436:118;6087:474;;;;;:::o;6567:559::-;6653:6;6661;6710:2;6698:9;6689:7;6685:23;6681:32;6678:119;;;6716:79;;:::i;:::-;6678:119;6864:1;6853:9;6849:17;6836:31;6894:18;6886:6;6883:30;6880:117;;;6916:79;;:::i;:::-;6880:117;7029:80;7101:7;7092:6;7081:9;7077:22;7029:80;:::i;:::-;7011:98;;;;6807:312;6567:559;;;;;:::o;7132:726::-;7238:6;7246;7254;7303:2;7291:9;7282:7;7278:23;7274:32;7271:119;;;7309:79;;:::i;:::-;7271:119;7457:1;7446:9;7442:17;7429:31;7487:18;7479:6;7476:30;7473:117;;;7509:79;;:::i;:::-;7473:117;7622:80;7694:7;7685:6;7674:9;7670:22;7622:80;:::i;:::-;7604:98;;;;7400:312;7751:2;7777:64;7833:7;7824:6;7813:9;7809:22;7777:64;:::i;:::-;7767:74;;7722:129;7132:726;;;;;:::o;7864:327::-;7922:6;7971:2;7959:9;7950:7;7946:23;7942:32;7939:119;;;7977:79;;:::i;:::-;7939:119;8097:1;8122:52;8166:7;8157:6;8146:9;8142:22;8122:52;:::i;:::-;8112:62;;8068:116;7864:327;;;;:::o;8197:349::-;8266:6;8315:2;8303:9;8294:7;8290:23;8286:32;8283:119;;;8321:79;;:::i;:::-;8283:119;8441:1;8466:63;8521:7;8512:6;8501:9;8497:22;8466:63;:::i;:::-;8456:73;;8412:127;8197:349;;;;:::o;8552:::-;8621:6;8670:2;8658:9;8649:7;8645:23;8641:32;8638:119;;;8676:79;;:::i;:::-;8638:119;8796:1;8821:63;8876:7;8867:6;8856:9;8852:22;8821:63;:::i;:::-;8811:73;;8767:127;8552:349;;;;:::o;8907:524::-;8987:6;9036:2;9024:9;9015:7;9011:23;9007:32;9004:119;;;9042:79;;:::i;:::-;9004:119;9183:1;9172:9;9168:17;9162:24;9213:18;9205:6;9202:30;9199:117;;;9235:79;;:::i;:::-;9199:117;9340:74;9406:7;9397:6;9386:9;9382:22;9340:74;:::i;:::-;9330:84;;9133:291;8907:524;;;;:::o;9437:329::-;9496:6;9545:2;9533:9;9524:7;9520:23;9516:32;9513:119;;;9551:79;;:::i;:::-;9513:119;9671:1;9696:53;9741:7;9732:6;9721:9;9717:22;9696:53;:::i;:::-;9686:63;;9642:117;9437:329;;;;:::o;9772:496::-;9851:6;9859;9908:2;9896:9;9887:7;9883:23;9879:32;9876:119;;;9914:79;;:::i;:::-;9876:119;10034:1;10059:53;10104:7;10095:6;10084:9;10080:22;10059:53;:::i;:::-;10049:63;;10005:117;10161:2;10187:64;10243:7;10234:6;10223:9;10219:22;10187:64;:::i;:::-;10177:74;;10132:129;9772:496;;;;;:::o;10274:913::-;10370:6;10378;10386;10394;10402;10451:3;10439:9;10430:7;10426:23;10422:33;10419:120;;;10458:79;;:::i;:::-;10419:120;10578:1;10603:53;10648:7;10639:6;10628:9;10624:22;10603:53;:::i;:::-;10593:63;;10549:117;10705:2;10731:63;10786:7;10777:6;10766:9;10762:22;10731:63;:::i;:::-;10721:73;;10676:128;10843:2;10869:50;10911:7;10902:6;10891:9;10887:22;10869:50;:::i;:::-;10859:60;;10814:115;10968:2;10994:50;11036:7;11027:6;11016:9;11012:22;10994:50;:::i;:::-;10984:60;;10939:115;11093:3;11120:50;11162:7;11153:6;11142:9;11138:22;11120:50;:::i;:::-;11110:60;;11064:116;10274:913;;;;;;;;:::o;11193:189::-;11314:61;11342:32;11368:5;11342:32;:::i;:::-;11314:61;:::i;:::-;11309:3;11302:74;11193:189;;:::o;11388:118::-;11475:24;11493:5;11475:24;:::i;:::-;11470:3;11463:37;11388:118;;:::o;11512:157::-;11617:45;11637:24;11655:5;11637:24;:::i;:::-;11617:45;:::i;:::-;11612:3;11605:58;11512:157;;:::o;11675:109::-;11756:21;11771:5;11756:21;:::i;:::-;11751:3;11744:34;11675:109;;:::o;11790:157::-;11895:45;11915:24;11933:5;11915:24;:::i;:::-;11895:45;:::i;:::-;11890:3;11883:58;11790:157;;:::o;11953:360::-;12039:3;12067:38;12099:5;12067:38;:::i;:::-;12121:70;12184:6;12179:3;12121:70;:::i;:::-;12114:77;;12200:52;12245:6;12240:3;12233:4;12226:5;12222:16;12200:52;:::i;:::-;12277:29;12299:6;12277:29;:::i;:::-;12272:3;12268:39;12261:46;;12043:270;11953:360;;;;:::o;12319:373::-;12423:3;12451:38;12483:5;12451:38;:::i;:::-;12505:88;12586:6;12581:3;12505:88;:::i;:::-;12498:95;;12602:52;12647:6;12642:3;12635:4;12628:5;12624:16;12602:52;:::i;:::-;12679:6;12674:3;12670:16;12663:23;;12427:265;12319:373;;;;:::o;12698:157::-;12798:50;12842:5;12798:50;:::i;:::-;12793:3;12786:63;12698:157;;:::o;12861:149::-;12957:46;12997:5;12957:46;:::i;:::-;12952:3;12945:59;12861:149;;:::o;13016:364::-;13104:3;13132:39;13165:5;13132:39;:::i;:::-;13187:71;13251:6;13246:3;13187:71;:::i;:::-;13180:78;;13267:52;13312:6;13307:3;13300:4;13293:5;13289:16;13267:52;:::i;:::-;13344:29;13366:6;13344:29;:::i;:::-;13339:3;13335:39;13328:46;;13108:272;13016:364;;;;:::o;13386:366::-;13528:3;13549:67;13613:2;13608:3;13549:67;:::i;:::-;13542:74;;13625:93;13714:3;13625:93;:::i;:::-;13743:2;13738:3;13734:12;13727:19;;13386:366;;;:::o;13758:::-;13900:3;13921:67;13985:2;13980:3;13921:67;:::i;:::-;13914:74;;13997:93;14086:3;13997:93;:::i;:::-;14115:2;14110:3;14106:12;14099:19;;13758:366;;;:::o;14130:::-;14272:3;14293:67;14357:2;14352:3;14293:67;:::i;:::-;14286:74;;14369:93;14458:3;14369:93;:::i;:::-;14487:2;14482:3;14478:12;14471:19;;14130:366;;;:::o;14502:365::-;14644:3;14665:66;14729:1;14724:3;14665:66;:::i;:::-;14658:73;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14502:365;;;:::o;14873:366::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:365::-;16503:3;16524:66;16588:1;16583:3;16524:66;:::i;:::-;16517:73;;16599:93;16688:3;16599:93;:::i;:::-;16717:2;16712:3;16708:12;16701:19;;16361:365;;;:::o;16732:366::-;16874:3;16895:67;16959:2;16954:3;16895:67;:::i;:::-;16888:74;;16971:93;17060:3;16971:93;:::i;:::-;17089:2;17084:3;17080:12;17073:19;;16732:366;;;:::o;17104:::-;17246:3;17267:67;17331:2;17326:3;17267:67;:::i;:::-;17260:74;;17343:93;17432:3;17343:93;:::i;:::-;17461:2;17456:3;17452:12;17445:19;;17104:366;;;:::o;17476:::-;17618:3;17639:67;17703:2;17698:3;17639:67;:::i;:::-;17632:74;;17715:93;17804:3;17715:93;:::i;:::-;17833:2;17828:3;17824:12;17817:19;;17476:366;;;:::o;17848:::-;17990:3;18011:67;18075:2;18070:3;18011:67;:::i;:::-;18004:74;;18087:93;18176:3;18087:93;:::i;:::-;18205:2;18200:3;18196:12;18189:19;;17848:366;;;:::o;18220:115::-;18305:23;18322:5;18305:23;:::i;:::-;18300:3;18293:36;18220:115;;:::o;18341:118::-;18428:24;18446:5;18428:24;:::i;:::-;18423:3;18416:37;18341:118;;:::o;18465:157::-;18570:45;18590:24;18608:5;18590:24;:::i;:::-;18570:45;:::i;:::-;18565:3;18558:58;18465:157;;:::o;18628:115::-;18713:23;18730:5;18713:23;:::i;:::-;18708:3;18701:36;18628:115;;:::o;18749:::-;18834:23;18851:5;18834:23;:::i;:::-;18829:3;18822:36;18749:115;;:::o;18870:112::-;18953:22;18969:5;18953:22;:::i;:::-;18948:3;18941:35;18870:112;;:::o;18988:429::-;19144:3;19159:75;19230:3;19221:6;19159:75;:::i;:::-;19259:2;19254:3;19250:12;19243:19;;19272:91;19359:3;19350:6;19272:91;:::i;:::-;19388:2;19383:3;19379:12;19372:19;;19408:3;19401:10;;18988:429;;;;;:::o;19423:820::-;19647:3;19662:75;19733:3;19724:6;19662:75;:::i;:::-;19762:2;19757:3;19753:12;19746:19;;19775:75;19846:3;19837:6;19775:75;:::i;:::-;19875:2;19870:3;19866:12;19859:19;;19888:75;19959:3;19950:6;19888:75;:::i;:::-;19988:2;19983:3;19979:12;19972:19;;20001:75;20072:3;20063:6;20001:75;:::i;:::-;20101:2;20096:3;20092:12;20085:19;;20114:75;20185:3;20176:6;20114:75;:::i;:::-;20214:2;20209:3;20205:12;20198:19;;20234:3;20227:10;;19423:820;;;;;;;;:::o;20249:271::-;20379:3;20401:93;20490:3;20481:6;20401:93;:::i;:::-;20394:100;;20511:3;20504:10;;20249:271;;;;:::o;20526:222::-;20619:4;20657:2;20646:9;20642:18;20634:26;;20670:71;20738:1;20727:9;20723:17;20714:6;20670:71;:::i;:::-;20526:222;;;;:::o;20754:640::-;20949:4;20987:3;20976:9;20972:19;20964:27;;21001:71;21069:1;21058:9;21054:17;21045:6;21001:71;:::i;:::-;21082:72;21150:2;21139:9;21135:18;21126:6;21082:72;:::i;:::-;21164;21232:2;21221:9;21217:18;21208:6;21164:72;:::i;:::-;21283:9;21277:4;21273:20;21268:2;21257:9;21253:18;21246:48;21311:76;21382:4;21373:6;21311:76;:::i;:::-;21303:84;;20754:640;;;;;;;:::o;21400:332::-;21521:4;21559:2;21548:9;21544:18;21536:26;;21572:71;21640:1;21629:9;21625:17;21616:6;21572:71;:::i;:::-;21653:72;21721:2;21710:9;21706:18;21697:6;21653:72;:::i;:::-;21400:332;;;;;:::o;21738:545::-;21911:4;21949:3;21938:9;21934:19;21926:27;;21963:71;22031:1;22020:9;22016:17;22007:6;21963:71;:::i;:::-;22044:72;22112:2;22101:9;22097:18;22088:6;22044:72;:::i;:::-;22126;22194:2;22183:9;22179:18;22170:6;22126:72;:::i;:::-;22208:68;22272:2;22261:9;22257:18;22248:6;22208:68;:::i;:::-;21738:545;;;;;;;:::o;22289:456::-;22445:4;22483:2;22472:9;22468:18;22460:26;;22496:71;22564:1;22553:9;22549:17;22540:6;22496:71;:::i;:::-;22577:70;22643:2;22632:9;22628:18;22619:6;22577:70;:::i;:::-;22657:81;22734:2;22723:9;22719:18;22710:6;22657:81;:::i;:::-;22289:456;;;;;;:::o;22751:210::-;22838:4;22876:2;22865:9;22861:18;22853:26;;22889:65;22951:1;22940:9;22936:17;22927:6;22889:65;:::i;:::-;22751:210;;;;:::o;22967:248::-;23073:4;23111:2;23100:9;23096:18;23088:26;;23124:84;23205:1;23194:9;23190:17;23181:6;23124:84;:::i;:::-;22967:248;;;;:::o;23221:313::-;23334:4;23372:2;23361:9;23357:18;23349:26;;23421:9;23415:4;23411:20;23407:1;23396:9;23392:17;23385:47;23449:78;23522:4;23513:6;23449:78;:::i;:::-;23441:86;;23221:313;;;;:::o;23540:419::-;23706:4;23744:2;23733:9;23729:18;23721:26;;23793:9;23787:4;23783:20;23779:1;23768:9;23764:17;23757:47;23821:131;23947:4;23821:131;:::i;:::-;23813:139;;23540:419;;;:::o;23965:::-;24131:4;24169:2;24158:9;24154:18;24146:26;;24218:9;24212:4;24208:20;24204:1;24193:9;24189:17;24182:47;24246:131;24372:4;24246:131;:::i;:::-;24238:139;;23965:419;;;:::o;24390:::-;24556:4;24594:2;24583:9;24579:18;24571:26;;24643:9;24637:4;24633:20;24629:1;24618:9;24614:17;24607:47;24671:131;24797:4;24671:131;:::i;:::-;24663:139;;24390:419;;;:::o;24815:::-;24981:4;25019:2;25008:9;25004:18;24996:26;;25068:9;25062:4;25058:20;25054:1;25043:9;25039:17;25032:47;25096:131;25222:4;25096:131;:::i;:::-;25088:139;;24815:419;;;:::o;25240:::-;25406:4;25444:2;25433:9;25429:18;25421:26;;25493:9;25487:4;25483:20;25479:1;25468:9;25464:17;25457:47;25521:131;25647:4;25521:131;:::i;:::-;25513:139;;25240:419;;;:::o;25665:::-;25831:4;25869:2;25858:9;25854:18;25846:26;;25918:9;25912:4;25908:20;25904:1;25893:9;25889:17;25882:47;25946:131;26072:4;25946:131;:::i;:::-;25938:139;;25665:419;;;:::o;26090:::-;26256:4;26294:2;26283:9;26279:18;26271:26;;26343:9;26337:4;26333:20;26329:1;26318:9;26314:17;26307:47;26371:131;26497:4;26371:131;:::i;:::-;26363:139;;26090:419;;;:::o;26515:::-;26681:4;26719:2;26708:9;26704:18;26696:26;;26768:9;26762:4;26758:20;26754:1;26743:9;26739:17;26732:47;26796:131;26922:4;26796:131;:::i;:::-;26788:139;;26515:419;;;:::o;26940:::-;27106:4;27144:2;27133:9;27129:18;27121:26;;27193:9;27187:4;27183:20;27179:1;27168:9;27164:17;27157:47;27221:131;27347:4;27221:131;:::i;:::-;27213:139;;26940:419;;;:::o;27365:::-;27531:4;27569:2;27558:9;27554:18;27546:26;;27618:9;27612:4;27608:20;27604:1;27593:9;27589:17;27582:47;27646:131;27772:4;27646:131;:::i;:::-;27638:139;;27365:419;;;:::o;27790:::-;27956:4;27994:2;27983:9;27979:18;27971:26;;28043:9;28037:4;28033:20;28029:1;28018:9;28014:17;28007:47;28071:131;28197:4;28071:131;:::i;:::-;28063:139;;27790:419;;;:::o;28215:::-;28381:4;28419:2;28408:9;28404:18;28396:26;;28468:9;28462:4;28458:20;28454:1;28443:9;28439:17;28432:47;28496:131;28622:4;28496:131;:::i;:::-;28488:139;;28215:419;;;:::o;28640:::-;28806:4;28844:2;28833:9;28829:18;28821:26;;28893:9;28887:4;28883:20;28879:1;28868:9;28864:17;28857:47;28921:131;29047:4;28921:131;:::i;:::-;28913:139;;28640:419;;;:::o;29065:842::-;29304:4;29342:3;29331:9;29327:19;29319:27;;29356:69;29422:1;29411:9;29407:17;29398:6;29356:69;:::i;:::-;29435:68;29499:2;29488:9;29484:18;29475:6;29435:68;:::i;:::-;29513;29577:2;29566:9;29562:18;29553:6;29513:68;:::i;:::-;29591;29655:2;29644:9;29640:18;29631:6;29591:68;:::i;:::-;29669:69;29733:3;29722:9;29718:19;29709:6;29669:69;:::i;:::-;29748:71;29814:3;29803:9;29799:19;29790:6;29748:71;:::i;:::-;29829;29895:3;29884:9;29880:19;29871:6;29829:71;:::i;:::-;29065:842;;;;;;;;;;:::o;29913:222::-;30006:4;30044:2;30033:9;30029:18;30021:26;;30057:71;30125:1;30114:9;30110:17;30101:6;30057:71;:::i;:::-;29913:222;;;;:::o;30141:533::-;30310:4;30348:2;30337:9;30333:18;30325:26;;30361:71;30429:1;30418:9;30414:17;30405:6;30361:71;:::i;:::-;30479:9;30473:4;30469:20;30464:2;30453:9;30449:18;30442:48;30507:78;30580:4;30571:6;30507:78;:::i;:::-;30499:86;;30595:72;30663:2;30652:9;30648:18;30639:6;30595:72;:::i;:::-;30141:533;;;;;;:::o;30680:957::-;30949:4;30987:3;30976:9;30972:19;30964:27;;31001:67;31065:1;31054:9;31050:17;31041:6;31001:67;:::i;:::-;31078:68;31142:2;31131:9;31127:18;31118:6;31078:68;:::i;:::-;31156:70;31222:2;31211:9;31207:18;31198:6;31156:70;:::i;:::-;31236;31302:2;31291:9;31287:18;31278:6;31236:70;:::i;:::-;31316:71;31382:3;31371:9;31367:19;31358:6;31316:71;:::i;:::-;31397;31463:3;31452:9;31448:19;31439:6;31397:71;:::i;:::-;31478;31544:3;31533:9;31529:19;31520:6;31478:71;:::i;:::-;31559;31625:3;31614:9;31610:19;31601:6;31559:71;:::i;:::-;30680:957;;;;;;;;;;;:::o;31643:842::-;31882:4;31920:3;31909:9;31905:19;31897:27;;31934:67;31998:1;31987:9;31983:17;31974:6;31934:67;:::i;:::-;32011:68;32075:2;32064:9;32060:18;32051:6;32011:68;:::i;:::-;32089;32153:2;32142:9;32138:18;32129:6;32089:68;:::i;:::-;32167;32231:2;32220:9;32216:18;32207:6;32167:68;:::i;:::-;32245:71;32311:3;32300:9;32296:19;32287:6;32245:71;:::i;:::-;32326;32392:3;32381:9;32377:19;32368:6;32326:71;:::i;:::-;32407;32473:3;32462:9;32458:19;32449:6;32407:71;:::i;:::-;31643:842;;;;;;;;;;:::o;32491:129::-;32525:6;32552:20;;:::i;:::-;32542:30;;32581:33;32609:4;32601:6;32581:33;:::i;:::-;32491:129;;;:::o;32626:75::-;32659:6;32692:2;32686:9;32676:19;;32626:75;:::o;32707:307::-;32768:4;32858:18;32850:6;32847:30;32844:56;;;32880:18;;:::i;:::-;32844:56;32918:29;32940:6;32918:29;:::i;:::-;32910:37;;33002:4;32996;32992:15;32984:23;;32707:307;;;:::o;33020:308::-;33082:4;33172:18;33164:6;33161:30;33158:56;;;33194:18;;:::i;:::-;33158:56;33232:29;33254:6;33232:29;:::i;:::-;33224:37;;33316:4;33310;33306:15;33298:23;;33020:308;;;:::o;33334:98::-;33385:6;33419:5;33413:12;33403:22;;33334:98;;;:::o;33438:99::-;33490:6;33524:5;33518:12;33508:22;;33438:99;;;:::o;33543:168::-;33626:11;33660:6;33655:3;33648:19;33700:4;33695:3;33691:14;33676:29;;33543:168;;;;:::o;33717:147::-;33818:11;33855:3;33840:18;;33717:147;;;;:::o;33870:169::-;33954:11;33988:6;33983:3;33976:19;34028:4;34023:3;34019:14;34004:29;;33870:169;;;;:::o;34045:242::-;34084:3;34103:19;34120:1;34103:19;:::i;:::-;34098:24;;34136:19;34153:1;34136:19;:::i;:::-;34131:24;;34229:1;34221:6;34217:14;34214:1;34211:21;34208:47;;;34235:18;;:::i;:::-;34208:47;34279:1;34276;34272:9;34265:16;;34045:242;;;;:::o;34293:305::-;34333:3;34352:20;34370:1;34352:20;:::i;:::-;34347:25;;34386:20;34404:1;34386:20;:::i;:::-;34381:25;;34540:1;34472:66;34468:74;34465:1;34462:81;34459:107;;;34546:18;;:::i;:::-;34459:107;34590:1;34587;34583:9;34576:16;;34293:305;;;;:::o;34604:246::-;34643:3;34662:19;34679:1;34662:19;:::i;:::-;34657:24;;34695:19;34712:1;34695:19;:::i;:::-;34690:24;;34792:1;34780:10;34776:18;34773:1;34770:25;34767:51;;;34798:18;;:::i;:::-;34767:51;34842:1;34839;34835:9;34828:16;;34604:246;;;;:::o;34856:237::-;34894:3;34913:18;34929:1;34913:18;:::i;:::-;34908:23;;34945:18;34961:1;34945:18;:::i;:::-;34940:23;;35035:1;35029:4;35025:12;35022:1;35019:19;35016:45;;;35041:18;;:::i;:::-;35016:45;35085:1;35082;35078:9;35071:16;;34856:237;;;;:::o;35099:182::-;35138:1;35155:19;35172:1;35155:19;:::i;:::-;35150:24;;35188:19;35205:1;35188:19;:::i;:::-;35183:24;;35226:1;35216:35;;35231:18;;:::i;:::-;35216:35;35273:1;35270;35266:9;35261:14;;35099:182;;;;:::o;35287:185::-;35327:1;35344:20;35362:1;35344:20;:::i;:::-;35339:25;;35378:20;35396:1;35378:20;:::i;:::-;35373:25;;35417:1;35407:35;;35422:18;;:::i;:::-;35407:35;35464:1;35461;35457:9;35452:14;;35287:185;;;;:::o;35478:182::-;35517:1;35534:19;35551:1;35534:19;:::i;:::-;35529:24;;35567:19;35584:1;35567:19;:::i;:::-;35562:24;;35605:1;35595:35;;35610:18;;:::i;:::-;35595:35;35652:1;35649;35645:9;35640:14;;35478:182;;;;:::o;35666:285::-;35705:7;35728:19;35745:1;35728:19;:::i;:::-;35723:24;;35761:19;35778:1;35761:19;:::i;:::-;35756:24;;35888:1;35880:6;35876:14;35873:1;35870:21;35865:1;35858:9;35851:17;35847:45;35844:71;;;35895:18;;:::i;:::-;35844:71;35943:1;35940;35936:9;35925:20;;35666:285;;;;:::o;35957:348::-;35997:7;36020:20;36038:1;36020:20;:::i;:::-;36015:25;;36054:20;36072:1;36054:20;:::i;:::-;36049:25;;36242:1;36174:66;36170:74;36167:1;36164:81;36159:1;36152:9;36145:17;36141:105;36138:131;;;36249:18;;:::i;:::-;36138:131;36297:1;36294;36290:9;36279:20;;35957:348;;;;:::o;36311:280::-;36349:7;36372:18;36388:1;36372:18;:::i;:::-;36367:23;;36404:18;36420:1;36404:18;:::i;:::-;36399:23;;36528:1;36522:4;36518:12;36515:1;36512:19;36507:1;36500:9;36493:17;36489:43;36486:69;;;36535:18;;:::i;:::-;36486:69;36583:1;36580;36576:9;36565:20;;36311:280;;;;:::o;36597:188::-;36636:4;36656:19;36673:1;36656:19;:::i;:::-;36651:24;;36689:19;36706:1;36689:19;:::i;:::-;36684:24;;36727:1;36724;36721:8;36718:34;;;36732:18;;:::i;:::-;36718:34;36777:1;36774;36770:9;36762:17;;36597:188;;;;:::o;36791:191::-;36831:4;36851:20;36869:1;36851:20;:::i;:::-;36846:25;;36885:20;36903:1;36885:20;:::i;:::-;36880:25;;36924:1;36921;36918:8;36915:34;;;36929:18;;:::i;:::-;36915:34;36974:1;36971;36967:9;36959:17;;36791:191;;;;:::o;36988:96::-;37025:7;37054:24;37072:5;37054:24;:::i;:::-;37043:35;;36988:96;;;:::o;37090:104::-;37135:7;37164:24;37182:5;37164:24;:::i;:::-;37153:35;;37090:104;;;:::o;37200:90::-;37234:7;37277:5;37270:13;37263:21;37252:32;;37200:90;;;:::o;37296:77::-;37333:7;37362:5;37351:16;;37296:77;;;:::o;37379:149::-;37415:7;37455:66;37448:5;37444:78;37433:89;;37379:149;;;:::o;37534:133::-;37582:7;37611:5;37600:16;;37617:44;37655:5;37617:44;:::i;:::-;37534:133;;;:::o;37673:89::-;37709:7;37749:6;37742:5;37738:18;37727:29;;37673:89;;;:::o;37768:126::-;37805:7;37845:42;37838:5;37834:54;37823:65;;37768:126;;;:::o;37900:77::-;37937:7;37966:5;37955:16;;37900:77;;;:::o;37983:93::-;38019:7;38059:10;38052:5;38048:22;38037:33;;37983:93;;;:::o;38082:86::-;38117:7;38157:4;38150:5;38146:16;38135:27;;38082:86;;;:::o;38174:107::-;38210:7;38250:24;38243:5;38239:36;38228:47;;38174:107;;;:::o;38287:139::-;38350:9;38383:37;38414:5;38383:37;:::i;:::-;38370:50;;38287:139;;;:::o;38432:133::-;38491:9;38524:35;38553:5;38524:35;:::i;:::-;38511:48;;38432:133;;;:::o;38571:126::-;38621:9;38654:37;38685:5;38654:37;:::i;:::-;38641:50;;38571:126;;;:::o;38703:113::-;38753:9;38786:24;38804:5;38786:24;:::i;:::-;38773:37;;38703:113;;;:::o;38822:154::-;38906:6;38901:3;38896;38883:30;38968:1;38959:6;38954:3;38950:16;38943:27;38822:154;;;:::o;38982:307::-;39050:1;39060:113;39074:6;39071:1;39068:13;39060:113;;;39159:1;39154:3;39150:11;39144:18;39140:1;39135:3;39131:11;39124:39;39096:2;39093:1;39089:10;39084:15;;39060:113;;;39191:6;39188:1;39185:13;39182:101;;;39271:1;39262:6;39257:3;39253:16;39246:27;39182:101;39031:258;38982:307;;;:::o;39295:169::-;39333:3;39356:23;39373:5;39356:23;:::i;:::-;39347:32;;39401:4;39394:5;39391:15;39388:41;;;39409:18;;:::i;:::-;39388:41;39456:1;39449:5;39445:13;39438:20;;39295:169;;;:::o;39470:171::-;39509:3;39532:24;39550:5;39532:24;:::i;:::-;39523:33;;39578:4;39571:5;39568:15;39565:41;;;39586:18;;:::i;:::-;39565:41;39633:1;39626:5;39622:13;39615:20;;39470:171;;;:::o;39647:320::-;39691:6;39728:1;39722:4;39718:12;39708:22;;39775:1;39769:4;39765:12;39796:18;39786:81;;39852:4;39844:6;39840:17;39830:27;;39786:81;39914:2;39906:6;39903:14;39883:18;39880:38;39877:84;;;39933:18;;:::i;:::-;39877:84;39698:269;39647:320;;;:::o;39973:281::-;40056:27;40078:4;40056:27;:::i;:::-;40048:6;40044:40;40186:6;40174:10;40171:22;40150:18;40138:10;40135:34;40132:62;40129:88;;;40197:18;;:::i;:::-;40129:88;40237:10;40233:2;40226:22;40016:238;39973:281;;:::o;40260:233::-;40299:3;40322:24;40340:5;40322:24;:::i;:::-;40313:33;;40368:66;40361:5;40358:77;40355:103;;;40438:18;;:::i;:::-;40355:103;40485:1;40478:5;40474:13;40467:20;;40260:233;;;:::o;40499:100::-;40538:7;40567:26;40587:5;40567:26;:::i;:::-;40556:37;;40499:100;;;:::o;40605:108::-;40652:7;40681:26;40701:5;40681:26;:::i;:::-;40670:37;;40605:108;;;:::o;40719:79::-;40758:7;40787:5;40776:16;;40719:79;;;:::o;40804:94::-;40843:7;40872:20;40886:5;40872:20;:::i;:::-;40861:31;;40804:94;;;:::o;40904:79::-;40943:7;40972:5;40961:16;;40904:79;;;:::o;40989:173::-;41020:1;41037:19;41054:1;41037:19;:::i;:::-;41032:24;;41070:19;41087:1;41070:19;:::i;:::-;41065:24;;41108:1;41098:35;;41113:18;;:::i;:::-;41098:35;41154:1;41151;41147:9;41142:14;;40989:173;;;;:::o;41168:176::-;41200:1;41217:20;41235:1;41217:20;:::i;:::-;41212:25;;41251:20;41269:1;41251:20;:::i;:::-;41246:25;;41290:1;41280:35;;41295:18;;:::i;:::-;41280:35;41336:1;41333;41329:9;41324:14;;41168:176;;;;:::o;41350:180::-;41398:77;41395:1;41388:88;41495:4;41492:1;41485:15;41519:4;41516:1;41509:15;41536:180;41584:77;41581:1;41574:88;41681:4;41678:1;41671:15;41705:4;41702:1;41695:15;41722:180;41770:77;41767:1;41760:88;41867:4;41864:1;41857:15;41891:4;41888:1;41881:15;41908:180;41956:77;41953:1;41946:88;42053:4;42050:1;42043:15;42077:4;42074:1;42067:15;42094:180;42142:77;42139:1;42132:88;42239:4;42236:1;42229:15;42263:4;42260:1;42253:15;42280:180;42328:77;42325:1;42318:88;42425:4;42422:1;42415:15;42449:4;42446:1;42439:15;42466:117;42575:1;42572;42565:12;42589:117;42698:1;42695;42688:12;42712:117;42821:1;42818;42811:12;42835:117;42944:1;42941;42934:12;42958:117;43067:1;43064;43057:12;43081:117;43190:1;43187;43180:12;43204:102;43245:6;43296:2;43292:7;43287:2;43280:5;43276:14;43272:28;43262:38;;43204:102;;;:::o;43312:94::-;43345:8;43393:5;43389:2;43385:14;43364:35;;43312:94;;;:::o;43412:161::-;43552:13;43548:1;43540:6;43536:14;43529:37;43412:161;:::o;43579:162::-;43719:14;43715:1;43707:6;43703:14;43696:38;43579:162;:::o;43747:173::-;43887:25;43883:1;43875:6;43871:14;43864:49;43747:173;:::o;43926:158::-;44066:10;44062:1;44054:6;44050:14;44043:34;43926:158;:::o;44090:161::-;44230:13;44226:1;44218:6;44214:14;44207:37;44090:161;:::o;44257:168::-;44397:20;44393:1;44385:6;44381:14;44374:44;44257:168;:::o;44431:162::-;44571:14;44567:1;44559:6;44555:14;44548:38;44431:162;:::o;44599:169::-;44739:21;44735:1;44727:6;44723:14;44716:45;44599:169;:::o;44774:159::-;44914:11;44910:1;44902:6;44898:14;44891:35;44774:159;:::o;44939:168::-;45079:20;45075:1;45067:6;45063:14;45056:44;44939:168;:::o;45113:164::-;45253:16;45249:1;45241:6;45237:14;45230:40;45113:164;:::o;45283:169::-;45423:21;45419:1;45411:6;45407:14;45400:45;45283:169;:::o;45458:179::-;45598:31;45594:1;45586:6;45582:14;45575:55;45458:179;:::o;45643:116::-;45727:1;45720:5;45717:12;45707:46;;45733:18;;:::i;:::-;45707:46;45643:116;:::o;45765:122::-;45838:24;45856:5;45838:24;:::i;:::-;45831:5;45828:35;45818:63;;45877:1;45874;45867:12;45818:63;45765:122;:::o;45893:116::-;45963:21;45978:5;45963:21;:::i;:::-;45956:5;45953:32;45943:60;;45999:1;45996;45989:12;45943:60;45893:116;:::o;46015:120::-;46087:23;46104:5;46087:23;:::i;:::-;46080:5;46077:34;46067:62;;46125:1;46122;46115:12;46067:62;46015:120;:::o;46141:110::-;46225:1;46218:5;46215:12;46205:40;;46241:1;46238;46231:12;46205:40;46141:110;:::o;46257:::-;46340:2;46333:5;46330:13;46320:41;;46357:1;46354;46347:12;46320:41;46257:110;:::o;46373:122::-;46446:24;46464:5;46446:24;:::i;:::-;46439:5;46436:35;46426:63;;46485:1;46482;46475:12;46426:63;46373:122;:::o

Swarm Source

ipfs://d03456f2cce2d3fc68dc618a733a8c6a1e787e5322679cf242119eb806aae1ec
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.