ETH Price: $3,264.84 (+4.84%)
 

Overview

ETH Balance

0.0275 ETH

Eth Value

$89.78 (@ $3,264.84/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x7b227022210181022024-10-22 2:21:35100 days ago1729563695IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.00052886.98742679
0x7b227022210181022024-10-22 2:21:35100 days ago1729563695IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.00052886.98742679
0x7b227022210181012024-10-22 2:21:23100 days ago1729563683IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000523676.91965707
0x7b227022210181002024-10-22 2:21:11100 days ago1729563671IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000527956.97623055
0x7b227022210180822024-10-22 2:17:35100 days ago1729563455IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000551137.28256502
0x7b227022210180812024-10-22 2:17:23100 days ago1729563443IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000540327.13969878
0x7b227022210180802024-10-22 2:17:11100 days ago1729563431IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000540637.14383332
0x7b227022210180792024-10-22 2:16:59100 days ago1729563419IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000553647.31567803
0x7b227022210180752024-10-22 2:16:11100 days ago1729563371IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000571137.546764
0x7b227022210180732024-10-22 2:15:47100 days ago1729563347IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000862517.50119878
0x7b227022210137622024-10-21 11:49:59101 days ago1729511399IN
0x82D47fCE...EbcA2E30E
0 ETH0.001221997.45057474
0x7b227022210137292024-10-21 11:43:23101 days ago1729511003IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000937488.15318156
0x7b227022210136442024-10-21 11:26:11101 days ago1729509971IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000775336.74294204
0x7b227022210133882024-10-21 10:34:35101 days ago1729506875IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000642317.76713867
0x7b227022210133762024-10-21 10:32:11101 days ago1729506731IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000859137.47177057
0x7b227022210129412024-10-21 9:05:11101 days ago1729501511IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000685719.06080817
0x7b227022210129382024-10-21 9:04:35101 days ago1729501475IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000701339.26726044
0x7b227022210129262024-10-21 9:02:11101 days ago1729501331IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000687759.08782688
0x7b227022210123772024-10-21 7:11:59101 days ago1729494719IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.001195110.39364235
0x7b227022210123032024-10-21 6:56:59101 days ago1729493819IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000717669.48301043
0x7b227022210123012024-10-21 6:56:35101 days ago1729493795IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000646038.53655783
0x7b227022210122992024-10-21 6:56:11101 days ago1729493771IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.00068559.05801962
0x7b227022210122972024-10-21 6:55:47101 days ago1729493747IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.00071649.46632825
0x7b227022210122932024-10-21 6:54:59101 days ago1729493699IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.00073919.76630313
0x7b227022210122842024-10-21 6:53:11101 days ago1729493591IN
0x82D47fCE...EbcA2E30E
0.001 ETH0.000695649.1921082
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
210181022024-10-22 2:21:35100 days ago1729563695
0x82D47fCE...EbcA2E30E
0.0009 ETH
210181022024-10-22 2:21:35100 days ago1729563695
0x82D47fCE...EbcA2E30E
0.0001 ETH
210181022024-10-22 2:21:35100 days ago1729563695
0x82D47fCE...EbcA2E30E
0.0009 ETH
210181022024-10-22 2:21:35100 days ago1729563695
0x82D47fCE...EbcA2E30E
0.0001 ETH
210181012024-10-22 2:21:23100 days ago1729563683
0x82D47fCE...EbcA2E30E
0.0009 ETH
210181012024-10-22 2:21:23100 days ago1729563683
0x82D47fCE...EbcA2E30E
0.0001 ETH
210181002024-10-22 2:21:11100 days ago1729563671
0x82D47fCE...EbcA2E30E
0.0009 ETH
210181002024-10-22 2:21:11100 days ago1729563671
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180822024-10-22 2:17:35100 days ago1729563455
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180822024-10-22 2:17:35100 days ago1729563455
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180812024-10-22 2:17:23100 days ago1729563443
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180812024-10-22 2:17:23100 days ago1729563443
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180802024-10-22 2:17:11100 days ago1729563431
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180802024-10-22 2:17:11100 days ago1729563431
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180792024-10-22 2:16:59100 days ago1729563419
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180792024-10-22 2:16:59100 days ago1729563419
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180752024-10-22 2:16:11100 days ago1729563371
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180752024-10-22 2:16:11100 days ago1729563371
0x82D47fCE...EbcA2E30E
0.0001 ETH
210180732024-10-22 2:15:47100 days ago1729563347
0x82D47fCE...EbcA2E30E
0.0009 ETH
210180732024-10-22 2:15:47100 days ago1729563347
0x82D47fCE...EbcA2E30E
0.0001 ETH
210137292024-10-21 11:43:23101 days ago1729511003
0x82D47fCE...EbcA2E30E
0.0009 ETH
210137292024-10-21 11:43:23101 days ago1729511003
0x82D47fCE...EbcA2E30E
0.0001 ETH
210136442024-10-21 11:26:11101 days ago1729509971
0x82D47fCE...EbcA2E30E
0.0009 ETH
210136442024-10-21 11:26:11101 days ago1729509971
0x82D47fCE...EbcA2E30E
0.0001 ETH
210133762024-10-21 10:32:11101 days ago1729506731
0x82D47fCE...EbcA2E30E
0.0009 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Inscription

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: Inscription.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./Counters.sol";
import "./JsmnSolLib.sol";
import "./inputData.sol";
contract Inscription is inputData {
    // Declare a public variable to store the owner's address
    address public owner;

    /**
    * @dev Constructor that sets the contract deployer as the owner.
    * 
    * The constructor is called only once when the contract is deployed.
    * It assigns the address of the account that deploys the contract to the `owner` variable.
    */
    constructor() {
        owner = msg.sender; // Set the owner to the address that deployed the contract
    }

    /**
    * @dev Modifier that restricts function access to the contract owner.
    * 
    * This modifier checks if the caller of a function is the owner of the contract.
    * If the caller is not the owner, it reverts the transaction with an error message.
    */
    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not the contract owner"); // Ensure the caller is the owner
        _; // Placeholder for the function body to be executed
    }

    // Importing and using the Counters library for managing counters
    using Counters for Counters.Counter;

    // Define a constant for the number of decimal places for the token
    uint256 constant DECIMALS = 18; // The standard decimal precision for ERC20 tokens is usually 18
    bytes32 constant ERC20_P_HASH = keccak256(abi.encodePacked("p"));
    bytes32 constant ERC20_OP_HASH = keccak256(abi.encodePacked("op"));
    bytes32 constant ERC20_TICK_HASH = keccak256(abi.encodePacked("tick"));
    bytes32 constant ERC20_MAX_HASH = keccak256(abi.encodePacked("max"));
    bytes32 constant ERC20_LIM_HASH = keccak256(abi.encodePacked("lim"));
    bytes32 constant ERC20_AMT_HASH = keccak256(abi.encodePacked("amt"));
    bytes32 constant ERC20_P_HASH_ERC20 = keccak256(abi.encodePacked("erc-20"));
    bytes32 constant ERC20_OP_HASH_DEPLOY =keccak256(abi.encodePacked("deploy"));
    bytes32 constant ERC20_OP_HASH_MINT = keccak256(abi.encodePacked("mint"));
    bytes32 constant ERC20_OP_HASH_TRANSFER = keccak256(abi.encodePacked("transfer"));
    bytes32 constant ERC20_OP_HASH_TRANSFER_TO = keccak256(abi.encodePacked("to"));
    bytes32 constant ERC20_OP_HASH_TRANSFER_FROM = keccak256(abi.encodePacked("from"));
    bytes32 constant ERC20_MAX_MINT = keccak256(abi.encodePacked("maxMint"));
    bytes32 constant ERC20_MINT_PRICE = keccak256(abi.encodePacked("mintPrice"));
    bytes32 constant ERC20_RESERVE = keccak256(abi.encodePacked("reserve"));
    bytes32 constant ERC20_OP_HASH_APPROVE = keccak256(abi.encodePacked("approve"));
    bytes32 constant ERC20_OP_HASH_TRANSFERFROM = keccak256(abi.encodePacked("transferFrom"));

    // The ERC20Token struct represents basic information about an ERC20 token
    struct ERC20Token {
        string name;              // The name of the token
        uint256 maxSupply;        // The maximum supply of the token, indicating the upper limit of tokens that can be minted
        uint256 mintLimit;        // The limit per mint operation, i.e., the maximum number of tokens that can be minted in one transaction
        uint256 minted;           // The total number of tokens that have already been minted
        address deployer;         // The address of the deployer, representing the creator or owner of the contract
        uint256 deployTime;       // The timestamp when the contract was deployed, indicating the deployment time of the token
        uint256 holders;          // The number of addresses holding this token, representing the current number of token holders
        uint256 maxMintPerAddress;// The maximum number of tokens that can be minted by a single address
        uint256 mintPrice;        // The price per token mint in wei, representing the cost to mint one token
        uint256 reserve;          // The reserve of tokens, representing the amount of tokens held in reserve or still available for minting
    }

    // The MintERC20 struct is used to track whether an ERC20 token has been deployed
    struct MintERC20 {
        string ticker;    // The symbol or ticker of the token
        bool deployed;    // Whether the token has been deployed; true indicates the token is successfully deployed, false means not yet deployed
    }

    // A nested mapping to store token balances for each token ticker and address
    // The first string represents the token ticker, 
    // and the address represents the user's wallet address.
    mapping(string => mapping(address => uint256)) public balances; 

    // A nested mapping to track the number of tokens minted by each address for each token ticker
    // The string represents the token ticker, and the address is the user's wallet address.
    mapping(string => mapping(address => uint256)) public mintCounts; 

    // A mapping to link token tickers (converted to bytes32) to the MintERC20 struct
    // It tracks deployed tokens and their ticker symbols.
    mapping(bytes32 => MintERC20) private mintHexMap; 

    // A nested mapping to store allowances for token transfers between addresses
    // The string represents the token ticker, the first address is the token owner,
    // and the second address is the spender. The uint256 represents the allowance amount.
    mapping(string => mapping(address => mapping(address => uint256))) public allowances; 

    // A mapping to store details of each token (inscription) by its ticker name
    // The string is the token ticker, and the ERC20Token struct holds the token's information.
    mapping(string => ERC20Token) public inscriptions; 

    // An array to store all token ticker names that have been created
    string[] public tokenNames; 

    // A counter to track the total number of unique token tickers created
    Counters.Counter public totalTickers;

    function deployToken(
        string memory ticker,                // Token ticker (e.g., "ETH", "USDT")
        uint256 maxSupply,                   // Maximum total supply of the token
        uint256 mintLimit,                   // Limit on how many tokens can be minted
        uint256 maxMintPerAddress,           // Maximum tokens an address can mint
        uint256 mintPrice,                   // Price per mint in wei
        uint256 reserve                      // Amount of tokens reserved for the deployer
    ) internal virtual {
        // Ensure a minimum fee of 0.02 ether is paid for deploying a new token
        require(msg.value >= 0.02 ether, "Insufficient deployment fee");

        // Retrieve or create a new ERC20Token struct for the provided ticker
        ERC20Token storage newToken = inscriptions[ticker];

        // Ensure the token doesn't already exist by checking if the deployer is address(0)
        require(newToken.deployer == address(0), "Token already exists");

        // Assign the provided parameters to the new token's properties
        newToken.name = ticker;
        newToken.maxSupply = maxSupply;
        newToken.mintLimit = mintLimit;
        newToken.deployer = msg.sender;             // The address deploying the token
        newToken.deployTime = block.timestamp;      // Timestamp of token deployment
        newToken.maxMintPerAddress = maxMintPerAddress;
        newToken.mintPrice = mintPrice;
        newToken.reserve = reserve;

        // Increment the counter for the total number of tickers created
        totalTickers.increment();

        // Add the token ticker to the list of token names
        tokenNames.push(ticker);

        // Send the ether paid for the deployment to the contract owner
        sendETH(payable(owner), msg.value);

        // If a reserve is specified, allocate tokens to the deployer's balance
        if (reserve != 0) {
            balances[ticker][msg.sender] += reserve;    // Assign reserved tokens to the deployer's balance
            newToken.minted += reserve;                 // Update the total number of minted tokens
            newToken.holders += 1;                      // Increment the holder count
        }
    }

    function inscribeMint(bytes32 mintHash) internal virtual {
        // Retrieve the token's ticker using the provided mint hash
        string memory ticker = mintHexMap[mintHash].ticker;

        // Access the token details from the inscriptions mapping
        ERC20Token storage token = inscriptions[ticker];

        // Ensure the amount sent by the caller matches the mint price for the token
        require(msg.value == token.mintPrice, "Incorrect mint price");

        // If there is a maximum minting limit per address, ensure the user doesn't exceed it
        if (token.maxMintPerAddress != 0) {
            require(
                mintCounts[ticker][msg.sender] + token.mintLimit <= token.maxMintPerAddress,
                "Exceeds max mint per address"
            );
        }
        
        // Ensure the total minted amount after this transaction won't exceed the max supply
        require(
            (token.minted + token.mintLimit) <= token.maxSupply,
            "Exceeds available supply"
        );

        // Update the total minted tokens count
        token.minted += token.mintLimit;

        // Double check that the minted tokens do not exceed the max supply
        require(token.minted <= token.maxSupply, "Minting finished");

        // If this is the first time the caller is minting this token, increment the holders count
        if (balances[ticker][msg.sender] == 0) {
            token.holders += 1;
        }

        // Update the mint count and balance for the caller
        mintCounts[ticker][msg.sender] += token.mintLimit;
        balances[ticker][msg.sender] += token.mintLimit;

        // Send 10% of the mint price to the contract owner
        sendETH(payable(owner), calculatePercentage(msg.value, 10));

        // Send 90% of the mint price to the token deployer
        sendETH(payable(token.deployer), calculatePercentage(msg.value, 90));
    }

    function sendETH(address payable recipient, uint256 amount) private{
        // Attempt to transfer the specified amount of ETH to the recipient
        (bool success, ) = recipient.call{value: amount}("");

        // Revert the transaction if the transfer fails
        require(success, "ETH transfer failed");
    }

    function calculatePercentage(uint256 amount, uint256 percentage) internal pure returns (uint256) {
        // Calculate the percentage of the given amount
        return (amount * percentage) / 100;
    }

    function transferTokens(
        string memory ticker,  // The symbol of the token being transferred
        address from,          // The address of the sender who is transferring the tokens
        address to,            // The address of the recipient who will receive the tokens
        uint256 amount         // The number of tokens to transfer
    ) internal virtual {
        // Retrieve the balance of the sender for the specified token
        uint256 senderBalance = balances[ticker][from];

        // Ensure the sender has enough balance to perform the transfer
        require(senderBalance >= amount, "Insufficient balance for transfer");

        // Perform the transfer operation, subtracting the amount from the sender's balance
        unchecked {
            balances[ticker][from] = senderBalance - amount;
        }

        // If the sender's balance becomes zero after the transfer, reduce the holder count
        if (balances[ticker][from] == 0) {
            inscriptions[ticker].holders -= 1;
        }

        // If the recipient's balance was previously zero and a non-zero amount is transferred, increase the holder count
        if (balances[ticker][to] == 0 && amount > 0) {
            inscriptions[ticker].holders += 1;
        }

        // Add the transferred amount to the recipient's balance
        balances[ticker][to] += amount;
    }


    /**
    * @dev Approves a spender to transfer a specified amount of tokens on behalf of the token holder.
    * 
    * @param ticker The symbol of the token being approved for spending (e.g., "ETH", "USDT").
    * @param from The address of the token holder who is approving the transfer.
    * @param to The address of the spender who is allowed to transfer the tokens.
    * @param amount The maximum number of tokens the spender is allowed to transfer.
    */
    function approveTokens(
        string memory ticker,  // The token symbol for which the approval is being made
        address from,          // The address of the token owner who is giving approval
        address to,            // The address of the spender who is receiving approval
        uint256 amount         // The amount of tokens to approve for the spender
    ) internal virtual {
        // Set the approval amount in the allowances mapping
        allowances[ticker][from][to] = amount;
    }

    /**
    * @dev Transfers tokens from one address to another using the allowance mechanism.
    * 
    * This function checks if the caller has enough allowance to transfer the specified amount of tokens
    * from the `from` address to the `to` address.
    * 
    * @param ticker The symbol of the token being transferred.
    * @param from The address from which tokens will be transferred.
    * @param to The address to which tokens will be transferred.
    * @param amount The number of tokens to transfer from the `from` address to the `to` address.
    */
    function transferTokensFrom(
        string memory ticker,  // The token symbol for the transfer operation
        address from,          // The address from which tokens are being transferred
        address to,            // The address to which tokens are being transferred
        uint256 amount         // The amount of tokens to transfer
    ) internal virtual {
        // Check if the caller has sufficient allowance to perform the transfer
        require(allowances[ticker][from][msg.sender] >= 1, "Insufficient allowance");
        
        // Call the transferTokens function to execute the transfer
        transferTokens(ticker, from, to, amount);
    }


   /**
    * @dev Fallback function that handles incoming Ether and processes the input data.
    * 
    * This function is triggered when the contract receives Ether and no function matches the call.
    * It checks whether the minting process has been deployed for the given input, and if so,
    * it allows only externally owned accounts (EOAs) to inscribe the mint. Otherwise, it calls the
    * internal _inscribe function.
    *
    * @param input The calldata input data containing the minting information as a JSON string.
    * @return An empty byte array.
    */
    fallback(bytes calldata input) external payable returns (bytes memory) {
        // Convert the input data (bytes) into a string
        string memory jsonString = string(input);
        
        // Calculate the hash of the JSON string to identify the mint
        bytes32 mintHash = keccak256(abi.encodePacked(jsonString));
        
        // Check if the minting process has been deployed
        if (mintHexMap[mintHash].deployed) {
            // Ensure that the caller is an externally owned account (EOA)
            require(msg.sender == tx.origin, "Only EOA allowed");
            
            // Call the inscribeMint function to process the minting
            inscribeMint(mintHash);
        } else {
            // If not deployed, call the internal _inscribe function
            _inscribe(jsonString);
        }
        
        // Return an empty byte array
        return "";
    }


   function _inscribe(string memory jsonStr) internal virtual {
        uint256 returnValue;
        JsmnSolLib.Token[] memory tokens;
        (returnValue, tokens, ) = JsmnSolLib.parse(jsonStr, 17);
        require(returnValue == JsmnSolLib.RETURN_SUCCESS, "JSON parsing failed");

        {
        string memory p = JsmnSolLib.getBytes(
            jsonStr,
            tokens[1].start,
            tokens[1].end
        );
        string memory pVal = JsmnSolLib.getBytes(
            jsonStr,
            tokens[2].start,
            tokens[2].end
        );

        string memory op = JsmnSolLib.getBytes(
            jsonStr,
            tokens[3].start,
            tokens[3].end
        );
        string memory tick = JsmnSolLib.getBytes(
            jsonStr,
            tokens[5].start,
            tokens[5].end
        );
        require(
            keccak256(abi.encodePacked(p)) == ERC20_P_HASH &&
                keccak256(abi.encodePacked(pVal)) == ERC20_P_HASH_ERC20 &&
                keccak256(abi.encodePacked(op)) == ERC20_OP_HASH &&
                keccak256(abi.encodePacked(tick)) == ERC20_TICK_HASH,
            "Invalid ERC-20 parameters"
        );
        
        }

        string memory opVal = JsmnSolLib.getBytes(
            jsonStr,
            tokens[4].start,
            tokens[4].end
        );
        string memory tickVal = JsmnSolLib.getBytes(
            jsonStr,
            tokens[6].start,
            tokens[6].end
        );
        if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_TRANSFER) {
            string memory amt = JsmnSolLib.getBytes(
                jsonStr,
                tokens[7].start,
                tokens[7].end
            );
            string memory toKey = JsmnSolLib.getBytes(
                jsonStr,
                tokens[9].start,
                tokens[9].end
            );
            require(
                keccak256(abi.encodePacked(toKey)) ==
                    ERC20_OP_HASH_TRANSFER_TO &&
                    keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH,
                "Invalid transfer parameters"
            );
            string memory amtVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[8].start,
                tokens[8].end
            );
            string memory toVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[10].start,
                tokens[10].end
            );
            transferTokens(
                tickVal,
                msg.sender,
                JsmnSolLib.stringToAddress(toVal),
                uint256(JsmnSolLib.parseInt(amtVal, DECIMALS))
            );

        } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_DEPLOY) {
            string memory max = JsmnSolLib.getBytes(
                jsonStr,
                tokens[7].start,
                tokens[7].end
            );

            string memory lim = JsmnSolLib.getBytes(
                jsonStr,
                tokens[9].start,
                tokens[9].end
            );

            string memory maxMint = JsmnSolLib.getBytes(
                jsonStr,
                tokens[11].start,
                tokens[11].end
            );

            string memory mintPrice = JsmnSolLib.getBytes(
                jsonStr,
                tokens[13].start,
                tokens[13].end
            );

            string memory reserve = JsmnSolLib.getBytes(
                jsonStr,
                tokens[15].start,
                tokens[15].end
            );

            require(
                keccak256(abi.encodePacked(max)) == ERC20_MAX_HASH &&
                    keccak256(abi.encodePacked(lim)) == ERC20_LIM_HASH &&
                    keccak256(abi.encodePacked(maxMint)) == ERC20_MAX_MINT &&
                        keccak256(abi.encodePacked(mintPrice)) == ERC20_MINT_PRICE &&
                            keccak256(abi.encodePacked(reserve)) == ERC20_RESERVE,
                "Invalid deployment parameters"
            );

            string memory maxVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[8].start,
                tokens[8].end
            );
            string memory limVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[10].start,
                tokens[10].end
            );
            string memory mintVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[12].start,
                tokens[12].end
            );
            string memory priceVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[14].start,
                tokens[14].end
            );
            string memory reserveVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[16].start,
                tokens[16].end
            );
            MintERC20 storage mintercData = mintHexMap[ keccak256(abi.encodePacked(mintString(tickVal,limVal)))];
            mintercData.deployed = true;
            mintercData.ticker = tickVal;
            deployToken(
                tickVal,
                uint256(JsmnSolLib.parseInt(maxVal, DECIMALS)),
                uint256(JsmnSolLib.parseInt(limVal, DECIMALS)),
                uint256(JsmnSolLib.parseInt(mintVal, DECIMALS)),
                uint256(JsmnSolLib.parseInt(priceVal, DECIMALS)),
                uint256(JsmnSolLib.parseInt(reserveVal, DECIMALS))
            );
        } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_APPROVE) {
            string memory amt = JsmnSolLib.getBytes(
                jsonStr,
                tokens[7].start,
                tokens[7].end
            );
            string memory toKey = JsmnSolLib.getBytes(
                jsonStr,
                tokens[9].start,
                tokens[9].end
            );
            require(
                keccak256(abi.encodePacked(toKey)) ==
                    ERC20_OP_HASH_TRANSFER_TO &&
                    keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH,
                "Invalid approval parameters"
            );
            string memory amtVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[8].start,
                tokens[8].end
            );
            string memory toVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[10].start,
                tokens[10].end
            );
            approveTokens(
                tickVal,
                msg.sender,
                JsmnSolLib.stringToAddress(toVal),
                uint256(JsmnSolLib.parseInt(amtVal))
            );
        } else if (keccak256(abi.encodePacked(opVal)) == ERC20_OP_HASH_TRANSFERFROM) {
            string memory amt = JsmnSolLib.getBytes(
                jsonStr,
                tokens[7].start,
                tokens[7].end
            );
            string memory toKey = JsmnSolLib.getBytes(
                jsonStr,
                tokens[9].start,
                tokens[9].end
            );
            string memory fromKey = JsmnSolLib.getBytes(
                jsonStr,
                tokens[11].start,
                tokens[11].end
            );
            require(
                keccak256(abi.encodePacked(toKey)) == ERC20_OP_HASH_TRANSFER_TO &&
                keccak256(abi.encodePacked(amt)) == ERC20_AMT_HASH &&
                keccak256(abi.encodePacked(fromKey)) == ERC20_OP_HASH_TRANSFER_FROM,
                "Invalid transferFrom parameters"
            );
            string memory amtVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[8].start,
                tokens[8].end
            );
            string memory toVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[10].start,
                tokens[10].end
            );
            string memory fromVal = JsmnSolLib.getBytes(
                jsonStr,
                tokens[12].start,
                tokens[12].end
            );

            transferTokensFrom(
                tickVal,
                JsmnSolLib.stringToAddress(fromVal),
                JsmnSolLib.stringToAddress(toVal),
                uint256(JsmnSolLib.parseInt(amtVal, DECIMALS))
            );
        } 
    }

    function withdrawETH(address payable _to, uint _amount) external onlyOwner{
        _to.transfer(_amount);
    }

     function withdrawERC20(address token, address to, uint256 value) external onlyOwner{
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    receive() external payable {}

}

File 2 of 4: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 3 of 4: inputData.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract inputData {
    string constant p1 = '{"p":"erc-20","op":"deploy","tick":"';
    string constant m1 = '","max":"';
  
    function mintData(string memory tick, string memory amt)
        public
        pure
        returns (string memory json, bytes memory jsonHex)
    {
       
        json = mintString(tick,amt);
        jsonHex = bytes(json);
    }

    function mintString(string memory tick, string memory amt)
        internal   
        pure
        returns (string memory json)
    {
        string memory p = '{"p":"erc-20","op":"mint","tick":"';
        string memory m = '","amt":"';
        string memory s = '"}';
        json = string(abi.encodePacked(p, tick, m, amt, s));
    }
   
    function transferData(
        string memory tick,
        string memory to,
        string memory amt
    ) public pure returns (string memory json, bytes memory jsonHex) {
        string memory p = '{"p":"erc-20","op":"transfer","tick":"';
        string memory m = '","amt":"';
        string memory m2 = '", "to":"';
        string memory s = '"}';
        json = string(abi.encodePacked(p, tick, m, amt, m2, to, s));
        jsonHex = bytes(json);
    }

    function depyoyData(
        string memory tick,
        string memory max,
        string memory lim,
        string memory maxMint,
        string memory mintPrice,
        string memory reserve
    ) public pure returns (string memory json, bytes memory jsonHex) {
        string memory m2 = '","lim":"';
        string memory m3 = '","maxMint":"';
        string memory m4 = '","mintPrice":"';
        string memory m5 = '","reserve":"';
        string memory s = '"}';
        bytes memory ss= abi.encodePacked(lim, m3, maxMint, m4, mintPrice, m5, reserve, s);
        json = string(abi.encodePacked(p1, tick, m1, max, m2,ss));
        jsonHex = bytes(json);
    }

    function transferFromData(
        string memory tick,
        string memory to,
        string memory amt,
         string memory from
    ) public pure returns (string memory json, bytes memory jsonHex) {
        string memory p = '{"p":"erc-20","op":"transferFrom","tick":"';
        string memory m = '","amt":"';
        string memory m2 = '", "to":"';
         string memory m3 = '", "from":"';
        string memory s = '"}';
        json = string(abi.encodePacked(p, tick, m, amt, m2, to, m3, from, s));
        jsonHex = bytes(json);
    }
    function approveData(
        string memory tick,
        string memory to,
        string memory amt
    ) public pure returns (string memory json, bytes memory jsonHex) {
        string memory p = '{"p":"erc-20","op":"approve","tick":"';
        string memory m = '","amt":"';
        string memory m2 = '", "to":"';
        string memory s = '"}';
        json = string(abi.encodePacked(p, tick, m, amt, m2, to, s));
        jsonHex = bytes(json);
    }
}

File 4 of 4: JsmnSolLib.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

/*
Copyright (c) 2017 Christoph Niemann
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

pragma solidity ^0.8.1;

library JsmnSolLib {
    enum JsmnType {
        UNDEFINED,
        OBJECT,
        ARRAY,
        STRING,
        PRIMITIVE
    }

    uint256 constant RETURN_SUCCESS = 0;
    uint256 constant RETURN_ERROR_INVALID_JSON = 1;
    uint256 constant RETURN_ERROR_PART = 2;
    uint256 constant RETURN_ERROR_NO_MEM = 3;

    struct Token {
        JsmnType jsmnType;
        uint256 start;
        bool startSet;
        uint256 end;
        bool endSet;
        uint8 size;
    }

    struct Parser {
        uint256 pos;
        uint256 toknext;
        int256 toksuper;
    }

    function init(uint256 length)
        internal
        pure
        returns (Parser memory, Token[] memory)
    {
        Parser memory p = Parser(0, 0, -1);
        Token[] memory t = new Token[](length);
        return (p, t);
    }

    function allocateToken(Parser memory parser, Token[] memory tokens)
        internal
        pure
        returns (bool, Token memory)
    {
        if (parser.toknext >= tokens.length) {
            // no more space in tokens
            return (false, tokens[tokens.length - 1]);
        }
        Token memory token = Token(JsmnType.UNDEFINED, 0, false, 0, false, 0);
        tokens[parser.toknext] = token;
        parser.toknext++;
        return (true, token);
    }

    function fillToken(
        Token memory token,
        JsmnType jsmnType,
        uint256 start,
        uint256 end
    ) internal pure {
        token.jsmnType = jsmnType;
        token.start = start;
        token.startSet = true;
        token.end = end;
        token.endSet = true;
        token.size = 0;
    }

    function parseString(
        Parser memory parser,
        Token[] memory tokens,
        bytes memory s
    ) internal pure returns (uint256) {
        uint256 start = parser.pos;
        bool success;
        Token memory token;
        parser.pos++;

        for (; parser.pos < s.length; parser.pos++) {
            bytes1 c = s[parser.pos];

            // Quote -> end of string
            if (c == '"') {
                (success, token) = allocateToken(parser, tokens);
                if (!success) {
                    parser.pos = start;
                    return RETURN_ERROR_NO_MEM;
                }
                fillToken(token, JsmnType.STRING, start + 1, parser.pos);
                return RETURN_SUCCESS;
            }

            if (uint8(c) == 92 && parser.pos + 1 < s.length) {
                // handle escaped characters: skip over it
                parser.pos++;
                if (
                    s[parser.pos] == '"' ||
                    s[parser.pos] == "/" ||
                    s[parser.pos] == "\\" ||
                    s[parser.pos] == "f" ||
                    s[parser.pos] == "r" ||
                    s[parser.pos] == "n" ||
                    s[parser.pos] == "b" ||
                    s[parser.pos] == "t"
                ) {
                    continue;
                } else {
                    // all other values are INVALID
                    parser.pos = start;
                    return (RETURN_ERROR_INVALID_JSON);
                }
            }
        }
        parser.pos = start;
        return RETURN_ERROR_PART;
    }

    function parsePrimitive(
        Parser memory parser,
        Token[] memory tokens,
        bytes memory s
    ) internal pure returns (uint256) {
        bool found = false;
        uint256 start = parser.pos;
        bytes1 c;
        bool success;
        Token memory token;
        for (; parser.pos < s.length; parser.pos++) {
            c = s[parser.pos];
            if (
                c == " " ||
                c == "\t" ||
                c == "\n" ||
                c == "\r" ||
                c == "," ||
                c == 0x7d ||
                c == 0x5d
            ) {
                found = true;
                break;
            }
            if (uint8(c) < 32 || uint8(c) > 127) {
                parser.pos = start;
                return RETURN_ERROR_INVALID_JSON;
            }
        }
        if (!found) {
            parser.pos = start;
            return RETURN_ERROR_PART;
        }

        // found the end
        (success, token) = allocateToken(parser, tokens);
        if (!success) {
            parser.pos = start;
            return RETURN_ERROR_NO_MEM;
        }
        fillToken(token, JsmnType.PRIMITIVE, start, parser.pos);
        parser.pos--;
        return RETURN_SUCCESS;
    }

    function parse(string memory json, uint256 numberElements)
        internal
        pure
        returns (
            uint256,
            Token[] memory tokens,
            uint256
        )
    {
        bytes memory s = bytes(json);
        bool success;
        Parser memory parser;
        (parser, tokens) = init(numberElements);

        // Token memory token;
        uint256 r;
        uint256 count = parser.toknext;
        uint256 i;
        Token memory token;

        for (; parser.pos < s.length; parser.pos++) {
            bytes1 c = s[parser.pos];

            // 0x7b, 0x5b opening curly parentheses or brackets
            if (c == 0x7b || c == 0x5b) {
                count++;
                (success, token) = allocateToken(parser, tokens);
                if (!success) {
                    return (RETURN_ERROR_NO_MEM, tokens, 0);
                }
                if (parser.toksuper != -1) {
                    tokens[uint256(parser.toksuper)].size++;
                }
                token.jsmnType = (c == 0x7b ? JsmnType.OBJECT : JsmnType.ARRAY);
                token.start = parser.pos;
                token.startSet = true;
                parser.toksuper = int256(parser.toknext - 1);
                continue;
            }

            // closing curly parentheses or brackets
            if (c == 0x7d || c == 0x5d) {
                JsmnType tokenType = (
                    c == 0x7d ? JsmnType.OBJECT : JsmnType.ARRAY
                );
                bool isUpdated = false;
                for (i = parser.toknext - 1; i >= 0; i--) {
                    token = tokens[i];
                    if (token.startSet && !token.endSet) {
                        if (token.jsmnType != tokenType) {
                            // found a token that hasn't been closed but from a different type
                            return (RETURN_ERROR_INVALID_JSON, tokens, 0);
                        }
                        parser.toksuper = -1;
                        tokens[i].end = parser.pos + 1;
                        tokens[i].endSet = true;
                        isUpdated = true;
                        break;
                    }
                }
                if (!isUpdated) {
                    return (RETURN_ERROR_INVALID_JSON, tokens, 0);
                }
                for (; i > 0; i--) {
                    token = tokens[i];
                    if (token.startSet && !token.endSet) {
                        parser.toksuper = int256(i);
                        break;
                    }
                }

                if (i == 0) {
                    token = tokens[i];
                    if (token.startSet && !token.endSet) {
                        parser.toksuper = int128(uint128(i));
                    }
                }
                continue;
            }

            // 0x42
            if (c == '"') {
                r = parseString(parser, tokens, s);

                if (r != RETURN_SUCCESS) {
                    return (r, tokens, 0);
                }
                //JsmnError.INVALID;
                count++;
                if (parser.toksuper != -1)
                    tokens[uint256(parser.toksuper)].size++;
                continue;
            }

            // ' ', \r, \t, \n
            if (c == " " || c == 0x11 || c == 0x12 || c == 0x14) {
                continue;
            }

            // 0x3a
            if (c == ":") {
                parser.toksuper = int256(parser.toknext - 1);
                continue;
            }

            if (c == ",") {
                if (
                    parser.toksuper != -1 &&
                    tokens[uint256(parser.toksuper)].jsmnType !=
                    JsmnType.ARRAY &&
                    tokens[uint256(parser.toksuper)].jsmnType != JsmnType.OBJECT
                ) {
                    for (i = parser.toknext - 1; i >= 0; i--) {
                        if (
                            tokens[i].jsmnType == JsmnType.ARRAY ||
                            tokens[i].jsmnType == JsmnType.OBJECT
                        ) {
                            if (tokens[i].startSet && !tokens[i].endSet) {
                                parser.toksuper = int256(i);
                                break;
                            }
                        }
                    }
                }
                continue;
            }

            // Primitive
            if (
                (c >= "0" && c <= "9") ||
                c == "-" ||
                c == "f" ||
                c == "t" ||
                c == "n"
            ) {
                if (parser.toksuper != -1) {
                    token = tokens[uint256(parser.toksuper)];
                    if (
                        token.jsmnType == JsmnType.OBJECT ||
                        (token.jsmnType == JsmnType.STRING && token.size != 0)
                    ) {
                        return (RETURN_ERROR_INVALID_JSON, tokens, 0);
                    }
                }

                r = parsePrimitive(parser, tokens, s);
                if (r != RETURN_SUCCESS) {
                    return (r, tokens, 0);
                }
                count++;
                if (parser.toksuper != -1) {
                    tokens[uint256(parser.toksuper)].size++;
                }
                continue;
            }

            // printable char
            if (c >= 0x20 && c <= 0x7e) {
                return (RETURN_ERROR_INVALID_JSON, tokens, 0);
            }
        }

        return (RETURN_SUCCESS, tokens, parser.toknext);
    }

    function getBytes(
        string memory json,
        uint256 start,
        uint256 end
    ) internal pure returns (string memory) {
        bytes memory s = bytes(json);
        bytes memory result = new bytes(end - start);
        for (uint256 i = start; i < end; i++) {
            result[i - start] = s[i];
        }
        return string(result);
    }

    // parseInt
    function parseInt(string memory _a) internal pure returns (int256) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string memory _a, uint256 _b)
        internal
        pure
        returns (int256)
    {
        bytes memory bresult = bytes(_a);
        int256 mint = 0;
        bool decimals = false;
        bool negative = false;
        for (uint256 i = 0; i < bresult.length; i++) {
            if ((i == 0) && (bresult[i] == "-")) {
                negative = true;
            }
            if ((uint8(bresult[i]) >= 48) && (uint8(bresult[i]) <= 57)) {
                if (decimals) {
                    if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += int256(uint256(uint8(bresult[i]) - 48));
            } else if (uint8(bresult[i]) == 46) decimals = true;
        }
        if (_b > 0) mint *= int256(10**_b);
        if (negative) mint *= -1;
        return mint;
    }

    function uint2str(uint256 i) internal pure returns (string memory) {
        if (i == 0) return "0";
        uint256 j = i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len - 1;
        while (i != 0) {
            bstr[k--] = bytes1(uint8(48 + (i % 10)));
            i /= 10;
        }
        return string(bstr);
    }

    function parseBool(string memory _a) internal pure returns (bool) {
        if (strCompare(_a, "true") == 0) {
            return true;
        } else {
            return false;
        }
    }

    function strCompare(string memory _a, string memory _b)
        internal
        pure
        returns (int256)
    {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint256 minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        for (uint256 i = 0; i < minLength; i++)
            if (a[i] < b[i]) return -1;
            else if (a[i] > b[i]) return 1;
        if (a.length < b.length) return -1;
        else if (a.length > b.length) return 1;
        else return 0;
    }

    function addressToString(address addr)
        internal
        pure
        returns (string memory)
    {
        //Convert addr to bytes
        bytes20 value = bytes20(uint160(addr));
        bytes memory strBytes = new bytes(42);
        //Encode hex prefix
        strBytes[0] = "0";
        strBytes[1] = "x";
        //Encode bytes usig hex encoding
        for (uint256 i = 0; i < 20; i++) {
            uint8 byteValue = uint8(value[i]);
            strBytes[2 + (i << 1)] = encode((byteValue >> 4) & 0x0f);
            strBytes[3 + (i << 1)] = encode(byteValue & 0x0f);
        }
        return string(strBytes);
    }

    function stringToAddress(string memory data)
        internal
        pure
        returns (address)
    {
        bytes memory strBytes = bytes(data);
        require(
            strBytes.length >= 39 && strBytes.length <= 42,
            "Not hex string"
        );
        //Skip prefix
        uint256 start = 0;
        uint256 bytesBegin = 0;
        if (strBytes[1] == "x" || strBytes[1] == "X") {
            start = 2;
        }
        //Special case: 0xabc. should be 0x0abc
        uint160 addrValue = 0;
        uint256 effectPayloadLen = strBytes.length - start;
        if (effectPayloadLen == 39) {
            addrValue += decode(strBytes[start++]);
            bytesBegin++;
        }
        //Main loop
        for (uint256 i = bytesBegin; i < 20; i++) {
            addrValue <<= 8;
            uint8 tmp1 = decode(strBytes[start]);
            uint8 tmp2 = decode(strBytes[start + 1]);
            uint8 combined = (tmp1 << 4) + tmp2;
            addrValue += combined;
            start += 2;
        }

        return address(addrValue);
    }

    function decode(bytes1 asc) private pure returns (uint8) {
        uint8 val = uint8(asc);
        //0-9
        if (val >= 48 && val <= 57) {
            return val - 48;
        }
        //A-F
        if (val >= 65 && val <= 70) {
            return val - 55;
        }
        //a-f
        return val - 87;
    }

    function encode(uint8 num) private pure returns (bytes1) {
        //0-9 -> 0-9
        if (num >= 0 && num <= 9) {
            return bytes1(num + 48);
        }
        //10-15 -> a-f
        return bytes1(num + 87);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"approveData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"max","type":"string"},{"internalType":"string","name":"lim","type":"string"},{"internalType":"string","name":"maxMint","type":"string"},{"internalType":"string","name":"mintPrice","type":"string"},{"internalType":"string","name":"reserve","type":"string"}],"name":"depyoyData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"inscriptions","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"mintLimit","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"deployTime","type":"uint256"},{"internalType":"uint256","name":"holders","type":"uint256"},{"internalType":"uint256","name":"maxMintPerAddress","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint256","name":"reserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"mintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"mintData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTickers","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"}],"name":"transferData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"amt","type":"string"},{"internalType":"string","name":"from","type":"string"}],"name":"transferFromData","outputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"bytes","name":"jsonHex","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561000f575f80fd5b505f80546001600160a01b0319163317905561444d8061002e5f395ff3fe6080604052600436106100e0575f3560e01c80638892ebce1161007e578063c6f487fd11610058578063c6f487fd146103c7578063d676260f146103fc578063f7218c141461041b578063faa6423b1461043a576100e7565b80638892ebce1461032c5780638da5cb5b14610372578063b6603cc7146103a8576100e7565b80634782f779116100ba5780634782f7791461027e578063624a59331461029d5780637ef53091146102ca5780638289573c14610316576100e7565b806306f69c32146101d8578063310495ab1461023157806344004cc11461025d576100e7565b366100e757005b5f3660605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604051949550936101369350859250602001905061372c565b60408051601f1981840301815291815281516020928301205f818152600390935291206001015490915060ff16156101bd573332146101af5760405162461bcd60e51b815260206004820152601060248201526f13db9b1e481153d048185b1b1bddd95960821b60448201526064015b60405180910390fd5b6101b881610459565b6101c6565b6101c6826107d4565b505060408051602081019091525f9052005b3480156101e3575f80fd5b5061021e6101f23660046137fb565b81516020818401810180516002825292820194820194909420919093529091525f908152604090205481565b6040519081526020015b60405180910390f35b34801561023c575f80fd5b5061025061024b36600461384a565b61174b565b604051610228919061388c565b348015610268575f80fd5b5061027c61027736600461389e565b6117f1565b005b348015610289575f80fd5b5061027c6102983660046138dc565b611959565b3480156102a8575f80fd5b506102bc6102b7366004613906565b6119e5565b604051610228929190613988565b3480156102d5575f80fd5b5061021e6102e43660046139b5565b825160208185018101805160048252928201958201959095209190945283525f91825260408083209093528152205481565b348015610321575f80fd5b5060075461021e9081565b348015610337575f80fd5b5061021e6103463660046137fb565b81516020818401810180516001825292820194820194909420919093529091525f908152604090205481565b34801561037d575f80fd5b505f54610390906001600160a01b031681565b6040516001600160a01b039091168152602001610228565b3480156103b3575f80fd5b506102bc6103c2366004613a15565b611a97565b3480156103d2575f80fd5b506103e66103e1366004613b00565b611bfd565b6040516102289a99989796959493929190613b3a565b348015610407575f80fd5b506102bc610416366004613906565b611ce9565b348015610426575f80fd5b506102bc610435366004613b9c565b611d7c565b348015610445575f80fd5b506102bc610454366004613bfc565b611d93565b5f818152600360205260408120805461047190613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461049d90613ca2565b80156104e85780601f106104bf576101008083540402835291602001916104e8565b820191905f5260205f20905b8154815290600101906020018083116104cb57829003601f168201915b505050505090505f600582604051610500919061372c565b908152602001604051809103902090508060080154341461055a5760405162461bcd60e51b8152602060048201526014602482015273496e636f7272656374206d696e7420707269636560601b60448201526064016101a6565b6007810154156105f1578060070154816002015460028460405161057e919061372c565b9081526040805160209281900383019020335f90815292529020546105a39190613cee565b11156105f15760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178206d696e742070657220616464726573730000000060448201526064016101a6565b80600101548160020154826003015461060a9190613cee565b11156106585760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520737570706c79000000000000000060448201526064016101a6565b8060020154816003015f82825461066f9190613cee565b90915550506001810154600382015411156106bf5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016101a6565b6001826040516106cf919061372c565b9081526040805160209281900383019020335f9081529252812054900361070a576001816006015f8282546107049190613cee565b90915550505b806002015460028360405161071f919061372c565b9081526040805160209281900383019020335f908152925281208054909190610749908490613cee565b9091555050600281015460405160019061076490859061372c565b9081526040805160209281900383019020335f90815292528120805490919061078e908490613cee565b90915550505f546107b2906001600160a01b03166107ad34600a611e83565b611ea3565b60048101546107cf906001600160a01b03166107ad34605a611e83565b505050565b5f60606107e2836011611f38565b509092509050811561082c5760405162461bcd60e51b81526020600482015260136024820152721294d3d3881c185c9cda5b99c819985a5b1959606a1b60448201526064016101a6565b5f610874848360018151811061084457610844613d01565b6020026020010151602001518460018151811061086357610863613d01565b602002602001015160600151612724565b90505f6108ad858460028151811061088e5761088e613d01565b6020026020010151602001518560028151811061086357610863613d01565b90505f6108e686856003815181106108c7576108c7613d01565b6020026020010151602001518660038151811061086357610863613d01565b90505f61091f878660058151811061090057610900613d01565b6020026020010151602001518760058151811061086357610863613d01565b604051600760fc1b60208201529091506021016040516020818303038152906040528051906020012084604051602001610959919061372c565b604051602081830303815290604052805190602001201480156109cb57506040516506572632d32360d41b602082015260260160405160208183030381529060405280519060200120836040516020016109b3919061372c565b60405160208183030381529060405280519060200120145b8015610a2257506040516106f760f41b60208201526022016040516020818303038152906040528051906020012082604051602001610a0a919061372c565b60405160208183030381529060405280519060200120145b8015610a7b5750604051637469636b60e01b60208201526024016040516020818303038152906040528051906020012081604051602001610a63919061372c565b60405160208183030381529060405280519060200120145b610ac75760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204552432d323020706172616d65746572730000000000000060448201526064016101a6565b505050505f610b028483600481518110610ae357610ae3613d01565b6020026020010151602001518460048151811061086357610863613d01565b90505f610b3b8584600681518110610b1c57610b1c613d01565b6020026020010151602001518560068151811061086357610863613d01565b604051673a3930b739b332b960c11b60208201529091506028016040516020818303038152906040528051906020012082604051602001610b7c919061372c565b6040516020818303038152906040528051906020012003610d96575f610bce8685600781518110610baf57610baf613d01565b6020026020010151602001518660078151811061086357610863613d01565b90505f610c078786600981518110610be857610be8613d01565b6020026020010151602001518760098151811061086357610863613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001610c42919061372c565b60405160208183030381529060405280519060200120148015610cb1575060405162185b5d60ea1b60208201526023016040516020818303038152906040528051906020012082604051602001610c99919061372c565b60405160208183030381529060405280519060200120145b610cfd5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207472616e7366657220706172616d6574657273000000000060448201526064016101a6565b5f610d348887600881518110610d1557610d15613d01565b6020026020010151602001518860088151811061086357610863613d01565b90505f610d6d8988600a81518110610d4e57610d4e613d01565b60200260200101516020015189600a8151811061086357610863613d01565b9050610d8d8533610d7d846127f1565b610d888660126129be565b612b2a565b50505050611744565b604051656465706c6f7960d01b60208201526026016040516020818303038152906040528051906020012082604051602001610dd2919061372c565b60405160208183030381529060405280519060200120036112a4575f610e058685600781518110610baf57610baf613d01565b90505f610e1f8786600981518110610be857610be8613d01565b90505f610e588887600b81518110610e3957610e39613d01565b60200260200101516020015188600b8151811061086357610863613d01565b90505f610e918988600d81518110610e7257610e72613d01565b60200260200101516020015189600d8151811061086357610863613d01565b90505f610eca8a89600f81518110610eab57610eab613d01565b6020026020010151602001518a600f8151811061086357610863613d01565b604051620dac2f60eb1b60208201529091506023016040516020818303038152906040528051906020012085604051602001610f06919061372c565b60405160208183030381529060405280519060200120148015610f755750604051626c696d60e81b60208201526023016040516020818303038152906040528051906020012084604051602001610f5d919061372c565b60405160208183030381529060405280519060200120145b8015610fd15750604051661b585e135a5b9d60ca1b60208201526027016040516020818303038152906040528051906020012083604051602001610fb9919061372c565b60405160208183030381529060405280519060200120145b801561102f5750604051686d696e74507269636560b81b60208201526029016040516020818303038152906040528051906020012082604051602001611017919061372c565b60405160208183030381529060405280519060200120145b801561108b5750604051667265736572766560c81b60208201526027016040516020818303038152906040528051906020012081604051602001611073919061372c565b60405160208183030381529060405280519060200120145b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206465706c6f796d656e7420706172616d657465727300000060448201526064016101a6565b5f61110e8b8a6008815181106110ef576110ef613d01565b6020026020010151602001518b60088151811061086357610863613d01565b90505f6111478c8b600a8151811061112857611128613d01565b6020026020010151602001518c600a8151811061086357610863613d01565b90505f6111808d8c600c8151811061116157611161613d01565b6020026020010151602001518d600c8151811061086357610863613d01565b90505f6111b98e8d600e8151811061119a5761119a613d01565b6020026020010151602001518e600e8151811061086357610863613d01565b90505f6111f28f8e6010815181106111d3576111d3613d01565b6020026020010151602001518f60108151811061086357610863613d01565b90505f60035f6112028e88612d3a565b604051602001611212919061372c565b60408051601f198184030181529181528151602092830120835290820192909252015f206001808201805460ff191690911790559050806112538d82613d62565b506112948c6112638860126129be565b61126e8860126129be565b6112798860126129be565b6112848860126129be565b61128f8860126129be565b612dc3565b5050505050505050505050611744565b60405166617070726f766560c81b602082015260270160405160208183030381529060405280519060200120826040516020016112e1919061372c565b6040516020818303038152906040528051906020012003611474575f6113148685600781518110610baf57610baf613d01565b90505f61132e8786600981518110610be857610be8613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001611369919061372c565b604051602081830303815290604052805190602001201480156113d8575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120826040516020016113c0919061372c565b60405160208183030381529060405280519060200120145b6114245760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420617070726f76616c20706172616d6574657273000000000060448201526064016101a6565b5f61143c8887600881518110610d1557610d15613d01565b90505f6114568988600a81518110610d4e57610d4e613d01565b9050610d8d8533611466846127f1565b61146f86612fbc565b612fc7565b6040516b7472616e7366657246726f6d60a01b6020820152602c0160405160208183030381529060405280519060200120826040516020016114b6919061372c565b6040516020818303038152906040528051906020012003611744575f6114e98685600781518110610baf57610baf613d01565b90505f6115038786600981518110610be857610be8613d01565b90505f61151d8887600b81518110610e3957610e39613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012082604051602001611558919061372c565b604051602081830303815290604052805190602001201480156115c7575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120836040516020016115af919061372c565b60405160208183030381529060405280519060200120145b801561162057506040516366726f6d60e01b60208201526024016040516020818303038152906040528051906020012081604051602001611608919061372c565b60405160208183030381529060405280519060200120145b61166c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207472616e7366657246726f6d20706172616d65746572730060448201526064016101a6565b5f6116a3898860088151811061168457611684613d01565b6020026020010151602001518960088151811061086357610863613d01565b90505f6116dc8a89600a815181106116bd576116bd613d01565b6020026020010151602001518a600a8151811061086357610863613d01565b90505f6117158b8a600c815181106116f6576116f6613d01565b6020026020010151602001518b600c8151811061086357610863613d01565b905061173d87611724836127f1565b61172d856127f1565b6117388760126129be565b613010565b5050505050505b5050505050565b6006818154811061175a575f80fd5b905f5260205f20015f91509050805461177290613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90613ca2565b80156117e95780601f106117c0576101008083540402835291602001916117e9565b820191905f5260205f20905b8154815290600101906020018083116117cc57829003601f168201915b505050505081565b5f546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118a5919061372c565b5f604051808303815f865af19150503d805f81146118de576040519150601f19603f3d011682016040523d82523d5f602084013e6118e3565b606091505b509150915081801561190d57508051158061190d57508080602001905181019061190d9190613e1e565b6117445760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016101a6565b5f546001600160a01b031633146119b25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156107cf573d5f803e3d5ffd5b6060805f6040518060600160405280602581526020016143cd6025913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b60408051601f19818403018152919052998a9950975050505050505050565b6060805f604051806040016040528060098152602001681116113634b6911d1160b91b81525090505f6040518060400160405280600d81526020016c11161136b0bc26b4b73a111d1160991b81525090505f6040518060400160405280600f81526020016e11161136b4b73a283934b1b2911d1160891b81525090505f6040518060400160405280600d81526020016c1116113932b9b2b93b32911d1160991b81525090505f60405180604001604052806002815260200161227d60f01b81525090505f8b858c868d878e88604051602001611b7a989796959493929190613ece565b60408051601f198184030181526060830190915260248083529092506143a960208301398e6040518060400160405280600981526020016811161136b0bc111d1160b91b8152508f8985604051602001611bd996959493929190613f72565b60408051601f198184030181529190529e8f9e509c50505050505050505050505050565b8051602081830181018051600582529282019190930120915280548190611c2390613ca2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f90613ca2565b8015611c9a5780601f10611c7157610100808354040283529160200191611c9a565b820191905f5260205f20905b815481529060010190602001808311611c7d57829003601f168201915b50505060018401546002850154600386015460048701546005880154600689015460078a015460088b01546009909b0154999a96999598509396506001600160a01b039092169490939192918a565b6060805f6040518060600160405280602681526020016143f26026913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b606080611d898484612d3a565b9485945092505050565b6060805f6040518060600160405280602a815260200161437f602a913990505f6040518060400160405280600981526020016811161130b6ba111d1160b91b81525090505f60405180604001604052806009815260200168111610113a37911d1160b91b81525090505f6040518060400160405280600b81526020016a11161011333937b6911d1160a91b81525090505f60405180604001604052806002815260200161227d60f01b8152509050848b858b868e878e88604051602001611e6299989796959493929190613ff0565b60408051601f198184030181529190529b8c9b509950505050505050505050565b5f6064611e9083856140b0565b611e9a91906140c7565b90505b92915050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eec576040519150601f19603f3d011682016040523d82523d5f602084013e611ef1565b606091505b50509050806107cf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016101a6565b5f60605f808590505f611f6260405180606001604052805f81526020015f81526020015f81525090565b611f6b876130a9565b60208201519096509091505f9081611f816136d5565b86518551101561270d575f87865f015181518110611fa157611fa1613d01565b01602001516001600160f81b0319169050607b60f81b811480611fd15750605b60f81b6001600160f81b03198216145b156120c35783611fe0816140e6565b945050611fed868b61314b565b90975091508661200c5750600399505f975061271d9650505050505050565b85604001515f191461204e578986604001518151811061202e5761202e613d01565b602002602001015160a0018051809190612047906140fe565b60ff169052505b607b60f81b6001600160f81b031982161461206a57600261206d565b60015b829060048111156120805761208061411c565b908160048111156120935761209361411c565b9052508551602080840191909152600160408401819052908701516120b89190614130565b6040870152506126f9565b607d60f81b6001600160f81b0319821614806120ec5750605d60f81b6001600160f81b03198216145b156122d7575f607d60f81b6001600160f81b031983161461210e576002612111565b60015b90505f600188602001516121259190614130565b94505b8b858151811061213a5761213a613d01565b602002602001015193508360400151801561215757508360800151155b156122035781600481111561216e5761216e61411c565b845160048111156121815761218161411c565b1461219d575060019b505f995061271d98505050505050505050565b5f19604089015287516121b1906001613cee565b8c86815181106121c3576121c3613d01565b6020026020010151606001818152505060018c86815181106121e7576121e7613d01565b6020908102919091010151901515608090910152506001612215565b8461220d81614143565b955050612128565b80612231575060019b505f995061271d98505050505050505050565b8415612289578b858151811061224957612249613d01565b602002602001015193508360400151801561226657508360800151155b156122775760408801859052612289565b8461228181614143565b955050612231565b845f036122cf578b85815181106122a2576122a2613d01565b60200260200101519350836040015180156122bf57508360800151155b156122cf57600f85900b60408901525b5050506126f9565b6001600160f81b03198116601160f91b03612367576122f7868b8a613206565b9450841561231257509298505f965061271d95505050505050565b8361231c816140e6565b94505085604001515f1914612361578986604001518151811061234157612341613d01565b602002602001015160a001805180919061235a906140fe565b60ff169052505b506126f9565b600160fd1b6001600160f81b0319821614806123905750601160f81b6001600160f81b03198216145b806123a85750600960f91b6001600160f81b03198216145b806123c05750600560fa1b6001600160f81b03198216145b156123cb57506126f9565b6001600160f81b03198116601d60f91b036123f157600186602001516120b89190614130565b6001600160f81b03198116600b60fa1b0361257a5785604001515f191415801561244d575060028a87604001518151811061242e5761242e613d01565b60200260200101515f0151600481111561244a5761244a61411c565b14155b801561248b575060018a87604001518151811061246c5761246c613d01565b60200260200101515f015160048111156124885761248861411c565b14155b1561236157600186602001516124a19190614130565b92505b60028a84815181106124b8576124b8613d01565b60200260200101515f015160048111156124d4576124d461411c565b148061250d575060018a84815181106124ef576124ef613d01565b60200260200101515f0151600481111561250b5761250b61411c565b145b156125685789838151811061252457612524613d01565b6020026020010151604001518015612557575089838151811061254957612549613d01565b602002602001015160800151155b156125685760408601839052612361565b8261257281614143565b9350506124a4565b600360fc1b6001600160f81b03198216108015906125a65750603960f81b6001600160f81b0319821611155b806125be5750602d60f81b6001600160f81b03198216145b806125d65750603360f91b6001600160f81b03198216145b806125ee5750601d60fa1b6001600160f81b03198216145b806126065750603760f91b6001600160f81b03198216145b156126b15785604001515f19146126a6578986604001518151811061262d5761262d613d01565b602002602001015191506001600481111561264a5761264a61411c565b8251600481111561265d5761265d61411c565b148061268c57506003825160048111156126795761267961411c565b14801561268c575060a082015160ff1615155b156126a65750600199505f975061271d9650505050505050565b6122f7868b8a61349e565b600160fd1b6001600160f81b03198216108015906126dd5750603f60f91b6001600160f81b0319821611155b156126f75750600199505f975061271d9650505050505050565b505b845185612705826140e6565b905250611f81565b50505050602001515f9550925050505b9250925092565b6060835f6127328585614130565b67ffffffffffffffff81111561274a5761274a613747565b6040519080825280601f01601f191660200182016040528015612774576020820181803683370190505b509050845b848110156127e55782818151811061279357612793613d01565b01602001516001600160f81b031916826127ad8884614130565b815181106127bd576127bd613d01565b60200101906001600160f81b03191690815f1a905350806127dd816140e6565b915050612779565b509150505b9392505050565b5f80829050602781511015801561280a5750602a815111155b6128475760405162461bcd60e51b815260206004820152600e60248201526d4e6f742068657820737472696e6760901b60448201526064016101a6565b5f808260018151811061285c5761285c613d01565b6020910101516001600160f81b031916600f60fb1b14806128a257508260018151811061288b5761288b613d01565b6020910101516001600160f81b031916600b60fb1b145b156128ac57600291505b5f808385516128bb9190614130565b905080602703612916576128f985856128d3816140e6565b9650815181106128e5576128e5613d01565b01602001516001600160f81b031916613626565b6129069060ff1683614158565b915082612912816140e6565b9350505b825b60148110156129b2576008836001600160a01b0316901b92505f6129478787815181106128e5576128e5613d01565b90505f61296988612959896001613cee565b815181106128e5576128e5613d01565b90505f61297e82610ff0600486901b1661417f565b905061298d60ff821687614158565b955061299a600289613cee565b975050505080806129aa906140e6565b915050612918565b50909695505050505050565b5f82818080805b8451811015612aec5780158015612a0057508481815181106129e9576129e9613d01565b6020910101516001600160f81b031916602d60f81b145b15612a0a57600191505b6030858281518110612a1e57612a1e613d01565b016020015160f81c10801590612a4e57506039858281518110612a4357612a43613d01565b016020015160f81c11155b15612ab4578215612a6d578615612aec5786612a6981614143565b9750505b612a78600a85614198565b93506030858281518110612a8e57612a8e613d01565b0160200151612aa0919060f81c6141c7565b612aad9060ff16856141e0565b9350612ada565b848181518110612ac657612ac6613d01565b016020015160f81c602e03612ada57600192505b80612ae4816140e6565b9150506129c5565b508515612b0b57612afe86600a6142e7565b612b089084614198565b92505b8015612b1f57612b1c5f1984614198565b92505b509095945050505050565b5f600185604051612b3b919061372c565b90815260408051602092819003830190206001600160a01b0387165f9081529252902054905081811015612bbb5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742062616c616e636520666f72207472616e7366656044820152603960f91b60648201526084016101a6565b818103600186604051612bce919061372c565b9081526040805191829003602090810183206001600160a01b0389165f90815291522091909155600190612c0390879061372c565b90815260408051602092819003830190206001600160a01b0387165f90815292528120549003612c64576001600586604051612c3f919061372c565b90815260200160405180910390206006015f828254612c5e9190614130565b90915550505b600185604051612c74919061372c565b90815260408051602092819003830190206001600160a01b0386165f9081529252902054158015612ca457505f82115b15612ce0576001600586604051612cbb919061372c565b90815260200160405180910390206006015f828254612cda9190613cee565b90915550505b81600186604051612cf1919061372c565b90815260200160405180910390205f856001600160a01b03166001600160a01b031681526020019081526020015f205f828254612d2e9190613cee565b90915550505050505050565b60605f60405180606001604052806022815260200161435d60229139604080518082018252600981526811161130b6ba111d1160b91b602080830191909152825180840184526002815261227d60f01b8183015292519394509092612da9918591899186918a918791016142f2565b604051602081830303815290604052935050505092915050565b66470de4df820000341015612e1a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706c6f796d656e7420666565000000000060448201526064016101a6565b5f600587604051612e2b919061372c565b90815260405190819003602001902060048101549091506001600160a01b031615612e8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b60448201526064016101a6565b80612e9a8882613d62565b5060018101869055600281018590556004810180546001600160a01b0319163317905542600582015560078082018590556008820184905560098201839055612ee69080546001019055565b600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01612f218882613d62565b505f54612f37906001600160a01b031634611ea3565b8115612fb35781600188604051612f4e919061372c565b9081526040805160209281900383019020335f908152925281208054909190612f78908490613cee565b9250508190555081816003015f828254612f929190613cee565b925050819055506001816006015f828254612fad9190613cee565b90915550505b50505050505050565b5f611e9d825f6129be565b80600485604051612fd8919061372c565b90815260408051602092819003830190206001600160a01b039687165f90815290835281812095909616865293905291909220555050565b6001600485604051613022919061372c565b90815260408051602092819003830190206001600160a01b0387165f90815290835281812033825290925290205410156130975760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b60448201526064016101a6565b6130a384848484612b2a565b50505050565b6130ca60405180606001604052805f81526020015f81526020015f81525090565b60605f60405180606001604052805f81526020015f81526020015f1981525090505f8467ffffffffffffffff81111561310557613105613747565b60405190808252806020026020018201604052801561313e57816020015b61312b6136d5565b8152602001906001900390816131235790505b5091959194509092505050565b5f6131546136d5565b8251846020015110613191575f83600185516131709190614130565b8151811061318057613180613d01565b6020026020010151915091506131ff565b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a08201529085015184518291869181106131d8576131d8613d01565b60200260200101819052508460200180518091906131f5906140e6565b9052506001925090505b9250929050565b82515f90816132136136d5565b86518761321f826140e6565b9052505b845187511015613490575f85885f01518151811061324357613243613d01565b01602001516001600160f81b0319169050601160f91b8190036132a55761326a888861314b565b9093509150826132815750505084525060036127ea565b613299826003613292876001613cee565b8b51613684565b5f9450505050506127ea565b605c60f882901c1480156132c55750855188516132c3906001613cee565b105b1561347a578751886132d6826140e6565b9052508751865187919081106132ee576132ee613d01565b6020910101516001600160f81b031916601160f91b1480613336575085885f01518151811061331f5761331f613d01565b6020910101516001600160f81b031916602f60f81b145b80613368575085885f01518151811061335157613351613d01565b6020910101516001600160f81b031916601760fa1b145b8061339a575085885f01518151811061338357613383613d01565b6020910101516001600160f81b031916603360f91b145b806133cc575085885f0151815181106133b5576133b5613d01565b6020910101516001600160f81b031916603960f91b145b806133fe575085885f0151815181106133e7576133e7613d01565b6020910101516001600160f81b031916603760f91b145b80613430575085885f01518151811061341957613419613d01565b6020910101516001600160f81b031916603160f91b145b80613462575085885f01518151811061344b5761344b613d01565b6020910101516001600160f81b031916601d60fa1b145b1561346d575061347c565b50505084525060016127ea565b505b865187613488826140e6565b905250613223565b505084525060029392505050565b82515f90819081806134ae6136d5565b8651895110156135c25786895f0151815181106134cd576134cd613d01565b01602001516001600160f81b0319169250600160fd1b8314806134fd5750600960f81b6001600160f81b03198416145b806135155750600560f91b6001600160f81b03198416145b8061352d5750600d60f81b6001600160f81b03198416145b806135455750600b60fa1b6001600160f81b03198416145b8061355d5750607d60f81b6001600160f81b03198416145b806135755750605d60f81b6001600160f81b03198416145b1561358357600194506135c2565b602060f884901c108061359a5750607f60f884901c115b156135ae57505050855250600190506127ea565b8851896135ba826140e6565b9052506134ae565b846135d657505050855250600290506127ea565b6135e0898961314b565b9092509050816135f957505050855250600390506127ea565b613609816004868c5f0151613684565b88518961361582614143565b9052505f9998505050505050505050565b5f60f882901c60308110801590613641575060398160ff1611155b15613651576127ea6030826141c7565b60418160ff1610158015613669575060468160ff1611155b15613679576127ea6037826141c7565b6127ea6057826141c7565b838360048111156136975761369761411c565b908160048111156136aa576136aa61411c565b905250602084019190915260016040840181905260608401919091526080830152505f60a090910152565b6040805160c08101909152805f81525f6020820181905260408201819052606082018190526080820181905260a09091015290565b5f5b8381101561372457818101518382015260200161370c565b50505f910152565b5f825161373d81846020870161370a565b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261376a575f80fd5b813567ffffffffffffffff8082111561378557613785613747565b604051601f8301601f19908116603f011681019082821181831017156137ad576137ad613747565b816040528381528660208588010111156137c5575f80fd5b836020870160208301375f602085830101528094505050505092915050565b6001600160a01b03811681146137f8575f80fd5b50565b5f806040838503121561380c575f80fd5b823567ffffffffffffffff811115613822575f80fd5b61382e8582860161375b565b925050602083013561383f816137e4565b809150509250929050565b5f6020828403121561385a575f80fd5b5035919050565b5f815180845261387881602086016020860161370a565b601f01601f19169290920160200192915050565b602081525f611e9a6020830184613861565b5f805f606084860312156138b0575f80fd5b83356138bb816137e4565b925060208401356138cb816137e4565b929592945050506040919091013590565b5f80604083850312156138ed575f80fd5b82356138f8816137e4565b946020939093013593505050565b5f805f60608486031215613918575f80fd5b833567ffffffffffffffff8082111561392f575f80fd5b61393b8783880161375b565b94506020860135915080821115613950575f80fd5b61395c8783880161375b565b93506040860135915080821115613971575f80fd5b5061397e8682870161375b565b9150509250925092565b604081525f61399a6040830185613861565b82810360208401526139ac8185613861565b95945050505050565b5f805f606084860312156139c7575f80fd5b833567ffffffffffffffff8111156139dd575f80fd5b6139e98682870161375b565b93505060208401356139fa816137e4565b91506040840135613a0a816137e4565b809150509250925092565b5f805f805f8060c08789031215613a2a575f80fd5b863567ffffffffffffffff80821115613a41575f80fd5b613a4d8a838b0161375b565b97506020890135915080821115613a62575f80fd5b613a6e8a838b0161375b565b96506040890135915080821115613a83575f80fd5b613a8f8a838b0161375b565b95506060890135915080821115613aa4575f80fd5b613ab08a838b0161375b565b94506080890135915080821115613ac5575f80fd5b613ad18a838b0161375b565b935060a0890135915080821115613ae6575f80fd5b50613af389828a0161375b565b9150509295509295509295565b5f60208284031215613b10575f80fd5b813567ffffffffffffffff811115613b26575f80fd5b613b328482850161375b565b949350505050565b5f610140808352613b4d8184018e613861565b602084019c909c525050604081019890985260608801969096526001600160a01b0394909416608087015260a086019290925260c085015260e084015261010083015261012090910152919050565b5f8060408385031215613bad575f80fd5b823567ffffffffffffffff80821115613bc4575f80fd5b613bd08683870161375b565b93506020850135915080821115613be5575f80fd5b50613bf28582860161375b565b9150509250929050565b5f805f8060808587031215613c0f575f80fd5b843567ffffffffffffffff80821115613c26575f80fd5b613c328883890161375b565b95506020870135915080821115613c47575f80fd5b613c538883890161375b565b94506040870135915080821115613c68575f80fd5b613c748883890161375b565b93506060870135915080821115613c89575f80fd5b50613c968782880161375b565b91505092959194509250565b600181811c90821680613cb657607f821691505b602082108103613cd457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611e9d57611e9d613cda565b634e487b7160e01b5f52603260045260245ffd5b601f8211156107cf575f81815260208120601f850160051c81016020861015613d3b5750805b601f850160051c820191505b81811015613d5a57828155600101613d47565b505050505050565b815167ffffffffffffffff811115613d7c57613d7c613747565b613d9081613d8a8454613ca2565b84613d15565b602080601f831160018114613dc3575f8415613dac5750858301515b5f19600386901b1c1916600185901b178555613d5a565b5f85815260208120601f198616915b82811015613df157888601518255948401946001909101908401613dd2565b5085821015613e0e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215613e2e575f80fd5b815180151581146127ea575f80fd5b5f88516020613e4f8285838e0161370a565b895191840191613e628184848e0161370a565b8951920191613e748184848d0161370a565b8851920191613e868184848c0161370a565b8751920191613e988184848b0161370a565b8651920191613eaa8184848a0161370a565b8551920191613ebc818484890161370a565b919091019a9950505050505050505050565b5f89516020613ee08285838f0161370a565b8a5191840191613ef38184848f0161370a565b8a51920191613f058184848e0161370a565b8951920191613f178184848d0161370a565b8851920191613f298184848c0161370a565b8751920191613f3b8184848b0161370a565b8651920191613f4d8184848a0161370a565b8551920191613f5f818484890161370a565b919091019b9a5050505050505050505050565b5f87516020613f848285838d0161370a565b885191840191613f978184848d0161370a565b8851920191613fa98184848c0161370a565b8751920191613fbb8184848b0161370a565b8651920191613fcd8184848a0161370a565b8551920191613fdf818484890161370a565b919091019998505050505050505050565b5f8a51614001818460208f0161370a565b8a516140138183860160208f0161370a565b8a519184010190614028818360208e0161370a565b895161403a8183850160208e0161370a565b8951929091010190614050818360208c0161370a565b87516140628183850160208c0161370a565b8751929091010190614078818360208a0161370a565b855161408a8183850160208a0161370a565b85519290910101906140a081836020880161370a565b019b9a5050505050505050505050565b8082028115828204841417611e9d57611e9d613cda565b5f826140e157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016140f7576140f7613cda565b5060010190565b5f60ff821660ff810361411357614113613cda565b60010192915050565b634e487b7160e01b5f52602160045260245ffd5b81810381811115611e9d57611e9d613cda565b5f8161415157614151613cda565b505f190190565b6001600160a01b0381811683821601908082111561417857614178613cda565b5092915050565b60ff8181168382160190811115611e9d57611e9d613cda565b8082025f8212600160ff1b841416156141b3576141b3613cda565b8181058314821517611e9d57611e9d613cda565b60ff8281168282160390811115611e9d57611e9d613cda565b8082018281125f8312801582168215821617156141ff576141ff613cda565b505092915050565b600181815b8085111561424157815f190482111561422757614227613cda565b8085161561423457918102915b93841c939080029061420c565b509250929050565b5f8261425757506001611e9d565b8161426357505f611e9d565b816001811461427957600281146142835761429f565b6001915050611e9d565b60ff84111561429457614294613cda565b50506001821b611e9d565b5060208310610133831016604e8410600b84101617156142c2575081810a611e9d565b6142cc8383614207565b805f19048211156142df576142df613cda565b029392505050565b5f611e9a8383614249565b5f8651614303818460208b0161370a565b865190830190614317818360208b0161370a565b865191019061432a818360208a0161370a565b855191019061433d81836020890161370a565b845191019061435081836020880161370a565b0197965050505050505056fe7b2270223a226572632d3230222c226f70223a226d696e74222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e7366657246726f6d222c227469636b223a227b2270223a226572632d3230222c226f70223a226465706c6f79222c227469636b223a227b2270223a226572632d3230222c226f70223a22617070726f7665222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e73666572222c227469636b223a22a26469706673582212202514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b11864736f6c63430008140033

Deployed Bytecode

0x6080604052600436106100e0575f3560e01c80638892ebce1161007e578063c6f487fd11610058578063c6f487fd146103c7578063d676260f146103fc578063f7218c141461041b578063faa6423b1461043a576100e7565b80638892ebce1461032c5780638da5cb5b14610372578063b6603cc7146103a8576100e7565b80634782f779116100ba5780634782f7791461027e578063624a59331461029d5780637ef53091146102ca5780638289573c14610316576100e7565b806306f69c32146101d8578063310495ab1461023157806344004cc11461025d576100e7565b366100e757005b5f3660605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604051949550936101369350859250602001905061372c565b60408051601f1981840301815291815281516020928301205f818152600390935291206001015490915060ff16156101bd573332146101af5760405162461bcd60e51b815260206004820152601060248201526f13db9b1e481153d048185b1b1bddd95960821b60448201526064015b60405180910390fd5b6101b881610459565b6101c6565b6101c6826107d4565b505060408051602081019091525f9052005b3480156101e3575f80fd5b5061021e6101f23660046137fb565b81516020818401810180516002825292820194820194909420919093529091525f908152604090205481565b6040519081526020015b60405180910390f35b34801561023c575f80fd5b5061025061024b36600461384a565b61174b565b604051610228919061388c565b348015610268575f80fd5b5061027c61027736600461389e565b6117f1565b005b348015610289575f80fd5b5061027c6102983660046138dc565b611959565b3480156102a8575f80fd5b506102bc6102b7366004613906565b6119e5565b604051610228929190613988565b3480156102d5575f80fd5b5061021e6102e43660046139b5565b825160208185018101805160048252928201958201959095209190945283525f91825260408083209093528152205481565b348015610321575f80fd5b5060075461021e9081565b348015610337575f80fd5b5061021e6103463660046137fb565b81516020818401810180516001825292820194820194909420919093529091525f908152604090205481565b34801561037d575f80fd5b505f54610390906001600160a01b031681565b6040516001600160a01b039091168152602001610228565b3480156103b3575f80fd5b506102bc6103c2366004613a15565b611a97565b3480156103d2575f80fd5b506103e66103e1366004613b00565b611bfd565b6040516102289a99989796959493929190613b3a565b348015610407575f80fd5b506102bc610416366004613906565b611ce9565b348015610426575f80fd5b506102bc610435366004613b9c565b611d7c565b348015610445575f80fd5b506102bc610454366004613bfc565b611d93565b5f818152600360205260408120805461047190613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461049d90613ca2565b80156104e85780601f106104bf576101008083540402835291602001916104e8565b820191905f5260205f20905b8154815290600101906020018083116104cb57829003601f168201915b505050505090505f600582604051610500919061372c565b908152602001604051809103902090508060080154341461055a5760405162461bcd60e51b8152602060048201526014602482015273496e636f7272656374206d696e7420707269636560601b60448201526064016101a6565b6007810154156105f1578060070154816002015460028460405161057e919061372c565b9081526040805160209281900383019020335f90815292529020546105a39190613cee565b11156105f15760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d6178206d696e742070657220616464726573730000000060448201526064016101a6565b80600101548160020154826003015461060a9190613cee565b11156106585760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520737570706c79000000000000000060448201526064016101a6565b8060020154816003015f82825461066f9190613cee565b90915550506001810154600382015411156106bf5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016101a6565b6001826040516106cf919061372c565b9081526040805160209281900383019020335f9081529252812054900361070a576001816006015f8282546107049190613cee565b90915550505b806002015460028360405161071f919061372c565b9081526040805160209281900383019020335f908152925281208054909190610749908490613cee565b9091555050600281015460405160019061076490859061372c565b9081526040805160209281900383019020335f90815292528120805490919061078e908490613cee565b90915550505f546107b2906001600160a01b03166107ad34600a611e83565b611ea3565b60048101546107cf906001600160a01b03166107ad34605a611e83565b505050565b5f60606107e2836011611f38565b509092509050811561082c5760405162461bcd60e51b81526020600482015260136024820152721294d3d3881c185c9cda5b99c819985a5b1959606a1b60448201526064016101a6565b5f610874848360018151811061084457610844613d01565b6020026020010151602001518460018151811061086357610863613d01565b602002602001015160600151612724565b90505f6108ad858460028151811061088e5761088e613d01565b6020026020010151602001518560028151811061086357610863613d01565b90505f6108e686856003815181106108c7576108c7613d01565b6020026020010151602001518660038151811061086357610863613d01565b90505f61091f878660058151811061090057610900613d01565b6020026020010151602001518760058151811061086357610863613d01565b604051600760fc1b60208201529091506021016040516020818303038152906040528051906020012084604051602001610959919061372c565b604051602081830303815290604052805190602001201480156109cb57506040516506572632d32360d41b602082015260260160405160208183030381529060405280519060200120836040516020016109b3919061372c565b60405160208183030381529060405280519060200120145b8015610a2257506040516106f760f41b60208201526022016040516020818303038152906040528051906020012082604051602001610a0a919061372c565b60405160208183030381529060405280519060200120145b8015610a7b5750604051637469636b60e01b60208201526024016040516020818303038152906040528051906020012081604051602001610a63919061372c565b60405160208183030381529060405280519060200120145b610ac75760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204552432d323020706172616d65746572730000000000000060448201526064016101a6565b505050505f610b028483600481518110610ae357610ae3613d01565b6020026020010151602001518460048151811061086357610863613d01565b90505f610b3b8584600681518110610b1c57610b1c613d01565b6020026020010151602001518560068151811061086357610863613d01565b604051673a3930b739b332b960c11b60208201529091506028016040516020818303038152906040528051906020012082604051602001610b7c919061372c565b6040516020818303038152906040528051906020012003610d96575f610bce8685600781518110610baf57610baf613d01565b6020026020010151602001518660078151811061086357610863613d01565b90505f610c078786600981518110610be857610be8613d01565b6020026020010151602001518760098151811061086357610863613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001610c42919061372c565b60405160208183030381529060405280519060200120148015610cb1575060405162185b5d60ea1b60208201526023016040516020818303038152906040528051906020012082604051602001610c99919061372c565b60405160208183030381529060405280519060200120145b610cfd5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207472616e7366657220706172616d6574657273000000000060448201526064016101a6565b5f610d348887600881518110610d1557610d15613d01565b6020026020010151602001518860088151811061086357610863613d01565b90505f610d6d8988600a81518110610d4e57610d4e613d01565b60200260200101516020015189600a8151811061086357610863613d01565b9050610d8d8533610d7d846127f1565b610d888660126129be565b612b2a565b50505050611744565b604051656465706c6f7960d01b60208201526026016040516020818303038152906040528051906020012082604051602001610dd2919061372c565b60405160208183030381529060405280519060200120036112a4575f610e058685600781518110610baf57610baf613d01565b90505f610e1f8786600981518110610be857610be8613d01565b90505f610e588887600b81518110610e3957610e39613d01565b60200260200101516020015188600b8151811061086357610863613d01565b90505f610e918988600d81518110610e7257610e72613d01565b60200260200101516020015189600d8151811061086357610863613d01565b90505f610eca8a89600f81518110610eab57610eab613d01565b6020026020010151602001518a600f8151811061086357610863613d01565b604051620dac2f60eb1b60208201529091506023016040516020818303038152906040528051906020012085604051602001610f06919061372c565b60405160208183030381529060405280519060200120148015610f755750604051626c696d60e81b60208201526023016040516020818303038152906040528051906020012084604051602001610f5d919061372c565b60405160208183030381529060405280519060200120145b8015610fd15750604051661b585e135a5b9d60ca1b60208201526027016040516020818303038152906040528051906020012083604051602001610fb9919061372c565b60405160208183030381529060405280519060200120145b801561102f5750604051686d696e74507269636560b81b60208201526029016040516020818303038152906040528051906020012082604051602001611017919061372c565b60405160208183030381529060405280519060200120145b801561108b5750604051667265736572766560c81b60208201526027016040516020818303038152906040528051906020012081604051602001611073919061372c565b60405160208183030381529060405280519060200120145b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206465706c6f796d656e7420706172616d657465727300000060448201526064016101a6565b5f61110e8b8a6008815181106110ef576110ef613d01565b6020026020010151602001518b60088151811061086357610863613d01565b90505f6111478c8b600a8151811061112857611128613d01565b6020026020010151602001518c600a8151811061086357610863613d01565b90505f6111808d8c600c8151811061116157611161613d01565b6020026020010151602001518d600c8151811061086357610863613d01565b90505f6111b98e8d600e8151811061119a5761119a613d01565b6020026020010151602001518e600e8151811061086357610863613d01565b90505f6111f28f8e6010815181106111d3576111d3613d01565b6020026020010151602001518f60108151811061086357610863613d01565b90505f60035f6112028e88612d3a565b604051602001611212919061372c565b60408051601f198184030181529181528151602092830120835290820192909252015f206001808201805460ff191690911790559050806112538d82613d62565b506112948c6112638860126129be565b61126e8860126129be565b6112798860126129be565b6112848860126129be565b61128f8860126129be565b612dc3565b5050505050505050505050611744565b60405166617070726f766560c81b602082015260270160405160208183030381529060405280519060200120826040516020016112e1919061372c565b6040516020818303038152906040528051906020012003611474575f6113148685600781518110610baf57610baf613d01565b90505f61132e8786600981518110610be857610be8613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012081604051602001611369919061372c565b604051602081830303815290604052805190602001201480156113d8575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120826040516020016113c0919061372c565b60405160208183030381529060405280519060200120145b6114245760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420617070726f76616c20706172616d6574657273000000000060448201526064016101a6565b5f61143c8887600881518110610d1557610d15613d01565b90505f6114568988600a81518110610d4e57610d4e613d01565b9050610d8d8533611466846127f1565b61146f86612fbc565b612fc7565b6040516b7472616e7366657246726f6d60a01b6020820152602c0160405160208183030381529060405280519060200120826040516020016114b6919061372c565b6040516020818303038152906040528051906020012003611744575f6114e98685600781518110610baf57610baf613d01565b90505f6115038786600981518110610be857610be8613d01565b90505f61151d8887600b81518110610e3957610e39613d01565b60405161746f60f01b60208201529091506022016040516020818303038152906040528051906020012082604051602001611558919061372c565b604051602081830303815290604052805190602001201480156115c7575060405162185b5d60ea1b602082015260230160405160208183030381529060405280519060200120836040516020016115af919061372c565b60405160208183030381529060405280519060200120145b801561162057506040516366726f6d60e01b60208201526024016040516020818303038152906040528051906020012081604051602001611608919061372c565b60405160208183030381529060405280519060200120145b61166c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207472616e7366657246726f6d20706172616d65746572730060448201526064016101a6565b5f6116a3898860088151811061168457611684613d01565b6020026020010151602001518960088151811061086357610863613d01565b90505f6116dc8a89600a815181106116bd576116bd613d01565b6020026020010151602001518a600a8151811061086357610863613d01565b90505f6117158b8a600c815181106116f6576116f6613d01565b6020026020010151602001518b600c8151811061086357610863613d01565b905061173d87611724836127f1565b61172d856127f1565b6117388760126129be565b613010565b5050505050505b5050505050565b6006818154811061175a575f80fd5b905f5260205f20015f91509050805461177290613ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90613ca2565b80156117e95780601f106117c0576101008083540402835291602001916117e9565b820191905f5260205f20905b8154815290600101906020018083116117cc57829003601f168201915b505050505081565b5f546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118a5919061372c565b5f604051808303815f865af19150503d805f81146118de576040519150601f19603f3d011682016040523d82523d5f602084013e6118e3565b606091505b509150915081801561190d57508051158061190d57508080602001905181019061190d9190613e1e565b6117445760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016101a6565b5f546001600160a01b031633146119b25760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e657260448201526064016101a6565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156107cf573d5f803e3d5ffd5b6060805f6040518060600160405280602581526020016143cd6025913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b60408051601f19818403018152919052998a9950975050505050505050565b6060805f604051806040016040528060098152602001681116113634b6911d1160b91b81525090505f6040518060400160405280600d81526020016c11161136b0bc26b4b73a111d1160991b81525090505f6040518060400160405280600f81526020016e11161136b4b73a283934b1b2911d1160891b81525090505f6040518060400160405280600d81526020016c1116113932b9b2b93b32911d1160991b81525090505f60405180604001604052806002815260200161227d60f01b81525090505f8b858c868d878e88604051602001611b7a989796959493929190613ece565b60408051601f198184030181526060830190915260248083529092506143a960208301398e6040518060400160405280600981526020016811161136b0bc111d1160b91b8152508f8985604051602001611bd996959493929190613f72565b60408051601f198184030181529190529e8f9e509c50505050505050505050505050565b8051602081830181018051600582529282019190930120915280548190611c2390613ca2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f90613ca2565b8015611c9a5780601f10611c7157610100808354040283529160200191611c9a565b820191905f5260205f20905b815481529060010190602001808311611c7d57829003601f168201915b50505060018401546002850154600386015460048701546005880154600689015460078a015460088b01546009909b0154999a96999598509396506001600160a01b039092169490939192918a565b6060805f6040518060600160405280602681526020016143f26026913960408051808201825260098082526811161130b6ba111d1160b91b6020808401919091528351808501855291825268111610113a37911d1160b91b82820152835180850185526002815261227d60f01b8183015293519495509193909291611a789186918c9187918c9188918f91899101613e3d565b606080611d898484612d3a565b9485945092505050565b6060805f6040518060600160405280602a815260200161437f602a913990505f6040518060400160405280600981526020016811161130b6ba111d1160b91b81525090505f60405180604001604052806009815260200168111610113a37911d1160b91b81525090505f6040518060400160405280600b81526020016a11161011333937b6911d1160a91b81525090505f60405180604001604052806002815260200161227d60f01b8152509050848b858b868e878e88604051602001611e6299989796959493929190613ff0565b60408051601f198184030181529190529b8c9b509950505050505050505050565b5f6064611e9083856140b0565b611e9a91906140c7565b90505b92915050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eec576040519150601f19603f3d011682016040523d82523d5f602084013e611ef1565b606091505b50509050806107cf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016101a6565b5f60605f808590505f611f6260405180606001604052805f81526020015f81526020015f81525090565b611f6b876130a9565b60208201519096509091505f9081611f816136d5565b86518551101561270d575f87865f015181518110611fa157611fa1613d01565b01602001516001600160f81b0319169050607b60f81b811480611fd15750605b60f81b6001600160f81b03198216145b156120c35783611fe0816140e6565b945050611fed868b61314b565b90975091508661200c5750600399505f975061271d9650505050505050565b85604001515f191461204e578986604001518151811061202e5761202e613d01565b602002602001015160a0018051809190612047906140fe565b60ff169052505b607b60f81b6001600160f81b031982161461206a57600261206d565b60015b829060048111156120805761208061411c565b908160048111156120935761209361411c565b9052508551602080840191909152600160408401819052908701516120b89190614130565b6040870152506126f9565b607d60f81b6001600160f81b0319821614806120ec5750605d60f81b6001600160f81b03198216145b156122d7575f607d60f81b6001600160f81b031983161461210e576002612111565b60015b90505f600188602001516121259190614130565b94505b8b858151811061213a5761213a613d01565b602002602001015193508360400151801561215757508360800151155b156122035781600481111561216e5761216e61411c565b845160048111156121815761218161411c565b1461219d575060019b505f995061271d98505050505050505050565b5f19604089015287516121b1906001613cee565b8c86815181106121c3576121c3613d01565b6020026020010151606001818152505060018c86815181106121e7576121e7613d01565b6020908102919091010151901515608090910152506001612215565b8461220d81614143565b955050612128565b80612231575060019b505f995061271d98505050505050505050565b8415612289578b858151811061224957612249613d01565b602002602001015193508360400151801561226657508360800151155b156122775760408801859052612289565b8461228181614143565b955050612231565b845f036122cf578b85815181106122a2576122a2613d01565b60200260200101519350836040015180156122bf57508360800151155b156122cf57600f85900b60408901525b5050506126f9565b6001600160f81b03198116601160f91b03612367576122f7868b8a613206565b9450841561231257509298505f965061271d95505050505050565b8361231c816140e6565b94505085604001515f1914612361578986604001518151811061234157612341613d01565b602002602001015160a001805180919061235a906140fe565b60ff169052505b506126f9565b600160fd1b6001600160f81b0319821614806123905750601160f81b6001600160f81b03198216145b806123a85750600960f91b6001600160f81b03198216145b806123c05750600560fa1b6001600160f81b03198216145b156123cb57506126f9565b6001600160f81b03198116601d60f91b036123f157600186602001516120b89190614130565b6001600160f81b03198116600b60fa1b0361257a5785604001515f191415801561244d575060028a87604001518151811061242e5761242e613d01565b60200260200101515f0151600481111561244a5761244a61411c565b14155b801561248b575060018a87604001518151811061246c5761246c613d01565b60200260200101515f015160048111156124885761248861411c565b14155b1561236157600186602001516124a19190614130565b92505b60028a84815181106124b8576124b8613d01565b60200260200101515f015160048111156124d4576124d461411c565b148061250d575060018a84815181106124ef576124ef613d01565b60200260200101515f0151600481111561250b5761250b61411c565b145b156125685789838151811061252457612524613d01565b6020026020010151604001518015612557575089838151811061254957612549613d01565b602002602001015160800151155b156125685760408601839052612361565b8261257281614143565b9350506124a4565b600360fc1b6001600160f81b03198216108015906125a65750603960f81b6001600160f81b0319821611155b806125be5750602d60f81b6001600160f81b03198216145b806125d65750603360f91b6001600160f81b03198216145b806125ee5750601d60fa1b6001600160f81b03198216145b806126065750603760f91b6001600160f81b03198216145b156126b15785604001515f19146126a6578986604001518151811061262d5761262d613d01565b602002602001015191506001600481111561264a5761264a61411c565b8251600481111561265d5761265d61411c565b148061268c57506003825160048111156126795761267961411c565b14801561268c575060a082015160ff1615155b156126a65750600199505f975061271d9650505050505050565b6122f7868b8a61349e565b600160fd1b6001600160f81b03198216108015906126dd5750603f60f91b6001600160f81b0319821611155b156126f75750600199505f975061271d9650505050505050565b505b845185612705826140e6565b905250611f81565b50505050602001515f9550925050505b9250925092565b6060835f6127328585614130565b67ffffffffffffffff81111561274a5761274a613747565b6040519080825280601f01601f191660200182016040528015612774576020820181803683370190505b509050845b848110156127e55782818151811061279357612793613d01565b01602001516001600160f81b031916826127ad8884614130565b815181106127bd576127bd613d01565b60200101906001600160f81b03191690815f1a905350806127dd816140e6565b915050612779565b509150505b9392505050565b5f80829050602781511015801561280a5750602a815111155b6128475760405162461bcd60e51b815260206004820152600e60248201526d4e6f742068657820737472696e6760901b60448201526064016101a6565b5f808260018151811061285c5761285c613d01565b6020910101516001600160f81b031916600f60fb1b14806128a257508260018151811061288b5761288b613d01565b6020910101516001600160f81b031916600b60fb1b145b156128ac57600291505b5f808385516128bb9190614130565b905080602703612916576128f985856128d3816140e6565b9650815181106128e5576128e5613d01565b01602001516001600160f81b031916613626565b6129069060ff1683614158565b915082612912816140e6565b9350505b825b60148110156129b2576008836001600160a01b0316901b92505f6129478787815181106128e5576128e5613d01565b90505f61296988612959896001613cee565b815181106128e5576128e5613d01565b90505f61297e82610ff0600486901b1661417f565b905061298d60ff821687614158565b955061299a600289613cee565b975050505080806129aa906140e6565b915050612918565b50909695505050505050565b5f82818080805b8451811015612aec5780158015612a0057508481815181106129e9576129e9613d01565b6020910101516001600160f81b031916602d60f81b145b15612a0a57600191505b6030858281518110612a1e57612a1e613d01565b016020015160f81c10801590612a4e57506039858281518110612a4357612a43613d01565b016020015160f81c11155b15612ab4578215612a6d578615612aec5786612a6981614143565b9750505b612a78600a85614198565b93506030858281518110612a8e57612a8e613d01565b0160200151612aa0919060f81c6141c7565b612aad9060ff16856141e0565b9350612ada565b848181518110612ac657612ac6613d01565b016020015160f81c602e03612ada57600192505b80612ae4816140e6565b9150506129c5565b508515612b0b57612afe86600a6142e7565b612b089084614198565b92505b8015612b1f57612b1c5f1984614198565b92505b509095945050505050565b5f600185604051612b3b919061372c565b90815260408051602092819003830190206001600160a01b0387165f9081529252902054905081811015612bbb5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742062616c616e636520666f72207472616e7366656044820152603960f91b60648201526084016101a6565b818103600186604051612bce919061372c565b9081526040805191829003602090810183206001600160a01b0389165f90815291522091909155600190612c0390879061372c565b90815260408051602092819003830190206001600160a01b0387165f90815292528120549003612c64576001600586604051612c3f919061372c565b90815260200160405180910390206006015f828254612c5e9190614130565b90915550505b600185604051612c74919061372c565b90815260408051602092819003830190206001600160a01b0386165f9081529252902054158015612ca457505f82115b15612ce0576001600586604051612cbb919061372c565b90815260200160405180910390206006015f828254612cda9190613cee565b90915550505b81600186604051612cf1919061372c565b90815260200160405180910390205f856001600160a01b03166001600160a01b031681526020019081526020015f205f828254612d2e9190613cee565b90915550505050505050565b60605f60405180606001604052806022815260200161435d60229139604080518082018252600981526811161130b6ba111d1160b91b602080830191909152825180840184526002815261227d60f01b8183015292519394509092612da9918591899186918a918791016142f2565b604051602081830303815290604052935050505092915050565b66470de4df820000341015612e1a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706c6f796d656e7420666565000000000060448201526064016101a6565b5f600587604051612e2b919061372c565b90815260405190819003602001902060048101549091506001600160a01b031615612e8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b60448201526064016101a6565b80612e9a8882613d62565b5060018101869055600281018590556004810180546001600160a01b0319163317905542600582015560078082018590556008820184905560098201839055612ee69080546001019055565b600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01612f218882613d62565b505f54612f37906001600160a01b031634611ea3565b8115612fb35781600188604051612f4e919061372c565b9081526040805160209281900383019020335f908152925281208054909190612f78908490613cee565b9250508190555081816003015f828254612f929190613cee565b925050819055506001816006015f828254612fad9190613cee565b90915550505b50505050505050565b5f611e9d825f6129be565b80600485604051612fd8919061372c565b90815260408051602092819003830190206001600160a01b039687165f90815290835281812095909616865293905291909220555050565b6001600485604051613022919061372c565b90815260408051602092819003830190206001600160a01b0387165f90815290835281812033825290925290205410156130975760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b60448201526064016101a6565b6130a384848484612b2a565b50505050565b6130ca60405180606001604052805f81526020015f81526020015f81525090565b60605f60405180606001604052805f81526020015f81526020015f1981525090505f8467ffffffffffffffff81111561310557613105613747565b60405190808252806020026020018201604052801561313e57816020015b61312b6136d5565b8152602001906001900390816131235790505b5091959194509092505050565b5f6131546136d5565b8251846020015110613191575f83600185516131709190614130565b8151811061318057613180613d01565b6020026020010151915091506131ff565b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a08201529085015184518291869181106131d8576131d8613d01565b60200260200101819052508460200180518091906131f5906140e6565b9052506001925090505b9250929050565b82515f90816132136136d5565b86518761321f826140e6565b9052505b845187511015613490575f85885f01518151811061324357613243613d01565b01602001516001600160f81b0319169050601160f91b8190036132a55761326a888861314b565b9093509150826132815750505084525060036127ea565b613299826003613292876001613cee565b8b51613684565b5f9450505050506127ea565b605c60f882901c1480156132c55750855188516132c3906001613cee565b105b1561347a578751886132d6826140e6565b9052508751865187919081106132ee576132ee613d01565b6020910101516001600160f81b031916601160f91b1480613336575085885f01518151811061331f5761331f613d01565b6020910101516001600160f81b031916602f60f81b145b80613368575085885f01518151811061335157613351613d01565b6020910101516001600160f81b031916601760fa1b145b8061339a575085885f01518151811061338357613383613d01565b6020910101516001600160f81b031916603360f91b145b806133cc575085885f0151815181106133b5576133b5613d01565b6020910101516001600160f81b031916603960f91b145b806133fe575085885f0151815181106133e7576133e7613d01565b6020910101516001600160f81b031916603760f91b145b80613430575085885f01518151811061341957613419613d01565b6020910101516001600160f81b031916603160f91b145b80613462575085885f01518151811061344b5761344b613d01565b6020910101516001600160f81b031916601d60fa1b145b1561346d575061347c565b50505084525060016127ea565b505b865187613488826140e6565b905250613223565b505084525060029392505050565b82515f90819081806134ae6136d5565b8651895110156135c25786895f0151815181106134cd576134cd613d01565b01602001516001600160f81b0319169250600160fd1b8314806134fd5750600960f81b6001600160f81b03198416145b806135155750600560f91b6001600160f81b03198416145b8061352d5750600d60f81b6001600160f81b03198416145b806135455750600b60fa1b6001600160f81b03198416145b8061355d5750607d60f81b6001600160f81b03198416145b806135755750605d60f81b6001600160f81b03198416145b1561358357600194506135c2565b602060f884901c108061359a5750607f60f884901c115b156135ae57505050855250600190506127ea565b8851896135ba826140e6565b9052506134ae565b846135d657505050855250600290506127ea565b6135e0898961314b565b9092509050816135f957505050855250600390506127ea565b613609816004868c5f0151613684565b88518961361582614143565b9052505f9998505050505050505050565b5f60f882901c60308110801590613641575060398160ff1611155b15613651576127ea6030826141c7565b60418160ff1610158015613669575060468160ff1611155b15613679576127ea6037826141c7565b6127ea6057826141c7565b838360048111156136975761369761411c565b908160048111156136aa576136aa61411c565b905250602084019190915260016040840181905260608401919091526080830152505f60a090910152565b6040805160c08101909152805f81525f6020820181905260408201819052606082018190526080820181905260a09091015290565b5f5b8381101561372457818101518382015260200161370c565b50505f910152565b5f825161373d81846020870161370a565b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261376a575f80fd5b813567ffffffffffffffff8082111561378557613785613747565b604051601f8301601f19908116603f011681019082821181831017156137ad576137ad613747565b816040528381528660208588010111156137c5575f80fd5b836020870160208301375f602085830101528094505050505092915050565b6001600160a01b03811681146137f8575f80fd5b50565b5f806040838503121561380c575f80fd5b823567ffffffffffffffff811115613822575f80fd5b61382e8582860161375b565b925050602083013561383f816137e4565b809150509250929050565b5f6020828403121561385a575f80fd5b5035919050565b5f815180845261387881602086016020860161370a565b601f01601f19169290920160200192915050565b602081525f611e9a6020830184613861565b5f805f606084860312156138b0575f80fd5b83356138bb816137e4565b925060208401356138cb816137e4565b929592945050506040919091013590565b5f80604083850312156138ed575f80fd5b82356138f8816137e4565b946020939093013593505050565b5f805f60608486031215613918575f80fd5b833567ffffffffffffffff8082111561392f575f80fd5b61393b8783880161375b565b94506020860135915080821115613950575f80fd5b61395c8783880161375b565b93506040860135915080821115613971575f80fd5b5061397e8682870161375b565b9150509250925092565b604081525f61399a6040830185613861565b82810360208401526139ac8185613861565b95945050505050565b5f805f606084860312156139c7575f80fd5b833567ffffffffffffffff8111156139dd575f80fd5b6139e98682870161375b565b93505060208401356139fa816137e4565b91506040840135613a0a816137e4565b809150509250925092565b5f805f805f8060c08789031215613a2a575f80fd5b863567ffffffffffffffff80821115613a41575f80fd5b613a4d8a838b0161375b565b97506020890135915080821115613a62575f80fd5b613a6e8a838b0161375b565b96506040890135915080821115613a83575f80fd5b613a8f8a838b0161375b565b95506060890135915080821115613aa4575f80fd5b613ab08a838b0161375b565b94506080890135915080821115613ac5575f80fd5b613ad18a838b0161375b565b935060a0890135915080821115613ae6575f80fd5b50613af389828a0161375b565b9150509295509295509295565b5f60208284031215613b10575f80fd5b813567ffffffffffffffff811115613b26575f80fd5b613b328482850161375b565b949350505050565b5f610140808352613b4d8184018e613861565b602084019c909c525050604081019890985260608801969096526001600160a01b0394909416608087015260a086019290925260c085015260e084015261010083015261012090910152919050565b5f8060408385031215613bad575f80fd5b823567ffffffffffffffff80821115613bc4575f80fd5b613bd08683870161375b565b93506020850135915080821115613be5575f80fd5b50613bf28582860161375b565b9150509250929050565b5f805f8060808587031215613c0f575f80fd5b843567ffffffffffffffff80821115613c26575f80fd5b613c328883890161375b565b95506020870135915080821115613c47575f80fd5b613c538883890161375b565b94506040870135915080821115613c68575f80fd5b613c748883890161375b565b93506060870135915080821115613c89575f80fd5b50613c968782880161375b565b91505092959194509250565b600181811c90821680613cb657607f821691505b602082108103613cd457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611e9d57611e9d613cda565b634e487b7160e01b5f52603260045260245ffd5b601f8211156107cf575f81815260208120601f850160051c81016020861015613d3b5750805b601f850160051c820191505b81811015613d5a57828155600101613d47565b505050505050565b815167ffffffffffffffff811115613d7c57613d7c613747565b613d9081613d8a8454613ca2565b84613d15565b602080601f831160018114613dc3575f8415613dac5750858301515b5f19600386901b1c1916600185901b178555613d5a565b5f85815260208120601f198616915b82811015613df157888601518255948401946001909101908401613dd2565b5085821015613e0e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215613e2e575f80fd5b815180151581146127ea575f80fd5b5f88516020613e4f8285838e0161370a565b895191840191613e628184848e0161370a565b8951920191613e748184848d0161370a565b8851920191613e868184848c0161370a565b8751920191613e988184848b0161370a565b8651920191613eaa8184848a0161370a565b8551920191613ebc818484890161370a565b919091019a9950505050505050505050565b5f89516020613ee08285838f0161370a565b8a5191840191613ef38184848f0161370a565b8a51920191613f058184848e0161370a565b8951920191613f178184848d0161370a565b8851920191613f298184848c0161370a565b8751920191613f3b8184848b0161370a565b8651920191613f4d8184848a0161370a565b8551920191613f5f818484890161370a565b919091019b9a5050505050505050505050565b5f87516020613f848285838d0161370a565b885191840191613f978184848d0161370a565b8851920191613fa98184848c0161370a565b8751920191613fbb8184848b0161370a565b8651920191613fcd8184848a0161370a565b8551920191613fdf818484890161370a565b919091019998505050505050505050565b5f8a51614001818460208f0161370a565b8a516140138183860160208f0161370a565b8a519184010190614028818360208e0161370a565b895161403a8183850160208e0161370a565b8951929091010190614050818360208c0161370a565b87516140628183850160208c0161370a565b8751929091010190614078818360208a0161370a565b855161408a8183850160208a0161370a565b85519290910101906140a081836020880161370a565b019b9a5050505050505050505050565b8082028115828204841417611e9d57611e9d613cda565b5f826140e157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016140f7576140f7613cda565b5060010190565b5f60ff821660ff810361411357614113613cda565b60010192915050565b634e487b7160e01b5f52602160045260245ffd5b81810381811115611e9d57611e9d613cda565b5f8161415157614151613cda565b505f190190565b6001600160a01b0381811683821601908082111561417857614178613cda565b5092915050565b60ff8181168382160190811115611e9d57611e9d613cda565b8082025f8212600160ff1b841416156141b3576141b3613cda565b8181058314821517611e9d57611e9d613cda565b60ff8281168282160390811115611e9d57611e9d613cda565b8082018281125f8312801582168215821617156141ff576141ff613cda565b505092915050565b600181815b8085111561424157815f190482111561422757614227613cda565b8085161561423457918102915b93841c939080029061420c565b509250929050565b5f8261425757506001611e9d565b8161426357505f611e9d565b816001811461427957600281146142835761429f565b6001915050611e9d565b60ff84111561429457614294613cda565b50506001821b611e9d565b5060208310610133831016604e8410600b84101617156142c2575081810a611e9d565b6142cc8383614207565b805f19048211156142df576142df613cda565b029392505050565b5f611e9a8383614249565b5f8651614303818460208b0161370a565b865190830190614317818360208b0161370a565b865191019061432a818360208a0161370a565b855191019061433d81836020890161370a565b845191019061435081836020880161370a565b0197965050505050505056fe7b2270223a226572632d3230222c226f70223a226d696e74222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e7366657246726f6d222c227469636b223a227b2270223a226572632d3230222c226f70223a226465706c6f79222c227469636b223a227b2270223a226572632d3230222c226f70223a22617070726f7665222c227469636b223a227b2270223a226572632d3230222c226f70223a227472616e73666572222c227469636b223a22a26469706673582212202514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b11864736f6c63430008140033

Deployed Bytecode Sourcemap

140:24736:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15081:12;15163:24;15197:5;;15163:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15324:28:1;;15163:40;;-1:-1:-1;15163:40:1;15324:28;;-1:-1:-1;15163:40:1;;-1:-1:-1;15324:28:1;;;-1:-1:-1;15324:28:1;:::i;:::-;;;;-1:-1:-1;;15324:28:1;;;;;;;;;15314:39;;15324:28;15314:39;;;;15437:20;;;;:10;:20;;;;;:29;;;15314:39;;-1:-1:-1;15437:29:1;;15433:435;;;15567:10;15581:9;15567:23;15559:52;;;;-1:-1:-1;;;15559:52:1;;765:2:4;15559:52:1;;;747:21:4;804:2;784:18;;;777:30;-1:-1:-1;;;823:18:4;;;816:46;879:18;;15559:52:1;;;;;;;;;15710:22;15723:8;15710:12;:22::i;:::-;15433:435;;;15835:21;15845:10;15835:9;:21::i;:::-;-1:-1:-1;;15927:9:1;;;;;;;;;-1:-1:-1;15927:9:1;;-1:-1:-1;4877:64:1;;;;;;;;;;-1:-1:-1;4877:64:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4877:64:1;;;;;;;;;;;;2508:25:4;;;2496:2;2481:18;4877:64:1;;;;;;;;5821:26;;;;;;;;;;-1:-1:-1;5821:26:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24527:307::-;;;;;;;;;;-1:-1:-1;24527:307:1;;;;;:::i;:::-;;:::i;:::-;;24404:114;;;;;;;;;;-1:-1:-1;24404:114:1;;;;;:::i;:::-;;:::i;2534:467:3:-;;;;;;;;;;-1:-1:-1;2534:467:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;5417:84:1:-;;;;;;;;;;-1:-1:-1;5417:84:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5417:84:1;;;;;;;;;;;;;;;;5933:36;;;;;;;;;;-1:-1:-1;5933:36:1;;;;;;4611:62;;;;;;;;;;-1:-1:-1;4611:62:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4611:62:1;;;;;;;;;244:20;;;;;;;;;;-1:-1:-1;244:20:1;;;;-1:-1:-1;;;;;244:20:1;;;;;;-1:-1:-1;;;;;5920:32:4;;;5902:51;;5890:2;5875:18;244:20:1;5756:203:4;1274:685:3;;;;;;;;;;-1:-1:-1;1274:685:3;;;;;:::i;:::-;;:::i;5690:49:1:-;;;;;;;;;;-1:-1:-1;5690:49:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;797:469:3:-;;;;;;;;;;-1:-1:-1;797:469:3;;;;;:::i;:::-;;:::i;194:239::-;;;;;;;;;;-1:-1:-1;194:239:3;;;;;:::i;:::-;;:::i;1967:561::-;;;;;;;;;;-1:-1:-1;1967:561:3;;;;;:::i;:::-;;:::i;8255:1950:1:-;8392:20;8415;;;:10;:20;;;;;8392:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8522:24;8549:12;8562:6;8549:20;;;;;;:::i;:::-;;;;;;;;;;;;;8522:47;;8689:5;:15;;;8676:9;:28;8668:61;;;;-1:-1:-1;;;8668:61:1;;10644:2:4;8668:61:1;;;10626:21:4;10683:2;10663:18;;;10656:30;-1:-1:-1;;;10702:18:4;;;10695:50;10762:18;;8668:61:1;10442:344:4;8668:61:1;8841:23;;;;:28;8837:226;;8964:5;:23;;;8945:5;:15;;;8912:10;8923:6;8912:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8931:10;8912:30;;;;;;;;;:48;;;;:::i;:::-;:75;;8886:165;;;;-1:-1:-1;;;8886:165:1;;11255:2:4;8886:165:1;;;11237:21:4;11294:2;11274:18;;;11267:30;11333;11313:18;;;11306:58;11381:18;;8886:165:1;11053:352:4;8886:165:1;9235:5;:15;;;9215:5;:15;;;9200:5;:12;;;:30;;;;:::i;:::-;9199:51;;9177:125;;;;-1:-1:-1;;;9177:125:1;;11612:2:4;9177:125:1;;;11594:21:4;11651:2;11631:18;;;11624:30;11690:26;11670:18;;;11663:54;11734:18;;9177:125:1;11410:348:4;9177:125:1;9380:5;:15;;;9364:5;:12;;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;9509:15:1;;;;9493:12;;;;:31;;9485:60;;;;-1:-1:-1;;;9485:60:1;;11965:2:4;9485:60:1;;;11947:21:4;12004:2;11984:18;;;11977:30;-1:-1:-1;;;12023:18:4;;;12016:46;12079:18;;9485:60:1;11763:340:4;9485:60:1;9662:8;9671:6;9662:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9679:10;9662:28;;;;;;;;;:33;;9658:84;;9729:1;9712:5;:13;;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;9658:84:1;9849:5;:15;;;9815:10;9826:6;9815:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9834:10;9815:30;;;;;;;;:49;;:30;;;:49;;;;;:::i;:::-;;;;-1:-1:-1;;9907:15:1;;;;9875:16;;:8;;:16;;9884:6;;9875:16;:::i;:::-;;;;;;;;;;;;;;;;9892:10;9875:28;;;;;;;;:47;;:28;;;:47;;;;;:::i;:::-;;;;-1:-1:-1;;10012:5:1;;9996:59;;-1:-1:-1;;;;;10012:5:1;10020:34;10040:9;10051:2;10020:19;:34::i;:::-;9996:7;:59::i;:::-;10145:14;;;;10129:68;;-1:-1:-1;;;;;10145:14:1;10162:34;10182:9;10193:2;10162:19;:34::i;10129:68::-;8312:1893;;8255:1950;:::o;15953:8443::-;16023:19;16053:32;16122:29;16139:7;16148:2;16122:16;:29::i;:::-;-1:-1:-1;16096:55:1;;-1:-1:-1;16096:55:1;-1:-1:-1;16170:40:1;;16162:72;;;;-1:-1:-1;;;16162:72:1;;12310:2:4;16162:72:1;;;12292:21:4;12349:2;12329:18;;;12322:30;-1:-1:-1;;;12368:18:4;;;12361:49;12427:18;;16162:72:1;12108:343:4;16162:72:1;16258:15;16276:110;16310:7;16332:6;16339:1;16332:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16362:6;16369:1;16362:9;;;;;;;;:::i;:::-;;;;;;;:13;;;16276:19;:110::i;:::-;16258:128;;16397:18;16418:110;16452:7;16474:6;16481:1;16474:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16504:6;16511:1;16504:9;;;;;;;;:::i;16418:110::-;16397:131;;16541:16;16560:110;16594:7;16616:6;16623:1;16616:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16646:6;16653:1;16646:9;;;;;;;;:::i;16560:110::-;16541:129;;16681:18;16702:110;16736:7;16758:6;16765:1;16758:9;;;;;;;;:::i;:::-;;;;;;;:15;;;16788:6;16795:1;16788:9;;;;;;;;:::i;16702:110::-;1473:21;;-1:-1:-1;;;1473:21:1;;;12790:16:4;16681:131:1;;-1:-1:-1;12822:11:4;;1473:21:1;;;;;;;;;;;;1463:32;;;;;;16872:1;16855:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;16845:30;;;;;;:46;:122;;;;-1:-1:-1;1925:26:1;;-1:-1:-1;;;1925:26:1;;;13046:21:4;13083:11;;1925:26:1;;;;;;;;;;;;1915:37;;;;;;16939:4;16922:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;16912:33;;;;;;:55;16845:122;:191;;;;-1:-1:-1;1545:22:1;;-1:-1:-1;;;1545:22:1;;;13307:17:4;13340:11;;1545:22:1;;;;;;;;;;;;1535:33;;;;;;17015:2;16998:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;16988:31;;;;;;:48;16845:191;:264;;;;-1:-1:-1;1620:24:1;;-1:-1:-1;;;1620:24:1;;;13564:19:4;13599:11;;1620:24:1;;;;;;;;;;;;1610:35;;;;;;17084:4;17067:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;17057:33;;;;;;:52;16845:264;16823:339;;;;-1:-1:-1;;;16823:339:1;;13823:2:4;16823:339:1;;;13805:21:4;13862:2;13842:18;;;13835:30;13901:27;13881:18;;;13874:55;13946:18;;16823:339:1;13621:349:4;16823:339:1;16247:937;;;;17196:19;17218:110;17252:7;17274:6;17281:1;17274:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17304:6;17311:1;17304:9;;;;;;;;:::i;17218:110::-;17196:132;;17339:21;17363:110;17397:7;17419:6;17426:1;17419:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17449:6;17456:1;17449:9;;;;;;;;:::i;17363:110::-;2174:28;;-1:-1:-1;;;2174:28:1;;;14177:23:4;17339:134:1;;-1:-1:-1;14216:11:4;;2174:28:1;;;;;;;;;;;;2164:39;;;;;;17515:5;17498:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;17488:34;;;;;;:60;17484:6904;;17565:17;17585:126;17623:7;17649:6;17656:1;17649:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17683:6;17690:1;17683:9;;;;;;;;:::i;17585:126::-;17565:146;;17726:19;17748:126;17786:7;17812:6;17819:1;17812:9;;;;;;;;:::i;:::-;;;;;;;:15;;;17846:6;17853:1;17846:9;;;;;;;;:::i;17748:126::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;17726:148:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;17942:5;17925:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;17915:34;;;;;;:84;:159;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;18051:3;18034:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;18024:32;;;;;;:50;17915:159;17889:248;;;;-1:-1:-1;;;17889:248:1;;14955:2:4;17889:248:1;;;14937:21:4;14994:2;14974:18;;;14967:30;15033:29;15013:18;;;15006:57;15080:18;;17889:248:1;14753:351:4;17889:248:1;18152:20;18175:126;18213:7;18239:6;18246:1;18239:9;;;;;;;;:::i;:::-;;;;;;;:15;;;18273:6;18280:1;18273:9;;;;;;;;:::i;18175:126::-;18152:149;;18316:19;18338:128;18376:7;18402:6;18409:2;18402:10;;;;;;;;:::i;:::-;;;;;;;:16;;;18437:6;18444:2;18437:10;;;;;;;;:::i;18338:128::-;18316:150;;18481:201;18514:7;18540:10;18569:33;18596:5;18569:26;:33::i;:::-;18629:37;18649:6;1357:2;18629:19;:37::i;:::-;18481:14;:201::i;:::-;17550:1146;;;;17484:6904;;;2008:26;;-1:-1:-1;;;2008:26:1;;;15311:21:4;15348:11;;2008:26:1;;;;;;;;;;;;1998:37;;;;;;18733:5;18716:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;18706:34;;;;;;:58;18702:5686;;18781:17;18801:126;18839:7;18865:6;18872:1;18865:9;;;;;;;;:::i;18801:126::-;18781:146;;18944:17;18964:126;19002:7;19028:6;19035:1;19028:9;;;;;;;;:::i;18964:126::-;18944:146;;19107:21;19131:128;19169:7;19195:6;19202:2;19195:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19230:6;19237:2;19230:10;;;;;;;;:::i;19131:128::-;19107:152;;19276:23;19302:128;19340:7;19366:6;19373:2;19366:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19401:6;19408:2;19401:10;;;;;;;;:::i;19302:128::-;19276:154;;19447:21;19471:128;19509:7;19535:6;19542:2;19535:10;;;;;;;;:::i;:::-;;;;;;;:16;;;19570:6;19577:2;19570:10;;;;;;;;:::i;19471:128::-;1696:23;;-1:-1:-1;;;1696:23:1;;;15572:18:4;19447:152:1;;-1:-1:-1;15606:11:4;;1696:23:1;;;;;;;;;;;;1686:34;;;;;;19669:3;19652:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;19642:32;;;;;;:50;:125;;;;-1:-1:-1;1771:23:1;;-1:-1:-1;;;1771:23:1;;;15830:18:4;15864:11;;1771:23:1;;;;;;;;;;;;1761:34;;;;;;19744:3;19727:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;19717:32;;;;;;:50;19642:125;:204;;;;-1:-1:-1;2428:27:1;;-1:-1:-1;;;2428:27:1;;;16088:22:4;16126:11;;2428:27:1;;;;;;;;;;;;2418:38;;;;;;19819:7;19802:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;19792:36;;;;;;:54;19642:204;:291;;;;-1:-1:-1;2509:29:1;;-1:-1:-1;;;2509:29:1;;;16350:24:4;16390:11;;2509:29:1;;;;;;;;;;;;2499:40;;;;;;19902:9;19885:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;19875:38;;;;;;:58;19642:291;:377;;;;-1:-1:-1;2589:27:1;;-1:-1:-1;;;2589:27:1;;;16614:22:4;16652:11;;2589:27:1;;;;;;;;;;;;2579:38;;;;;;19993:7;19976:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;19966:36;;;;;;:53;19642:377;19616:468;;;;-1:-1:-1;;;19616:468:1;;16876:2:4;19616:468:1;;;16858:21:4;16915:2;16895:18;;;16888:30;16954:31;16934:18;;;16927:59;17003:18;;19616:468:1;16674:353:4;19616:468:1;20101:20;20124:126;20162:7;20188:6;20195:1;20188:9;;;;;;;;:::i;:::-;;;;;;;:15;;;20222:6;20229:1;20222:9;;;;;;;;:::i;20124:126::-;20101:149;;20265:20;20288:128;20326:7;20352:6;20359:2;20352:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20387:6;20394:2;20387:10;;;;;;;;:::i;20288:128::-;20265:151;;20431:21;20455:128;20493:7;20519:6;20526:2;20519:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20554:6;20561:2;20554:10;;;;;;;;:::i;20455:128::-;20431:152;;20598:22;20623:128;20661:7;20687:6;20694:2;20687:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20722:6;20729:2;20722:10;;;;;;;;:::i;20623:128::-;20598:153;;20766:24;20793:128;20831:7;20857:6;20864:2;20857:10;;;;;;;;:::i;:::-;;;;;;;:16;;;20892:6;20899:2;20892:10;;;;;;;;:::i;20793:128::-;20766:155;;20936:29;20968:10;:68;21007:26;21018:7;21026:6;21007:10;:26::i;:::-;20990:44;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20990:44:1;;;;;;;;;20980:55;;20990:44;20980:55;;;;20968:68;;;;;;;;;;-1:-1:-1;20968:68:1;21074:4;21051:20;;;:27;;-1:-1:-1;;21051:27:1;;;;;;20968:68;-1:-1:-1;20968:68:1;21093:28;21114:7;20968:68;21093:28;:::i;:::-;;21136:384;21166:7;21200:37;21220:6;1357:2;21200:19;:37::i;:::-;21265;21285:6;1357:2;21265:19;:37::i;:::-;21330:38;21350:7;1357:2;21330:19;:38::i;:::-;21396:39;21416:8;1357:2;21396:19;:39::i;:::-;21463:41;21483:10;1357:2;21463:19;:41::i;:::-;21136:11;:384::i;:::-;18766:2766;;;;;;;;;;;18702:5686;;;2675:27;;-1:-1:-1;;;2675:27:1;;;19438:22:4;19476:11;;2675:27:1;;;;;;;;;;;;2665:38;;;;;;21569:5;21552:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;21542:34;;;;;;:59;21538:2850;;21618:17;21638:126;21676:7;21702:6;21709:1;21702:9;;;;;;;;:::i;21638:126::-;21618:146;;21779:19;21801:126;21839:7;21865:6;21872:1;21865:9;;;;;;;;:::i;21801:126::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;21779:148:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;21995:5;21978:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;21968:34;;;;;;:84;:159;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;22104:3;22087:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;22077:32;;;;;;:50;21968:159;21942:248;;;;-1:-1:-1;;;21942:248:1;;19700:2:4;21942:248:1;;;19682:21:4;19739:2;19719:18;;;19712:30;19778:29;19758:18;;;19751:57;19825:18;;21942:248:1;19498:351:4;21942:248:1;22205:20;22228:126;22266:7;22292:6;22299:1;22292:9;;;;;;;;:::i;22228:126::-;22205:149;;22369:19;22391:128;22429:7;22455:6;22462:2;22455:10;;;;;;;;:::i;22391:128::-;22369:150;;22534:190;22566:7;22592:10;22621:33;22648:5;22621:26;:33::i;:::-;22681:27;22701:6;22681:19;:27::i;:::-;22534:13;:190::i;21538:2850::-;2766:32;;-1:-1:-1;;;2766:32:1;;;20056:27:4;20099:12;;2766:32:1;;;;;;;;;;;;2756:43;;;;;;22773:5;22756:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;22746:34;;;;;;:64;22742:1646;;22827:17;22847:126;22885:7;22911:6;22918:1;22911:9;;;;;;;;:::i;22847:126::-;22827:146;;22988:19;23010:126;23048:7;23074:6;23081:1;23074:9;;;;;;;;:::i;23010:126::-;22988:148;;23151:21;23175:128;23213:7;23239:6;23246:2;23239:10;;;;;;;;:::i;23175:128::-;2265:22;;-1:-1:-1;;;2265:22:1;;;14440:17:4;23151:152:1;;-1:-1:-1;14473:11:4;;2265:22:1;;;;;;;;;;;;2255:33;;;;;;23371:5;23354:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;23344:34;;;;;;:63;:134;;;;-1:-1:-1;1846:23:1;;-1:-1:-1;;;1846:23:1;;;14697:18:4;14731:11;;1846:23:1;;;;;;;;;;;;1836:34;;;;;;23455:3;23438:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;23428:32;;;;;;:50;23344:134;:222;;;;-1:-1:-1;2352:24:1;;-1:-1:-1;;;2352:24:1;;;20324:19:4;20359:11;;2352:24:1;;;;;;;;;;;;2342:35;;;;;;23526:7;23509:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;23499:36;;;;;;:67;23344:222;23318:315;;;;-1:-1:-1;;;23318:315:1;;20583:2:4;23318:315:1;;;20565:21:4;20622:2;20602:18;;;20595:30;20661:33;20641:18;;;20634:61;20712:18;;23318:315:1;20381:355:4;23318:315:1;23648:20;23671:126;23709:7;23735:6;23742:1;23735:9;;;;;;;;:::i;:::-;;;;;;;:15;;;23769:6;23776:1;23769:9;;;;;;;;:::i;23671:126::-;23648:149;;23812:19;23834:128;23872:7;23898:6;23905:2;23898:10;;;;;;;;:::i;:::-;;;;;;;:16;;;23933:6;23940:2;23933:10;;;;;;;;:::i;23834:128::-;23812:150;;23977:21;24001:128;24039:7;24065:6;24072:2;24065:10;;;;;;;;:::i;:::-;;;;;;;:16;;;24100:6;24107:2;24100:10;;;;;;;;:::i;24001:128::-;23977:152;;24146:230;24183:7;24209:35;24236:7;24209:26;:35::i;:::-;24263:33;24290:5;24263:26;:33::i;:::-;24323:37;24343:6;1357:2;24323:19;:37::i;:::-;24146:18;:230::i;:::-;22812:1576;;;;;;22742:1646;16012:8384;;;;15953:8443;:::o;5821:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24527:307::-;985:5;;-1:-1:-1;;;;;985:5:1;971:10;:19;963:64;;;;-1:-1:-1;;;963:64:1;;20943:2:4;963:64:1;;;20925:21:4;;;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;21073:18;;963:64:1;20741:356:4;963:64:1;24668:45:::1;::::0;;-1:-1:-1;;;;;21294:32:4;;;24668:45:1::1;::::0;::::1;21276:51:4::0;21343:18;;;;21336:34;;;24668:45:1;;;;;;;;;;21249:18:4;;;;24668:45:1;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;24668:45:1::1;-1:-1:-1::0;;;24668:45:1::1;::::0;;24657:57;;-1:-1:-1;;;;24657:10:1;;::::1;::::0;:57:::1;::::0;24668:45;24657:57:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24621:93;;;;24733:7;:57;;;;-1:-1:-1::0;24745:11:1;;:16;;:44:::1;;;24776:4;24765:24;;;;;;;;;;;;:::i;:::-;24725:101;;;::::0;-1:-1:-1;;;24725:101:1;;22157:2:4;24725:101:1::1;::::0;::::1;22139:21:4::0;22196:2;22176:18;;;22169:30;22235:33;22215:18;;;22208:61;22286:18;;24725:101:1::1;21955:355:4::0;24404:114:1;985:5;;-1:-1:-1;;;;;985:5:1;971:10;:19;963:64;;;;-1:-1:-1;;;963:64:1;;20943:2:4;963:64:1;;;20925:21:4;;;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;21073:18;;963:64:1;20741:356:4;963:64:1;24489:21:::1;::::0;-1:-1:-1;;;;;24489:12:1;::::1;::::0;:21;::::1;;;::::0;24502:7;;24489:21:::1;::::0;;;24502:7;24489:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;2534:467:3::0;2667:18;2687:20;2720:15;:57;;;;;;;;;;;;;;;;;2788:29;;;;;;;;;;;;-1:-1:-1;;;2788:29:3;;;;;;;;2828:30;;;;;;;;;;-1:-1:-1;;;2828:30:3;;;;2869:22;;;;;;;;;;-1:-1:-1;;;2869:22:3;;;;2916:44;;2720:57;;-1:-1:-1;2788:29:3;;2828:30;;2869:22;2916:44;;2720:57;;2936:4;;2788:29;;2945:3;;2828:30;;2954:2;;2869:22;;2916:44;;:::i;:::-;;;;-1:-1:-1;;2916:44:3;;;;;;;;;;;;-1:-1:-1;2534:467:3;-1:-1:-1;;;;;;;;2534:467:3:o;1274:685::-;1505:18;1525:20;1558:16;:30;;;;;;;;;;;;;-1:-1:-1;;;1558:30:3;;;;;1599:16;:34;;;;;;;;;;;;;-1:-1:-1;;;1599:34:3;;;;;1644:16;:36;;;;;;;;;;;;;-1:-1:-1;;;1644:36:3;;;;;1691:16;:34;;;;;;;;;;;;;-1:-1:-1;;;1691:34:3;;;;;1736:15;:22;;;;;;;;;;;;;-1:-1:-1;;;1736:22:3;;;;;1769:15;1803:3;1808:2;1812:7;1821:2;1825:9;1836:2;1840:7;1849:1;1786:65;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1786:65:3;;;;;;1893:2;;;;;;;;;;1786:65;;-1:-1:-1;1893:2:3;1786:65;1893:2;;;1897:4;1903:2;;;;;;;;;;;;;-1:-1:-1;;;1903:2:3;;;1907:3;1912:2;1915;1876:42;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1876:42:3;;;;;;;;;;;;-1:-1:-1;1274:685:3;-1:-1:-1;;;;;;;;;;;;;1274:685:3:o;5690:49:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5690:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5690:49:1;;-1:-1:-1;;;;;;5690:49:1;;;;;;;;;;:::o;797:469:3:-;931:18;951:20;984:15;:58;;;;;;;;;;;;;;;;;1053:29;;;;;;;;;;;;-1:-1:-1;;;1053:29:3;;;;;;;;1093:30;;;;;;;;;;-1:-1:-1;;;1093:30:3;;;;1134:22;;;;;;;;;;-1:-1:-1;;;1134:22:3;;;;1181:44;;984:58;;-1:-1:-1;1053:29:3;;1093:30;;1134:22;1181:44;;984:58;;1201:4;;1053:29;;1210:3;;1093:30;;1219:2;;1134:22;;1181:44;;:::i;194:239::-;299:18;319:20;373;384:4;389:3;373:10;:20::i;:::-;366:27;;;-1:-1:-1;194:239:3;-1:-1:-1;;;194:239:3:o;1967:561::-;2135:18;2155:20;2188:15;:62;;;;;;;;;;;;;;;;;;;2261:15;:29;;;;;;;;;;;;;-1:-1:-1;;;2261:29:3;;;;;2301:16;:30;;;;;;;;;;;;;-1:-1:-1;;;2301:30:3;;;;;2343:16;:32;;;;;;;;;;;;;-1:-1:-1;;;2343:32:3;;;;;2386:15;:22;;;;;;;;;;;;;-1:-1:-1;;;2386:22:3;;;;;2450:1;2453:4;2459:1;2462:3;2467:2;2471;2475;2479:4;2485:1;2433:54;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2433:54:3;;;;;;;;;;;;-1:-1:-1;1967:561:3;-1:-1:-1;;;;;;;;;;1967:561:3:o;10545:207:1:-;10633:7;10741:3;10718:19;10727:10;10718:6;:19;:::i;:::-;10717:27;;;;:::i;:::-;10710:34;;10545:207;;;;;:::o;10213:324::-;10369:12;10387:9;-1:-1:-1;;;;;10387:14:1;10409:6;10387:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10368:52;;;10498:7;10490:39;;;;-1:-1:-1;;;10490:39:1;;29644:2:4;10490:39:1;;;29626:21:4;29683:2;29663:18;;;29656:30;-1:-1:-1;;;29702:18:4;;;29695:49;29761:18;;10490:39:1;29442:343:4;5613:5607:2;5732:7;5753:21;5788:7;5820:14;5843:4;5820:28;;5858:12;5880:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5880:20:2;5929;5934:14;5929:4;:20::i;:::-;6026:14;;;;5910:39;;-1:-1:-1;5910:39:2;;-1:-1:-1;5991:9:2;;;6069:18;;:::i;:::-;6118:8;;6105:10;;:21;6098:5058;;;6156:8;6167:1;6169:6;:10;;;6167:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;6167:13:2;;-1:-1:-1;;;;6263:9:2;;;:22;;-1:-1:-1;;;;;;;;;;6276:9:2;;;6263:22;6259:619;;;6305:7;;;;:::i;:::-;;;;6349:29;6363:6;6371;6349:13;:29::i;:::-;6330:48;;-1:-1:-1;6330:48:2;-1:-1:-1;6330:48:2;6396:94;;-1:-1:-1;1451:1:2;;-1:-1:-1;6469:1:2;;-1:-1:-1;6432:39:2;;-1:-1:-1;;;;;;;6432:39:2;6396:94;6511:6;:15;;;-1:-1:-1;;6511:21:2;6507:107;;6556:6;6571;:15;;;6556:32;;;;;;;;:::i;:::-;;;;;;;:37;;:39;;;;;;;;:::i;:::-;;;;;-1:-1:-1;6507:107:2;-1:-1:-1;;;;;;;;;6649:9:2;;;:44;;6679:14;6649:44;;;6661:15;6649:44;6631:5;;:63;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;6726:10:2;;6712:11;;;;:24;;;;6771:4;6754:14;;;:21;;;6818:14;;;;:18;;6771:4;6818:18;:::i;:::-;6793:15;;;:44;-1:-1:-1;6855:8:2;;6259:619;-1:-1:-1;;;;;;;;;6949:9:2;;;;:22;;-1:-1:-1;;;;;;;;;;6962:9:2;;;6949:22;6945:1518;;;6991:18;-1:-1:-1;;;;;;;;;7034:9:2;;;:44;;7064:14;7034:44;;;7046:15;7034:44;6991:105;;7114:14;7180:1;7163:6;:14;;;:18;;;;:::i;:::-;7159:22;;7154:660;7226:6;7233:1;7226:9;;;;;;;;:::i;:::-;;;;;;;7218:17;;7261:5;:14;;;:31;;;;;7280:5;:12;;;7279:13;7261:31;7257:539;;;7342:9;7324:27;;;;;;;;:::i;:::-;:14;;:27;;;;;;;;:::i;:::-;;7320:230;;-1:-1:-1;1361:1:2;;-1:-1:-1;7521:1:2;;-1:-1:-1;7478:45:2;;-1:-1:-1;;;;;;;;;7478:45:2;7320:230;-1:-1:-1;;7575:15:2;;;:20;7637:10;;:14;;7650:1;7637:14;:::i;:::-;7621:6;7628:1;7621:9;;;;;;;;:::i;:::-;;;;;;;:13;;:30;;;;;7696:4;7677:6;7684:1;7677:9;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;:16;;;;:23;-1:-1:-1;7738:4:2;7768:5;;7257:539;7191:3;;;;:::i;:::-;;;;7154:660;;;7836:9;7831:102;;-1:-1:-1;1361:1:2;;-1:-1:-1;7912:1:2;;-1:-1:-1;7869:45:2;;-1:-1:-1;;;;;;;;;7869:45:2;7831:102;7957:5;;7950:242;;7999:6;8006:1;7999:9;;;;;;;;:::i;:::-;;;;;;;7991:17;;8034:5;:14;;;:31;;;;;8053:5;:12;;;8052:13;8034:31;8030:144;;;8093:15;;;:27;;;8146:5;;8030:144;7964:3;;;;:::i;:::-;;;;7950:242;;;8214:1;8219;8214:6;8210:213;;8252:6;8259:1;8252:9;;;;;;;;:::i;:::-;;;;;;;8244:17;;8287:5;:14;;;:31;;;;;8306:5;:12;;;8305:13;8287:31;8283:122;;;8346:36;;;;:15;;;:36;8283:122;8440:8;;;;;6945:1518;-1:-1:-1;;;;;;8501:8:2;;-1:-1:-1;;;8501:8:2;8497:378;;8533:30;8545:6;8553;8561:1;8533:11;:30::i;:::-;8529:34;-1:-1:-1;8586:19:2;;8582:87;;-1:-1:-1;8637:1:2;;-1:-1:-1;8648:1:2;;-1:-1:-1;8629:21:2;;-1:-1:-1;;;;;;8629:21:2;8582:87;8723:7;;;;:::i;:::-;;;;8752:6;:15;;;-1:-1:-1;;8752:21:2;8748:86;;8795:6;8810;:15;;;8795:32;;;;;;;;:::i;:::-;;;;;;;:37;;:39;;;;;;;;:::i;:::-;;;;;-1:-1:-1;8748:86:2;8852:8;;;8497:378;-1:-1:-1;;;;;;;;;8924:8:2;;;;:21;;-1:-1:-1;;;;;;;;;;8936:9:2;;;8924:21;:34;;;-1:-1:-1;;;;;;;;;;8949:9:2;;;8924:34;:47;;;-1:-1:-1;;;;;;;;;;8962:9:2;;;8924:47;8920:94;;;8991:8;;;8920:94;-1:-1:-1;;;;;;9052:8:2;;-1:-1:-1;;;9052:8:2;9048:117;;9122:1;9105:6;:14;;;:18;;;;:::i;9048:117::-;-1:-1:-1;;;;;;9183:8:2;;-1:-1:-1;;;9183:8:2;9179:851;;9236:6;:15;;;-1:-1:-1;;9236:21:2;;:124;;;;-1:-1:-1;9346:14:2;9281:6;9296;:15;;;9281:32;;;;;;;;:::i;:::-;;;;;;;:41;;;:79;;;;;;;;:::i;:::-;;;9236:124;:208;;;;-1:-1:-1;9429:15:2;9384:6;9399;:15;;;9384:32;;;;;;;;:::i;:::-;;;;;;;:41;;;:60;;;;;;;;:::i;:::-;;;9236:208;9211:779;;;9511:1;9494:6;:14;;;:18;;;;:::i;:::-;9490:22;;9485:487;9608:14;9586:6;9593:1;9586:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:36;;;;;;;;:::i;:::-;;:105;;;-1:-1:-1;9676:15:2;9654:6;9661:1;9654:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:37;;;;;;;;:::i;:::-;;9586:105;9553:397;;;9752:6;9759:1;9752:9;;;;;;;;:::i;:::-;;;;;;;:18;;;:39;;;;;9775:6;9782:1;9775:9;;;;;;;;:::i;:::-;;;;;;;:16;;;9774:17;9752:39;9748:176;;;9827:15;;;:27;;;9888:5;;9748:176;9522:3;;;;:::i;:::-;;;;9485:487;;9179:851;-1:-1:-1;;;;;;;;;10091:8:2;;;;;;:20;;-1:-1:-1;;;;;;;;;;10103:8:2;;;;10091:20;10090:50;;;-1:-1:-1;;;;;;;;;;10132:8:2;;;10090:50;:78;;;-1:-1:-1;;;;;;;;;;10160:8:2;;;10090:78;:106;;;-1:-1:-1;;;;;;;;;;10188:8:2;;;10090:106;:134;;;-1:-1:-1;;;;;;;;;;10216:8:2;;;10090:134;10069:927;;;10261:6;:15;;;-1:-1:-1;;10261:21:2;10257:390;;10314:6;10329;:15;;;10314:32;;;;;;;;:::i;:::-;;;;;;;10306:40;;10415:15;10397:33;;;;;;;;:::i;:::-;:14;;:33;;;;;;;;:::i;:::-;;:115;;;-1:-1:-1;10477:15:2;10459:14;;:33;;;;;;;;:::i;:::-;;:52;;;;-1:-1:-1;10496:10:2;;;;:15;;;;10459:52;10368:261;;;-1:-1:-1;1361:1:2;;-1:-1:-1;10604:1:2;;-1:-1:-1;10561:45:2;;-1:-1:-1;;;;;;;10561:45:2;10368:261;10669:33;10684:6;10692;10700:1;10669:14;:33::i;10069:927::-;-1:-1:-1;;;;;;;;;11044:9:2;;;;;;:22;;-1:-1:-1;;;;;;;;;;11057:9:2;;;;11044:22;11040:106;;;-1:-1:-1;1361:1:2;;-1:-1:-1;11129:1:2;;-1:-1:-1;11086:45:2;;-1:-1:-1;;;;;;;11086:45:2;11040:106;6142:5014;6098:5058;6128:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;6098:5058:2;;;-1:-1:-1;;;;11198:14:2;;;1309:1;;-1:-1:-1;11198:14:2;-1:-1:-1;;;5613:5607:2;;;;;;:::o;11226:360::-;11345:13;11393:4;11370:14;11440:11;11446:5;11440:3;:11;:::i;:::-;11430:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11430:22:2;-1:-1:-1;11408:44:2;-1:-1:-1;11479:5:2;11462:87;11490:3;11486:1;:7;11462:87;;;11534:1;11536;11534:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;11534:4:2;11514:6;11521:9;11525:5;11521:1;:9;:::i;:::-;11514:17;;;;;;;;:::i;:::-;;;;:24;-1:-1:-1;;;;;11514:24:2;;;;;;;;-1:-1:-1;11495:3:2;;;;:::i;:::-;;;;11462:87;;;-1:-1:-1;11572:6:2;-1:-1:-1;;11226:360:2;;;;;;:::o;14436:1068::-;14528:7;14551:21;14581:4;14551:35;;14636:2;14617:8;:15;:21;;:46;;;;;14661:2;14642:8;:15;:21;;14617:46;14596:107;;;;-1:-1:-1;;;14596:107:2;;30718:2:4;14596:107:2;;;30700:21:4;30757:2;30737:18;;;30730:30;-1:-1:-1;;;30776:18:4;;;30769:44;30830:18;;14596:107:2;30516:338:4;14596:107:2;14735:13;14762:18;14798:8;14807:1;14798:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;14798:11:2;-1:-1:-1;;;14798:18:2;;:40;;;14820:8;14829:1;14820:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;14820:11:2;-1:-1:-1;;;14820:18:2;14798:40;14794:80;;;14862:1;14854:9;;14794:80;14931:17;14962:24;15007:5;14989:8;:15;:23;;;;:::i;:::-;14962:50;;15026:16;15046:2;15026:22;15022:117;;15077:25;15084:8;15093:7;;;;:::i;:::-;;;15084:17;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;15084:17:2;15077:6;:25::i;:::-;15064:38;;;;;;:::i;:::-;;-1:-1:-1;15116:12:2;;;;:::i;:::-;;;;15022:117;15185:10;15168:294;15201:2;15197:1;:6;15168:294;;;15238:1;15224:15;-1:-1:-1;;;;;15224:15:2;;;;;15253:10;15266:23;15273:8;15282:5;15273:15;;;;;;;;:::i;15266:23::-;15253:36;-1:-1:-1;15303:10:2;15316:27;15323:8;15332:9;:5;15340:1;15332:9;:::i;:::-;15323:19;;;;;;;;:::i;15316:27::-;15303:40;-1:-1:-1;15357:14:2;15374:18;15303:40;15375:9;15383:1;15375:9;;;;15374:18;:::i;:::-;15357:35;-1:-1:-1;15406:21:2;;;;;;:::i;:::-;;-1:-1:-1;15441:10:2;15450:1;15441:10;;:::i;:::-;;;15210:252;;;15205:3;;;;;:::i;:::-;;;;15168:294;;;-1:-1:-1;15487:9:2;;14436:1068;-1:-1:-1;;;;;;14436:1068:2:o;11754:858::-;11849:6;11900:2;11849:6;;;;12000:507;12024:7;:14;12020:1;:18;12000:507;;;12064:6;;12063:31;;;;;12076:7;12084:1;12076:10;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;12076:10:2;-1:-1:-1;;;12076:17:2;12063:31;12059:85;;;12125:4;12114:15;;12059:85;12183:2;12168:7;12176:1;12168:10;;;;;;;;:::i;:::-;;;;;;;12162:23;;;;12161:54;;;12212:2;12197:7;12205:1;12197:10;;;;;;;;:::i;:::-;;;;;;;12191:23;;12161:54;12157:339;;;12239:8;12235:104;;;12271:49;;12284:5;12271:49;12316:4;;;;:::i;:::-;;;;12271:49;12356:10;12364:2;12356:10;;:::i;:::-;;;12427:2;12413:7;12421:1;12413:10;;;;;;;;:::i;:::-;;;;;12407:22;;;12413:10;;12407:22;:::i;:::-;12384:47;;12399:31;;12384:47;;:::i;:::-;;;12157:339;;;12462:7;12470:1;12462:10;;;;;;;;:::i;:::-;;;;;;;12477:2;12456:23;12452:44;;12492:4;12481:15;;12452:44;12040:3;;;;:::i;:::-;;;;12000:507;;;-1:-1:-1;12520:6:2;;12516:34;;12543:6;12547:2;12543;:6;:::i;:::-;12528:22;;;;:::i;:::-;;;12516:34;12564:8;12560:24;;;12574:10;-1:-1:-1;;12574:10:2;;:::i;:::-;;;12560:24;-1:-1:-1;12601:4:2;;11754:858;-1:-1:-1;;;;;11754:858:2:o;10760:1405:1:-;11220:21;11244:8;11253:6;11244:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11244:22:1;;;;;;;;;;;;-1:-1:-1;11360:23:1;;;;11352:69;;;;-1:-1:-1;;;11352:69:1;;33394:2:4;11352:69:1;;;33376:21:4;33433:2;33413:18;;;33406:30;33472:34;33452:18;;;33445:62;-1:-1:-1;;;33523:18:4;;;33516:31;33564:19;;11352:69:1;33192:397:4;11352:69:1;11593:6;11577:13;:22;11552:8;11561:6;11552:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11552:22:1;;;;;;;;;:47;;;;11720:8;;:16;;11729:6;;11720:16;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11720:22:1;;;;;;;;;;;:27;;11716:93;;11796:1;11764:12;11777:6;11764:20;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;11716:93:1;11948:8;11957:6;11948:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11948:20:1;;;;;;;;;;;:25;:39;;;;;11986:1;11977:6;:10;11948:39;11944:105;;;12036:1;12004:12;12017:6;12004:20;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;11944:105:1;12151:6;12127:8;12136:6;12127:16;;;;;;:::i;:::-;;;;;;;;;;;;;:20;12144:2;-1:-1:-1;;;;;12127:20:1;-1:-1:-1;;;;;12127:20:1;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;10760:1405:1:o;441:345:3:-;553:18;589:15;:54;;;;;;;;;;;;;;;;;654:29;;;;;;;;;;;-1:-1:-1;;;654:29:3;;;;;;;;694:22;;;;;;;;;;-1:-1:-1;;;694:22:3;;;;741:36;;589:54;;-1:-1:-1;654:29:3;;741:36;;589:54;;761:4;;654:29;;770:3;;694:22;;741:36;;:::i;:::-;;;;;;;;;;;;;727:51;;578:208;;;441:345;;;;:::o;5978:2269:1:-;6639:10;6626:9;:23;;6618:63;;;;-1:-1:-1;;;6618:63:1;;34918:2:4;6618:63:1;;;34900:21:4;34957:2;34937:18;;;34930:30;34996:29;34976:18;;;34969:57;35043:18;;6618:63:1;34716:351:4;6618:63:1;6773:27;6803:12;6816:6;6803:20;;;;;;:::i;:::-;;;;;;;;;;;;;;6937:17;;;;6803:20;;-1:-1:-1;;;;;;6937:17:1;:31;6929:64;;;;-1:-1:-1;;;6929:64:1;;35274:2:4;6929:64:1;;;35256:21:4;35313:2;35293:18;;;35286:30;-1:-1:-1;;;35332:18:4;;;35325:50;35392:18;;6929:64:1;35072:344:4;6929:64:1;7079:8;:22;7095:6;7079:8;:22;:::i;:::-;-1:-1:-1;7112:18:1;;;:30;;;7153:18;;;:30;;;7194:17;;;:30;;-1:-1:-1;;;;;;7194:30:1;7214:10;7194:30;;;7304:15;7282:19;;;:37;7368:26;;;;:46;;;7425:18;;;:30;;;7466:16;;;:26;;;7579:24;;1059:19:0;;1077:1;1059:19;;;970:127;7579:24:1;7676:10;:23;;;;;;;-1:-1:-1;7676:23:1;;;;;;;7692:6;7676:23;;:::i;:::-;-1:-1:-1;7801:5:1;;7785:34;;-1:-1:-1;;;;;7801:5:1;7809:9;7785:7;:34::i;:::-;7917:12;;7913:327;;7978:7;7946:8;7955:6;7946:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7963:10;7946:28;;;;;;;;:39;;:28;;;:39;;;;;:::i;:::-;;;;;;;;8074:7;8055:8;:15;;;:26;;;;;;;:::i;:::-;;;;;;;;8176:1;8156:8;:16;;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;7913:327:1;6526:1721;5978:2269;;;;;;:::o;11608:106:2:-;11667:6;11692:15;11701:2;11705:1;11692:8;:15::i;12650:515:1:-;13151:6;13120:10;13131:6;13120:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13120:24:1;;;;;;;;;;;;;:28;;;;;;;;;;;;;:37;-1:-1:-1;;12650:515:1:o;13751:678::-;14263:1;14223:10;14234:6;14223:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14223:24:1;;;;;;;;;;;;14248:10;14223:36;;;;;;;;:41;;14215:76;;;;-1:-1:-1;;;14215:76:1;;35623:2:4;14215:76:1;;;35605:21:4;35662:2;35642:18;;;35635:30;-1:-1:-1;;;35681:18:4;;;35674:52;35743:18;;14215:76:1;35421:346:4;14215:76:1;14381:40;14396:6;14404:4;14410:2;14414:6;14381:14;:40::i;:::-;13751:678;;;;:::o;1718:234:2:-;1795:13;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;1795:13:2;1810:14;1840:15;1858:16;;;;;;;;1865:1;1858:16;;;;1868:1;1858:16;;;;-1:-1:-1;;1858:16:2;;;1840:34;;1884:16;1915:6;1903:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;1940:1:2;;1884:38;;-1:-1:-1;1718:234:2;;-1:-1:-1;;;1718:234:2:o;1958:472::-;2073:4;2079:12;;:::i;:::-;2129:6;:13;2111:6;:14;;;:31;2107:142;;2205:5;2212:6;2235:1;2219:6;:13;:17;;;;:::i;:::-;2212:25;;;;;;;;:::i;:::-;;;;;;;2197:41;;;;;;2107:142;2279:48;;;;;;;;-1:-1:-1;2279:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2344:14;;;;2337:22;;2279:48;;2337:6;;:22;;;;;;:::i;:::-;;;;;;:30;;;;2377:6;:14;;:16;;;;;;;;:::i;:::-;;;-1:-1:-1;2411:4:2;;-1:-1:-1;2417:5:2;-1:-1:-1;1958:472:2;;;;;;:::o;2760:1601::-;2930:10;;2895:7;;;2972:18;;:::i;:::-;3000:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3023:1270:2;3043:8;;3030:10;;:21;3023:1270;;;3081:8;3092:1;3094:6;:10;;;3092:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3092:13:2;;-1:-1:-1;;;;3162:8:2;;;3158:346;;3209:29;3223:6;3231;3209:13;:29::i;:::-;3190:48;;-1:-1:-1;3190:48:2;-1:-1:-1;3190:48:2;3256:121;;-1:-1:-1;;;3292:18:2;;-1:-1:-1;1451:1:2;3332:26;;3256:121;3394:56;3404:5;3411:15;3428:9;:5;3436:1;3428:9;:::i;:::-;3439:10;;3394:9;:56::i;:::-;1309:1;3468:21;;;;;;;;3158:346;3534:2;3522:8;;;;:14;:43;;;;-1:-1:-1;3557:8:2;;3540:10;;:14;;3553:1;3540:14;:::i;:::-;:25;3522:43;3518:765;;;3644:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3701:10:2;;3699:13;;:1;;3701:10;3699:13;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3699:13:2;-1:-1:-1;;;3699:20:2;;:64;;;3743:1;3745:6;:10;;;3743:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3743:13:2;-1:-1:-1;;;3743:20:2;3699:64;:109;;;;3787:1;3789:6;:10;;;3787:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3787:13:2;-1:-1:-1;;;3787:21:2;3699:109;:153;;;;3832:1;3834:6;:10;;;3832:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3832:13:2;-1:-1:-1;;;3832:20:2;3699:153;:197;;;;3876:1;3878:6;:10;;;3876:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3876:13:2;-1:-1:-1;;;3876:20:2;3699:197;:241;;;;3920:1;3922:6;:10;;;3920:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3920:13:2;-1:-1:-1;;;3920:20:2;3699:241;:285;;;;3964:1;3966:6;:10;;;3964:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3964:13:2;-1:-1:-1;;;3964:20:2;3699:285;:329;;;;4008:1;4010:6;:10;;;4008:13;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4008:13:2;-1:-1:-1;;;4008:20:2;3699:329;3674:595;;;4069:8;;;3674:595;-1:-1:-1;;;4176:18:2;;-1:-1:-1;1361:1:2;4216:34;;3674:595;3067:1226;3023:1270;3053:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;3023:1270:2;;;-1:-1:-1;;4302:18:2;;-1:-1:-1;1405:1:2;2760:1601;;;;;:::o;4367:1240::-;4568:10;;4505:7;;;;;;4628:18;;:::i;:::-;4676:8;;4663:10;;:21;4656:535;;;4718:1;4720:6;:10;;;4718:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4718:13:2;;-1:-1:-1;;;;4766:8:2;;;:37;;-1:-1:-1;;;;;;;;;;4794:9:2;;;4766:37;:66;;;-1:-1:-1;;;;;;;;;;4823:9:2;;;4766:66;:95;;;-1:-1:-1;;;;;;;;;;4852:9:2;;;4766:95;:123;;;-1:-1:-1;;;;;;;;;;4881:8:2;;;4766:123;:152;;;-1:-1:-1;;;;;;;;;;4909:9:2;;;4766:152;:181;;;-1:-1:-1;;;;;;;;;;4938:9:2;;;4766:181;4745:285;;;4988:4;4980:12;;5010:5;;4745:285;5058:2;5047:8;;;;:13;;:31;;-1:-1:-1;5075:3:2;5064:8;;;;:14;5047:31;5043:138;;;-1:-1:-1;;;5098:18:2;;-1:-1:-1;1361:1:2;;-1:-1:-1;5134:32:2;;5043:138;4686:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;4656:535:2;;;5205:5;5200:93;;-1:-1:-1;;;5226:18:2;;-1:-1:-1;1405:1:2;;-1:-1:-1;5258:24:2;;5200:93;5347:29;5361:6;5369;5347:13;:29::i;:::-;5328:48;;-1:-1:-1;5328:48:2;-1:-1:-1;5328:48:2;5386:97;;-1:-1:-1;;;5414:18:2;;-1:-1:-1;1451:1:2;;-1:-1:-1;5446:26:2;;5386:97;5492:55;5502:5;5509:18;5529:5;5536:6;:10;;;5492:9;:55::i;:::-;5557:12;;:6;:12;;;:::i;:::-;;;-1:-1:-1;1309:1:2;;4367:1240;-1:-1:-1;;;;;;;;;4367:1240:2:o;15510:317::-;15560:5;15589:10;;;;15634:2;15627:9;;;;;:22;;;15647:2;15640:3;:9;;;;15627:22;15623:68;;;15672:8;15678:2;15672:3;:8;:::i;15623:68::-;15725:2;15718:3;:9;;;;:22;;;;;15738:2;15731:3;:9;;;;15718:22;15714:68;;;15763:8;15769:2;15763:3;:8;:::i;15714:68::-;15812:8;15818:2;15812:3;:8;:::i;2436:318::-;2584:5;2601:8;2584:25;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2619:11:2;;;:19;;;;2665:4;2648:14;;;:21;;;2679:9;;;:15;;;;2704:12;;;:19;-1:-1:-1;2648:21:2;2733:10;;;;:14;2436:318::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:4:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:4;238:16;;231:27;14:250::o;269:289::-;400:3;438:6;432:13;454:66;513:6;508:3;501:4;493:6;489:17;454:66;:::i;:::-;536:16;;;;;269:289;-1:-1:-1;;269:289:4:o;908:127::-;969:10;964:3;960:20;957:1;950:31;1000:4;997:1;990:15;1024:4;1021:1;1014:15;1040:719;1083:5;1136:3;1129:4;1121:6;1117:17;1113:27;1103:55;;1154:1;1151;1144:12;1103:55;1190:6;1177:20;1216:18;1253:2;1249;1246:10;1243:36;;;1259:18;;:::i;:::-;1334:2;1328:9;1302:2;1388:13;;-1:-1:-1;;1384:22:4;;;1408:2;1380:31;1376:40;1364:53;;;1432:18;;;1452:22;;;1429:46;1426:72;;;1478:18;;:::i;:::-;1518:10;1514:2;1507:22;1553:2;1545:6;1538:18;1599:3;1592:4;1587:2;1579:6;1575:15;1571:26;1568:35;1565:55;;;1616:1;1613;1606:12;1565:55;1680:2;1673:4;1665:6;1661:17;1654:4;1646:6;1642:17;1629:54;1727:1;1720:4;1715:2;1707:6;1703:15;1699:26;1692:37;1747:6;1738:15;;;;;;1040:719;;;;:::o;1764:131::-;-1:-1:-1;;;;;1839:31:4;;1829:42;;1819:70;;1885:1;1882;1875:12;1819:70;1764:131;:::o;1900:457::-;1978:6;1986;2039:2;2027:9;2018:7;2014:23;2010:32;2007:52;;;2055:1;2052;2045:12;2007:52;2095:9;2082:23;2128:18;2120:6;2117:30;2114:50;;;2160:1;2157;2150:12;2114:50;2183;2225:7;2216:6;2205:9;2201:22;2183:50;:::i;:::-;2173:60;;;2283:2;2272:9;2268:18;2255:32;2296:31;2321:5;2296:31;:::i;:::-;2346:5;2336:15;;;1900:457;;;;;:::o;2544:180::-;2603:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:52;;;2672:1;2669;2662:12;2624:52;-1:-1:-1;2695:23:4;;2544:180;-1:-1:-1;2544:180:4:o;2729:271::-;2771:3;2809:5;2803:12;2836:6;2831:3;2824:19;2852:76;2921:6;2914:4;2909:3;2905:14;2898:4;2891:5;2887:16;2852:76;:::i;:::-;2982:2;2961:15;-1:-1:-1;;2957:29:4;2948:39;;;;2989:4;2944:50;;2729:271;-1:-1:-1;;2729:271:4:o;3005:220::-;3154:2;3143:9;3136:21;3117:4;3174:45;3215:2;3204:9;3200:18;3192:6;3174:45;:::i;3230:456::-;3307:6;3315;3323;3376:2;3364:9;3355:7;3351:23;3347:32;3344:52;;;3392:1;3389;3382:12;3344:52;3431:9;3418:23;3450:31;3475:5;3450:31;:::i;:::-;3500:5;-1:-1:-1;3557:2:4;3542:18;;3529:32;3570:33;3529:32;3570:33;:::i;:::-;3230:456;;3622:7;;-1:-1:-1;;;3676:2:4;3661:18;;;;3648:32;;3230:456::o;3691:323::-;3767:6;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;;;3976:32;;-1:-1:-1;;;3691:323:4:o;4019:743::-;4126:6;4134;4142;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;4251:9;4238:23;4280:18;4321:2;4313:6;4310:14;4307:34;;;4337:1;4334;4327:12;4307:34;4360:50;4402:7;4393:6;4382:9;4378:22;4360:50;:::i;:::-;4350:60;;4463:2;4452:9;4448:18;4435:32;4419:48;;4492:2;4482:8;4479:16;4476:36;;;4508:1;4505;4498:12;4476:36;4531:52;4575:7;4564:8;4553:9;4549:24;4531:52;:::i;:::-;4521:62;;4636:2;4625:9;4621:18;4608:32;4592:48;;4665:2;4655:8;4652:16;4649:36;;;4681:1;4678;4671:12;4649:36;;4704:52;4748:7;4737:8;4726:9;4722:24;4704:52;:::i;:::-;4694:62;;;4019:743;;;;;:::o;4767:381::-;4962:2;4951:9;4944:21;4925:4;4988:45;5029:2;5018:9;5014:18;5006:6;4988:45;:::i;:::-;5081:9;5073:6;5069:22;5064:2;5053:9;5049:18;5042:50;5109:33;5135:6;5127;5109:33;:::i;:::-;5101:41;4767:381;-1:-1:-1;;;;;4767:381:4:o;5153:598::-;5240:6;5248;5256;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;5365:9;5352:23;5398:18;5390:6;5387:30;5384:50;;;5430:1;5427;5420:12;5384:50;5453;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;;5553:2;5542:9;5538:18;5525:32;5566:31;5591:5;5566:31;:::i;:::-;5616:5;-1:-1:-1;5673:2:4;5658:18;;5645:32;5686:33;5645:32;5686:33;:::i;:::-;5738:7;5728:17;;;5153:598;;;;;:::o;5964:1346::-;6128:6;6136;6144;6152;6160;6168;6221:3;6209:9;6200:7;6196:23;6192:33;6189:53;;;6238:1;6235;6228:12;6189:53;6278:9;6265:23;6307:18;6348:2;6340:6;6337:14;6334:34;;;6364:1;6361;6354:12;6334:34;6387:50;6429:7;6420:6;6409:9;6405:22;6387:50;:::i;:::-;6377:60;;6490:2;6479:9;6475:18;6462:32;6446:48;;6519:2;6509:8;6506:16;6503:36;;;6535:1;6532;6525:12;6503:36;6558:52;6602:7;6591:8;6580:9;6576:24;6558:52;:::i;:::-;6548:62;;6663:2;6652:9;6648:18;6635:32;6619:48;;6692:2;6682:8;6679:16;6676:36;;;6708:1;6705;6698:12;6676:36;6731:52;6775:7;6764:8;6753:9;6749:24;6731:52;:::i;:::-;6721:62;;6836:2;6825:9;6821:18;6808:32;6792:48;;6865:2;6855:8;6852:16;6849:36;;;6881:1;6878;6871:12;6849:36;6904:52;6948:7;6937:8;6926:9;6922:24;6904:52;:::i;:::-;6894:62;;7009:3;6998:9;6994:19;6981:33;6965:49;;7039:2;7029:8;7026:16;7023:36;;;7055:1;7052;7045:12;7023:36;7078:52;7122:7;7111:8;7100:9;7096:24;7078:52;:::i;:::-;7068:62;;7183:3;7172:9;7168:19;7155:33;7139:49;;7213:2;7203:8;7200:16;7197:36;;;7229:1;7226;7219:12;7197:36;;7252:52;7296:7;7285:8;7274:9;7270:24;7252:52;:::i;:::-;7242:62;;;5964:1346;;;;;;;;:::o;7315:322::-;7384:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:52;;;7453:1;7450;7443:12;7405:52;7493:9;7480:23;7526:18;7518:6;7515:30;7512:50;;;7558:1;7555;7548:12;7512:50;7581;7623:7;7614:6;7603:9;7599:22;7581:50;:::i;:::-;7571:60;7315:322;-1:-1:-1;;;;7315:322:4:o;7642:913::-;8006:4;8035:3;8065:2;8054:9;8047:21;8085:45;8126:2;8115:9;8111:18;8103:6;8085:45;:::i;:::-;8161:2;8146:18;;8139:34;;;;-1:-1:-1;;8204:2:4;8189:18;;8182:34;;;;8247:2;8232:18;;8225:34;;;;-1:-1:-1;;;;;8296:32:4;;;;8290:3;8275:19;;8268:61;8316:3;8345:19;;8338:35;;;;8404:3;8389:19;;8382:35;8448:3;8433:19;;8426:35;8492:3;8477:19;;8470:35;8536:3;8521:19;;;8514:35;8077:53;7642:913;-1:-1:-1;7642:913:4:o;8560:543::-;8648:6;8656;8709:2;8697:9;8688:7;8684:23;8680:32;8677:52;;;8725:1;8722;8715:12;8677:52;8765:9;8752:23;8794:18;8835:2;8827:6;8824:14;8821:34;;;8851:1;8848;8841:12;8821:34;8874:50;8916:7;8907:6;8896:9;8892:22;8874:50;:::i;:::-;8864:60;;8977:2;8966:9;8962:18;8949:32;8933:48;;9006:2;8996:8;8993:16;8990:36;;;9022:1;9019;9012:12;8990:36;;9045:52;9089:7;9078:8;9067:9;9063:24;9045:52;:::i;:::-;9035:62;;;8560:543;;;;;:::o;9108:944::-;9234:6;9242;9250;9258;9311:3;9299:9;9290:7;9286:23;9282:33;9279:53;;;9328:1;9325;9318:12;9279:53;9368:9;9355:23;9397:18;9438:2;9430:6;9427:14;9424:34;;;9454:1;9451;9444:12;9424:34;9477:50;9519:7;9510:6;9499:9;9495:22;9477:50;:::i;:::-;9467:60;;9580:2;9569:9;9565:18;9552:32;9536:48;;9609:2;9599:8;9596:16;9593:36;;;9625:1;9622;9615:12;9593:36;9648:52;9692:7;9681:8;9670:9;9666:24;9648:52;:::i;:::-;9638:62;;9753:2;9742:9;9738:18;9725:32;9709:48;;9782:2;9772:8;9769:16;9766:36;;;9798:1;9795;9788:12;9766:36;9821:52;9865:7;9854:8;9843:9;9839:24;9821:52;:::i;:::-;9811:62;;9926:2;9915:9;9911:18;9898:32;9882:48;;9955:2;9945:8;9942:16;9939:36;;;9971:1;9968;9961:12;9939:36;;9994:52;10038:7;10027:8;10016:9;10012:24;9994:52;:::i;:::-;9984:62;;;9108:944;;;;;;;:::o;10057:380::-;10136:1;10132:12;;;;10179;;;10200:61;;10254:4;10246:6;10242:17;10232:27;;10200:61;10307:2;10299:6;10296:14;10276:18;10273:38;10270:161;;10353:10;10348:3;10344:20;10341:1;10334:31;10388:4;10385:1;10378:15;10416:4;10413:1;10406:15;10270:161;;10057:380;;;:::o;10791:127::-;10852:10;10847:3;10843:20;10840:1;10833:31;10883:4;10880:1;10873:15;10907:4;10904:1;10897:15;10923:125;10988:9;;;11009:10;;;11006:36;;;11022:18;;:::i;12456:127::-;12517:10;12512:3;12508:20;12505:1;12498:31;12548:4;12545:1;12538:15;12572:4;12569:1;12562:15;17158:545;17260:2;17255:3;17252:11;17249:448;;;17296:1;17321:5;17317:2;17310:17;17366:4;17362:2;17352:19;17436:2;17424:10;17420:19;17417:1;17413:27;17407:4;17403:38;17472:4;17460:10;17457:20;17454:47;;;-1:-1:-1;17495:4:4;17454:47;17550:2;17545:3;17541:12;17538:1;17534:20;17528:4;17524:31;17514:41;;17605:82;17623:2;17616:5;17613:13;17605:82;;;17668:17;;;17649:1;17638:13;17605:82;;;17609:3;;;17158:545;;;:::o;17879:1352::-;18005:3;17999:10;18032:18;18024:6;18021:30;18018:56;;;18054:18;;:::i;:::-;18083:97;18173:6;18133:38;18165:4;18159:11;18133:38;:::i;:::-;18127:4;18083:97;:::i;:::-;18235:4;;18299:2;18288:14;;18316:1;18311:663;;;;19018:1;19035:6;19032:89;;;-1:-1:-1;19087:19:4;;;19081:26;19032:89;-1:-1:-1;;17836:1:4;17832:11;;;17828:24;17824:29;17814:40;17860:1;17856:11;;;17811:57;19134:81;;18281:944;;18311:663;17105:1;17098:14;;;17142:4;17129:18;;-1:-1:-1;;18347:20:4;;;18465:236;18479:7;18476:1;18473:14;18465:236;;;18568:19;;;18562:26;18547:42;;18660:27;;;;18628:1;18616:14;;;;18495:19;;18465:236;;;18469:3;18729:6;18720:7;18717:19;18714:201;;;18790:19;;;18784:26;-1:-1:-1;;18873:1:4;18869:14;;;18885:3;18865:24;18861:37;18857:42;18842:58;18827:74;;18714:201;-1:-1:-1;;;;;18961:1:4;18945:14;;;18941:22;18928:36;;-1:-1:-1;17879:1352:4:o;21673:277::-;21740:6;21793:2;21781:9;21772:7;21768:23;21764:32;21761:52;;;21809:1;21806;21799:12;21761:52;21841:9;21835:16;21894:5;21887:13;21880:21;21873:5;21870:32;21860:60;;21916:1;21913;21906:12;22315:1540;22734:3;22772:6;22766:13;22798:4;22811:64;22868:6;22863:3;22858:2;22850:6;22846:15;22811:64;:::i;:::-;22938:13;;22897:16;;;;22960:68;22938:13;22897:16;22995:15;;;22960:68;:::i;:::-;23095:13;;23050:20;;;23117:68;23095:13;23050:20;23152:15;;;23117:68;:::i;:::-;23252:13;;23207:20;;;23274:68;23252:13;23207:20;23309:15;;;23274:68;:::i;:::-;23409:13;;23364:20;;;23431:68;23409:13;23364:20;23466:15;;;23431:68;:::i;:::-;23566:13;;23521:20;;;23588:68;23566:13;23521:20;23623:15;;;23588:68;:::i;:::-;23723:13;;23678:20;;;23745:68;23723:13;23678:20;23780:15;;;23745:68;:::i;:::-;23829:20;;;;;22315:1540;-1:-1:-1;;;;;;;;;;22315:1540:4:o;23860:1745::-;24327:3;24365:6;24359:13;24391:4;24404:64;24461:6;24456:3;24451:2;24443:6;24439:15;24404:64;:::i;:::-;24531:13;;24490:16;;;;24553:68;24531:13;24490:16;24588:15;;;24553:68;:::i;:::-;24688:13;;24643:20;;;24710:68;24688:13;24643:20;24745:15;;;24710:68;:::i;:::-;24845:13;;24800:20;;;24867:68;24845:13;24800:20;24902:15;;;24867:68;:::i;:::-;25002:13;;24957:20;;;25024:68;25002:13;24957:20;25059:15;;;25024:68;:::i;:::-;25159:13;;25114:20;;;25181:68;25159:13;25114:20;25216:15;;;25181:68;:::i;:::-;25316:13;;25271:20;;;25338:68;25316:13;25271:20;25373:15;;;25338:68;:::i;:::-;25473:13;;25428:20;;;25495:68;25473:13;25428:20;25530:15;;;25495:68;:::i;:::-;25579:20;;;;;23860:1745;-1:-1:-1;;;;;;;;;;;23860:1745:4:o;25610:1333::-;25979:3;26017:6;26011:13;26043:4;26056:64;26113:6;26108:3;26103:2;26095:6;26091:15;26056:64;:::i;:::-;26183:13;;26142:16;;;;26205:68;26183:13;26142:16;26240:15;;;26205:68;:::i;:::-;26340:13;;26295:20;;;26362:68;26340:13;26295:20;26397:15;;;26362:68;:::i;:::-;26497:13;;26452:20;;;26519:68;26497:13;26452:20;26554:15;;;26519:68;:::i;:::-;26654:13;;26609:20;;;26676:68;26654:13;26609:20;26711:15;;;26676:68;:::i;:::-;26811:13;;26766:20;;;26833:68;26811:13;26766:20;26868:15;;;26833:68;:::i;:::-;26917:20;;;;;25610:1333;-1:-1:-1;;;;;;;;;25610:1333:4:o;26948:1884::-;27463:3;27501:6;27495:13;27517:66;27576:6;27571:3;27564:4;27556:6;27552:17;27517:66;:::i;:::-;27614:6;27608:13;27630:81;27702:8;27693:6;27688:3;27684:16;27677:4;27669:6;27665:17;27630:81;:::i;:::-;27789:13;;27737:16;;;27733:31;;27811:70;27789:13;27733:31;27858:4;27846:17;;27811:70;:::i;:::-;27912:6;27906:13;27928:85;28004:8;27993;27986:5;27982:20;27975:4;27967:6;27963:17;27928:85;:::i;:::-;28095:13;;28039:20;;;;28035:35;;28117:70;28095:13;28035:35;28164:4;28152:17;;28117:70;:::i;:::-;28218:6;28212:13;28234:85;28310:8;28299;28292:5;28288:20;28281:4;28273:6;28269:17;28234:85;:::i;:::-;28401:13;;28345:20;;;;28341:35;;28423:70;28401:13;28341:35;28470:4;28458:17;;28423:70;:::i;:::-;28524:6;28518:13;28540:85;28616:8;28605;28598:5;28594:20;28587:4;28579:6;28575:17;28540:85;:::i;:::-;28704:13;;28648:20;;;;28644:35;;28726:67;28704:13;28644:35;28773:4;28761:17;;28726:67;:::i;:::-;28809:17;;26948:1884;-1:-1:-1;;;;;;;;;;;26948:1884:4:o;28837:168::-;28910:9;;;28941;;28958:15;;;28952:22;;28938:37;28928:71;;28979:18;;:::i;29010:217::-;29050:1;29076;29066:132;;29120:10;29115:3;29111:20;29108:1;29101:31;29155:4;29152:1;29145:15;29183:4;29180:1;29173:15;29066:132;-1:-1:-1;29212:9:4;;29010:217::o;29790:135::-;29829:3;29850:17;;;29847:43;;29870:18;;:::i;:::-;-1:-1:-1;29917:1:4;29906:13;;29790:135::o;29930:175::-;29967:3;30011:4;30004:5;30000:16;30040:4;30031:7;30028:17;30025:43;;30048:18;;:::i;:::-;30097:1;30084:15;;29930:175;-1:-1:-1;;29930:175:4:o;30110:127::-;30171:10;30166:3;30162:20;30159:1;30152:31;30202:4;30199:1;30192:15;30226:4;30223:1;30216:15;30242:128;30309:9;;;30330:11;;;30327:37;;;30344:18;;:::i;30375:136::-;30414:3;30442:5;30432:39;;30451:18;;:::i;:::-;-1:-1:-1;;;30487:18:4;;30375:136::o;30859:182::-;-1:-1:-1;;;;;30966:10:4;;;30978;;;30962:27;;31001:11;;;30998:37;;;31015:18;;:::i;:::-;30998:37;30859:182;;;;:::o;31046:148::-;31134:4;31113:12;;;31127;;;31109:31;;31152:13;;31149:39;;;31168:18;;:::i;31199:237::-;31271:9;;;31238:7;31296:9;;-1:-1:-1;;;31307:18:4;;31292:34;31289:60;;;31329:18;;:::i;:::-;31402:1;31393:7;31388:16;31385:1;31382:23;31378:1;31371:9;31368:38;31358:72;;31410:18;;:::i;31441:151::-;31531:4;31524:12;;;31510;;;31506:31;;31549:14;;31546:40;;;31566:18;;:::i;31597:216::-;31661:9;;;31689:11;;;31636:3;31719:9;;31747:10;;31743:19;;31772:10;;31764:19;;31740:44;31737:70;;;31787:18;;:::i;:::-;31737:70;;31597:216;;;;:::o;31818:422::-;31907:1;31950:5;31907:1;31964:270;31985:7;31975:8;31972:21;31964:270;;;32044:4;32040:1;32036:6;32032:17;32026:4;32023:27;32020:53;;;32053:18;;:::i;:::-;32103:7;32093:8;32089:22;32086:55;;;32123:16;;;;32086:55;32202:22;;;;32162:15;;;;31964:270;;;31968:3;31818:422;;;;;:::o;32245:806::-;32294:5;32324:8;32314:80;;-1:-1:-1;32365:1:4;32379:5;;32314:80;32413:4;32403:76;;-1:-1:-1;32450:1:4;32464:5;;32403:76;32495:4;32513:1;32508:59;;;;32581:1;32576:130;;;;32488:218;;32508:59;32538:1;32529:10;;32552:5;;;32576:130;32613:3;32603:8;32600:17;32597:43;;;32620:18;;:::i;:::-;-1:-1:-1;;32676:1:4;32662:16;;32691:5;;32488:218;;32790:2;32780:8;32777:16;32771:3;32765:4;32762:13;32758:36;32752:2;32742:8;32739:16;32734:2;32728:4;32725:12;32721:35;32718:77;32715:159;;;-1:-1:-1;32827:19:4;;;32859:5;;32715:159;32906:34;32931:8;32925:4;32906:34;:::i;:::-;32976:6;32972:1;32968:6;32964:19;32955:7;32952:32;32949:58;;;32987:18;;:::i;:::-;33025:20;;32245:806;-1:-1:-1;;;32245:806:4:o;33056:131::-;33116:5;33145:36;33172:8;33166:4;33145:36;:::i;33594:1117::-;33917:3;33955:6;33949:13;33971:66;34030:6;34025:3;34018:4;34010:6;34006:17;33971:66;:::i;:::-;34100:13;;34059:16;;;;34122:70;34100:13;34059:16;34169:4;34157:17;;34122:70;:::i;:::-;34259:13;;34214:20;;;34281:70;34259:13;34214:20;34328:4;34316:17;;34281:70;:::i;:::-;34418:13;;34373:20;;;34440:70;34418:13;34373:20;34487:4;34475:17;;34440:70;:::i;:::-;34577:13;;34532:20;;;34599:70;34577:13;34532:20;34646:4;34634:17;;34599:70;:::i;:::-;34685:20;;33594:1117;-1:-1:-1;;;;;;;33594:1117:4:o

Swarm Source

ipfs://2514d7d118e1eba90983b9f9186ef581a9ba36c8e0c56b47f6eb90257980b118

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  ]
[ 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.