ETH Price: $2,564.25 (-1.79%)

Contract

0x075854b315F2cd7eC490853Bc5589B09E546449f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...207541702024-09-15 6:17:4716 days ago1726381067IN
0x075854b3...9E546449f
0 ETH0.00007451.6131935
Set Approval For...205904202024-08-23 9:30:4739 days ago1724405447IN
0x075854b3...9E546449f
0 ETH0.000028561.17653504
Set Approval For...205902612024-08-23 8:58:4739 days ago1724403527IN
0x075854b3...9E546449f
0 ETH0.00006091.31866543
Set Approval For...205735192024-08-21 0:49:4741 days ago1724201387IN
0x075854b3...9E546449f
0 ETH0.000038230.82635436
Set Approval For...202366302024-07-05 0:09:5988 days ago1720138199IN
0x075854b3...9E546449f
0 ETH0.0007408316.03985531
Set Approval For...201958142024-06-29 7:20:2394 days ago1719645623IN
0x075854b3...9E546449f
0 ETH0.000120852.61186493
Set Approval For...201599042024-06-24 6:58:2399 days ago1719212303IN
0x075854b3...9E546449f
0 ETH0.000051112.09857546
Set Approval For...200782022024-06-12 20:41:59110 days ago1718224919IN
0x075854b3...9E546449f
0 ETH0.0006623814.34144504
Set Approval For...199920402024-05-31 19:56:35122 days ago1717185395IN
0x075854b3...9E546449f
0 ETH0.000402758.70433622
Set Approval For...195010922024-03-24 1:16:59191 days ago1711243019IN
0x075854b3...9E546449f
0 ETH0.0007700916.64320941
Set Approval For...190726202024-01-23 23:26:23251 days ago1706052383IN
0x075854b3...9E546449f
0 ETH0.000573112.40843989
Set Approval For...189843052024-01-11 14:33:35264 days ago1704983615IN
0x075854b3...9E546449f
0 ETH0.0021699846.89732536
Set Approval For...189098742024-01-01 3:18:47274 days ago1704079127IN
0x075854b3...9E546449f
0 ETH0.000235459.66586813
Set Approval For...189067582023-12-31 16:50:59274 days ago1704041459IN
0x075854b3...9E546449f
0 ETH0.0007579916.38167933
Set Approval For...189060142023-12-31 14:19:35275 days ago1704032375IN
0x075854b3...9E546449f
0 ETH0.0008411718.18403591
Set Approval For...189051042023-12-31 11:15:59275 days ago1704021359IN
0x075854b3...9E546449f
0 ETH0.0007254415.67813758
Set Approval For...185434582023-11-10 18:53:47325 days ago1699642427IN
0x075854b3...9E546449f
0 ETH0.0023482150.74909345
Set Approval For...184229632023-10-24 22:02:11342 days ago1698184931IN
0x075854b3...9E546449f
0 ETH0.0018138139.21004496
Set Approval For...182943192023-10-06 22:04:11360 days ago1696629851IN
0x075854b3...9E546449f
0 ETH0.0003416714.02645608
Set Contracts178949952023-08-11 23:44:23416 days ago1691797463IN
0x075854b3...9E546449f
0 ETH0.0008216514.54158722
Set Approval For...177124632023-07-17 10:44:23442 days ago1689590663IN
0x075854b3...9E546449f
0 ETH0.0008784218.98926258
Set Approval For...175025172023-06-17 22:30:23471 days ago1687041023IN
0x075854b3...9E546449f
0 ETH0.0006712114.53247354
Set Approval For...174832222023-06-15 5:29:23474 days ago1686806963IN
0x075854b3...9E546449f
0 ETH0.000883619.13103553
Set Approval For...174729832023-06-13 18:55:11475 days ago1686682511IN
0x075854b3...9E546449f
0 ETH0.0007377515.97313676
Set Approval For...173958602023-06-02 21:59:35486 days ago1685743175IN
0x075854b3...9E546449f
0 ETH0.0016023234.62923179
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MTMCharacters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-14
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// This is a special "passive" migration contract of MTM. 
// Every single method is modified and has custom "passive" migration proxy logic.

abstract contract Ownable {
    address public owner;
    constructor() { owner = msg.sender; }
    modifier onlyOwner { require(owner == msg.sender, "Ownable: NO"); _; }
    function transferOwnership(address newOwner_) public virtual onlyOwner {
        owner = newOwner_; 
    }
}

interface iCM {
    // Views
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint256);
    function ownerOf(uint256 tokenId_) external view returns (address);
    function balanceOf(address address_) external view returns (uint256);
    function getApproved(uint256 tokenId_) external view returns (address);
    function isApprovedForAll(address owner_, address operator_) external view returns (bool);
}

// ERC721I Functions, but we modified it for passive migration method
// ERC721IMigrator uses local state storage for gas savings.
// It is like ERC721IStorage and ERC721IOperator combined into one.
contract ERC721IMigrator is Ownable {

    // Interface the MTM Characters Main V1
    iCM public CM;
    function setCM(address address_) external onlyOwner {
        CM = iCM(address_);
    }

    // Name and Symbol Stuff
    string public name; string public symbol;
    constructor(string memory name_, string memory symbol_) {
        name = name_; symbol = symbol_;
    }

    // We turned these to _ prefix so we can use a override function
    // To display custom proxy and passive migration logic
    uint256 public totalSupply;
    mapping(uint256 => address) public _ownerOf;
    mapping(address => uint256) public _balanceOf;

    // Here we have to keep track of a initialized balanceOf to prevent any view issues
    mapping(address => bool) public _balanceOfInitialized;

    
    // We disregard the previous contract's approvals
    mapping(uint256 => address) public getApproved;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    // // TotalSupply Setter
    // Here, we set the totalSupply to equal the previous
    function setTotalSupply(uint256 totalSupply_) external onlyOwner {
        totalSupply = totalSupply_; 
    }

    // // Initializer
    // This is a custom Transfer emitter for the initialize of this contract only
    function initialize(uint256[] calldata tokenIds_, address[] calldata owners_) external onlyOwner {
        require(tokenIds_.length == owners_.length,
            "initialize(): array length mismatch!");
        
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            emit Transfer(address(0x0), owners_[i], tokenIds_[i]);
        }
    }

    // OwnerOf (Proxy View)
    function ownerOf(uint256 tokenId_) public view returns (address) {
        // Find out of the _ownerOf slot has been initialized.
        // We hardcode the tokenId_ to save gas.
        if (tokenId_ <= 3259 && _ownerOf[tokenId_] == address(0x0)) {
            // _ownerOf[tokenId_] is not initialized yet, so return the CM V1 value.
            return CM.ownerOf(tokenId_);
        } else {
            // If it is already initialized, or is higher than migration Id
            // return local state storage instead.
            return _ownerOf[tokenId_];
        }
    }

    // BalanceOf (Proxy View)
    function balanceOf(address address_) public view returns (uint256) {
        // Proxy the balance function
        // We have a tracker of initialization of _balanceOf to track the differences
        // If initialized, we use the state storage. Otherwise, we use CM V1 storage.
        if (_balanceOfInitialized[address_]) {
            return _balanceOf[address_]; 
        } else {
            return CM.balanceOf(address_);
        }
    }

    // Events! L[o_o]⅃ 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Mint(address indexed to, uint256 tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    // Functions
    function _mint(address to_, uint256 tokenId_) internal virtual {
        require(to_ != address(0x0), "ERC721IMigrator: _mint() Mint to Zero Address!");
        require(ownerOf(tokenId_) == address(0x0), "ERC721IMigrator: _mint() Token already Exists!");

        // // ERC721I Logic

        // We set _ownerOf in a normal way
        _ownerOf[tokenId_] = to_;

        // We rebalance the _balanceOf on initialization, otherwise follow normal ERC721I logic
        if (_balanceOfInitialized[to_]) {
            // If we are already initialized
            _balanceOf[to_]++;
        } else {
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            _balanceOfInitialized[to_] = true;
        }

        // Increment TotalSupply as normal
        totalSupply++;

        // // ERC721I Logic End

        // Emit Events
        emit Transfer(address(0x0), to_, tokenId_);
        emit Mint(to_, tokenId_);
    }

    function _transfer(address from_, address to_, uint256 tokenId_) internal virtual {
        require(from_ == ownerOf(tokenId_), "ERC721IMigrator: _transfer() Transfer from_ != ownerOf(tokenId_)");
        require(to_ != address(0x0), "ERC721IMigrator: _transfer() Transfer to Zero Address!");

        // // ERC721I Transfer Logic

        // If token has an approval
        if (getApproved[tokenId_] != address(0x0)) {
            // Remove the outstanding approval
            getApproved[tokenId_] = address(0x0);
        }

        // Set the _ownerOf to the receiver
        _ownerOf[tokenId_] = to_;

        // // Initialize and Rebalance _balanceOf 
        if (_balanceOfInitialized[from_]) {
            // If from_ is initialized, do normal balance change
            _balanceOf[from_]--;
        } else {
            // If from_ is NOT initialized, follow rebalance flow
            _balanceOf[from_] = (CM.balanceOf(from_) - 1);
            // Set from_ as initialized
            _balanceOfInitialized[from_] = true;
        }

        if (_balanceOfInitialized[to_]) {
            // If to_ is initialized, do normal balance change
            _balanceOf[to_]++;
        } else {
            // If to_ is NOT initialized, follow rebalance flow
            _balanceOf[to_] = (CM.balanceOf(to_) + 1);
            // Set to_ as initialized;
            _balanceOfInitialized[to_] = true;
        }

        // // ERC721I Transfer Logic End

        emit Transfer(from_, to_, tokenId_);
    }

    // Approvals
    function _approve(address to_, uint256 tokenId_) internal virtual {
        if (getApproved[tokenId_] != to_) {
            getApproved[tokenId_] = to_;
            emit Approval(ownerOf(tokenId_), to_, tokenId_);
        }
    }
    function _setApprovalForAll(address owner_, address operator_, bool approved_) internal virtual {
        require(owner_ != operator_, "ERC721IMigrator: _setApprovalForAll() Owner must not be the Operator!");
        isApprovedForAll[owner_][operator_] = approved_;
        emit ApprovalForAll(owner_, operator_, approved_);
    }

    // // Functional Internal Views
    function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view returns (bool) {
        address _owner = ownerOf(tokenId_);
        require(_owner != address(0x0), "ERC721IMigrator: _isApprovedOrOwner() Owner is Zero Address!");
        return (spender_ == _owner // is the owner OR
            || spender_ == getApproved[tokenId_] // is approved for token OR
            || isApprovedForAll[_owner][spender_] // isApprovedForAll spender 
        );
    }

    // Exists
    function _exists(uint256 tokenId_) internal view virtual returns (bool) {
        // We hardcode tokenId_ for gas savings
        if (tokenId_ <= 3259) { return true; }
        return _ownerOf[tokenId_] != address(0x0);
    }

    // Public Write Functions 
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf(tokenId_);
        require(to_ != _owner, "ERC721IMigrator: approve() cannot approve owner!");
        require(msg.sender == _owner // sender is the owner of the token
            || isApprovedForAll[_owner][msg.sender], // or isApprovedForAll for the owner
            "ERC721IMigrator: approve() Caller is not owner of isApprovedForAll!");
        _approve(to_, tokenId_);
    }
    // SetApprovalForAll - the msg.sender is always the subject of approval
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        _setApprovalForAll(msg.sender, operator_, approved_);
    }

    // Transfers
    function transferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        require(_isApprovedOrOwner(msg.sender, tokenId_), 
            "ERC721IMigrator: transferFrom() _isApprovedOrOwner = false!");
        _transfer(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual {
        transferFrom(from_, to_, tokenId_);
        if (to_.code.length != 0) {
            (, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from_, tokenId_, data_));
            bytes4 _selector = abi.decode(_returned, (bytes4));
            require(_selector == 0x150b7a02, "ERC721IMigrator: safeTransferFrom() to_ not ERC721Receivable!");
        }
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual {
        safeTransferFrom(from_, to_, tokenId_, "");
    }

    // Native Multi-Transfers by 0xInuarashi
    function multiTransferFrom(address from_, address to_, uint256[] memory tokenIds_) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            transferFrom(from_, to_, tokenIds_[i]);
        }
    }
    function multiSafeTransferFrom(address from_, address to_, uint256[] memory tokenIds_, bytes memory data_) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++ ){
            safeTransferFrom(from_, to_, tokenIds_[i], data_);
        }
    }

    // OZ Standard Stuff
    function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
        return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f);
    }

    // High Gas Loop View Functions
    function walletOfOwner(address address_) public virtual view returns (uint256[] memory) {
        uint256 _balance = balanceOf(address_);
        uint256[] memory _tokens = new uint256[](_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply;
        for (uint256 i = 0; i < _loopThrough; i++) {
            // Add another loop through for each 0x0 until array is filled
            if (ownerOf(i) == address(0x0) && _tokens[_balance - 1] == 0) {
                _loopThrough++;
            }
            // Fill the array on each token found
            if (ownerOf(i) == address_) {
                // Record the ID in the index 
                _tokens[_index] = i;
                // Increment the index
                _index++;
            }
        }
        return _tokens;
    }

    // TokenURIs Functions Omitted //

}

interface IERC721 {
    function ownerOf(uint256 tokenId_) external view returns (address);
    function transferFrom(address from_, address to_, uint256 tokenId_) external;
}

interface iCS {
    struct Character {
        uint8  race_;
        uint8  renderType_;
        uint16 transponderId_;
        uint16 spaceCapsuleId_;
        uint8  augments_;
        uint16 basePoints_;
        uint16 totalEquipmentBonus_;
    }
    struct Stats {
        uint8 strength_; 
        uint8 agility_; 
        uint8 constitution_; 
        uint8 intelligence_; 
        uint8 spirit_; 
    }
    struct Equipment {
        uint8 weaponUpgrades_;
        uint8 chestUpgrades_;
        uint8 headUpgrades_;
        uint8 legsUpgrades_;
        uint8 vehicleUpgrades_;
        uint8 armsUpgrades_;
        uint8 artifactUpgrades_;
        uint8 ringUpgrades_;
    }

    // Create Character
    function createCharacter(uint tokenId_, Character memory Character_) external;
    // Characters
    function setName(uint256 tokenId_, string memory name_) external;
    function setRace(uint256 tokenId_, string memory race_) external;
    function setRenderType(uint256 tokenId_, uint8 renderType_) external;
    function setTransponderId(uint256 tokenId_, uint16 transponderId_) external;
    function setSpaceCapsuleId(uint256 tokenId_, uint16 spaceCapsuleId_) external;
    function setAugments(uint256 tokenId_, uint8 augments_) external;
    function setBasePoints(uint256 tokenId_, uint16 basePoints_) external;
    function setBaseEquipmentBonus(uint256 tokenId_, uint16 baseEquipmentBonus_) external;
    function setTotalEquipmentBonus(uint256 tokenId_, uint16 totalEquipmentBonus) external;
    // Stats
    function setStrength(uint256 tokenId_, uint8 strength_) external;
    function setAgility(uint256 tokenId_, uint8 agility_) external;
    function setConstitution(uint256 tokenId_, uint8 constitution_) external;
    function setIntelligence(uint256 tokenId_, uint8 intelligence_) external;
    function setSpirit(uint256 tokenId_, uint8 spirit_) external;
    // Equipment
    function setWeaponUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setChestUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setHeadUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setLegsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setVehicleUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArmsUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setArtifactUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    function setRingUpgrades(uint256 tokenId_, uint8 upgrade_) external;
    // Structs and Mappings
    function names(uint256 tokenId_) external view returns (string memory);
    function characters(uint256 tokenId_) external view returns (Character memory);
    function stats(uint256 tokenId_) external view returns (Stats memory);
    function equipments(uint256 tokenId_) external view returns (Equipment memory);
    function contractToRace(address contractAddress_) external view returns (uint8);
}

interface iCC {
    function queryCharacterYieldRate(uint8 augments_, uint16 basePoints_, uint16 totalEquipmentBonus_) external view returns (uint256);
    function getEquipmentBaseBonus(uint16 spaceCapsuleId_) external view returns (uint16); 
}

interface iMES {
    // View Functions
    function balanceOf(address address_) external view returns (uint256);
    function pendingRewards(address address_) external view returns (uint256); 
    // Administration
    function setYieldRate(address address_, uint256 yieldRate_) external;
    function addYieldRate(address address_, uint256 yieldRateAdd_) external;
    function subYieldRate(address address_, uint256 yieldRateSub_) external;
    // Credits System
    function deductCredits(address address_, uint256 amount_) external;
    function addCredits(address address_, uint256 amount_) external;
    // Claiming
    function updateReward(address address_) external;
    function burn(address from, uint256 amount_) external;
}

interface iMetadata {
    function renderMetadata(uint256 tokenId_) external view returns (string memory);
}

contract MTMCharacters is ERC721IMigrator {
    constructor() ERC721IMigrator("MTM Characters", "CHARACTERS") {}

    // Interfaces
    iCS public CS; iCC public CC; iMES public MES; iMetadata public Metadata;
    IERC721 public TP; IERC721 public SC;
    function setContracts(address metadata_, address cc_, address cs_, address mes_, address tp_, address sc_) external onlyOwner {
        CS = iCS(cs_); CC = iCC(cc_); MES = iMES(mes_); Metadata = iMetadata(metadata_);
        TP = IERC721(tp_); SC = IERC721(sc_);
    }

    // Mappings
    mapping(address => mapping(uint256 => bool)) public contractAddressToTokenUploaded;

    // Internal Write Functions
    function __yieldMintHook(address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the address.
        MES.addYieldRate(to_, _tokenYieldRate);
    }
    function __yieldTransferHook(address from_, address to_, uint256 tokenId_) internal {
        // First, we update the reward. 
        MES.updateReward(from_); MES.updateReward(to_);

        // Then, we query the token yield rate.
        iCS.Character memory _Character = CS.characters(tokenId_);
        uint256 _tokenYieldRate = CC.queryCharacterYieldRate(_Character.augments_, _Character.basePoints_, _Character.totalEquipmentBonus_);

        // Lastly, we adjust the yield rate of the addresses.
        MES.subYieldRate(from_, _tokenYieldRate); MES.addYieldRate(to_, _tokenYieldRate);
    }

    // Public Write Functions
    mapping(uint8 => bool) public renderTypeAllowed;
    function setRenderTypeAllowed(uint8 renderType_, bool bool_) external onlyOwner {
        renderTypeAllowed[renderType_] = bool_;
    }

    function beamCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);

        uint8 _race = uint8( (uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, block.difficulty, transponderId_, spaceCapsuleId_))) % 10) + 1 ); // RNG (1-10) 
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));

        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character);
        
        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply);
    }
    function uploadCharacter(uint256 transponderId_, uint256 spaceCapsuleId_, uint8 renderType_, address contractAddress_, uint256 uploadId_) public {
        require(msg.sender == TP.ownerOf(transponderId_) && msg.sender == SC.ownerOf(spaceCapsuleId_), "Unowned pair!");
        require(msg.sender == IERC721(contractAddress_).ownerOf(uploadId_), "You don't own this character!");
        require(!contractAddressToTokenUploaded[contractAddress_][uploadId_], "This character has already been uploaded!");
        require(renderTypeAllowed[renderType_], "This render type is not allowed!");

        // Burn the Transponder and Space Capsule. Then, set the character as uploaded.
        TP.transferFrom(msg.sender, address(this), transponderId_);
        SC.transferFrom(msg.sender, address(this), spaceCapsuleId_);
        contractAddressToTokenUploaded[contractAddress_][uploadId_] = true;

        uint8 _race = CS.contractToRace(contractAddress_);
        uint16 _equipmentBonus = CC.getEquipmentBaseBonus((uint16(spaceCapsuleId_)));
        
        iCS.Character memory _Character = iCS.Character(
            _race,
            renderType_,
            uint16(transponderId_),
            uint16(spaceCapsuleId_),
            0,
            0,
            _equipmentBonus
        );

        CS.createCharacter(totalSupply, _Character); 

        __yieldMintHook(msg.sender, totalSupply);
        _mint(msg.sender, totalSupply); 
    }

    // Public Write Multi-Functions
    function multiBeamCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            beamCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i]);
        }
    }
    function multiUploadCharacter(uint256[] memory transponderIds_, uint256[] memory spaceCapsuleIds_, uint8[] memory renderTypes_, address contractAddress_, uint256[] memory uploadIds_) public {
        require(transponderIds_.length == spaceCapsuleIds_.length, "Missing pairs!");
        require(transponderIds_.length == renderTypes_.length, "Missing render type!");
        require(transponderIds_.length == uploadIds_.length, "Upload IDs mismatched length!");
        for (uint256 i = 0; i < transponderIds_.length; i++) {
            uploadCharacter(transponderIds_[i], spaceCapsuleIds_[i], renderTypes_[i], contractAddress_, uploadIds_[i]);
        }
    }

    // Transfer Hooks
    function transferFrom(address from_, address to_, uint256 tokenId_) public override {
        __yieldTransferHook(from_, to_, tokenId_);
        ERC721IMigrator.transferFrom(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory bytes_) public override {
        __yieldTransferHook(from_, to_, tokenId_);
        ERC721IMigrator.safeTransferFrom(from_, to_, tokenId_, bytes_);
    }

    // Public View Functions
    function tokenURI(uint256 tokenId_) public view returns (string memory) {
        require(_exists(tokenId_), "Character does not exist!");
        return Metadata.renderMetadata(tokenId_);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":[],"name":"CC","outputs":[{"internalType":"contract iCC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CM","outputs":[{"internalType":"contract iCM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CS","outputs":[{"internalType":"contract iCS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MES","outputs":[{"internalType":"contract iMES","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Metadata","outputs":[{"internalType":"contract iMetadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TP","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOfInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"}],"name":"beamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractAddressToTokenUploaded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address[]","name":"owners_","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"}],"name":"multiBeamCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"multiSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"multiTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"transponderIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"spaceCapsuleIds_","type":"uint256[]"},{"internalType":"uint8[]","name":"renderTypes_","type":"uint8[]"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256[]","name":"uploadIds_","type":"uint256[]"}],"name":"multiUploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"renderTypeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","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":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"bytes_","type":"bytes"}],"name":"safeTransferFrom","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":[{"internalType":"address","name":"address_","type":"address"}],"name":"setCM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metadata_","type":"address"},{"internalType":"address","name":"cc_","type":"address"},{"internalType":"address","name":"cs_","type":"address"},{"internalType":"address","name":"mes_","type":"address"},{"internalType":"address","name":"tp_","type":"address"},{"internalType":"address","name":"sc_","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setRenderTypeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","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":"from_","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":"transponderId_","type":"uint256"},{"internalType":"uint256","name":"spaceCapsuleId_","type":"uint256"},{"internalType":"uint8","name":"renderType_","type":"uint8"},{"internalType":"address","name":"contractAddress_","type":"address"},{"internalType":"uint256","name":"uploadId_","type":"uint256"}],"name":"uploadCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604080518082018252600e81526d4d544d204368617261637465727360901b60208083019182528351808501909452600a8452694348415241435445525360b01b90840152600080546001600160a01b0319163317905581519192916200007c916002916200009b565b508051620000929060039060208401906200009b565b5050506200017e565b828054620000a99062000141565b90600052602060002090601f016020900481019282620000cd576000855562000118565b82601f10620000e857805160ff191683800117855562000118565b8280016001018555821562000118579182015b8281111562000118578251825591602001919060010190620000fb565b50620001269291506200012a565b5090565b5b808211156200012657600081556001016200012b565b600181811c908216806200015657607f821691505b602082108114156200017857634e487b7160e01b600052602260045260246000fd5b50919050565b6137ff806200018e6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063e2d979341161007c578063e2d9793414610591578063e985e9c5146105a4578063f2fde38b146105d2578063f487c602146105e5578063f7ea7a3d146105f857600080fd5b8063b88d4fde14610525578063b979b1a314610538578063c16ac06f1461054b578063c87b56dd1461055e578063cca3e8321461057157600080fd5b806395d89b41116100ff57806395d89b41146104b6578063978fbc3c146104be578063a22cb465146104ec578063a5eb6ff2146104ff578063b4f035a41461051257600080fd5b806370a0823114610457578063751149791461046a5780637ca510a41461047d5780637cb81fe5146104905780638da5cb5b146104a357600080fd5b80633b500607116101c957806357b3aa761161018d57806357b3aa76146103e85780635a1389111461040b5780636352211e1461041e578063639807d0146104315780636509e7761461044457600080fd5b80633b5006071461036c57806342842e0e1461037f578063438b6300146103925780634724e546146103b25780634be99cd6146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633a3473b6146103465780633ae23cc41461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b3660046131bf565b61060b565b60405190151581526020015b60405180910390f35b61027d610642565b60405161026c9190613541565b6102b361029836600461333f565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612fea565b6106d0565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612f15565b610824565b6102de610318366004612daa565b61083a565b6102b361032b36600461333f565b6005602052600090815260409020546001600160a01b031681565b6102de610354366004612e8d565b6108d4565b600a546102b3906001600160a01b031681565b6102de61037a366004613081565b61091e565b6102de61038d366004612f15565b610a22565b6103a56103a0366004612d30565b610a3d565b60405161026c91906134fd565b6102606103c0366004612d30565b60076020526000908152604090205460ff1681565b6102de6103e3366004612d30565b610b65565b6102606103f63660046133fc565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042c36600461333f565b610bb1565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610465366004612d30565b610c7c565b6102de6104783660046130fe565b610d36565b6102de61048b366004613016565b610ea8565b6102de61049e366004613371565b610fca565b6000546102b3906001600160a01b031681565b61027d61140b565b6102606104cc366004612fea565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fa366004612fb5565b611418565b600d546102b3906001600160a01b031681565b6102de610520366004613436565b611427565b6102de610533366004612f56565b611476565b6102de6105463660046133aa565b61148d565b6001546102b3906001600160a01b031681565b61027d61056c36600461333f565b611a6e565b6102e961057f366004612d30565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105b2366004612d71565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105e0366004612d30565b611b45565b6102de6105f3366004612e2c565b611b91565b6102de61060636600461333f565b611bd3565b60006380ac58cd60e01b6001600160e01b03198316148061063c5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461064f906136d2565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906136d2565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b505050505081565b60006106db82610bb1565b9050806001600160a01b0316836001600160a01b0316141561075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611c02565b505050565b61082f838383611c91565b61081f838383611f48565b6000546001600160a01b031633146108645760405162461bcd60e51b815260040161075490613554565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b60005b82518110156109175761090585858584815181106108f7576108f7613760565b602002602001015185611476565b8061090f8161370d565b9150506108d7565b5050505050565b81518351146109605760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b80518351146109a85760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b8351811015610a1c57610a0a8482815181106109c9576109c9613760565b60200260200101518483815181106109e3576109e3613760565b60200260200101518484815181106109fd576109fd613760565b6020026020010151610fca565b80610a148161370d565b9150506109ab565b50505050565b61081f83838360405180602001604052806000815250611476565b60606000610a4a83610c7c565b90506000816001600160401b03811115610a6657610a66613776565b604051908082528060200260200182016040528015610a8f578160200160208202803683370190505b50600454909150600090815b81811015610b5a576000610aae82610bb1565b6001600160a01b0316148015610ae7575083610acb600187613678565b81518110610adb57610adb613760565b60200260200101516000145b15610afa5781610af68161370d565b9250505b866001600160a01b0316610b0d82610bb1565b6001600160a01b03161415610b485780848481518110610b2f57610b2f613760565b602090810291909101015282610b448161370d565b9350505b80610b528161370d565b915050610a9b565b509195945050505050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161075490613554565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8211158015610bda57506000828152600560205260409020546001600160a01b0316155b15610c5b576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190612d54565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610cb957506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190613358565b8351855114610d785760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610dc05760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610e115760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610ea057610e8e868281518110610e3257610e32613760565b6020026020010151868381518110610e4c57610e4c613760565b6020026020010151868481518110610e6657610e66613760565b602002602001015186868681518110610e8157610e81613760565b602002602001015161148d565b80610e988161370d565b915050610e14565b505050505050565b6000546001600160a01b03163314610ed25760405162461bcd60e51b815260040161075490613554565b828114610f2d5760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b8381101561091757848482818110610f4a57610f4a613760565b90506020020135838383818110610f6357610f63613760565b9050602002016020810190610f789190612d30565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610fc28161370d565b915050610f30565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612d54565b6001600160a01b0316336001600160a01b03161480156110f25750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190612d54565b6001600160a01b0316336001600160a01b0316145b61112e5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661118f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906111c39033903090889060040161349c565b600060405180830381600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506112299033903090879060040161349c565b600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c6112bc9190613728565b6112c7906001613660565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561131457600080fd5b505afa158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190613324565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd9926113c192869101613579565b600060405180830381600087803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b505050506113ff33600454611fcf565b610ea0336004546121b6565b6003805461064f906136d2565b611423338383612454565b5050565b6000546001600160a01b031633146114515760405162461bcd60e51b815260040161075490613554565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b611481848484611c91565b610a1c84848484612557565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114d157600080fd5b505afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612d54565b6001600160a01b0316336001600160a01b03161480156115b55750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561156857600080fd5b505afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612d54565b6001600160a01b0316336001600160a01b0316145b6115f15760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612d54565b6001600160a01b0316336001600160a01b0316146116c95760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff161561174f5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff808416600090815260116020526040902054166117b05760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906117e490339030908a9060040161349c565b600060405180830381600087803b1580156117fe57600080fd5b505af1158015611812573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd915061184a9033903090899060040161349c565b600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f9060240160206040518083038186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119209190613419565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613324565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a1a92869101613579565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50505050611a5833600454611fcf565b611a64336004546121b6565b5050505050505050565b6060611a79826126b5565b611ac55760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b039091169063755350289060240160006040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063c91908101906131f9565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b815260040161075490613554565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610a1c57611bc18484848481518110611bb457611bb4613760565b6020026020010151610824565b80611bcb8161370d565b915050611b94565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b815260040161075490613554565b600455565b6000818152600860205260409020546001600160a01b0383811691161461142357600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c5882610bb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611d3757600080fd5b505af1158015611d4b573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613358565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611ec357600080fd5b505af1158015611ed7573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050505050505050565b611f5233826126e6565b611fc45760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f8383836127e1565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b15801561211a57600080fd5b505afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613358565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b1580156121a257600080fd5b505af1158015611a64573d6000803e3d6000fd5b6001600160a01b0382166122235760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061222e82610bb1565b6001600160a01b03161461229b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff1615612308576001600160a01b03821660009081526006602052604081208054916122fe8361370d565b91905055506123c0565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561234d57600080fd5b505afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190613358565b612390906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006123d08361370d565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161244891815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b031614156124ea5760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612562848484610824565b6001600160a01b0383163b15610a1c576000836001600160a01b031663150b7a023387868660405160240161259a94939291906134c0565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516125d39190613480565b600060405180830381855afa9150503d806000811461260e576040519150601f19603f3d011682016040523d82523d6000602084013e612613565b606091505b5091505060008180602001905181019061262d91906131dc565b9050630a85bd0160e11b6001600160e01b0319821614610ea05760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b6000610cbb82116126c857506001919050565b506000908152600560205260409020546001600160a01b0316151590565b6000806126f283610bb1565b90506001600160a01b0381166127705760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b031614806127a957506000838152600860205260409020546001600160a01b038581169116145b806127d957506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6127ea81610bb1565b6001600160a01b0316836001600160a01b031614612872576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128e75760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b03161561292157600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff1615612992576001600160a01b0383166000908152600660205260408120805491612988836136bb565b9190505550612a4a565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a082319060240160206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613358565b612a1a9190613678565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a99576001600160a01b0382166000908152600660205260408120805491612a8f8361370d565b9190505550612b51565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015612ade57600080fd5b505afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b169190613358565b612b21906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008083601f840112612ba957600080fd5b5081356001600160401b03811115612bc057600080fd5b6020830191508360208260051b8501011115612bdb57600080fd5b9250929050565b600082601f830112612bf357600080fd5b81356020612c08612c0383613616565b6135e6565b80838252828201915082860187848660051b8901011115612c2857600080fd5b60005b85811015612c4757813584529284019290840190600101612c2b565b5090979650505050505050565b600082601f830112612c6557600080fd5b81356020612c75612c0383613616565b80838252828201915082860187848660051b8901011115612c9557600080fd5b60005b85811015612c47578135612cab816137ba565b84529284019290840190600101612c98565b80358015158114610c7757600080fd5b600082601f830112612cde57600080fd5b8135612cec612c0382613639565b818152846020838601011115612d0157600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff81168114610c7757600080fd5b600060208284031215612d4257600080fd5b8135612d4d8161378c565b9392505050565b600060208284031215612d6657600080fd5b8151612d4d8161378c565b60008060408385031215612d8457600080fd5b8235612d8f8161378c565b91506020830135612d9f8161378c565b809150509250929050565b60008060008060008060c08789031215612dc357600080fd5b8635612dce8161378c565b95506020870135612dde8161378c565b94506040870135612dee8161378c565b93506060870135612dfe8161378c565b92506080870135612e0e8161378c565b915060a0870135612e1e8161378c565b809150509295509295509295565b600080600060608486031215612e4157600080fd5b8335612e4c8161378c565b92506020840135612e5c8161378c565b915060408401356001600160401b03811115612e7757600080fd5b612e8386828701612be2565b9150509250925092565b60008060008060808587031215612ea357600080fd5b8435612eae8161378c565b93506020850135612ebe8161378c565b925060408501356001600160401b0380821115612eda57600080fd5b612ee688838901612be2565b93506060870135915080821115612efc57600080fd5b50612f0987828801612ccd565b91505092959194509250565b600080600060608486031215612f2a57600080fd5b8335612f358161378c565b92506020840135612f458161378c565b929592945050506040919091013590565b60008060008060808587031215612f6c57600080fd5b8435612f778161378c565b93506020850135612f878161378c565b92506040850135915060608501356001600160401b03811115612fa957600080fd5b612f0987828801612ccd565b60008060408385031215612fc857600080fd5b8235612fd38161378c565b9150612fe160208401612cbd565b90509250929050565b60008060408385031215612ffd57600080fd5b82356130088161378c565b946020939093013593505050565b6000806000806040858703121561302c57600080fd5b84356001600160401b038082111561304357600080fd5b61304f88838901612b97565b9096509450602087013591508082111561306857600080fd5b5061307587828801612b97565b95989497509550505050565b60008060006060848603121561309657600080fd5b83356001600160401b03808211156130ad57600080fd5b6130b987838801612be2565b945060208601359150808211156130cf57600080fd5b6130db87838801612be2565b935060408601359150808211156130f157600080fd5b50612e8386828701612c54565b600080600080600060a0868803121561311657600080fd5b85356001600160401b038082111561312d57600080fd5b61313989838a01612be2565b9650602088013591508082111561314f57600080fd5b61315b89838a01612be2565b9550604088013591508082111561317157600080fd5b61317d89838a01612c54565b94506060880135915061318f8261378c565b909250608087013590808211156131a557600080fd5b506131b288828901612be2565b9150509295509295909350565b6000602082840312156131d157600080fd5b8135612d4d816137a4565b6000602082840312156131ee57600080fd5b8151612d4d816137a4565b60006020828403121561320b57600080fd5b81516001600160401b0381111561322157600080fd5b8201601f8101841361323257600080fd5b8051613240612c0382613639565b81815285602083850101111561325557600080fd5b61326682602083016020860161368f565b95945050505050565b600060e0828403121561328157600080fd5b60405160e081018181106001600160401b03821117156132a3576132a3613776565b60405282516132b1816137ba565b815260208301516132c1816137ba565b60208201526132d260408401612d1e565b60408201526132e360608401612d1e565b606082015260808301516132f6816137ba565b608082015261330760a08401612d1e565b60a082015261331860c08401612d1e565b60c08201529392505050565b60006020828403121561333657600080fd5b612d4d82612d1e565b60006020828403121561335157600080fd5b5035919050565b60006020828403121561336a57600080fd5b5051919050565b60008060006060848603121561338657600080fd5b8335925060208401359150604084013561339f816137ba565b809150509250925092565b600080600080600060a086880312156133c257600080fd5b853594506020860135935060408601356133db816137ba565b925060608601356133eb8161378c565b949793965091946080013592915050565b60006020828403121561340e57600080fd5b8135612d4d816137ba565b60006020828403121561342b57600080fd5b8151612d4d816137ba565b6000806040838503121561344957600080fd5b8235612fd3816137ba565b6000815180845261346c81602086016020860161368f565b601f01601f19169290920160200192915050565b6000825161349281846020870161368f565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134f390830184613454565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353557835183529284019291840191600101613519565b50909695505050505050565b602081526000612d4d6020830184613454565b6020808252600b908201526a4f776e61626c653a204e4f60a81b604082015260600190565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b604051601f8201601f191681016001600160401b038111828210171561360e5761360e613776565b604052919050565b60006001600160401b0382111561362f5761362f613776565b5060051b60200190565b60006001600160401b0382111561365257613652613776565b50601f01601f191660200190565b600082198211156136735761367361374a565b500190565b60008282101561368a5761368a61374a565b500390565b60005b838110156136aa578181015183820152602001613692565b83811115610a1c5750506000910152565b6000816136ca576136ca61374a565b506000190190565b600181811c908216806136e657607f821691505b6020821081141561370757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137215761372161374a565b5060010190565b60008261374557634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146137a157600080fd5b50565b6001600160e01b0319811681146137a157600080fd5b60ff811681146137a157600080fdfea2646970667358221220323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe764736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063b88d4fde116100b8578063e2d979341161007c578063e2d9793414610591578063e985e9c5146105a4578063f2fde38b146105d2578063f487c602146105e5578063f7ea7a3d146105f857600080fd5b8063b88d4fde14610525578063b979b1a314610538578063c16ac06f1461054b578063c87b56dd1461055e578063cca3e8321461057157600080fd5b806395d89b41116100ff57806395d89b41146104b6578063978fbc3c146104be578063a22cb465146104ec578063a5eb6ff2146104ff578063b4f035a41461051257600080fd5b806370a0823114610457578063751149791461046a5780637ca510a41461047d5780637cb81fe5146104905780638da5cb5b146104a357600080fd5b80633b500607116101c957806357b3aa761161018d57806357b3aa76146103e85780635a1389111461040b5780636352211e1461041e578063639807d0146104315780636509e7761461044457600080fd5b80633b5006071461036c57806342842e0e1461037f578063438b6300146103925780634724e546146103b25780634be99cd6146103d557600080fd5b806323b872dd1161021057806323b872dd146102f75780632463a55a1461030a578063383505411461031d5780633a3473b6146103465780633ae23cc41461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102cb57806318160ddd146102e0575b600080fd5b61026061025b3660046131bf565b61060b565b60405190151581526020015b60405180910390f35b61027d610642565b60405161026c9190613541565b6102b361029836600461333f565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102de6102d9366004612fea565b6106d0565b005b6102e960045481565b60405190815260200161026c565b6102de610305366004612f15565b610824565b6102de610318366004612daa565b61083a565b6102b361032b36600461333f565b6005602052600090815260409020546001600160a01b031681565b6102de610354366004612e8d565b6108d4565b600a546102b3906001600160a01b031681565b6102de61037a366004613081565b61091e565b6102de61038d366004612f15565b610a22565b6103a56103a0366004612d30565b610a3d565b60405161026c91906134fd565b6102606103c0366004612d30565b60076020526000908152604090205460ff1681565b6102de6103e3366004612d30565b610b65565b6102606103f63660046133fc565b60116020526000908152604090205460ff1681565b600f546102b3906001600160a01b031681565b6102b361042c36600461333f565b610bb1565b600e546102b3906001600160a01b031681565b600b546102b3906001600160a01b031681565b6102e9610465366004612d30565b610c7c565b6102de6104783660046130fe565b610d36565b6102de61048b366004613016565b610ea8565b6102de61049e366004613371565b610fca565b6000546102b3906001600160a01b031681565b61027d61140b565b6102606104cc366004612fea565b601060209081526000928352604080842090915290825290205460ff1681565b6102de6104fa366004612fb5565b611418565b600d546102b3906001600160a01b031681565b6102de610520366004613436565b611427565b6102de610533366004612f56565b611476565b6102de6105463660046133aa565b61148d565b6001546102b3906001600160a01b031681565b61027d61056c36600461333f565b611a6e565b6102e961057f366004612d30565b60066020526000908152604090205481565b600c546102b3906001600160a01b031681565b6102606105b2366004612d71565b600960209081526000928352604080842090915290825290205460ff1681565b6102de6105e0366004612d30565b611b45565b6102de6105f3366004612e2c565b611b91565b6102de61060636600461333f565b611bd3565b60006380ac58cd60e01b6001600160e01b03198316148061063c5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6002805461064f906136d2565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906136d2565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b505050505081565b60006106db82610bb1565b9050806001600160a01b0316836001600160a01b0316141561075d5760405162461bcd60e51b815260206004820152603060248201527f455243373231494d69677261746f723a20617070726f766528292063616e6e6f60448201526f7420617070726f7665206f776e65722160801b60648201526084015b60405180910390fd5b336001600160a01b038216148061079757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b6108155760405162461bcd60e51b815260206004820152604360248201527f455243373231494d69677261746f723a20617070726f766528292043616c6c6560448201527f72206973206e6f74206f776e6572206f66206973417070726f766564466f72416064820152626c6c2160e81b608482015260a401610754565b61081f8383611c02565b505050565b61082f838383611c91565b61081f838383611f48565b6000546001600160a01b031633146108645760405162461bcd60e51b815260040161075490613554565b600a80546001600160a01b03199081166001600160a01b0396871617909155600b8054821696861696909617909555600c8054861693851693909317909255600d8054851695841695909517909455600e8054841694831694909417909355600f80549092169216919091179055565b60005b82518110156109175761090585858584815181106108f7576108f7613760565b602002602001015185611476565b8061090f8161370d565b9150506108d7565b5050505050565b81518351146109605760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b80518351146109a85760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b60005b8351811015610a1c57610a0a8482815181106109c9576109c9613760565b60200260200101518483815181106109e3576109e3613760565b60200260200101518484815181106109fd576109fd613760565b6020026020010151610fca565b80610a148161370d565b9150506109ab565b50505050565b61081f83838360405180602001604052806000815250611476565b60606000610a4a83610c7c565b90506000816001600160401b03811115610a6657610a66613776565b604051908082528060200260200182016040528015610a8f578160200160208202803683370190505b50600454909150600090815b81811015610b5a576000610aae82610bb1565b6001600160a01b0316148015610ae7575083610acb600187613678565b81518110610adb57610adb613760565b60200260200101516000145b15610afa5781610af68161370d565b9250505b866001600160a01b0316610b0d82610bb1565b6001600160a01b03161415610b485780848481518110610b2f57610b2f613760565b602090810291909101015282610b448161370d565b9350505b80610b528161370d565b915050610a9b565b509195945050505050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161075490613554565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8211158015610bda57506000828152600560205260409020546001600160a01b0316155b15610c5b576001546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190612d54565b506000908152600560205260409020546001600160a01b031690565b919050565b6001600160a01b03811660009081526007602052604081205460ff1615610cb957506001600160a01b031660009081526006602052604090205490565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190613358565b8351855114610d785760405162461bcd60e51b815260206004820152600e60248201526d4d697373696e672070616972732160901b6044820152606401610754565b8251855114610dc05760405162461bcd60e51b81526020600482015260146024820152734d697373696e672072656e64657220747970652160601b6044820152606401610754565b8051855114610e115760405162461bcd60e51b815260206004820152601d60248201527f55706c6f616420494473206d69736d617463686564206c656e677468210000006044820152606401610754565b60005b8551811015610ea057610e8e868281518110610e3257610e32613760565b6020026020010151868381518110610e4c57610e4c613760565b6020026020010151868481518110610e6657610e66613760565b602002602001015186868681518110610e8157610e81613760565b602002602001015161148d565b80610e988161370d565b915050610e14565b505050505050565b6000546001600160a01b03163314610ed25760405162461bcd60e51b815260040161075490613554565b828114610f2d5760405162461bcd60e51b8152602060048201526024808201527f696e697469616c697a6528293a206172726179206c656e677468206d69736d616044820152637463682160e01b6064820152608401610754565b60005b8381101561091757848482818110610f4a57610f4a613760565b90506020020135838383818110610f6357610f63613760565b9050602002016020810190610f789190612d30565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610fc28161370d565b915050610f30565b600e546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612d54565b6001600160a01b0316336001600160a01b03161480156110f25750600f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190612d54565b6001600160a01b0316336001600160a01b0316145b61112e5760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b60ff8082166000908152601160205260409020541661118f5760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906111c39033903090889060040161349c565b600060405180830381600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd91506112299033903090879060040161349c565b600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff193360601b166020820152426034820152446054820152607481018690526094810185905260009250600a915060b4016040516020818303038152906040528051906020012060001c6112bc9190613728565b6112c7906001613660565b600b5460405163813fd7fd60e01b815261ffff861660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561131457600080fd5b505afa158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190613324565b6040805160e08101825260ff80861682528616602082015261ffff80891682840152878116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd9926113c192869101613579565b600060405180830381600087803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b505050506113ff33600454611fcf565b610ea0336004546121b6565b6003805461064f906136d2565b611423338383612454565b5050565b6000546001600160a01b031633146114515760405162461bcd60e51b815260040161075490613554565b60ff919091166000908152601160205260409020805460ff1916911515919091179055565b611481848484611c91565b610a1c84848484612557565b600e546040516331a9108f60e11b8152600481018790526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114d157600080fd5b505afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612d54565b6001600160a01b0316336001600160a01b03161480156115b55750600f546040516331a9108f60e11b8152600481018690526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561156857600080fd5b505afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612d54565b6001600160a01b0316336001600160a01b0316145b6115f15760405162461bcd60e51b815260206004820152600d60248201526c556e6f776e656420706169722160981b6044820152606401610754565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612d54565b6001600160a01b0316336001600160a01b0316146116c95760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206f776e207468697320636861726163746572210000006044820152606401610754565b6001600160a01b038216600090815260106020908152604080832084845290915290205460ff161561174f5760405162461bcd60e51b815260206004820152602960248201527f54686973206368617261637465722068617320616c7265616479206265656e2060448201526875706c6f616465642160b81b6064820152608401610754565b60ff808416600090815260116020526040902054166117b05760405162461bcd60e51b815260206004820181905260248201527f546869732072656e6465722074797065206973206e6f7420616c6c6f776564216044820152606401610754565b600e546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906117e490339030908a9060040161349c565b600060405180830381600087803b1580156117fe57600080fd5b505af1158015611812573d6000803e3d6000fd5b5050600f546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd915061184a9033903090899060040161349c565b600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505050506001600160a01b038281166000818152601060209081526040808320868452909152808220805460ff19166001179055600a549051630da46c0f60e01b8152600481019390935290921690630da46c0f9060240160206040518083038186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119209190613419565b600b5460405163813fd7fd60e01b815261ffff881660048201529192506000916001600160a01b039091169063813fd7fd9060240160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613324565b6040805160e08101825260ff80861682528816602082015261ffff808b1682840152898116606083015260006080830181905260a0830152831660c0820152600a5460048054935163e8629cd960e01b815294955091936001600160a01b039091169263e8629cd992611a1a92869101613579565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50505050611a5833600454611fcf565b611a64336004546121b6565b5050505050505050565b6060611a79826126b5565b611ac55760405162461bcd60e51b815260206004820152601960248201527f43686172616374657220646f6573206e6f7420657869737421000000000000006044820152606401610754565b600d54604051630eaa6a0560e31b8152600481018490526001600160a01b039091169063755350289060240160006040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063c91908101906131f9565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b815260040161075490613554565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610a1c57611bc18484848481518110611bb457611bb4613760565b6020026020010151610824565b80611bcb8161370d565b915050611b94565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b815260040161075490613554565b600455565b6000818152600860205260409020546001600160a01b0383811691161461142357600081815260086020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c5882610bb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600c5460405163632447c960e01b81526001600160a01b0385811660048301529091169063632447c990602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050600c5460405163632447c960e01b81526001600160a01b038681166004830152909116925063632447c99150602401600060405180830381600087803b158015611d3757600080fd5b505af1158015611d4b573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613358565b600c54604051631fa86bd160e31b81526001600160a01b0388811660048301526024820184905292935091169063fd435e8890604401600060405180830381600087803b158015611ec357600080fd5b505af1158015611ed7573d6000803e3d6000fd5b5050600c5460405163b5862c2560e01b81526001600160a01b03888116600483015260248201869052909116925063b5862c259150604401600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050505050505050565b611f5233826126e6565b611fc45760405162461bcd60e51b815260206004820152603b60248201527f455243373231494d69677261746f723a207472616e7366657246726f6d28292060448201527f5f6973417070726f7665644f724f776e6572203d2066616c73652100000000006064820152608401610754565b61081f8383836127e1565b600c5460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b5050600a54604051634810bc5960e01b815260048101859052600093506001600160a01b039091169150634810bc599060240160e06040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad919061326f565b600b54608082015160a083015160c0840151604051633616171160e01b815260ff909316600484015261ffff91821660248401521660448201529192506000916001600160a01b039091169063361617119060640160206040518083038186803b15801561211a57600080fd5b505afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613358565b600c5460405163b5862c2560e01b81526001600160a01b0387811660048301526024820184905292935091169063b5862c2590604401600060405180830381600087803b1580156121a257600080fd5b505af1158015611a64573d6000803e3d6000fd5b6001600160a01b0382166122235760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e742829204d696e7420746f60448201526d205a65726f20416464726573732160901b6064820152608401610754565b600061222e82610bb1565b6001600160a01b03161461229b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231494d69677261746f723a205f6d696e74282920546f6b656e206160448201526d6c7265616479204578697374732160901b6064820152608401610754565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600790915290205460ff1615612308576001600160a01b03821660009081526006602052604081208054916122fe8361370d565b91905055506123c0565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561234d57600080fd5b505afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190613358565b612390906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b600480549060006123d08361370d565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161244891815260200190565b60405180910390a25050565b816001600160a01b0316836001600160a01b031614156124ea5760405162461bcd60e51b815260206004820152604560248201527f455243373231494d69677261746f723a205f736574417070726f76616c466f7260448201527f416c6c2829204f776e6572206d757374206e6f7420626520746865204f70657260648201526461746f722160d81b608482015260a401610754565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612562848484610824565b6001600160a01b0383163b15610a1c576000836001600160a01b031663150b7a023387868660405160240161259a94939291906134c0565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516125d39190613480565b600060405180830381855afa9150503d806000811461260e576040519150601f19603f3d011682016040523d82523d6000602084013e612613565b606091505b5091505060008180602001905181019061262d91906131dc565b9050630a85bd0160e11b6001600160e01b0319821614610ea05760405162461bcd60e51b815260206004820152603d60248201527f455243373231494d69677261746f723a20736166655472616e7366657246726f60448201527f6d282920746f5f206e6f742045524337323152656365697661626c65210000006064820152608401610754565b6000610cbb82116126c857506001919050565b506000908152600560205260409020546001600160a01b0316151590565b6000806126f283610bb1565b90506001600160a01b0381166127705760405162461bcd60e51b815260206004820152603c60248201527f455243373231494d69677261746f723a205f6973417070726f7665644f724f7760448201527f6e65722829204f776e6572206973205a65726f204164647265737321000000006064820152608401610754565b806001600160a01b0316846001600160a01b031614806127a957506000838152600860205260409020546001600160a01b038581169116145b806127d957506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6127ea81610bb1565b6001600160a01b0316836001600160a01b031614612872576040805162461bcd60e51b81526020600482015260248101919091527f455243373231494d69677261746f723a205f7472616e7366657228292054726160448201527f6e736665722066726f6d5f20213d206f776e65724f6628746f6b656e49645f296064820152608401610754565b6001600160a01b0382166128e75760405162461bcd60e51b815260206004820152603660248201527f455243373231494d69677261746f723a205f7472616e736665722829205472616044820152756e7366657220746f205a65726f20416464726573732160501b6064820152608401610754565b6000818152600860205260409020546001600160a01b03161561292157600081815260086020526040902080546001600160a01b03191690555b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600790915290205460ff1615612992576001600160a01b0383166000908152600660205260408120805491612988836136bb565b9190505550612a4a565b600180546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a082319060240160206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613358565b612a1a9190613678565b6001600160a01b0384166000908152600660209081526040808320939093556007905220805460ff191660011790555b6001600160a01b03821660009081526007602052604090205460ff1615612a99576001600160a01b0382166000908152600660205260408120805491612a8f8361370d565b9190505550612b51565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b158015612ade57600080fd5b505afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b169190613358565b612b21906001613660565b6001600160a01b0383166000908152600660209081526040808320939093556007905220805460ff191660011790555b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008083601f840112612ba957600080fd5b5081356001600160401b03811115612bc057600080fd5b6020830191508360208260051b8501011115612bdb57600080fd5b9250929050565b600082601f830112612bf357600080fd5b81356020612c08612c0383613616565b6135e6565b80838252828201915082860187848660051b8901011115612c2857600080fd5b60005b85811015612c4757813584529284019290840190600101612c2b565b5090979650505050505050565b600082601f830112612c6557600080fd5b81356020612c75612c0383613616565b80838252828201915082860187848660051b8901011115612c9557600080fd5b60005b85811015612c47578135612cab816137ba565b84529284019290840190600101612c98565b80358015158114610c7757600080fd5b600082601f830112612cde57600080fd5b8135612cec612c0382613639565b818152846020838601011115612d0157600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff81168114610c7757600080fd5b600060208284031215612d4257600080fd5b8135612d4d8161378c565b9392505050565b600060208284031215612d6657600080fd5b8151612d4d8161378c565b60008060408385031215612d8457600080fd5b8235612d8f8161378c565b91506020830135612d9f8161378c565b809150509250929050565b60008060008060008060c08789031215612dc357600080fd5b8635612dce8161378c565b95506020870135612dde8161378c565b94506040870135612dee8161378c565b93506060870135612dfe8161378c565b92506080870135612e0e8161378c565b915060a0870135612e1e8161378c565b809150509295509295509295565b600080600060608486031215612e4157600080fd5b8335612e4c8161378c565b92506020840135612e5c8161378c565b915060408401356001600160401b03811115612e7757600080fd5b612e8386828701612be2565b9150509250925092565b60008060008060808587031215612ea357600080fd5b8435612eae8161378c565b93506020850135612ebe8161378c565b925060408501356001600160401b0380821115612eda57600080fd5b612ee688838901612be2565b93506060870135915080821115612efc57600080fd5b50612f0987828801612ccd565b91505092959194509250565b600080600060608486031215612f2a57600080fd5b8335612f358161378c565b92506020840135612f458161378c565b929592945050506040919091013590565b60008060008060808587031215612f6c57600080fd5b8435612f778161378c565b93506020850135612f878161378c565b92506040850135915060608501356001600160401b03811115612fa957600080fd5b612f0987828801612ccd565b60008060408385031215612fc857600080fd5b8235612fd38161378c565b9150612fe160208401612cbd565b90509250929050565b60008060408385031215612ffd57600080fd5b82356130088161378c565b946020939093013593505050565b6000806000806040858703121561302c57600080fd5b84356001600160401b038082111561304357600080fd5b61304f88838901612b97565b9096509450602087013591508082111561306857600080fd5b5061307587828801612b97565b95989497509550505050565b60008060006060848603121561309657600080fd5b83356001600160401b03808211156130ad57600080fd5b6130b987838801612be2565b945060208601359150808211156130cf57600080fd5b6130db87838801612be2565b935060408601359150808211156130f157600080fd5b50612e8386828701612c54565b600080600080600060a0868803121561311657600080fd5b85356001600160401b038082111561312d57600080fd5b61313989838a01612be2565b9650602088013591508082111561314f57600080fd5b61315b89838a01612be2565b9550604088013591508082111561317157600080fd5b61317d89838a01612c54565b94506060880135915061318f8261378c565b909250608087013590808211156131a557600080fd5b506131b288828901612be2565b9150509295509295909350565b6000602082840312156131d157600080fd5b8135612d4d816137a4565b6000602082840312156131ee57600080fd5b8151612d4d816137a4565b60006020828403121561320b57600080fd5b81516001600160401b0381111561322157600080fd5b8201601f8101841361323257600080fd5b8051613240612c0382613639565b81815285602083850101111561325557600080fd5b61326682602083016020860161368f565b95945050505050565b600060e0828403121561328157600080fd5b60405160e081018181106001600160401b03821117156132a3576132a3613776565b60405282516132b1816137ba565b815260208301516132c1816137ba565b60208201526132d260408401612d1e565b60408201526132e360608401612d1e565b606082015260808301516132f6816137ba565b608082015261330760a08401612d1e565b60a082015261331860c08401612d1e565b60c08201529392505050565b60006020828403121561333657600080fd5b612d4d82612d1e565b60006020828403121561335157600080fd5b5035919050565b60006020828403121561336a57600080fd5b5051919050565b60008060006060848603121561338657600080fd5b8335925060208401359150604084013561339f816137ba565b809150509250925092565b600080600080600060a086880312156133c257600080fd5b853594506020860135935060408601356133db816137ba565b925060608601356133eb8161378c565b949793965091946080013592915050565b60006020828403121561340e57600080fd5b8135612d4d816137ba565b60006020828403121561342b57600080fd5b8151612d4d816137ba565b6000806040838503121561344957600080fd5b8235612fd3816137ba565b6000815180845261346c81602086016020860161368f565b601f01601f19169290920160200192915050565b6000825161349281846020870161368f565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134f390830184613454565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353557835183529284019291840191600101613519565b50909695505050505050565b602081526000612d4d6020830184613454565b6020808252600b908201526a4f776e61626c653a204e4f60a81b604082015260600190565b60006101008201905083825260ff835116602083015260ff6020840151166040830152604083015161ffff808216606085015280606086015116608085015260ff60808601511660a08501528060a08601511660c08501528060c08601511660e085015250509392505050565b604051601f8201601f191681016001600160401b038111828210171561360e5761360e613776565b604052919050565b60006001600160401b0382111561362f5761362f613776565b5060051b60200190565b60006001600160401b0382111561365257613652613776565b50601f01601f191660200190565b600082198211156136735761367361374a565b500190565b60008282101561368a5761368a61374a565b500390565b60005b838110156136aa578181015183820152602001613692565b83811115610a1c5750506000910152565b6000816136ca576136ca61374a565b506000190190565b600181811c908216806136e657607f821691505b6020821081141561370757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137215761372161374a565b5060010190565b60008261374557634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146137a157600080fd5b50565b6001600160e01b0319811681146137a157600080fd5b60ff811681146137a157600080fdfea2646970667358221220323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe764736f6c63430008070033

Deployed Bytecode Sourcemap

15979:6628:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10600:159;;;;;;:::i;:::-;;:::i;:::-;;;18340:14:1;;18333:22;18315:41;;18303:2;18288:18;10600:159:0;;;;;;;;1479:18;;;:::i;:::-;;;;;;;:::i;2118:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2118:46:0;;;;;;-1:-1:-1;;;;;16342:32:1;;;16324:51;;16312:2;16297:18;2118:46:0;16178:203:1;8328:485:0;;;;;;:::i;:::-;;:::i;:::-;;1769:26;;;;;;;;;28222:25:1;;;28210:2;28195:18;1769:26:0;28076:177:1;21916:205:0;;;;;;:::i;:::-;;:::i;16241:271::-;;;;;;:::i;:::-;;:::i;1802:43::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1802:43:0;;;10303:263;;;;;;:::i;:::-;;:::i;16119:13::-;;;;;-1:-1:-1;;;;;16119:13:0;;;20735:478;;;;;;:::i;:::-;;:::i;9867:148::-;;;;;;:::i;:::-;;:::i;10804:829::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1995:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1352:89;;;;;;:::i;:::-;;:::i;17834:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16217:17;;;;;-1:-1:-1;;;;;16217:17:0;;;2958:584;;;;;;:::i;:::-;;:::i;16198:17::-;;;;;-1:-1:-1;;;;;16198:17:0;;;16134:13;;;;;-1:-1:-1;;;;;16134:13:0;;;3581:452;;;;;;:::i;:::-;;:::i;21219:666::-;;;;;;:::i;:::-;;:::i;2562:359::-;;;;;;:::i;:::-;;:::i;18033:1184::-;;;;;;:::i;:::-;;:::i;239:20::-;;;;;-1:-1:-1;;;;;239:20:0;;;1499;;;:::i;16537:82::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8896:148;;;;;;:::i;:::-;;:::i;16166:25::-;;;;;-1:-1:-1;;;;;16166:25:0;;;17888:137;;;;;;:::i;:::-;;:::i;22127:242::-;;;;;;:::i;:::-;;:::i;19223:1467::-;;;;;;:::i;:::-;;:::i;1332:13::-;;;;;-1:-1:-1;;;;;1332:13:0;;;22407:197;;;;;;:::i;:::-;;:::i;1852:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16149:15;;;;;-1:-1:-1;;;;;16149:15:0;;;2171:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;385:108;;;;;;:::i;:::-;;:::i;10069:228::-;;;;;;:::i;:::-;;:::i;2337:111::-;;;;;;:::i;:::-;;:::i;10600:159::-;10669:4;-1:-1:-1;;;;;;;;;10694:26:0;;;;:56;;-1:-1:-1;;;;;;;;;;10724:26:0;;;10694:56;10686:65;10600:159;-1:-1:-1;;10600:159:0:o;1479:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8328:485::-;8402:14;8419:17;8427:8;8419:7;:17::i;:::-;8402:34;;8462:6;-1:-1:-1;;;;;8455:13:0;:3;-1:-1:-1;;;;;8455:13:0;;;8447:74;;;;-1:-1:-1;;;8447:74:0;;25212:2:1;8447:74:0;;;25194:21:1;25251:2;25231:18;;;25224:30;25290:34;25270:18;;;25263:62;-1:-1:-1;;;25341:18:1;;;25334:46;25397:19;;8447:74:0;;;;;;;;;8540:10;-1:-1:-1;;;;;8540:20:0;;;;:109;;-1:-1:-1;;;;;;8613:24:0;;;;;;:16;:24;;;;;;;;8638:10;8613:36;;;;;;;;;;8540:109;8532:239;;;;-1:-1:-1;;;8532:239:0;;22571:2:1;8532:239:0;;;22553:21:1;22610:2;22590:18;;;22583:30;22649:34;22629:18;;;22622:62;22720:34;22700:18;;;22693:62;-1:-1:-1;;;22771:19:1;;;22764:34;22815:19;;8532:239:0;22369:471:1;8532:239:0;8782:23;8791:3;8796:8;8782;:23::i;:::-;8391:422;8328:485;;:::o;21916:205::-;22011:41;22031:5;22038:3;22043:8;22011:19;:41::i;:::-;22063:50;22092:5;22099:3;22104:8;22063:28;:50::i;16241:271::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;16378:2:::1;:13:::0;;-1:-1:-1;;;;;;16378:13:0;;::::1;-1:-1:-1::0;;;;;16378:13:0;;::::1;;::::0;;;16393:2:::1;:13:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16408:3:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16426:8:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16468:2:::1;:17:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16487:2:::1;:17:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;16241:271::o;10303:263::-;10441:9;10436:123;10460:9;:16;10456:1;:20;10436:123;;;10498:49;10515:5;10522:3;10527:9;10537:1;10527:12;;;;;;;;:::i;:::-;;;;;;;10541:5;10498:16;:49::i;:::-;10478:3;;;;:::i;:::-;;;;10436:123;;;;10303:263;;;;:::o;20735:478::-;20913:16;:23;20887:15;:22;:49;20879:76;;;;-1:-1:-1;;;20879:76:0;;21798:2:1;20879:76:0;;;21780:21:1;21837:2;21817:18;;;21810:30;-1:-1:-1;;;21856:18:1;;;21849:44;21910:18;;20879:76:0;21596:338:1;20879:76:0;21000:12;:19;20974:15;:22;:45;20966:78;;;;-1:-1:-1;;;20966:78:0;;23405:2:1;20966:78:0;;;23387:21:1;23444:2;23424:18;;;23417:30;-1:-1:-1;;;23463:18:1;;;23456:50;23523:18;;20966:78:0;23203:344:1;20966:78:0;21060:9;21055:151;21079:15;:22;21075:1;:26;21055:151;;;21123:71;21137:15;21153:1;21137:18;;;;;;;;:::i;:::-;;;;;;;21157:16;21174:1;21157:19;;;;;;;;:::i;:::-;;;;;;;21178:12;21191:1;21178:15;;;;;;;;:::i;:::-;;;;;;;21123:13;:71::i;:::-;21103:3;;;;:::i;:::-;;;;21055:151;;;;20735:478;;;:::o;9867:148::-;9965:42;9982:5;9989:3;9994:8;9965:42;;;;;;;;;;;;:16;:42::i;10804:829::-;10874:16;10903;10922:19;10932:8;10922:9;:19::i;:::-;10903:38;;10952:24;10993:8;-1:-1:-1;;;;;10979:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10979:23:0;-1:-1:-1;11061:11:0;;10952:50;;-1:-1:-1;11013:14:0;;;11083:518;11107:12;11103:1;:16;11083:518;;;11243:3;11221:10;11229:1;11221:7;:10::i;:::-;-1:-1:-1;;;;;11221:26:0;;:56;;;;-1:-1:-1;11251:7:0;11259:12;11270:1;11259:8;:12;:::i;:::-;11251:21;;;;;;;;:::i;:::-;;;;;;;11276:1;11251:26;11221:56;11217:111;;;11298:14;;;;:::i;:::-;;;;11217:111;11411:8;-1:-1:-1;;;;;11397:22:0;:10;11405:1;11397:7;:10::i;:::-;-1:-1:-1;;;;;11397:22:0;;11393:197;;;11506:1;11488:7;11496:6;11488:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;11566:8;;;;:::i;:::-;;;;11393:197;11121:3;;;;:::i;:::-;;;;11083:518;;;-1:-1:-1;11618:7:0;;10804:829;-1:-1:-1;;;;;10804:829:0:o;1352:89::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;1415:2:::1;:18:::0;;-1:-1:-1;;;;;;1415:18:0::1;-1:-1:-1::0;;;;;1415:18:0;;;::::1;::::0;;;::::1;::::0;;1352:89::o;2958:584::-;3014:7;3164:4;3152:8;:16;;:54;;;;-1:-1:-1;3202:3:0;3172:18;;;:8;:18;;;;;;-1:-1:-1;;;;;3172:18:0;:34;3152:54;3148:387;;;3316:2;;:20;;-1:-1:-1;;;3316:20:0;;;;;28222:25:1;;;-1:-1:-1;;;;;3316:2:0;;;;:10;;28195:18:1;;3316:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3148:387::-;-1:-1:-1;3505:18:0;;;;:8;:18;;;;;;-1:-1:-1;;;;;3505:18:0;;2958:584::o;3148:387::-;2958:584;;;:::o;3581:452::-;-1:-1:-1;;;;;3876:31:0;;3639:7;3876:31;;;:21;:31;;;;;;;;3872:154;;;-1:-1:-1;;;;;;3931:20:0;;;;;:10;:20;;;;;;;3581:452::o;3872:154::-;3992:2;;:22;;-1:-1:-1;;;3992:22:0;;-1:-1:-1;;;;;16342:32:1;;;3992:22:0;;;16324:51:1;3992:2:0;;;;:12;;16297:18:1;;3992:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21219:666::-;21454:16;:23;21428:15;:22;:49;21420:76;;;;-1:-1:-1;;;21420:76:0;;21798:2:1;21420:76:0;;;21780:21:1;21837:2;21817:18;;;21810:30;-1:-1:-1;;;21856:18:1;;;21849:44;21910:18;;21420:76:0;21596:338:1;21420:76:0;21541:12;:19;21515:15;:22;:45;21507:78;;;;-1:-1:-1;;;21507:78:0;;23405:2:1;21507:78:0;;;23387:21:1;23444:2;23424:18;;;23417:30;-1:-1:-1;;;23463:18:1;;;23456:50;23523:18;;21507:78:0;23203:344:1;21507:78:0;21630:10;:17;21604:15;:22;:43;21596:85;;;;-1:-1:-1;;;21596:85:0;;26895:2:1;21596:85:0;;;26877:21:1;26934:2;26914:18;;;26907:30;26973:31;26953:18;;;26946:59;27022:18;;21596:85:0;26693:353:1;21596:85:0;21697:9;21692:186;21716:15;:22;21712:1;:26;21692:186;;;21760:106;21776:15;21792:1;21776:18;;;;;;;;:::i;:::-;;;;;;;21796:16;21813:1;21796:19;;;;;;;;:::i;:::-;;;;;;;21817:12;21830:1;21817:15;;;;;;;;:::i;:::-;;;;;;;21834:16;21852:10;21863:1;21852:13;;;;;;;;:::i;:::-;;;;;;;21760:15;:106::i;:::-;21740:3;;;;:::i;:::-;;;;21692:186;;;;21219:666;;;;;:::o;2562:359::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;2678:34;;::::1;2670:96;;;::::0;-1:-1:-1;;;2670:96:0;;20978:2:1;2670:96:0::1;::::0;::::1;20960:21:1::0;21017:2;20997:18;;;20990:30;21056:34;21036:18;;;21029:62;-1:-1:-1;;;21107:18:1;;;21100:34;21151:19;;2670:96:0::1;20776:400:1::0;2670:96:0::1;2792:9;2787:127;2807:20:::0;;::::1;2787:127;;;2889:9;;2899:1;2889:12;;;;;;;:::i;:::-;;;;;;;2877:7;;2885:1;2877:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2854:48:0::1;2871:3;-1:-1:-1::0;;;;;2854:48:0::1;;;;;;;;;;;2829:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2787:127;;18033:1184:::0;18164:2;;:26;;-1:-1:-1;;;18164:26:0;;;;;28222:25:1;;;-1:-1:-1;;;;;18164:2:0;;;;:10;;28195:18:1;;18164:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18150:40:0;:10;-1:-1:-1;;;;;18150:40:0;;:85;;;;-1:-1:-1;18208:2:0;;:27;;-1:-1:-1;;;18208:27:0;;;;;28222:25:1;;;-1:-1:-1;;;;;18208:2:0;;;;:10;;28195:18:1;;18208:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18194:41:0;:10;-1:-1:-1;;;;;18194:41:0;;18150:85;18142:111;;;;-1:-1:-1;;;18142:111:0;;24530:2:1;18142:111:0;;;24512:21:1;24569:2;24549:18;;;24542:30;-1:-1:-1;;;24588:18:1;;;24581:43;24641:18;;18142:111:0;24328:337:1;18142:111:0;18272:30;;;;;;;;:17;:30;;;;;;;18264:75;;;;-1:-1:-1;;;18264:75:0;;24169:2:1;18264:75:0;;;24151:21:1;;;24188:18;;;24181:30;24247:34;24227:18;;;24220:62;24299:18;;18264:75:0;23967:356:1;18264:75:0;18404:2;;:58;;-1:-1:-1;;;18404:58:0;;-1:-1:-1;;;;;18404:2:0;;;;:15;;:58;;18420:10;;18440:4;;18447:14;;18404:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18473:2:0;;:59;;-1:-1:-1;;;18473:59:0;;-1:-1:-1;;;;;18473:2:0;;;;-1:-1:-1;18473:15:0;;-1:-1:-1;18473:59:0;;18489:10;;18509:4;;18516:15;;18473:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18585:96:0;;-1:-1:-1;;18602:10:0;15664:2:1;15660:15;15656:53;18585:96:0;;;15644:66:1;18614:15:0;15726:12:1;;;15719:28;18631:16:0;15763:12:1;;;15756:28;15800:12;;;15793:28;;;15837:13;;;15830:29;;;18545:11:0;;-1:-1:-1;18686:2:0;;-1:-1:-1;15875:13:1;;18585:96:0;;;;;;;;;;;;18575:107;;;;;;18567:116;;:121;;;;:::i;:::-;18566:127;;18692:1;18566:127;:::i;:::-;18746:2;;:51;;-1:-1:-1;;;18746:51:0;;28057:6:1;28045:19;;18746:51:0;;;28027:38:1;18545:150:0;;-1:-1:-1;18721:22:0;;-1:-1:-1;;;;;18746:2:0;;;;:24;;28000:18:1;;18746:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18844:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18810:31;18844:207;;;;;;;;;;;;;;;;19064:2;;19083:11;;;19064:43;;-1:-1:-1;;;19064:43:0;;18721:76;;-1:-1:-1;18844:207:0;;-1:-1:-1;;;;;19064:2:0;;;;:18;;:43;;18844:207;;19064:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19128:40;19144:10;19156:11;;19128:15;:40::i;:::-;19179:30;19185:10;19197:11;;19179:5;:30::i;1499:20::-;;;;;;;:::i;8896:148::-;8984:52;9003:10;9015:9;9026;8984:18;:52::i;:::-;8896:148;;:::o;17888:137::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;17979:30:::1;::::0;;;::::1;;::::0;;;:17:::1;:30;::::0;;;;:38;;-1:-1:-1;;17979:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17888:137::o;22127:242::-;22247:41;22267:5;22274:3;22279:8;22247:19;:41::i;:::-;22299:62;22332:5;22339:3;22344:8;22354:6;22299:32;:62::i;19223:1467::-;19401:2;;:26;;-1:-1:-1;;;19401:26:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19401:2:0;;;;:10;;28195:18:1;;19401:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19387:40:0;:10;-1:-1:-1;;;;;19387:40:0;;:85;;;;-1:-1:-1;19445:2:0;;:27;;-1:-1:-1;;;19445:27:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19445:2:0;;;;:10;;28195:18:1;;19445:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19431:41:0;:10;-1:-1:-1;;;;;19431:41:0;;19387:85;19379:111;;;;-1:-1:-1;;;19379:111:0;;24530:2:1;19379:111:0;;;24512:21:1;24569:2;24549:18;;;24542:30;-1:-1:-1;;;24588:18:1;;;24581:43;24641:18;;19379:111:0;24328:337:1;19379:111:0;19523:44;;-1:-1:-1;;;19523:44:0;;;;;28222:25:1;;;-1:-1:-1;;;;;19523:33:0;;;;;28195:18:1;;19523:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19509:58:0;:10;-1:-1:-1;;;;;19509:58:0;;19501:100;;;;-1:-1:-1;;;19501:100:0;;23047:2:1;19501:100:0;;;23029:21:1;23086:2;23066:18;;;23059:30;23125:31;23105:18;;;23098:59;23174:18;;19501:100:0;22845:353:1;19501:100:0;-1:-1:-1;;;;;19621:48:0;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;;;19620:60;19612:114;;;;-1:-1:-1;;;19612:114:0;;25629:2:1;19612:114:0;;;25611:21:1;25668:2;25648:18;;;25641:30;25707:34;25687:18;;;25680:62;-1:-1:-1;;;25758:18:1;;;25751:39;25807:19;;19612:114:0;25427:405:1;19612:114:0;19745:30;;;;;;;;:17;:30;;;;;;;19737:75;;;;-1:-1:-1;;;19737:75:0;;24169:2:1;19737:75:0;;;24151:21:1;;;24188:18;;;24181:30;24247:34;24227:18;;;24220:62;24299:18;;19737:75:0;23967:356:1;19737:75:0;19914:2;;:58;;-1:-1:-1;;;19914:58:0;;-1:-1:-1;;;;;19914:2:0;;;;:15;;:58;;19930:10;;19950:4;;19957:14;;19914:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19983:2:0;;:59;;-1:-1:-1;;;19983:59:0;;-1:-1:-1;;;;;19983:2:0;;;;-1:-1:-1;19983:15:0;;-1:-1:-1;19983:59:0;;19999:10;;20019:4;;20026:15;;19983:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;20053:48:0;;;;;;;:30;:48;;;;;;;;:59;;;;;;;;;:66;;-1:-1:-1;;20053:66:0;20115:4;20053:66;;;20146:2;;:35;;-1:-1:-1;;;20146:35:0;;;;;16324:51:1;;;;20053:48:0;;20146:2;;:17;;16297:18:1;;20146:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20217:2;;:51;;-1:-1:-1;;;20217:51:0;;28057:6:1;28045:19;;20217:51:0;;;28027:38:1;20132:49:0;;-1:-1:-1;20192:22:0;;-1:-1:-1;;;;;20217:2:0;;;;:24;;28000:18:1;;20217:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20323:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20289:31;20323:207;;;;;;;;;;;;;;;;20543:2;;20562:11;;;20543:43;;-1:-1:-1;;;20543:43:0;;20192:76;;-1:-1:-1;20323:207:0;;-1:-1:-1;;;;;20543:2:0;;;;:18;;:43;;20323:207;;20543:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20600:40;20616:10;20628:11;;20600:15;:40::i;:::-;20651:30;20657:10;20669:11;;20651:5;:30::i;:::-;19368:1322;;;19223:1467;;;;;:::o;22407:197::-;22464:13;22498:17;22506:8;22498:7;:17::i;:::-;22490:55;;;;-1:-1:-1;;;22490:55:0;;27253:2:1;22490:55:0;;;27235:21:1;27292:2;27272:18;;;27265:30;27331:27;27311:18;;;27304:55;27376:18;;22490:55:0;27051:349:1;22490:55:0;22563:8;;:33;;-1:-1:-1;;;22563:33:0;;;;;28222:25:1;;;-1:-1:-1;;;;;22563:8:0;;;;:23;;28195:18:1;;22563:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22563:33:0;;;;;;;;;;;;:::i;385:108::-;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;467:5:::1;:17:::0;;-1:-1:-1;;;;;;467:17:0::1;-1:-1:-1::0;;;;;467:17:0;;;::::1;::::0;;;::::1;::::0;;385:108::o;10069:228::-;10183:9;10178:112;10202:9;:16;10198:1;:20;10178:112;;;10240:38;10253:5;10260:3;10265:9;10275:1;10265:12;;;;;;;;:::i;:::-;;;;;;;10240;:38::i;:::-;10220:3;;;;:::i;:::-;;;;10178:112;;2337:111;338:5;;-1:-1:-1;;;;;338:5:0;347:10;338:19;330:43;;;;-1:-1:-1;;;330:43:0;;;;;;;:::i;:::-;2413:11:::1;:26:::0;2337:111::o;6940:234::-;7021:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;7021:28:0;;;:21;;:28;7017:150;;7066:21;;;;:11;:21;;;;;:27;;-1:-1:-1;;;;;;7066:27:0;-1:-1:-1;;;;;7066:27:0;;;;;;;;:21;;7122:17;7066:21;7122:7;:17::i;:::-;-1:-1:-1;;;;;7113:42:0;;;;;;;;;;;6940:234;;:::o;17187:608::-;17324:3;;:23;;-1:-1:-1;;;17324:23:0;;-1:-1:-1;;;;;16342:32:1;;;17324:23:0;;;16324:51:1;17324:3:0;;;;:16;;16297:18:1;;17324:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17349:3:0;;:21;;-1:-1:-1;;;17349:21:0;;-1:-1:-1;;;;;16342:32:1;;;17349:21:0;;;16324:51:1;17349:3:0;;;;-1:-1:-1;17349:16:0;;-1:-1:-1;16297:18:1;;17349:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17466:2:0;;:23;;-1:-1:-1;;;17466:23:0;;;;;28222:25:1;;;17432:31:0;;-1:-1:-1;;;;;;17466:2:0;;;;-1:-1:-1;17466:13:0;;28195:18:1;;17466:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17526:2;;17553:20;;;;17575:22;;;;17599:31;;;;17526:105;;-1:-1:-1;;;17526:105:0;;29291:4:1;29279:17;;;17526:105:0;;;29261:36:1;29316:6;29358:15;;;29338:18;;;29331:43;29410:15;29390:18;;;29383:43;17553:20:0;;-1:-1:-1;17500:23:0;;-1:-1:-1;;;;;17526:2:0;;;;:26;;29234:18:1;;17526:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17707:3;;:40;;-1:-1:-1;;;17707:40:0;;-1:-1:-1;;;;;17451:32:1;;;17707:40:0;;;17433:51:1;17500:18;;;17493:34;;;17500:131:0;;-1:-1:-1;17707:3:0;;;:16;;17406:18:1;;17707:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17749:3:0;;:38;;-1:-1:-1;;;17749:38:0;;-1:-1:-1;;;;;17451:32:1;;;17749:38:0;;;17433:51:1;17500:18;;;17493:34;;;17749:3:0;;;;-1:-1:-1;17749:16:0;;-1:-1:-1;17406:18:1;;17749:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17271:524;;17187:608;;;:::o;9070:270::-;9172:40;9191:10;9203:8;9172:18;:40::i;:::-;9164:126;;;;-1:-1:-1;;;9164:126:0;;20121:2:1;9164:126:0;;;20103:21:1;20160:2;20140:18;;;20133:30;20199:34;20179:18;;;20172:62;20270:29;20250:18;;;20243:57;20317:19;;9164:126:0;19919:423:1;9164:126:0;9301:31;9311:5;9318:3;9323:8;9301:9;:31::i;16661:520::-;16779:3;;:21;;-1:-1:-1;;;16779:21:0;;-1:-1:-1;;;;;16342:32:1;;;16779:21:0;;;16324:51:1;16779:3:0;;;;:16;;16297:18:1;;16779:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16896:2:0;;:23;;-1:-1:-1;;;16896:23:0;;;;;28222:25:1;;;16862:31:0;;-1:-1:-1;;;;;;16896:2:0;;;;-1:-1:-1;16896:13:0;;28195:18:1;;16896:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16956:2;;16983:20;;;;17005:22;;;;17029:31;;;;16956:105;;-1:-1:-1;;;16956:105:0;;29291:4:1;29279:17;;;16956:105:0;;;29261:36:1;29316:6;29358:15;;;29338:18;;;29331:43;29410:15;29390:18;;;29383:43;16983:20:0;;-1:-1:-1;16930:23:0;;-1:-1:-1;;;;;16956:2:0;;;;:26;;29234:18:1;;16956:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17135:3;;:38;;-1:-1:-1;;;17135:38:0;;-1:-1:-1;;;;;17451:32:1;;;17135:38:0;;;17433:51:1;17500:18;;;17493:34;;;16930:131:0;;-1:-1:-1;17135:3:0;;;:16;;17406:18:1;;17135:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:947;-1:-1:-1;;;;;4498:19:0;;4490:78;;;;-1:-1:-1;;;4490:78:0;;21383:2:1;4490:78:0;;;21365:21:1;21422:2;21402:18;;;21395:30;21461:34;21441:18;;;21434:62;-1:-1:-1;;;21512:18:1;;;21505:44;21566:19;;4490:78:0;21181:410:1;4490:78:0;4616:3;4587:17;4595:8;4587:7;:17::i;:::-;-1:-1:-1;;;;;4587:33:0;;4579:92;;;;-1:-1:-1;;;4579:92:0;;23754:2:1;4579:92:0;;;23736:21:1;23793:2;23773:18;;;23766:30;23832:34;23812:18;;;23805:62;-1:-1:-1;;;23883:18:1;;;23876:44;23937:19;;4579:92:0;23552:410:1;4579:92:0;4759:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;4759:24:0;-1:-1:-1;;;;;4759:24:0;;;;;;;;4897:26;;:21;:26;;;;;;;;4893:244;;;-1:-1:-1;;;;;4986:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;4893:244;;;5055:2;;:17;;-1:-1:-1;;;5055:17:0;;-1:-1:-1;;;;;16342:32:1;;;5055:17:0;;;16324:51:1;5055:2:0;;;;:12;;16297:18:1;;5055:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;5075:1;5055:21;:::i;:::-;-1:-1:-1;;;;;5036:15:0;;;;;;:10;:15;;;;;;;;:41;;;;5092:21;:26;;;:33;;-1:-1:-1;;5092:33:0;5121:4;5092:33;;;4893:244;5193:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;5283:37:0;;5311:8;;-1:-1:-1;;;;;5283:37:0;;;5300:3;;5283:37;;5300:3;;5283:37;5341:3;-1:-1:-1;;;;;5336:19:0;;5346:8;5336:19;;;;28222:25:1;;28210:2;28195:18;;28076:177;5336:19:0;;;;;;;;4416:947;;:::o;7180:334::-;7305:9;-1:-1:-1;;;;;7295:19:0;:6;-1:-1:-1;;;;;7295:19:0;;;7287:101;;;;-1:-1:-1;;;7287:101:0;;27607:2:1;7287:101:0;;;27589:21:1;27646:2;27626:18;;;27619:30;27685:34;27665:18;;;27658:62;27756:34;27736:18;;;27729:62;-1:-1:-1;;;27807:19:1;;;27800:36;27853:19;;7287:101:0;27405:473:1;7287:101:0;-1:-1:-1;;;;;7399:24:0;;;;;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;:47;;-1:-1:-1;;7399:47:0;;;;;;;;;;7462:44;;18315:41:1;;;7462:44:0;;18288:18:1;7462:44:0;;;;;;;7180:334;;;:::o;9346:515::-;9464:34;9477:5;9484:3;9489:8;9464:12;:34::i;:::-;-1:-1:-1;;;;;9513:15:0;;;:20;9509:345;;9553:22;9579:3;-1:-1:-1;;;;;9579:14:0;9617:10;9629;9641:5;9648:8;9658:5;9594:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9594:70:0;;;;;;;;;;;9579:86;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9550:115;;;9680:16;9710:9;9699:31;;;;;;;;;;;;:::i;:::-;9680:50;-1:-1:-1;;;;;;;;;;9753:23:0;;;9745:97;;;;-1:-1:-1;;;9745:97:0;;22141:2:1;9745:97:0;;;22123:21:1;22180:2;22160:18;;;22153:30;22219:34;22199:18;;;22192:62;22290:31;22270:18;;;22263:59;22339:19;;9745:97:0;21939:425:1;8059:229:0;8125:4;8207;8195:8;:16;8191:38;;-1:-1:-1;8222:4:0;;8059:229;-1:-1:-1;8059:229:0:o;8191:38::-;-1:-1:-1;8276:3:0;8246:18;;;:8;:18;;;;;;-1:-1:-1;;;;;8246:18:0;:34;;;8059:229::o;7559:477::-;7646:4;7663:14;7680:17;7688:8;7680:7;:17::i;:::-;7663:34;-1:-1:-1;;;;;;7716:22:0;;7708:95;;;;-1:-1:-1;;;7708:95:0;;20549:2:1;7708:95:0;;;20531:21:1;20588:2;20568:18;;;20561:30;20627:34;20607:18;;;20600:62;20698:30;20678:18;;;20671:58;20746:19;;7708:95:0;20347:424:1;7708:95:0;7834:6;-1:-1:-1;;;;;7822:18:0;:8;-1:-1:-1;;;;;7822:18:0;;:87;;;-1:-1:-1;7888:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;7876:33:0;;;7888:21;;7876:33;7822:87;:166;;;-1:-1:-1;;;;;;7954:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;7822:166;7814:214;7559:477;-1:-1:-1;;;;7559:477:0:o;5371:1543::-;5481:17;5489:8;5481:7;:17::i;:::-;-1:-1:-1;;;;;5472:26:0;:5;-1:-1:-1;;;;;5472:26:0;;5464:103;;;;;-1:-1:-1;;;5464:103:0;;26039:2:1;5464:103:0;;;26021:21:1;26058:18;;;26051:30;;;;26117:34;26097:18;;;26090:62;26188:34;26168:18;;;26161:62;26240:19;;5464:103:0;25837:428:1;5464:103:0;-1:-1:-1;;;;;5586:19:0;;5578:86;;;;-1:-1:-1;;;5578:86:0;;26472:2:1;5578:86:0;;;26454:21:1;26511:2;26491:18;;;26484:30;26550:34;26530:18;;;26523:62;-1:-1:-1;;;26601:18:1;;;26594:52;26663:19;;5578:86:0;26270:418:1;5578:86:0;5791:3;5758:21;;;:11;:21;;;;;;-1:-1:-1;;;;;5758:21:0;:37;5754:154;;5892:3;5860:21;;;:11;:21;;;;;:36;;-1:-1:-1;;;;;;5860:36:0;;;5754:154;5965:18;;;;:8;:18;;;;;;;;:24;;-1:-1:-1;;;;;;5965:24:0;-1:-1:-1;;;;;5965:24:0;;;;;;;;;;6058:28;;;;:21;:28;;;;;;;;6054:382;;;-1:-1:-1;;;;;6169:17:0;;;;;;:10;:17;;;;;:19;;;;;;:::i;:::-;;;;;;6054:382;;;6331:1;6309:2;;:19;;-1:-1:-1;;;6309:19:0;;-1:-1:-1;;;;;16342:32:1;;;6309:19:0;;;16324:51:1;6309:2:0;;;;:12;;16297:18:1;;6309:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;:::i;:::-;-1:-1:-1;;;;;6288:17:0;;;;;;:10;:17;;;;;;;;:45;;;;6389:21;:28;;;:35;;-1:-1:-1;;6389:35:0;6420:4;6389:35;;;6054:382;-1:-1:-1;;;;;6452:26:0;;;;;;:21;:26;;;;;;;;6448:367;;;-1:-1:-1;;;;;6559:15:0;;;;;;:10;:15;;;;;:17;;;;;;:::i;:::-;;;;;;6448:367;;;6693:2;;:17;;-1:-1:-1;;;6693:17:0;;-1:-1:-1;;;;;16342:32:1;;;6693:17:0;;;16324:51:1;6693:2:0;;;;:12;;16297:18:1;;6693:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;6713:1;6693:21;:::i;:::-;-1:-1:-1;;;;;6674:15:0;;;;;;:10;:15;;;;;;;;:41;;;;6770:21;:26;;;:33;;-1:-1:-1;;6770:33:0;6799:4;6770:33;;;6448:367;6897:8;6892:3;-1:-1:-1;;;;;6876:30:0;6885:5;-1:-1:-1;;;;;6876:30:0;;;;;;;;;;;5371:1543;;;:::o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:673::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:60;613:43;653:2;613:43;:::i;:::-;597:60;:::i;:::-;679:3;703:2;698:3;691:15;731:2;726:3;722:12;715:19;;766:2;758:6;754:15;818:3;813:2;807;804:1;800:10;792:6;788:23;784:32;781:41;778:61;;;835:1;832;825:12;778:61;857:1;867:163;881:2;878:1;875:9;867:163;;;938:17;;926:30;;976:12;;;;1008;;;;899:1;892:9;867:163;;;-1:-1:-1;1048:5:1;;386:673;-1:-1:-1;;;;;;;386:673:1:o;1064:744::-;1116:5;1169:3;1162:4;1154:6;1150:17;1146:27;1136:55;;1187:1;1184;1177:12;1136:55;1223:6;1210:20;1249:4;1273:60;1289:43;1329:2;1289:43;:::i;1273:60::-;1355:3;1379:2;1374:3;1367:15;1407:2;1402:3;1398:12;1391:19;;1442:2;1434:6;1430:15;1494:3;1489:2;1483;1480:1;1476:10;1468:6;1464:23;1460:32;1457:41;1454:61;;;1511:1;1508;1501:12;1454:61;1533:1;1543:236;1557:2;1554:1;1551:9;1543:236;;;1628:3;1615:17;1645:29;1668:5;1645:29;:::i;:::-;1687:18;;1725:12;;;;1757;;;;1575:1;1568:9;1543:236;;1813:160;1878:20;;1934:13;;1927:21;1917:32;;1907:60;;1963:1;1960;1953:12;1978:462;2020:5;2073:3;2066:4;2058:6;2054:17;2050:27;2040:55;;2091:1;2088;2081:12;2040:55;2127:6;2114:20;2158:48;2174:31;2202:2;2174:31;:::i;2158:48::-;2231:2;2222:7;2215:19;2277:3;2270:4;2265:2;2257:6;2253:15;2249:26;2246:35;2243:55;;;2294:1;2291;2284:12;2243:55;2359:2;2352:4;2344:6;2340:17;2333:4;2324:7;2320:18;2307:55;2407:1;2382:16;;;2400:4;2378:27;2371:38;;;;2386:7;1978:462;-1:-1:-1;;;1978:462:1:o;2445:163::-;2523:13;;2576:6;2565:18;;2555:29;;2545:57;;2598:1;2595;2588:12;2613:247;2672:6;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;2780:9;2767:23;2799:31;2824:5;2799:31;:::i;:::-;2849:5;2613:247;-1:-1:-1;;;2613:247:1:o;2865:251::-;2935:6;2988:2;2976:9;2967:7;2963:23;2959:32;2956:52;;;3004:1;3001;2994:12;2956:52;3036:9;3030:16;3055:31;3080:5;3055:31;:::i;3121:388::-;3189:6;3197;3250:2;3238:9;3229:7;3225:23;3221:32;3218:52;;;3266:1;3263;3256:12;3218:52;3305:9;3292:23;3324:31;3349:5;3324:31;:::i;:::-;3374:5;-1:-1:-1;3431:2:1;3416:18;;3403:32;3444:33;3403:32;3444:33;:::i;:::-;3496:7;3486:17;;;3121:388;;;;;:::o;3514:955::-;3618:6;3626;3634;3642;3650;3658;3711:3;3699:9;3690:7;3686:23;3682:33;3679:53;;;3728:1;3725;3718:12;3679:53;3767:9;3754:23;3786:31;3811:5;3786:31;:::i;:::-;3836:5;-1:-1:-1;3893:2:1;3878:18;;3865:32;3906:33;3865:32;3906:33;:::i;:::-;3958:7;-1:-1:-1;4017:2:1;4002:18;;3989:32;4030:33;3989:32;4030:33;:::i;:::-;4082:7;-1:-1:-1;4141:2:1;4126:18;;4113:32;4154:33;4113:32;4154:33;:::i;:::-;4206:7;-1:-1:-1;4265:3:1;4250:19;;4237:33;4279;4237;4279;:::i;:::-;4331:7;-1:-1:-1;4390:3:1;4375:19;;4362:33;4404;4362;4404;:::i;:::-;4456:7;4446:17;;;3514:955;;;;;;;;:::o;4474:624::-;4576:6;4584;4592;4645:2;4633:9;4624:7;4620:23;4616:32;4613:52;;;4661:1;4658;4651:12;4613:52;4700:9;4687:23;4719:31;4744:5;4719:31;:::i;:::-;4769:5;-1:-1:-1;4826:2:1;4811:18;;4798:32;4839:33;4798:32;4839:33;:::i;:::-;4891:7;-1:-1:-1;4949:2:1;4934:18;;4921:32;-1:-1:-1;;;;;4965:30:1;;4962:50;;;5008:1;5005;4998:12;4962:50;5031:61;5084:7;5075:6;5064:9;5060:22;5031:61;:::i;:::-;5021:71;;;4474:624;;;;;:::o;5103:844::-;5223:6;5231;5239;5247;5300:3;5288:9;5279:7;5275:23;5271:33;5268:53;;;5317:1;5314;5307:12;5268:53;5356:9;5343:23;5375:31;5400:5;5375:31;:::i;:::-;5425:5;-1:-1:-1;5482:2:1;5467:18;;5454:32;5495:33;5454:32;5495:33;:::i;:::-;5547:7;-1:-1:-1;5605:2:1;5590:18;;5577:32;-1:-1:-1;;;;;5658:14:1;;;5655:34;;;5685:1;5682;5675:12;5655:34;5708:61;5761:7;5752:6;5741:9;5737:22;5708:61;:::i;:::-;5698:71;;5822:2;5811:9;5807:18;5794:32;5778:48;;5851:2;5841:8;5838:16;5835:36;;;5867:1;5864;5857:12;5835:36;;5890:51;5933:7;5922:8;5911:9;5907:24;5890:51;:::i;:::-;5880:61;;;5103:844;;;;;;;:::o;5952:456::-;6029:6;6037;6045;6098:2;6086:9;6077:7;6073:23;6069:32;6066:52;;;6114:1;6111;6104:12;6066:52;6153:9;6140:23;6172:31;6197:5;6172:31;:::i;:::-;6222:5;-1:-1:-1;6279:2:1;6264:18;;6251:32;6292:33;6251:32;6292:33;:::i;:::-;5952:456;;6344:7;;-1:-1:-1;;;6398:2:1;6383:18;;;;6370:32;;5952:456::o;6413:665::-;6508:6;6516;6524;6532;6585:3;6573:9;6564:7;6560:23;6556:33;6553:53;;;6602:1;6599;6592:12;6553:53;6641:9;6628:23;6660:31;6685:5;6660:31;:::i;:::-;6710:5;-1:-1:-1;6767:2:1;6752:18;;6739:32;6780:33;6739:32;6780:33;:::i;:::-;6832:7;-1:-1:-1;6886:2:1;6871:18;;6858:32;;-1:-1:-1;6941:2:1;6926:18;;6913:32;-1:-1:-1;;;;;6957:30:1;;6954:50;;;7000:1;6997;6990:12;6954:50;7023:49;7064:7;7055:6;7044:9;7040:22;7023:49;:::i;7083:315::-;7148:6;7156;7209:2;7197:9;7188:7;7184:23;7180:32;7177:52;;;7225:1;7222;7215:12;7177:52;7264:9;7251:23;7283:31;7308:5;7283:31;:::i;:::-;7333:5;-1:-1:-1;7357:35:1;7388:2;7373:18;;7357:35;:::i;:::-;7347:45;;7083:315;;;;;:::o;7403:::-;7471:6;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:52;;;7548:1;7545;7538:12;7500:52;7587:9;7574:23;7606:31;7631:5;7606:31;:::i;:::-;7656:5;7708:2;7693:18;;;;7680:32;;-1:-1:-1;;;7403:315:1:o;7723:773::-;7845:6;7853;7861;7869;7922:2;7910:9;7901:7;7897:23;7893:32;7890:52;;;7938:1;7935;7928:12;7890:52;7978:9;7965:23;-1:-1:-1;;;;;8048:2:1;8040:6;8037:14;8034:34;;;8064:1;8061;8054:12;8034:34;8103:70;8165:7;8156:6;8145:9;8141:22;8103:70;:::i;:::-;8192:8;;-1:-1:-1;8077:96:1;-1:-1:-1;8280:2:1;8265:18;;8252:32;;-1:-1:-1;8296:16:1;;;8293:36;;;8325:1;8322;8315:12;8293:36;;8364:72;8428:7;8417:8;8406:9;8402:24;8364:72;:::i;:::-;7723:773;;;;-1:-1:-1;8455:8:1;-1:-1:-1;;;;7723:773:1:o;8501:817::-;8651:6;8659;8667;8720:2;8708:9;8699:7;8695:23;8691:32;8688:52;;;8736:1;8733;8726:12;8688:52;8776:9;8763:23;-1:-1:-1;;;;;8846:2:1;8838:6;8835:14;8832:34;;;8862:1;8859;8852:12;8832:34;8885:61;8938:7;8929:6;8918:9;8914:22;8885:61;:::i;:::-;8875:71;;8999:2;8988:9;8984:18;8971:32;8955:48;;9028:2;9018:8;9015:16;9012:36;;;9044:1;9041;9034:12;9012:36;9067:63;9122:7;9111:8;9100:9;9096:24;9067:63;:::i;:::-;9057:73;;9183:2;9172:9;9168:18;9155:32;9139:48;;9212:2;9202:8;9199:16;9196:36;;;9228:1;9225;9218:12;9196:36;;9251:61;9304:7;9293:8;9282:9;9278:24;9251:61;:::i;9323:1180::-;9516:6;9524;9532;9540;9548;9601:3;9589:9;9580:7;9576:23;9572:33;9569:53;;;9618:1;9615;9608:12;9569:53;9658:9;9645:23;-1:-1:-1;;;;;9728:2:1;9720:6;9717:14;9714:34;;;9744:1;9741;9734:12;9714:34;9767:61;9820:7;9811:6;9800:9;9796:22;9767:61;:::i;:::-;9757:71;;9881:2;9870:9;9866:18;9853:32;9837:48;;9910:2;9900:8;9897:16;9894:36;;;9926:1;9923;9916:12;9894:36;9949:63;10004:7;9993:8;9982:9;9978:24;9949:63;:::i;:::-;9939:73;;10065:2;10054:9;10050:18;10037:32;10021:48;;10094:2;10084:8;10081:16;10078:36;;;10110:1;10107;10100:12;10078:36;10133:61;10186:7;10175:8;10164:9;10160:24;10133:61;:::i;:::-;10123:71;;10244:2;10233:9;10229:18;10216:32;10203:45;;10257:31;10282:5;10257:31;:::i;:::-;10307:5;;-1:-1:-1;10365:3:1;10350:19;;10337:33;;10382:16;;;10379:36;;;10411:1;10408;10401:12;10379:36;;10434:63;10489:7;10478:8;10467:9;10463:24;10434:63;:::i;:::-;10424:73;;;9323:1180;;;;;;;;:::o;10508:245::-;10566:6;10619:2;10607:9;10598:7;10594:23;10590:32;10587:52;;;10635:1;10632;10625:12;10587:52;10674:9;10661:23;10693:30;10717:5;10693:30;:::i;10758:249::-;10827:6;10880:2;10868:9;10859:7;10855:23;10851:32;10848:52;;;10896:1;10893;10886:12;10848:52;10928:9;10922:16;10947:30;10971:5;10947:30;:::i;11012:635::-;11092:6;11145:2;11133:9;11124:7;11120:23;11116:32;11113:52;;;11161:1;11158;11151:12;11113:52;11194:9;11188:16;-1:-1:-1;;;;;11219:6:1;11216:30;11213:50;;;11259:1;11256;11249:12;11213:50;11282:22;;11335:4;11327:13;;11323:27;-1:-1:-1;11313:55:1;;11364:1;11361;11354:12;11313:55;11393:2;11387:9;11418:48;11434:31;11462:2;11434:31;:::i;11418:48::-;11489:2;11482:5;11475:17;11529:7;11524:2;11519;11515;11511:11;11507:20;11504:33;11501:53;;;11550:1;11547;11540:12;11501:53;11563:54;11614:2;11609;11602:5;11598:14;11593:2;11589;11585:11;11563:54;:::i;:::-;11636:5;11012:635;-1:-1:-1;;;;;11012:635:1:o;11652:1104::-;11748:6;11801:3;11789:9;11780:7;11776:23;11772:33;11769:53;;;11818:1;11815;11808:12;11769:53;11851:2;11845:9;11893:3;11885:6;11881:16;11963:6;11951:10;11948:22;-1:-1:-1;;;;;11915:10:1;11912:34;11909:62;11906:88;;;11974:18;;:::i;:::-;12010:2;12003:22;12047:16;;12072:29;12047:16;12072:29;:::i;:::-;12110:21;;12176:2;12161:18;;12155:25;12189:31;12155:25;12189:31;:::i;:::-;12248:2;12236:15;;12229:32;12294:48;12338:2;12323:18;;12294:48;:::i;:::-;12289:2;12281:6;12277:15;12270:73;12376:48;12420:2;12409:9;12405:18;12376:48;:::i;:::-;12371:2;12363:6;12359:15;12352:73;12470:3;12459:9;12455:19;12449:26;12484:31;12507:7;12484:31;:::i;:::-;12543:3;12531:16;;12524:33;12591:49;12635:3;12620:19;;12591:49;:::i;:::-;12585:3;12577:6;12573:16;12566:75;12675:49;12719:3;12708:9;12704:19;12675:49;:::i;:::-;12669:3;12657:16;;12650:75;12661:6;11652:1104;-1:-1:-1;;;11652:1104:1:o;12761:206::-;12830:6;12883:2;12871:9;12862:7;12858:23;12854:32;12851:52;;;12899:1;12896;12889:12;12851:52;12922:39;12951:9;12922:39;:::i;12972:180::-;13031:6;13084:2;13072:9;13063:7;13059:23;13055:32;13052:52;;;13100:1;13097;13090:12;13052:52;-1:-1:-1;13123:23:1;;12972:180;-1:-1:-1;12972:180:1:o;13157:184::-;13227:6;13280:2;13268:9;13259:7;13255:23;13251:32;13248:52;;;13296:1;13293;13286:12;13248:52;-1:-1:-1;13319:16:1;;13157:184;-1:-1:-1;13157:184:1:o;13346:379::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:52;;;13506:1;13503;13496:12;13458:52;13542:9;13529:23;13519:33;;13599:2;13588:9;13584:18;13571:32;13561:42;;13653:2;13642:9;13638:18;13625:32;13666:29;13689:5;13666:29;:::i;:::-;13714:5;13704:15;;;13346:379;;;;;:::o;13730:590::-;13823:6;13831;13839;13847;13855;13908:3;13896:9;13887:7;13883:23;13879:33;13876:53;;;13925:1;13922;13915:12;13876:53;13961:9;13948:23;13938:33;;14018:2;14007:9;14003:18;13990:32;13980:42;;14072:2;14061:9;14057:18;14044:32;14085:29;14108:5;14085:29;:::i;:::-;14133:5;-1:-1:-1;14190:2:1;14175:18;;14162:32;14203:33;14162:32;14203:33;:::i;:::-;13730:590;;;;-1:-1:-1;13730:590:1;;14309:3;14294:19;14281:33;;13730:590;-1:-1:-1;;13730:590:1:o;14325:243::-;14382:6;14435:2;14423:9;14414:7;14410:23;14406:32;14403:52;;;14451:1;14448;14441:12;14403:52;14490:9;14477:23;14509:29;14532:5;14509:29;:::i;14573:247::-;14641:6;14694:2;14682:9;14673:7;14669:23;14665:32;14662:52;;;14710:1;14707;14700:12;14662:52;14742:9;14736:16;14761:29;14784:5;14761:29;:::i;14825:311::-;14888:6;14896;14949:2;14937:9;14928:7;14924:23;14920:32;14917:52;;;14965:1;14962;14955:12;14917:52;15004:9;14991:23;15023:29;15046:5;15023:29;:::i;15141:257::-;15182:3;15220:5;15214:12;15247:6;15242:3;15235:19;15263:63;15319:6;15312:4;15307:3;15303:14;15296:4;15289:5;15285:16;15263:63;:::i;:::-;15380:2;15359:15;-1:-1:-1;;15355:29:1;15346:39;;;;15387:4;15342:50;;15141:257;-1:-1:-1;;15141:257:1:o;15899:274::-;16028:3;16066:6;16060:13;16082:53;16128:6;16123:3;16116:4;16108:6;16104:17;16082:53;:::i;:::-;16151:16;;;;;15899:274;-1:-1:-1;;15899:274:1:o;16386:375::-;-1:-1:-1;;;;;16644:15:1;;;16626:34;;16696:15;;;;16691:2;16676:18;;16669:43;16743:2;16728:18;;16721:34;;;;16576:2;16561:18;;16386:375::o;16766:488::-;-1:-1:-1;;;;;17035:15:1;;;17017:34;;17087:15;;17082:2;17067:18;;17060:43;17134:2;17119:18;;17112:34;;;17182:3;17177:2;17162:18;;17155:31;;;16960:4;;17203:45;;17228:19;;17220:6;17203:45;:::i;:::-;17195:53;16766:488;-1:-1:-1;;;;;;16766:488:1:o;17538:632::-;17709:2;17761:21;;;17831:13;;17734:18;;;17853:22;;;17680:4;;17709:2;17932:15;;;;17906:2;17891:18;;;17680:4;17975:169;17989:6;17986:1;17983:13;17975:169;;;18050:13;;18038:26;;18119:15;;;;18084:12;;;;18011:1;18004:9;17975:169;;;-1:-1:-1;18161:3:1;;17538:632;-1:-1:-1;;;;;;17538:632:1:o;19695:219::-;19844:2;19833:9;19826:21;19807:4;19864:44;19904:2;19893:9;19889:18;19881:6;19864:44;:::i;24670:335::-;24872:2;24854:21;;;24911:2;24891:18;;;24884:30;-1:-1:-1;;;24945:2:1;24930:18;;24923:41;24996:2;24981:18;;24670:335::o;28258:804::-;28430:4;28472:3;28461:9;28457:19;28449:27;;28503:6;28492:9;28485:25;28565:4;28556:6;28550:13;28546:24;28541:2;28530:9;28526:18;28519:52;28635:4;28629:2;28621:6;28617:15;28611:22;28607:33;28602:2;28591:9;28587:18;28580:61;28688:2;28680:6;28676:15;28670:22;28711:6;28771:2;28757:12;28753:21;28748:2;28737:9;28733:18;28726:49;28840:2;28834;28826:6;28822:15;28816:22;28812:31;28806:3;28795:9;28791:19;28784:60;28910:4;28903:3;28895:6;28891:16;28885:23;28881:34;28875:3;28864:9;28860:19;28853:63;28982:2;28975:3;28967:6;28963:16;28957:23;28953:32;28947:3;28936:9;28932:19;28925:61;29052:2;29045:3;29037:6;29033:16;29027:23;29023:32;29017:3;29006:9;29002:19;28995:61;;;28258:804;;;;;:::o;29437:275::-;29508:2;29502:9;29573:2;29554:13;;-1:-1:-1;;29550:27:1;29538:40;;-1:-1:-1;;;;;29593:34:1;;29629:22;;;29590:62;29587:88;;;29655:18;;:::i;:::-;29691:2;29684:22;29437:275;;-1:-1:-1;29437:275:1:o;29717:183::-;29777:4;-1:-1:-1;;;;;29802:6:1;29799:30;29796:56;;;29832:18;;:::i;:::-;-1:-1:-1;29877:1:1;29873:14;29889:4;29869:25;;29717:183::o;29905:186::-;29953:4;-1:-1:-1;;;;;29978:6:1;29975:30;29972:56;;;30008:18;;:::i;:::-;-1:-1:-1;30074:2:1;30053:15;-1:-1:-1;;30049:29:1;30080:4;30045:40;;29905:186::o;30096:128::-;30136:3;30167:1;30163:6;30160:1;30157:13;30154:39;;;30173:18;;:::i;:::-;-1:-1:-1;30209:9:1;;30096:128::o;30229:125::-;30269:4;30297:1;30294;30291:8;30288:34;;;30302:18;;:::i;:::-;-1:-1:-1;30339:9:1;;30229:125::o;30359:258::-;30431:1;30441:113;30455:6;30452:1;30449:13;30441:113;;;30531:11;;;30525:18;30512:11;;;30505:39;30477:2;30470:10;30441:113;;;30572:6;30569:1;30566:13;30563:48;;;-1:-1:-1;;30607:1:1;30589:16;;30582:27;30359:258::o;30622:136::-;30661:3;30689:5;30679:39;;30698:18;;:::i;:::-;-1:-1:-1;;;30734:18:1;;30622:136::o;30763:380::-;30842:1;30838:12;;;;30885;;;30906:61;;30960:4;30952:6;30948:17;30938:27;;30906:61;31013:2;31005:6;31002:14;30982:18;30979:38;30976:161;;;31059:10;31054:3;31050:20;31047:1;31040:31;31094:4;31091:1;31084:15;31122:4;31119:1;31112:15;30976:161;;30763:380;;;:::o;31148:135::-;31187:3;-1:-1:-1;;31208:17:1;;31205:43;;;31228:18;;:::i;:::-;-1:-1:-1;31275:1:1;31264:13;;31148:135::o;31288:209::-;31320:1;31346;31336:132;;31390:10;31385:3;31381:20;31378:1;31371:31;31425:4;31422:1;31415:15;31453:4;31450:1;31443:15;31336:132;-1:-1:-1;31482:9:1;;31288:209::o;31502:127::-;31563:10;31558:3;31554:20;31551:1;31544:31;31594:4;31591:1;31584:15;31618:4;31615:1;31608:15;31634:127;31695:10;31690:3;31686:20;31683:1;31676:31;31726:4;31723:1;31716:15;31750:4;31747:1;31740:15;31766:127;31827:10;31822:3;31818:20;31815:1;31808:31;31858:4;31855:1;31848:15;31882:4;31879:1;31872:15;31898:131;-1:-1:-1;;;;;31973:31:1;;31963:42;;31953:70;;32019:1;32016;32009:12;31953:70;31898:131;:::o;32034:::-;-1:-1:-1;;;;;;32108:32:1;;32098:43;;32088:71;;32155:1;32152;32145:12;32170:114;32254:4;32247:5;32243:16;32236:5;32233:27;32223:55;;32274:1;32271;32264:12

Swarm Source

ipfs://323cfbb290e1c0b14ace1c62038d9b505209f2fa97089a21d233bf611a9d3fe7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.