ETH Price: $1,983.41 (-1.45%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve244166792026-02-09 3:59:2320 days ago1770609563IN
Blockchain Cuties: BCUG Token
0 ETH0.00000330.07
Approve244003272026-02-06 20:59:5923 days ago1770411599IN
Blockchain Cuties: BCUG Token
0 ETH0.000011580.46400172
Approve243787152026-02-03 20:29:1126 days ago1770150551IN
Blockchain Cuties: BCUG Token
0 ETH0.000087071.85284103
Approve243552962026-01-31 13:56:3529 days ago1769867795IN
Blockchain Cuties: BCUG Token
0 ETH0.000098262.09244363
Approve243552692026-01-31 13:51:1129 days ago1769867471IN
Blockchain Cuties: BCUG Token
0 ETH0.000099562.11964772
Transfer243544902026-01-31 11:14:4729 days ago1769858087IN
Blockchain Cuties: BCUG Token
0 ETH0.00006181.0804967
Approve243487592026-01-30 16:03:5930 days ago1769789039IN
Blockchain Cuties: BCUG Token
0 ETH0.000119934.80182523
Approve243005262026-01-23 22:39:2337 days ago1769207963IN
Blockchain Cuties: BCUG Token
0 ETH0.00000740.15758342
Withdraw Token F...242943932026-01-23 2:05:5937 days ago1769133959IN
Blockchain Cuties: BCUG Token
0 ETH0.000001310.05218879
Withdraw ERC20242943892026-01-23 2:05:1137 days ago1769133911IN
Blockchain Cuties: BCUG Token
0 ETH0.000001240.05068217
Withdraw Eth242943822026-01-23 2:03:4737 days ago1769133827IN
Blockchain Cuties: BCUG Token
0 ETH0.000001350.05531676
Approve242683942026-01-19 11:03:1141 days ago1768820591IN
Blockchain Cuties: BCUG Token
0 ETH0.000002010.04274474
Approve242679412026-01-19 9:32:2341 days ago1768815143IN
Blockchain Cuties: BCUG Token
0 ETH0.000096522.05429908
Approve242528892026-01-17 7:12:2343 days ago1768633943IN
Blockchain Cuties: BCUG Token
0 ETH0.000000950.03838478
Transfer242377842026-01-15 4:40:3545 days ago1768452035IN
Blockchain Cuties: BCUG Token
0 ETH0.000056281.0739795
Approve241304332025-12-31 5:10:5960 days ago1767157859IN
Blockchain Cuties: BCUG Token
0 ETH0.000013190.5284041
Approve241235022025-12-30 5:55:2361 days ago1767074123IN
Blockchain Cuties: BCUG Token
0 ETH0.000095582.03388665
Approve240881522025-12-25 7:28:5966 days ago1766647739IN
Blockchain Cuties: BCUG Token
0 ETH0.000002680.05695737
Transfer240341652025-12-17 18:37:1174 days ago1765996631IN
Blockchain Cuties: BCUG Token
0 ETH0.000173273.03067953
Approve240238692025-12-16 8:07:1175 days ago1765872431IN
Blockchain Cuties: BCUG Token
0 ETH0.000007220.28912721
Approve240201072025-12-15 19:31:2376 days ago1765827083IN
Blockchain Cuties: BCUG Token
0 ETH0.00000790.16719118
Approve239828892025-12-10 14:24:5981 days ago1765376699IN
Blockchain Cuties: BCUG Token
0 ETH0.000017030.36045309
Transfer239428352025-12-04 23:11:5987 days ago1764889919IN
Blockchain Cuties: BCUG Token
0 ETH0.000033391.02715921
Approve239236152025-12-02 5:11:5989 days ago1764652319IN
Blockchain Cuties: BCUG Token
0 ETH0.000003410.13672375
Approve239236142025-12-02 5:11:4789 days ago1764652307IN
Blockchain Cuties: BCUG Token
0 ETH0.000003380.13540347
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BCUG

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license, Audited
/**
 *Submitted for verification at Etherscan.io on 2021-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overloaded;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

interface IERC20Bulk  {
    function transferBulk(address[] calldata to, uint[] calldata tokens) external;
    function approveBulk(address[] calldata spender, uint[] calldata tokens) external;
}

interface IERC223  {
    function transfer(address _to, uint _value, bytes calldata _data) external returns (bool success);
}

interface IERC827  {
    function approveAndCall(address _spender, uint256 _value, bytes memory _data) external returns (bool);
}


// https://github.com/ethereum/EIPs/issues/223
interface TokenFallback {
    function tokenFallback(address _from, uint _value, bytes calldata _data) external;
}

// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//

interface TokenRecipientInterface {
    function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external;
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
      * @dev Safely transfers `tokenId` token from `from` to `to`.
      *
      * Requirements:
      *
      * - `from` cannot be the zero address.
      * - `to` cannot be the zero address.
      * - `tokenId` token must exist and be owned by `from`.
      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
      *
      * Emits a {Transfer} event.
      */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}


/**
* Access control holds contract signers (board members) and frozen accounts.
* Have utility modifiers for method safe access.
*/
contract AccessControl {
    // The addresses that can co-sign transactions on the wallet
    mapping(address => bool) signers;

    // Frozen account that cant move funds
    mapping (address => bool) private _frozen;

    event Frozen(address target);
    event Unfrozen(address target);

    /**
    * Set up multi-sig access by specifying the signers allowed to be used on this contract.
    * 3 signers will be required to send a transaction from this wallet.
    * Note: The sender is NOT automatically added to the list of signers.
    *
    * @param allowedSigners An array of signers on the wallet
    */
    constructor(address[] memory allowedSigners) {
        require(allowedSigners.length == 5, "AccessControl: Invalid number of signers");

        for (uint8 i = 0; i < allowedSigners.length; i++) {
            require(allowedSigners[i] != address(0), "AccessControl: Invalid signer address");
            require(!signers[allowedSigners[i]], "AccessControl: Signer address duplication");
            signers[allowedSigners[i]] = true;
        }
    }

    /**
     * @dev Throws if called by any account other than the signer.
     */
    modifier onlySigner() {
        require(signers[msg.sender], "AccessControl: Access denied");
        _;
    }

    /**
     * @dev Checks if provided address has signer permissions.
     */
    function isSigner(address _addr) public view returns (bool) {
        return signers[_addr];
    }

    /**
     * @dev Returns true if the target account is frozen.
     */
    function isFrozen(address target) public view returns (bool) {
        return _frozen[target];
    }

    function _freeze(address target) internal {
        require(!_frozen[target], "AccessControl: Target account is already frozen");
        _frozen[target] = true;
        emit Frozen(target);
    }

    /**
     * @dev Mark target account as unfrozen.
     * Can be called even if the contract doesn't allow to freeze accounts.
     */
    function _unfreeze(address target) internal {
        require(_frozen[target], "AccessControl: Target account is not frozen");
        delete _frozen[target];
        emit Unfrozen(target);
    }

    /**
     * @dev Allow to withdraw ERC20 tokens from contract itself
     */
    function withdrawERC20(IERC20 _tokenContract) external onlySigner {
        uint256 balance = _tokenContract.balanceOf(address(this));
        _tokenContract.transfer(msg.sender, balance);
    }

    /**
     * @dev Allow to withdraw ERC721 tokens from contract itself
     */
    function approveERC721(IERC721 _tokenContract) external onlySigner {
        _tokenContract.setApprovalForAll(msg.sender, true);
    }

    /**
     * @dev Allow to withdraw ERC1155 tokens from contract itself
     */
    function approveERC1155(IERC1155 _tokenContract) external onlySigner {
        _tokenContract.setApprovalForAll(msg.sender, true);
    }

    /**
     * @dev Allow to withdraw ETH from contract itself
     */
    function withdrawEth(address payable _receiver) external onlySigner {
        if (address(this).balance > 0) {
            _receiver.transfer(address(this).balance);
        }
    }
}

interface IFungibleToken is IERC20, IERC827, IERC223, IERC20Bulk {
}

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "BCUG: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

/**
 * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
 */
abstract contract ERC20Capped is ERC20 {
    uint256 private _cap;

    /**
     * @dev Sets the value of the `cap`. This value is immutable, it can only be
     * set once during construction.
     */
    constructor (uint256 cap_) {
        require(cap_ > 0, "ERC20Capped: cap is 0");
        _cap = cap_;
    }

    /**
     * @dev Returns the cap on the token's total supply.
     */
    function cap() public view virtual returns (uint256) {
        return _cap;
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - minted tokens must not cause the total supply to go over the cap.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        if (from == address(0)) { // When minting tokens
            require(totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
        }
    }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

/**
 * Governance Token contract includes multisig protected actions.
 * It includes:
 * - minting methods
 * - freeze methods
 * - pause methods
 *
 * For each call must be provided valid signatures from contract signers (defined in AccessControl)
 * and the transaction itself must be sent from the signer address.
 * Every succeeded transaction will contain signer addresses for action proof in logs.
 *
 * It is possible to pause contract transfers in case an exchange is hacked and there is a risk for token holders to lose
 * their tokens, delegated to an exchange. After freezing suspicious accounts the contract can be unpaused.
 * Board members can burn tokens on frozen accounts to mint new tokens to holders as a recovery after a hacking attack.
*/
abstract contract GovernanceToken is ERC20Capped, ERC20Burnable, IFungibleToken, AccessControl, Pausable {
    using ECDSA for bytes32;

    // keccak256("mint(address target, uint256 amount, bytes[] signatures)")
    bytes32 constant MINT_TYPEHASH = 0xdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f;

    // keccak256("mintBulk(address[] target, uint256[] amount, bytes[] signatures)")
    bytes32 constant MINT_BULK_TYPEHASH = 0x84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c7;

    // keccak256("freeze/unfreeze(address target, bytes[] memory signatures)")
    bytes32 constant FREEZE_TYPEHASH = 0x0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba5;

    // keccak256("freezeBulk/unfreezeBulk(address[] calldata target, bytes[] memory signatures)")
    bytes32 constant FREEZE_BULK_TYPEHASH = 0xfbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b;

    // keccak256("burnFrozenTokens(address target, bytes[] memory signatures)")
    bytes32 constant BURN_FROZEN_TYPEHASH = 0x642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c;

    // keccak256("freezeAndBurnTokens(address target, bytes[] memory signatures)")
    bytes32 constant FREEZE_AND_BURN_TYPEHASH = 0xb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e11;

    // keccak256("pause/unpause(bytes[] memory signatures)")
    bytes32 constant PAUSE_TYPEHASH = 0x4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e;

    uint public nonce = 0;

    event SignedBy(address signer);

    constructor (string memory name_, string memory symbol_, uint256 cap_, address[] memory allowedSigners)
        ERC20Capped(cap_)
        ERC20(name_, symbol_)
        AccessControl(allowedSigners) {}

    /**
     * @dev Mint some tokens to target account
     * MultiSig check is used - verifies that contract signers approve minting.
     * During minting applied check for the max token cap.
     */
    function mint(address target, uint256 amount, bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(MINT_TYPEHASH, target, amount).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);
        _mint(target, amount);
    }

    /**
     * @dev Bulk operation to mint tokens to target accounts. There is a check for the cap inside.
     */
    function mintBulk(address[] calldata target, uint256[] calldata amount, bytes[] memory signatures) external onlySigner {
        require(target.length > 1, "GovernanceToken: cannot perform bulk with single target");
        require(target.length == amount.length, "GovernanceToken: target.length != amount.length");

        bytes32 operationHash = getOperationHash(MINT_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        for (uint i = 0; i < target.length; i++) {
            _mint(target[i], amount[i]);
        }
    }

    /**
    * @dev Mark target account as frozen. Frozen accounts can't perform transfers.
    */
    function freeze(address target, bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(FREEZE_TYPEHASH, target, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _freeze(target);
    }

    /**
     * @dev Mark target account as unfrozen.
     */
    function unfreeze(address target, bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(FREEZE_TYPEHASH, target, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _unfreeze(target);
    }

    function freezeBulk(address[] calldata target, bytes[] memory signatures) external onlySigner {
        require(target.length > 1, "GovernanceToken: cannot perform bulk with single target");

        bytes32 operationHash = getOperationHash(FREEZE_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        for (uint i = 0; i < target.length; i++) {
            _freeze(target[i]);
        }
    }

    function unfreezeBulk(address[] calldata target, bytes[] memory signatures) external onlySigner {
        require(target.length > 1, "GovernanceToken: cannot perform bulk with single target");

        bytes32 operationHash = getOperationHash(FREEZE_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        for (uint i = 0; i < target.length; i++) {
            _unfreeze(target[i]);
        }
    }

    /**
     * @dev Burn tokens on frozen account.
     */
    function burnFrozenTokens(address target, bytes[] memory signatures) external onlySigner {
        require(isFrozen(target), "GovernanceToken: target account is not frozen");

        bytes32 operationHash = getOperationHash(BURN_FROZEN_TYPEHASH, target, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _burn(target, balanceOf(target));
    }

    /**
     * @dev Freeze and burn tokens in a single transaction.
     */
    function freezeAndBurnTokens(address target, bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(FREEZE_AND_BURN_TYPEHASH, target, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _freeze(target);
        _burn(target, balanceOf(target));
    }

    /**
     * @dev Triggers stopped state.
     * - The contract must not be paused and pause should be allowed.
     */
    function pause(bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(PAUSE_TYPEHASH, msg.sender, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _pause();
    }

    /**
     * @dev Returns to normal state.
     * - The contract must be paused.
     */
    function unpause(bytes[] memory signatures) external onlySigner {
        bytes32 operationHash = getOperationHash(PAUSE_TYPEHASH, msg.sender, 1).toEthSignedMessageHash();
        _verifySignatures(signatures, operationHash);

        _unpause();
    }

    /**
    * @dev Get operation hash for multisig operation
    * Nonce used to ensure that signature used only once.
    * Use unique typehash for each operation.
    */
    function getOperationHash(bytes32 typehash, address target, uint256 value) public view returns (bytes32) {
        return keccak256(abi.encodePacked(address(this), typehash, target, value, nonce));
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - do not allow the transfer of funds to the token contract itself. Usually such a call is a mistake.
     * - do not allow transfers when contract is paused.
     * - only allow to burn frozen tokens.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20Capped, ERC20) {
        super._beforeTokenTransfer(from, to, amount);

        require(to != address(this), "GovernanceToken: can't transfer to token contract self");
        require(!paused(), "GovernanceToken: token transfer while paused");
        require(!isFrozen(from) || to == address(0x0), "GovernanceToken: source address was frozen");
    }

    /**
     * @dev Verify provided signatures according to the operation hash
     * Ensure that each signature belongs to contract known signer and is unique
     */
    function _verifySignatures(bytes[] memory signatures, bytes32 operationHash) internal {
        require(signatures.length >= 2, "AccessControl: not enough confirmations");

        address[] memory recovered = new address[](signatures.length + 1);
        recovered[0] = msg.sender;
        emit SignedBy(msg.sender);

        for (uint i = 0; i < signatures.length; i++) {
            address addr = operationHash.recover(signatures[i]);
            require(isSigner(addr), "AccessControl: recovered address is not signer");

            for (uint j = 0; j < recovered.length; j++) {
                require(recovered[j] != addr, "AccessControl: signer address used more than once");
            }

            recovered[i + 1] = addr;
            emit SignedBy(addr);
        }

        require(recovered.length >= 3, "AccessControl: not enough confirmations");

        nonce++;
    }
}

/**
 * @title Blockchain Cuties Universe fungible token base contract
 * @dev Implementation of the {IERC20}, {IERC827} and {IERC223} interfaces.
 * Token holders can burn their tokens.
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract BCUG is GovernanceToken {

    constructor (address[] memory allowedSigners) GovernanceToken("Blockchain Cuties Universe Governance Token", "BCUG", 10000000 ether, allowedSigners) {}

    // @dev Transfers to _withdrawToAddress all tokens controlled by
    // contract _tokenContract.
    function withdrawTokenFromBalance(IERC20 _tokenContract, address _withdrawToAddress) external onlySigner {
        uint256 balance = _tokenContract.balanceOf(address(this));
        _tokenContract.transfer(_withdrawToAddress, balance);
    }


    // ---------------------------- ERC827 approveAndCall ----------------------------


    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account. The `spender` contract function
    // `receiveApproval(...)` is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes calldata data) external override returns (bool success) {
        _approve(msg.sender, spender, tokens);
        TokenRecipientInterface(spender).receiveApproval(msg.sender, tokens, address(this), data);
        return true;
    }

    // ---------------------------- ERC20 Bulk Operations ----------------------------

    function transferBulk(address[] calldata to, uint[] calldata tokens) external override {
        require(to.length == tokens.length, "transferBulk: to.length != tokens.length");
        for (uint i = 0; i < to.length; i++)
        {
            _transfer(msg.sender, to[i], tokens[i]);
        }
    }

    function approveBulk(address[] calldata spender, uint[] calldata tokens) external override {
        require(spender.length == tokens.length, "approveBulk: spender.length != tokens.length");
        for (uint i = 0; i < spender.length; i++)
        {
            _approve(msg.sender, spender[i], tokens[i]);
        }
    }

    // ---------------------------- ERC223 ----------------------------
    event Transfer(address indexed from, address indexed to, uint256 value, bytes data);

    // Function that is called when a user or another contract wants to transfer funds .
    function transfer(address _to, uint _value, bytes calldata _data) external override returns (bool success) {
        return transferWithData(_to, _value, _data);
    }

    function transferWithData(address _to, uint _value, bytes calldata _data) public returns (bool success) {
        if (_isContract(_to)) {
            return transferToContract(_to, _value, _data);
        }
        else {
            return transferToAddress(_to, _value, _data);
        }
    }

    // function that is called when transaction target is a contract
    function transferToContract(address _to, uint _value, bytes calldata _data) public returns (bool success) {
        _transfer(msg.sender, _to, _value);
        emit Transfer(msg.sender, _to, _value, _data);
        TokenFallback receiver = TokenFallback(_to);
        receiver.tokenFallback(msg.sender, _value, _data);
        return true;
    }

    // assemble the given address bytecode. If bytecode exists then the _addr is a contract.
    function _isContract(address _addr) private view returns (bool is_contract) {
        uint length;
        assembly {
        //retrieve the size of the code on target address, this needs assembly
            length := extcodesize(_addr)
        }
        return length > 0;
    }

    // function that is called when transaction target is an address
    function transferToAddress(address _to, uint tokens, bytes calldata _data) public returns (bool success) {
        _transfer(msg.sender, _to, tokens);
        emit Transfer(msg.sender, _to, tokens, _data);
        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"allowedSigners","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"Frozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"SignedBy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"Unfrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"spender","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"approveBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"_tokenContract","type":"address"}],"name":"approveERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_tokenContract","type":"address"}],"name":"approveERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"burnFrozenTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freezeAndBurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freezeBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"typehash","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getOperationHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"mintBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"transferBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferToAddress","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferToContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferWithData","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unfreezeBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenContract","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_withdrawToAddress","type":"address"}],"name":"withdrawTokenFromBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006009553480156200001657600080fd5b50604051620064d8380380620064d883398181016040528101906200003c919062000544565b6040518060600160405280602b8152602001620064ad602b91396040518060400160405280600481526020017f42435547000000000000000000000000000000000000000000000000000000008152506a084595161401484a00000083808285858160039080519060200190620000b5929190620003db565b508060049080519060200190620000ce929190620003db565b5050506000811162000117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010e9062000625565b60405180910390fd5b8060058190555050600581511462000166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015d906200068b565b60405180910390fd5b60005b81518160ff161015620003b357600073ffffffffffffffffffffffffffffffffffffffff16828260ff1681518110620001cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156200022d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002249062000669565b60405180910390fd5b60066000838360ff16815181106200026e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000301576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f89062000647565b60405180910390fd5b600160066000848460ff168151811062000344577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620003aa90620007c3565b91505062000169565b50506000600860006101000a81548160ff0219169083151502179055505050505050620009c0565b828054620003e99062000757565b90600052602060002090601f0160209004810192826200040d576000855562000459565b82601f106200042857805160ff191683800117855562000459565b8280016001018555821562000459579182015b82811115620004585782518255916020019190600101906200043b565b5b5090506200046891906200046c565b5090565b5b80821115620004875760008160009055506001016200046d565b5090565b6000620004a26200049c84620006d6565b620006ad565b90508083825260208201905082856020860282011115620004c257600080fd5b60005b85811015620004f65781620004db888262000500565b845260208401935060208301925050600181019050620004c5565b5050509392505050565b6000815190506200051181620009a6565b92915050565b600082601f8301126200052957600080fd5b81516200053b8482602086016200048b565b91505092915050565b6000602082840312156200055757600080fd5b600082015167ffffffffffffffff8111156200057257600080fd5b620005808482850162000517565b91505092915050565b60006200059860158362000705565b9150620005a58262000890565b602082019050919050565b6000620005bf60298362000705565b9150620005cc82620008b9565b604082019050919050565b6000620005e660258362000705565b9150620005f38262000908565b604082019050919050565b60006200060d60288362000705565b91506200061a8262000957565b604082019050919050565b60006020820190508181036000830152620006408162000589565b9050919050565b600060208201905081810360008301526200066281620005b0565b9050919050565b600060208201905081810360008301526200068481620005d7565b9050919050565b60006020820190508181036000830152620006a681620005fe565b9050919050565b6000620006b9620006cc565b9050620006c782826200078d565b919050565b6000604051905090565b600067ffffffffffffffff821115620006f457620006f362000850565b5b602082029050602081019050919050565b600082825260208201905092915050565b600062000723826200072a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b600060028204905060018216806200077057607f821691505b6020821081141562000787576200078662000821565b5b50919050565b62000798826200087f565b810181811067ffffffffffffffff82111715620007ba57620007b962000850565b5b80604052505050565b6000620007d0826200074a565b915060ff821415620007e757620007e6620007f2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a205369676e6572206164647265737320647560008201527f706c69636174696f6e0000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20496e76616c6964207369676e657220616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20496e76616c6964206e756d626572206f6660008201527f207369676e657273000000000000000000000000000000000000000000000000602082015250565b620009b18162000716565b8114620009bd57600080fd5b50565b615add80620009d06000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80637df73e2711610146578063be45fd62116100c3578063da63bac611610087578063da63bac61461072a578063dd62ed3e14610746578063e583983614610776578063ead8c595146107a6578063f4f3b200146107c2578063fa312b3b146107de57610253565b8063be45fd6214610676578063c6b72a1f146106a6578063caa7d950146106c2578063cae9ca51146106de578063cda8c7151461070e57610253565b806395d89b411161010a57806395d89b41146105be578063a457c2d7146105dc578063a9059cbb1461060c578063affed0e01461063c578063b9edf9111461065a57610253565b80637df73e271461051e5780638ea769f61461054e5780639316c3e71461056a578063936550551461058657806393a02744146105a257610253565b806335e9d83b116101d4578063536db4cb11610198578063536db4cb1461047c578063561e8319146104985780635c975abb146104b457806370a08231146104d257806379cc67901461050257610253565b806335e9d83b146103b457806339509351146103e45780633f35d0331461041457806342966c681461044457806346195c121461046057610253565b806323b872dd1161021b57806323b872dd146102fc5780632535f7621461032c57806325e160631461035c578063313ce56714610378578063355274ea1461039657610253565b806306fdde0314610258578063091413d114610276578063095ea7b3146102925780631716d0f1146102c257806318160ddd146102de575b600080fd5b61026061080e565b60405161026d91906148aa565b60405180910390f35b610290600480360381019061028b9190613ed3565b6108a0565b005b6102ac60048036038101906102a79190613cdf565b610b0f565b6040516102b9919061482f565b60405180910390f35b6102dc60048036038101906102d79190613d1b565b610b2d565b005b6102e6610c0d565b6040516102f39190614ccc565b60405180910390f35b61031660048036038101906103119190613c3c565b610c17565b604051610323919061482f565b60405180910390f35b61034660048036038101906103419190613d82565b610d18565b604051610353919061482f565b60405180910390f35b61037660048036038101906103719190613bd7565b610d52565b005b610380610e32565b60405161038d9190614d19565b60405180910390f35b61039e610e3b565b6040516103ab9190614ccc565b60405180910390f35b6103ce60048036038101906103c99190613d82565b610e45565b6040516103db919061482f565b60405180910390f35b6103fe60048036038101906103f99190613cdf565b610ec7565b60405161040b919061482f565b60405180910390f35b61042e60048036038101906104299190613d82565b610f73565b60405161043b919061482f565b60405180910390f35b61045e600480360381019061045991906140e4565b61106c565b005b61047a600480360381019061047591906140bb565b611080565b005b61049660048036038101906104919190613f74565b61117d565b005b6104b260048036038101906104ad9190613f74565b61125a565b005b6104bc611337565b6040516104c9919061482f565b60405180910390f35b6104ec60048036038101906104e79190613bae565b61134e565b6040516104f99190614ccc565b60405180910390f35b61051c60048036038101906105179190613cdf565b611396565b005b61053860048036038101906105339190613bae565b61141a565b604051610545919061482f565b60405180910390f35b61056860048036038101906105639190613dee565b611470565b005b610584600480360381019061057f9190613e5e565b611655565b005b6105a0600480360381019061059b9190613c8b565b61175c565b005b6105bc60048036038101906105b79190613dee565b61183b565b005b6105c6611a20565b6040516105d391906148aa565b60405180910390f35b6105f660048036038101906105f19190613cdf565b611ab2565b604051610603919061482f565b60405180910390f35b61062660048036038101906106219190613cdf565b611ba6565b604051610633919061482f565b60405180910390f35b610644611bc4565b6040516106519190614ccc565b60405180910390f35b610674600480360381019061066f9190613e5e565b611bca565b005b610690600480360381019061068b9190613d82565b611cd1565b60405161069d919061482f565b60405180910390f35b6106c060048036038101906106bb919061402d565b611ce9565b005b6106dc60048036038101906106d79190613c8b565b611de6565b005b6106f860048036038101906106f39190613d82565b611f16565b604051610705919061482f565b60405180910390f35b6107286004803603810190610723919061407f565b611fa2565b005b610744600480360381019061073f9190613c8b565b61214e565b005b610760600480360381019061075b9190613c00565b61222d565b60405161076d9190614ccc565b60405180910390f35b610790600480360381019061078b9190613bae565b6122b4565b60405161079d919061482f565b60405180910390f35b6107c060048036038101906107bb9190613c8b565b61230a565b005b6107dc60048036038101906107d79190614056565b6123fb565b005b6107f860048036038101906107f39190613fde565b6125a6565b604051610805919061484a565b60405180910390f35b60606003805461081d90614f61565b80601f016020809104026020016040519081016040528092919081815260200182805461084990614f61565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390614a0c565b60405180910390fd5b60018585905011610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614aec565b60405180910390fd5b8282905085859050146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614c0c565b60405180910390fd5b6000610a43610a3e7f84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c760001b88886000818110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a359190613bae565b898990506125a6565b6125e2565b9050610a4f8282612612565b60005b86869050811015610b0657610af3878783818110610a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610aae9190613bae565b868684818110610ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612a2b565b8080610afe90614fc4565b915050610a52565b50505050505050565b6000610b23610b1c612b7f565b8484612b87565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090614a0c565b60405180910390fd5b6000610bf1610bec7fdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f60001b86866125a6565b6125e2565b9050610bfd8282612612565b610c078484612a2b565b50505050565b6000600254905090565b6000610c24848484612d52565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6f612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614b4c565b60405180910390fd5b610d0c85610cfb612b7f565b8584610d079190614e44565b612b87565b60019150509392505050565b6000610d2385612fd1565b15610d3b57610d3485858585610f73565b9050610d4a565b610d4785858585610e45565b90505b949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614a0c565b60405180910390fd5b6000471115610e2f578073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b505b50565b60006012905090565b6000600554905090565b6000610e52338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610eb393929190614ce7565b60405180910390a360019050949350505050565b6000610f69610ed4612b7f565b848460016000610ee2612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f649190614dee565b612b87565b6001905092915050565b6000610f80338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610fe193929190614ce7565b60405180910390a360008590508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a338787876040518563ffffffff1660e01b815260040161102d94939291906147ef565b600060405180830381600087803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b505050506001915050949350505050565b61107d611077612b7f565b82612fe4565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b815260040161114892919061474f565b600060405180830381600087803b15801561116257600080fd5b505af1158015611176573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614a0c565b60405180910390fd5b600061124261123d7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061124e8282612612565b6112566131b8565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614a0c565b60405180910390fd5b600061131f61131a7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061132b8282612612565b61133361325b565b5050565b6000600860009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a9836113a4612b7f565b61222d565b9050818110156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614c2c565b60405180910390fd5b61140b836113fa612b7f565b84846114069190614e44565b612b87565b6114158383612fe4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614a0c565b60405180910390fd5b60018383905011611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614aec565b60405180910390fd5b60006115cb6115c67ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b868660008181106115a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115bd9190613bae565b878790506125a6565b6125e2565b90506115d78282612612565b60005b8484905081101561164e5761163b858583818110611621577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116369190613bae565b6132fd565b808061164690614fc4565b9150506115da565b5050505050565b81819050848490501461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614c6c565b60405180910390fd5b60005b8484905081101561175557611742338686848181106116e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116fd9190613bae565b858585818110611736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612d52565b808061174d90614fc4565b9150506116a0565b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90614a0c565b60405180910390fd5b600061182161181c7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061182d8282612612565b6118368361341c565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614a0c565b60405180910390fd5b6001838390501161190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490614aec565b60405180910390fd5b60006119966119917ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b86866000818110611973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119889190613bae565b878790506125a6565b6125e2565b90506119a28282612612565b60005b84849050811015611a1957611a068585838181106119ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a019190613bae565b61341c565b8080611a1190614fc4565b9150506119a5565b5050505050565b606060048054611a2f90614f61565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5b90614f61565b8015611aa85780601f10611a7d57610100808354040283529160200191611aa8565b820191906000526020600020905b815481529060010190602001808311611a8b57829003601f168201915b5050505050905090565b60008060016000611ac1612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614c8c565b60405180910390fd5b611b9b611b89612b7f565b858584611b969190614e44565b612b87565b600191505092915050565b6000611bba611bb3612b7f565b8484612d52565b6001905092915050565b60095481565b818190508484905014611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614aac565b60405180910390fd5b60005b84849050811015611cca57611cb733868684818110611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611c729190613bae565b858585818110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612b87565b8080611cc290614fc4565b915050611c15565b5050505050565b6000611cdf85858585610d18565b9050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b8152600401611db192919061474f565b600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614a0c565b60405180910390fd5b611e7b826122b4565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614a6c565b60405180910390fd5b6000611ef3611eee7f642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c60001b8560016125a6565b6125e2565b9050611eff8282612612565b611f1183611f0c8561134e565b612fe4565b505050565b6000611f23338686612b87565b8473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401611f649594939291906147a1565b600060405180830381600087803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b5050505060019050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614a0c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120699190614734565b60206040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b9919061410d565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120f6929190614778565b602060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613fb5565b50505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a0c565b60405180910390fd5b600061221361220e7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061221f8282612612565b612228836132fd565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614a0c565b60405180910390fd5b60006123cf6123ca7fb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e1160001b8560016125a6565b6125e2565b90506123db8282612612565b6123e4836132fd565b6123f6836123f18561134e565b612fe4565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614a0c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124c29190614734565b60206040518083038186803b1580156124da57600080fd5b505afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612512919061410d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161254f929190614778565b602060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613fb5565b505050565b6000308484846009546040516020016125c39594939291906146af565b6040516020818303038152906040528051906020012090509392505050565b6000816040516020016125f5919061470e565b604051602081830303815290604052805190602001209050919050565b600282511015612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614bec565b60405180910390fd5b6000600183516126679190614dee565b67ffffffffffffffff8111156126a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126d45781602001602082028036833780820191505090505b5090503381600081518110612712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d18351803360405161277b9190614734565b60405180910390a160005b83518110156129c85760006127e48583815181106127cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518561353190919063ffffffff16565b90506127ef8161141a565b61282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614b0c565b60405180910390fd5b60005b83518110156128fc578173ffffffffffffffffffffffffffffffffffffffff1684828151811061288a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614c4c565b60405180910390fd5b80806128f490614fc4565b915050612831565b50808360018461290c9190614dee565b81518110612943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d1835180816040516129ac9190614734565b60405180910390a15080806129c090614fc4565b915050612786565b50600381511015612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590614bec565b60405180910390fd5b60096000815480929190612a2190614fc4565b9190505550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290614cac565b60405180910390fd5b612aa7600083836135ab565b8060026000828254612ab99190614dee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e9190614dee565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b739190614ccc565b60405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e906149ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d459190614ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299061490c565b60405180910390fd5b612e3d8383836135ab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906149ec565b60405180910390fd5b8181612ecf9190614e44565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5f9190614dee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc39190614ccc565b60405180910390a350505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614b6c565b60405180910390fd5b613060826000836135ab565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061494c565b60405180910390fd5b81816130f29190614e44565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546131469190614e44565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131ab9190614ccc565b60405180910390a3505050565b6131c0611337565b15613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614a8c565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613244612b7f565b6040516132519190614734565b60405180910390a1565b613263611337565b6132a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132999061492c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6132e6612b7f565b6040516132f39190614734565b60405180910390a1565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906148ec565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a4913816040516134119190614734565b60405180910390a150565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349f9061496c565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba816040516135269190614734565b60405180910390a150565b60006041825114613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e9061498c565b60405180910390fd5b60008060006020850151925060408501519150606085015160001a90506135a0868285856136f2565b935050505092915050565b6135b683838361387d565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a2c565b60405180910390fd5b61362d611337565b1561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490614acc565b60405180910390fd5b613676836122b4565b15806136ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e4906149cc565b60405180910390fd5b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614a4c565b60405180910390fd5b601b8460ff16148061376f5750601c8460ff16145b6137ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a590614b2c565b60405180910390fd5b6000600186868686604051600081526020016040526040516137d39493929190614865565b6020604051602081039080840390855afa1580156137f5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613868906148cc565b60405180910390fd5b80915050949350505050565b61388883838361391f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391a576138c5610e3b565b816138ce610c0d565b6138d89190614dee565b1115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090614bac565b60405180910390fd5b5b505050565b505050565b600061393761393284614d59565b614d34565b9050808382526020820190508260005b85811015613977578135850161395d8882613b1b565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399461398f84614d85565b614d34565b9050828152602081018484840111156139ac57600080fd5b6139b7848285614f1f565b509392505050565b6000813590506139ce816159ef565b92915050565b6000813590506139e381615a06565b92915050565b60008083601f8401126139fb57600080fd5b8235905067ffffffffffffffff811115613a1457600080fd5b602083019150836020820283011115613a2c57600080fd5b9250929050565b600082601f830112613a4457600080fd5b8135613a54848260208601613924565b91505092915050565b60008083601f840112613a6f57600080fd5b8235905067ffffffffffffffff811115613a8857600080fd5b602083019150836020820283011115613aa057600080fd5b9250929050565b600081519050613ab681615a1d565b92915050565b600081359050613acb81615a34565b92915050565b60008083601f840112613ae357600080fd5b8235905067ffffffffffffffff811115613afc57600080fd5b602083019150836001820283011115613b1457600080fd5b9250929050565b600082601f830112613b2c57600080fd5b8135613b3c848260208601613981565b91505092915050565b600081359050613b5481615a4b565b92915050565b600081359050613b6981615a62565b92915050565b600081359050613b7e81615a79565b92915050565b600081359050613b9381615a90565b92915050565b600081519050613ba881615a90565b92915050565b600060208284031215613bc057600080fd5b6000613bce848285016139bf565b91505092915050565b600060208284031215613be957600080fd5b6000613bf7848285016139d4565b91505092915050565b60008060408385031215613c1357600080fd5b6000613c21858286016139bf565b9250506020613c32858286016139bf565b9150509250929050565b600080600060608486031215613c5157600080fd5b6000613c5f868287016139bf565b9350506020613c70868287016139bf565b9250506040613c8186828701613b84565b9150509250925092565b60008060408385031215613c9e57600080fd5b6000613cac858286016139bf565b925050602083013567ffffffffffffffff811115613cc957600080fd5b613cd585828601613a33565b9150509250929050565b60008060408385031215613cf257600080fd5b6000613d00858286016139bf565b9250506020613d1185828601613b84565b9150509250929050565b600080600060608486031215613d3057600080fd5b6000613d3e868287016139bf565b9350506020613d4f86828701613b84565b925050604084013567ffffffffffffffff811115613d6c57600080fd5b613d7886828701613a33565b9150509250925092565b60008060008060608587031215613d9857600080fd5b6000613da6878288016139bf565b9450506020613db787828801613b84565b935050604085013567ffffffffffffffff811115613dd457600080fd5b613de087828801613ad1565b925092505092959194509250565b600080600060408486031215613e0357600080fd5b600084013567ffffffffffffffff811115613e1d57600080fd5b613e29868287016139e9565b9350935050602084013567ffffffffffffffff811115613e4857600080fd5b613e5486828701613a33565b9150509250925092565b60008060008060408587031215613e7457600080fd5b600085013567ffffffffffffffff811115613e8e57600080fd5b613e9a878288016139e9565b9450945050602085013567ffffffffffffffff811115613eb957600080fd5b613ec587828801613a5d565b925092505092959194509250565b600080600080600060608688031215613eeb57600080fd5b600086013567ffffffffffffffff811115613f0557600080fd5b613f11888289016139e9565b9550955050602086013567ffffffffffffffff811115613f3057600080fd5b613f3c88828901613a5d565b9350935050604086013567ffffffffffffffff811115613f5b57600080fd5b613f6788828901613a33565b9150509295509295909350565b600060208284031215613f8657600080fd5b600082013567ffffffffffffffff811115613fa057600080fd5b613fac84828501613a33565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613aa7565b91505092915050565b600080600060608486031215613ff357600080fd5b600061400186828701613abc565b9350506020614012868287016139bf565b925050604061402386828701613b84565b9150509250925092565b60006020828403121561403f57600080fd5b600061404d84828501613b45565b91505092915050565b60006020828403121561406857600080fd5b600061407684828501613b5a565b91505092915050565b6000806040838503121561409257600080fd5b60006140a085828601613b5a565b92505060206140b1858286016139bf565b9150509250929050565b6000602082840312156140cd57600080fd5b60006140db84828501613b6f565b91505092915050565b6000602082840312156140f657600080fd5b600061410484828501613b84565b91505092915050565b60006020828403121561411f57600080fd5b600061412d84828501613b99565b91505092915050565b61413f81614e78565b82525050565b61415661415182614e78565b61500d565b82525050565b61416581614e9c565b82525050565b61417481614ea8565b82525050565b61418b61418682614ea8565b61501f565b82525050565b600061419d8385614dc1565b93506141aa838584614f1f565b6141b3836150d2565b840190509392505050565b60006141c982614db6565b6141d38185614dd2565b93506141e3818560208601614f2e565b6141ec816150d2565b840191505092915050565b6000614204601883614dd2565b915061420f826150f0565b602082019050919050565b6000614227602f83614dd2565b915061423282615119565b604082019050919050565b600061424a602383614dd2565b915061425582615168565b604082019050919050565b600061426d601483614dd2565b9150614278826151b7565b602082019050919050565b6000614290602283614dd2565b915061429b826151e0565b604082019050919050565b60006142b3602b83614dd2565b91506142be8261522f565b604082019050919050565b60006142d6601f83614dd2565b91506142e18261527e565b602082019050919050565b60006142f9601c83614de3565b9150614304826152a7565b601c82019050919050565b600061431c602283614dd2565b9150614327826152d0565b604082019050919050565b600061433f602a83614dd2565b915061434a8261531f565b604082019050919050565b6000614362602683614dd2565b915061436d8261536e565b604082019050919050565b6000614385601c83614dd2565b9150614390826153bd565b602082019050919050565b60006143a8603683614dd2565b91506143b3826153e6565b604082019050919050565b60006143cb602283614dd2565b91506143d682615435565b604082019050919050565b60006143ee602d83614dd2565b91506143f982615484565b604082019050919050565b6000614411601083614dd2565b915061441c826154d3565b602082019050919050565b6000614434602c83614dd2565b915061443f826154fc565b604082019050919050565b6000614457602c83614dd2565b91506144628261554b565b604082019050919050565b600061447a603783614dd2565b91506144858261559a565b604082019050919050565b600061449d602e83614dd2565b91506144a8826155e9565b604082019050919050565b60006144c0602283614dd2565b91506144cb82615638565b604082019050919050565b60006144e3602883614dd2565b91506144ee82615687565b604082019050919050565b6000614506602183614dd2565b9150614511826156d6565b604082019050919050565b6000614529602583614dd2565b915061453482615725565b604082019050919050565b600061454c601983614dd2565b915061455782615774565b602082019050919050565b600061456f602483614dd2565b915061457a8261579d565b604082019050919050565b6000614592602783614dd2565b915061459d826157ec565b604082019050919050565b60006145b5602f83614dd2565b91506145c08261583b565b604082019050919050565b60006145d8602383614dd2565b91506145e38261588a565b604082019050919050565b60006145fb603183614dd2565b9150614606826158d9565b604082019050919050565b600061461e602883614dd2565b915061462982615928565b604082019050919050565b6000614641602583614dd2565b915061464c82615977565b604082019050919050565b6000614664601f83614dd2565b915061466f826159c6565b602082019050919050565b61468381614f08565b82525050565b61469a61469582614f08565b61503b565b82525050565b6146a981614f12565b82525050565b60006146bb8288614145565b6014820191506146cb828761417a565b6020820191506146db8286614145565b6014820191506146eb8285614689565b6020820191506146fb8284614689565b6020820191508190509695505050505050565b6000614719826142ec565b9150614725828461417a565b60208201915081905092915050565b60006020820190506147496000830184614136565b92915050565b60006040820190506147646000830185614136565b614771602083018461415c565b9392505050565b600060408201905061478d6000830185614136565b61479a602083018461467a565b9392505050565b60006080820190506147b66000830188614136565b6147c3602083018761467a565b6147d06040830186614136565b81810360608301526147e3818486614191565b90509695505050505050565b60006060820190506148046000830187614136565b614811602083018661467a565b8181036040830152614824818486614191565b905095945050505050565b6000602082019050614844600083018461415c565b92915050565b600060208201905061485f600083018461416b565b92915050565b600060808201905061487a600083018761416b565b61488760208301866146a0565b614894604083018561416b565b6148a1606083018461416b565b95945050505050565b600060208201905081810360008301526148c481846141be565b905092915050565b600060208201905081810360008301526148e5816141f7565b9050919050565b600060208201905081810360008301526149058161421a565b9050919050565b600060208201905081810360008301526149258161423d565b9050919050565b6000602082019050818103600083015261494581614260565b9050919050565b6000602082019050818103600083015261496581614283565b9050919050565b60006020820190508181036000830152614985816142a6565b9050919050565b600060208201905081810360008301526149a5816142c9565b9050919050565b600060208201905081810360008301526149c58161430f565b9050919050565b600060208201905081810360008301526149e581614332565b9050919050565b60006020820190508181036000830152614a0581614355565b9050919050565b60006020820190508181036000830152614a2581614378565b9050919050565b60006020820190508181036000830152614a458161439b565b9050919050565b60006020820190508181036000830152614a65816143be565b9050919050565b60006020820190508181036000830152614a85816143e1565b9050919050565b60006020820190508181036000830152614aa581614404565b9050919050565b60006020820190508181036000830152614ac581614427565b9050919050565b60006020820190508181036000830152614ae58161444a565b9050919050565b60006020820190508181036000830152614b058161446d565b9050919050565b60006020820190508181036000830152614b2581614490565b9050919050565b60006020820190508181036000830152614b45816144b3565b9050919050565b60006020820190508181036000830152614b65816144d6565b9050919050565b60006020820190508181036000830152614b85816144f9565b9050919050565b60006020820190508181036000830152614ba58161451c565b9050919050565b60006020820190508181036000830152614bc58161453f565b9050919050565b60006020820190508181036000830152614be581614562565b9050919050565b60006020820190508181036000830152614c0581614585565b9050919050565b60006020820190508181036000830152614c25816145a8565b9050919050565b60006020820190508181036000830152614c45816145cb565b9050919050565b60006020820190508181036000830152614c65816145ee565b9050919050565b60006020820190508181036000830152614c8581614611565b9050919050565b60006020820190508181036000830152614ca581614634565b9050919050565b60006020820190508181036000830152614cc581614657565b9050919050565b6000602082019050614ce1600083018461467a565b92915050565b6000604082019050614cfc600083018661467a565b8181036020830152614d0f818486614191565b9050949350505050565b6000602082019050614d2e60008301846146a0565b92915050565b6000614d3e614d4f565b9050614d4a8282614f93565b919050565b6000604051905090565b600067ffffffffffffffff821115614d7457614d736150a3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614da057614d9f6150a3565b5b614da9826150d2565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614df982614f08565b9150614e0483614f08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3957614e38615045565b5b828201905092915050565b6000614e4f82614f08565b9150614e5a83614f08565b925082821015614e6d57614e6c615045565b5b828203905092915050565b6000614e8382614ee8565b9050919050565b6000614e9582614ee8565b9050919050565b60008115159050919050565b6000819050919050565b6000614ebd82614e78565b9050919050565b6000614ecf82614e78565b9050919050565b6000614ee182614e78565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614f4c578082015181840152602081019050614f31565b83811115614f5b576000848401525b50505050565b60006002820490506001821680614f7957607f821691505b60208210811415614f8d57614f8c615074565b5b50919050565b614f9c826150d2565b810181811067ffffffffffffffff82111715614fbb57614fba6150a3565b5b80604052505050565b6000614fcf82614f08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500257615001615045565b5b600182019050919050565b600061501882615029565b9050919050565b6000819050919050565b6000615034826150e3565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f20616c72656164792066726f7a656e0000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f206e6f742066726f7a656e000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20736f7572636520616464726573732060008201527f7761732066726f7a656e00000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a204163636573732064656e69656400000000600082015250565b7f476f7665726e616e6365546f6b656e3a2063616e2774207472616e736665722060008201527f746f20746f6b656e20636f6e74726163742073656c6600000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746172676574206163636f756e742060008201527f6973206e6f742066726f7a656e00000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f617070726f766542756c6b3a207370656e6465722e6c656e67746820213d207460008201527f6f6b656e732e6c656e6774680000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a2063616e6e6f7420706572666f726d2060008201527f62756c6b20776974682073696e676c6520746172676574000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207265636f7665726564206164647265737360008201527f206973206e6f74207369676e6572000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206e6f7420656e6f75676820636f6e66697260008201527f6d6174696f6e7300000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a207461726765742e6c656e677468202160008201527f3d20616d6f756e742e6c656e6774680000000000000000000000000000000000602082015250565b7f424355473a206275726e20616d6f756e74206578636565647320616c6c6f776160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207369676e6572206164647265737320757360008201527f6564206d6f7265207468616e206f6e6365000000000000000000000000000000602082015250565b7f7472616e7366657242756c6b3a20746f2e6c656e67746820213d20746f6b656e60008201527f732e6c656e677468000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6159f881614e78565b8114615a0357600080fd5b50565b615a0f81614e8a565b8114615a1a57600080fd5b50565b615a2681614e9c565b8114615a3157600080fd5b50565b615a3d81614ea8565b8114615a4857600080fd5b50565b615a5481614eb2565b8114615a5f57600080fd5b50565b615a6b81614ec4565b8114615a7657600080fd5b50565b615a8281614ed6565b8114615a8d57600080fd5b50565b615a9981614f08565b8114615aa457600080fd5b5056fea2646970667358221220b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a64736f6c63430008010033426c6f636b636861696e2043757469657320556e69766572736520476f7665726e616e636520546f6b656e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae35400000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db600000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a03000000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d670000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102535760003560e01c80637df73e2711610146578063be45fd62116100c3578063da63bac611610087578063da63bac61461072a578063dd62ed3e14610746578063e583983614610776578063ead8c595146107a6578063f4f3b200146107c2578063fa312b3b146107de57610253565b8063be45fd6214610676578063c6b72a1f146106a6578063caa7d950146106c2578063cae9ca51146106de578063cda8c7151461070e57610253565b806395d89b411161010a57806395d89b41146105be578063a457c2d7146105dc578063a9059cbb1461060c578063affed0e01461063c578063b9edf9111461065a57610253565b80637df73e271461051e5780638ea769f61461054e5780639316c3e71461056a578063936550551461058657806393a02744146105a257610253565b806335e9d83b116101d4578063536db4cb11610198578063536db4cb1461047c578063561e8319146104985780635c975abb146104b457806370a08231146104d257806379cc67901461050257610253565b806335e9d83b146103b457806339509351146103e45780633f35d0331461041457806342966c681461044457806346195c121461046057610253565b806323b872dd1161021b57806323b872dd146102fc5780632535f7621461032c57806325e160631461035c578063313ce56714610378578063355274ea1461039657610253565b806306fdde0314610258578063091413d114610276578063095ea7b3146102925780631716d0f1146102c257806318160ddd146102de575b600080fd5b61026061080e565b60405161026d91906148aa565b60405180910390f35b610290600480360381019061028b9190613ed3565b6108a0565b005b6102ac60048036038101906102a79190613cdf565b610b0f565b6040516102b9919061482f565b60405180910390f35b6102dc60048036038101906102d79190613d1b565b610b2d565b005b6102e6610c0d565b6040516102f39190614ccc565b60405180910390f35b61031660048036038101906103119190613c3c565b610c17565b604051610323919061482f565b60405180910390f35b61034660048036038101906103419190613d82565b610d18565b604051610353919061482f565b60405180910390f35b61037660048036038101906103719190613bd7565b610d52565b005b610380610e32565b60405161038d9190614d19565b60405180910390f35b61039e610e3b565b6040516103ab9190614ccc565b60405180910390f35b6103ce60048036038101906103c99190613d82565b610e45565b6040516103db919061482f565b60405180910390f35b6103fe60048036038101906103f99190613cdf565b610ec7565b60405161040b919061482f565b60405180910390f35b61042e60048036038101906104299190613d82565b610f73565b60405161043b919061482f565b60405180910390f35b61045e600480360381019061045991906140e4565b61106c565b005b61047a600480360381019061047591906140bb565b611080565b005b61049660048036038101906104919190613f74565b61117d565b005b6104b260048036038101906104ad9190613f74565b61125a565b005b6104bc611337565b6040516104c9919061482f565b60405180910390f35b6104ec60048036038101906104e79190613bae565b61134e565b6040516104f99190614ccc565b60405180910390f35b61051c60048036038101906105179190613cdf565b611396565b005b61053860048036038101906105339190613bae565b61141a565b604051610545919061482f565b60405180910390f35b61056860048036038101906105639190613dee565b611470565b005b610584600480360381019061057f9190613e5e565b611655565b005b6105a0600480360381019061059b9190613c8b565b61175c565b005b6105bc60048036038101906105b79190613dee565b61183b565b005b6105c6611a20565b6040516105d391906148aa565b60405180910390f35b6105f660048036038101906105f19190613cdf565b611ab2565b604051610603919061482f565b60405180910390f35b61062660048036038101906106219190613cdf565b611ba6565b604051610633919061482f565b60405180910390f35b610644611bc4565b6040516106519190614ccc565b60405180910390f35b610674600480360381019061066f9190613e5e565b611bca565b005b610690600480360381019061068b9190613d82565b611cd1565b60405161069d919061482f565b60405180910390f35b6106c060048036038101906106bb919061402d565b611ce9565b005b6106dc60048036038101906106d79190613c8b565b611de6565b005b6106f860048036038101906106f39190613d82565b611f16565b604051610705919061482f565b60405180910390f35b6107286004803603810190610723919061407f565b611fa2565b005b610744600480360381019061073f9190613c8b565b61214e565b005b610760600480360381019061075b9190613c00565b61222d565b60405161076d9190614ccc565b60405180910390f35b610790600480360381019061078b9190613bae565b6122b4565b60405161079d919061482f565b60405180910390f35b6107c060048036038101906107bb9190613c8b565b61230a565b005b6107dc60048036038101906107d79190614056565b6123fb565b005b6107f860048036038101906107f39190613fde565b6125a6565b604051610805919061484a565b60405180910390f35b60606003805461081d90614f61565b80601f016020809104026020016040519081016040528092919081815260200182805461084990614f61565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390614a0c565b60405180910390fd5b60018585905011610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614aec565b60405180910390fd5b8282905085859050146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614c0c565b60405180910390fd5b6000610a43610a3e7f84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c760001b88886000818110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a359190613bae565b898990506125a6565b6125e2565b9050610a4f8282612612565b60005b86869050811015610b0657610af3878783818110610a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610aae9190613bae565b868684818110610ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612a2b565b8080610afe90614fc4565b915050610a52565b50505050505050565b6000610b23610b1c612b7f565b8484612b87565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090614a0c565b60405180910390fd5b6000610bf1610bec7fdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f60001b86866125a6565b6125e2565b9050610bfd8282612612565b610c078484612a2b565b50505050565b6000600254905090565b6000610c24848484612d52565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6f612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614b4c565b60405180910390fd5b610d0c85610cfb612b7f565b8584610d079190614e44565b612b87565b60019150509392505050565b6000610d2385612fd1565b15610d3b57610d3485858585610f73565b9050610d4a565b610d4785858585610e45565b90505b949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614a0c565b60405180910390fd5b6000471115610e2f578073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b505b50565b60006012905090565b6000600554905090565b6000610e52338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610eb393929190614ce7565b60405180910390a360019050949350505050565b6000610f69610ed4612b7f565b848460016000610ee2612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f649190614dee565b612b87565b6001905092915050565b6000610f80338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610fe193929190614ce7565b60405180910390a360008590508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a338787876040518563ffffffff1660e01b815260040161102d94939291906147ef565b600060405180830381600087803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b505050506001915050949350505050565b61107d611077612b7f565b82612fe4565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b815260040161114892919061474f565b600060405180830381600087803b15801561116257600080fd5b505af1158015611176573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614a0c565b60405180910390fd5b600061124261123d7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061124e8282612612565b6112566131b8565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614a0c565b60405180910390fd5b600061131f61131a7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061132b8282612612565b61133361325b565b5050565b6000600860009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a9836113a4612b7f565b61222d565b9050818110156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614c2c565b60405180910390fd5b61140b836113fa612b7f565b84846114069190614e44565b612b87565b6114158383612fe4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614a0c565b60405180910390fd5b60018383905011611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614aec565b60405180910390fd5b60006115cb6115c67ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b868660008181106115a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115bd9190613bae565b878790506125a6565b6125e2565b90506115d78282612612565b60005b8484905081101561164e5761163b858583818110611621577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116369190613bae565b6132fd565b808061164690614fc4565b9150506115da565b5050505050565b81819050848490501461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614c6c565b60405180910390fd5b60005b8484905081101561175557611742338686848181106116e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116fd9190613bae565b858585818110611736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612d52565b808061174d90614fc4565b9150506116a0565b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90614a0c565b60405180910390fd5b600061182161181c7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061182d8282612612565b6118368361341c565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614a0c565b60405180910390fd5b6001838390501161190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490614aec565b60405180910390fd5b60006119966119917ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b86866000818110611973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119889190613bae565b878790506125a6565b6125e2565b90506119a28282612612565b60005b84849050811015611a1957611a068585838181106119ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a019190613bae565b61341c565b8080611a1190614fc4565b9150506119a5565b5050505050565b606060048054611a2f90614f61565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5b90614f61565b8015611aa85780601f10611a7d57610100808354040283529160200191611aa8565b820191906000526020600020905b815481529060010190602001808311611a8b57829003601f168201915b5050505050905090565b60008060016000611ac1612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614c8c565b60405180910390fd5b611b9b611b89612b7f565b858584611b969190614e44565b612b87565b600191505092915050565b6000611bba611bb3612b7f565b8484612d52565b6001905092915050565b60095481565b818190508484905014611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614aac565b60405180910390fd5b60005b84849050811015611cca57611cb733868684818110611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611c729190613bae565b858585818110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612b87565b8080611cc290614fc4565b915050611c15565b5050505050565b6000611cdf85858585610d18565b9050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b8152600401611db192919061474f565b600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614a0c565b60405180910390fd5b611e7b826122b4565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614a6c565b60405180910390fd5b6000611ef3611eee7f642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c60001b8560016125a6565b6125e2565b9050611eff8282612612565b611f1183611f0c8561134e565b612fe4565b505050565b6000611f23338686612b87565b8473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401611f649594939291906147a1565b600060405180830381600087803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b5050505060019050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614a0c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120699190614734565b60206040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b9919061410d565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120f6929190614778565b602060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613fb5565b50505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a0c565b60405180910390fd5b600061221361220e7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061221f8282612612565b612228836132fd565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614a0c565b60405180910390fd5b60006123cf6123ca7fb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e1160001b8560016125a6565b6125e2565b90506123db8282612612565b6123e4836132fd565b6123f6836123f18561134e565b612fe4565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614a0c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124c29190614734565b60206040518083038186803b1580156124da57600080fd5b505afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612512919061410d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161254f929190614778565b602060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613fb5565b505050565b6000308484846009546040516020016125c39594939291906146af565b6040516020818303038152906040528051906020012090509392505050565b6000816040516020016125f5919061470e565b604051602081830303815290604052805190602001209050919050565b600282511015612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614bec565b60405180910390fd5b6000600183516126679190614dee565b67ffffffffffffffff8111156126a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126d45781602001602082028036833780820191505090505b5090503381600081518110612712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d18351803360405161277b9190614734565b60405180910390a160005b83518110156129c85760006127e48583815181106127cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518561353190919063ffffffff16565b90506127ef8161141a565b61282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614b0c565b60405180910390fd5b60005b83518110156128fc578173ffffffffffffffffffffffffffffffffffffffff1684828151811061288a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614c4c565b60405180910390fd5b80806128f490614fc4565b915050612831565b50808360018461290c9190614dee565b81518110612943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d1835180816040516129ac9190614734565b60405180910390a15080806129c090614fc4565b915050612786565b50600381511015612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590614bec565b60405180910390fd5b60096000815480929190612a2190614fc4565b9190505550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290614cac565b60405180910390fd5b612aa7600083836135ab565b8060026000828254612ab99190614dee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e9190614dee565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b739190614ccc565b60405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e906149ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d459190614ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299061490c565b60405180910390fd5b612e3d8383836135ab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906149ec565b60405180910390fd5b8181612ecf9190614e44565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5f9190614dee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc39190614ccc565b60405180910390a350505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614b6c565b60405180910390fd5b613060826000836135ab565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061494c565b60405180910390fd5b81816130f29190614e44565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546131469190614e44565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131ab9190614ccc565b60405180910390a3505050565b6131c0611337565b15613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614a8c565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613244612b7f565b6040516132519190614734565b60405180910390a1565b613263611337565b6132a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132999061492c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6132e6612b7f565b6040516132f39190614734565b60405180910390a1565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906148ec565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a4913816040516134119190614734565b60405180910390a150565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349f9061496c565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba816040516135269190614734565b60405180910390a150565b60006041825114613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e9061498c565b60405180910390fd5b60008060006020850151925060408501519150606085015160001a90506135a0868285856136f2565b935050505092915050565b6135b683838361387d565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a2c565b60405180910390fd5b61362d611337565b1561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490614acc565b60405180910390fd5b613676836122b4565b15806136ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e4906149cc565b60405180910390fd5b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614a4c565b60405180910390fd5b601b8460ff16148061376f5750601c8460ff16145b6137ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a590614b2c565b60405180910390fd5b6000600186868686604051600081526020016040526040516137d39493929190614865565b6020604051602081039080840390855afa1580156137f5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613868906148cc565b60405180910390fd5b80915050949350505050565b61388883838361391f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391a576138c5610e3b565b816138ce610c0d565b6138d89190614dee565b1115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090614bac565b60405180910390fd5b5b505050565b505050565b600061393761393284614d59565b614d34565b9050808382526020820190508260005b85811015613977578135850161395d8882613b1b565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399461398f84614d85565b614d34565b9050828152602081018484840111156139ac57600080fd5b6139b7848285614f1f565b509392505050565b6000813590506139ce816159ef565b92915050565b6000813590506139e381615a06565b92915050565b60008083601f8401126139fb57600080fd5b8235905067ffffffffffffffff811115613a1457600080fd5b602083019150836020820283011115613a2c57600080fd5b9250929050565b600082601f830112613a4457600080fd5b8135613a54848260208601613924565b91505092915050565b60008083601f840112613a6f57600080fd5b8235905067ffffffffffffffff811115613a8857600080fd5b602083019150836020820283011115613aa057600080fd5b9250929050565b600081519050613ab681615a1d565b92915050565b600081359050613acb81615a34565b92915050565b60008083601f840112613ae357600080fd5b8235905067ffffffffffffffff811115613afc57600080fd5b602083019150836001820283011115613b1457600080fd5b9250929050565b600082601f830112613b2c57600080fd5b8135613b3c848260208601613981565b91505092915050565b600081359050613b5481615a4b565b92915050565b600081359050613b6981615a62565b92915050565b600081359050613b7e81615a79565b92915050565b600081359050613b9381615a90565b92915050565b600081519050613ba881615a90565b92915050565b600060208284031215613bc057600080fd5b6000613bce848285016139bf565b91505092915050565b600060208284031215613be957600080fd5b6000613bf7848285016139d4565b91505092915050565b60008060408385031215613c1357600080fd5b6000613c21858286016139bf565b9250506020613c32858286016139bf565b9150509250929050565b600080600060608486031215613c5157600080fd5b6000613c5f868287016139bf565b9350506020613c70868287016139bf565b9250506040613c8186828701613b84565b9150509250925092565b60008060408385031215613c9e57600080fd5b6000613cac858286016139bf565b925050602083013567ffffffffffffffff811115613cc957600080fd5b613cd585828601613a33565b9150509250929050565b60008060408385031215613cf257600080fd5b6000613d00858286016139bf565b9250506020613d1185828601613b84565b9150509250929050565b600080600060608486031215613d3057600080fd5b6000613d3e868287016139bf565b9350506020613d4f86828701613b84565b925050604084013567ffffffffffffffff811115613d6c57600080fd5b613d7886828701613a33565b9150509250925092565b60008060008060608587031215613d9857600080fd5b6000613da6878288016139bf565b9450506020613db787828801613b84565b935050604085013567ffffffffffffffff811115613dd457600080fd5b613de087828801613ad1565b925092505092959194509250565b600080600060408486031215613e0357600080fd5b600084013567ffffffffffffffff811115613e1d57600080fd5b613e29868287016139e9565b9350935050602084013567ffffffffffffffff811115613e4857600080fd5b613e5486828701613a33565b9150509250925092565b60008060008060408587031215613e7457600080fd5b600085013567ffffffffffffffff811115613e8e57600080fd5b613e9a878288016139e9565b9450945050602085013567ffffffffffffffff811115613eb957600080fd5b613ec587828801613a5d565b925092505092959194509250565b600080600080600060608688031215613eeb57600080fd5b600086013567ffffffffffffffff811115613f0557600080fd5b613f11888289016139e9565b9550955050602086013567ffffffffffffffff811115613f3057600080fd5b613f3c88828901613a5d565b9350935050604086013567ffffffffffffffff811115613f5b57600080fd5b613f6788828901613a33565b9150509295509295909350565b600060208284031215613f8657600080fd5b600082013567ffffffffffffffff811115613fa057600080fd5b613fac84828501613a33565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613aa7565b91505092915050565b600080600060608486031215613ff357600080fd5b600061400186828701613abc565b9350506020614012868287016139bf565b925050604061402386828701613b84565b9150509250925092565b60006020828403121561403f57600080fd5b600061404d84828501613b45565b91505092915050565b60006020828403121561406857600080fd5b600061407684828501613b5a565b91505092915050565b6000806040838503121561409257600080fd5b60006140a085828601613b5a565b92505060206140b1858286016139bf565b9150509250929050565b6000602082840312156140cd57600080fd5b60006140db84828501613b6f565b91505092915050565b6000602082840312156140f657600080fd5b600061410484828501613b84565b91505092915050565b60006020828403121561411f57600080fd5b600061412d84828501613b99565b91505092915050565b61413f81614e78565b82525050565b61415661415182614e78565b61500d565b82525050565b61416581614e9c565b82525050565b61417481614ea8565b82525050565b61418b61418682614ea8565b61501f565b82525050565b600061419d8385614dc1565b93506141aa838584614f1f565b6141b3836150d2565b840190509392505050565b60006141c982614db6565b6141d38185614dd2565b93506141e3818560208601614f2e565b6141ec816150d2565b840191505092915050565b6000614204601883614dd2565b915061420f826150f0565b602082019050919050565b6000614227602f83614dd2565b915061423282615119565b604082019050919050565b600061424a602383614dd2565b915061425582615168565b604082019050919050565b600061426d601483614dd2565b9150614278826151b7565b602082019050919050565b6000614290602283614dd2565b915061429b826151e0565b604082019050919050565b60006142b3602b83614dd2565b91506142be8261522f565b604082019050919050565b60006142d6601f83614dd2565b91506142e18261527e565b602082019050919050565b60006142f9601c83614de3565b9150614304826152a7565b601c82019050919050565b600061431c602283614dd2565b9150614327826152d0565b604082019050919050565b600061433f602a83614dd2565b915061434a8261531f565b604082019050919050565b6000614362602683614dd2565b915061436d8261536e565b604082019050919050565b6000614385601c83614dd2565b9150614390826153bd565b602082019050919050565b60006143a8603683614dd2565b91506143b3826153e6565b604082019050919050565b60006143cb602283614dd2565b91506143d682615435565b604082019050919050565b60006143ee602d83614dd2565b91506143f982615484565b604082019050919050565b6000614411601083614dd2565b915061441c826154d3565b602082019050919050565b6000614434602c83614dd2565b915061443f826154fc565b604082019050919050565b6000614457602c83614dd2565b91506144628261554b565b604082019050919050565b600061447a603783614dd2565b91506144858261559a565b604082019050919050565b600061449d602e83614dd2565b91506144a8826155e9565b604082019050919050565b60006144c0602283614dd2565b91506144cb82615638565b604082019050919050565b60006144e3602883614dd2565b91506144ee82615687565b604082019050919050565b6000614506602183614dd2565b9150614511826156d6565b604082019050919050565b6000614529602583614dd2565b915061453482615725565b604082019050919050565b600061454c601983614dd2565b915061455782615774565b602082019050919050565b600061456f602483614dd2565b915061457a8261579d565b604082019050919050565b6000614592602783614dd2565b915061459d826157ec565b604082019050919050565b60006145b5602f83614dd2565b91506145c08261583b565b604082019050919050565b60006145d8602383614dd2565b91506145e38261588a565b604082019050919050565b60006145fb603183614dd2565b9150614606826158d9565b604082019050919050565b600061461e602883614dd2565b915061462982615928565b604082019050919050565b6000614641602583614dd2565b915061464c82615977565b604082019050919050565b6000614664601f83614dd2565b915061466f826159c6565b602082019050919050565b61468381614f08565b82525050565b61469a61469582614f08565b61503b565b82525050565b6146a981614f12565b82525050565b60006146bb8288614145565b6014820191506146cb828761417a565b6020820191506146db8286614145565b6014820191506146eb8285614689565b6020820191506146fb8284614689565b6020820191508190509695505050505050565b6000614719826142ec565b9150614725828461417a565b60208201915081905092915050565b60006020820190506147496000830184614136565b92915050565b60006040820190506147646000830185614136565b614771602083018461415c565b9392505050565b600060408201905061478d6000830185614136565b61479a602083018461467a565b9392505050565b60006080820190506147b66000830188614136565b6147c3602083018761467a565b6147d06040830186614136565b81810360608301526147e3818486614191565b90509695505050505050565b60006060820190506148046000830187614136565b614811602083018661467a565b8181036040830152614824818486614191565b905095945050505050565b6000602082019050614844600083018461415c565b92915050565b600060208201905061485f600083018461416b565b92915050565b600060808201905061487a600083018761416b565b61488760208301866146a0565b614894604083018561416b565b6148a1606083018461416b565b95945050505050565b600060208201905081810360008301526148c481846141be565b905092915050565b600060208201905081810360008301526148e5816141f7565b9050919050565b600060208201905081810360008301526149058161421a565b9050919050565b600060208201905081810360008301526149258161423d565b9050919050565b6000602082019050818103600083015261494581614260565b9050919050565b6000602082019050818103600083015261496581614283565b9050919050565b60006020820190508181036000830152614985816142a6565b9050919050565b600060208201905081810360008301526149a5816142c9565b9050919050565b600060208201905081810360008301526149c58161430f565b9050919050565b600060208201905081810360008301526149e581614332565b9050919050565b60006020820190508181036000830152614a0581614355565b9050919050565b60006020820190508181036000830152614a2581614378565b9050919050565b60006020820190508181036000830152614a458161439b565b9050919050565b60006020820190508181036000830152614a65816143be565b9050919050565b60006020820190508181036000830152614a85816143e1565b9050919050565b60006020820190508181036000830152614aa581614404565b9050919050565b60006020820190508181036000830152614ac581614427565b9050919050565b60006020820190508181036000830152614ae58161444a565b9050919050565b60006020820190508181036000830152614b058161446d565b9050919050565b60006020820190508181036000830152614b2581614490565b9050919050565b60006020820190508181036000830152614b45816144b3565b9050919050565b60006020820190508181036000830152614b65816144d6565b9050919050565b60006020820190508181036000830152614b85816144f9565b9050919050565b60006020820190508181036000830152614ba58161451c565b9050919050565b60006020820190508181036000830152614bc58161453f565b9050919050565b60006020820190508181036000830152614be581614562565b9050919050565b60006020820190508181036000830152614c0581614585565b9050919050565b60006020820190508181036000830152614c25816145a8565b9050919050565b60006020820190508181036000830152614c45816145cb565b9050919050565b60006020820190508181036000830152614c65816145ee565b9050919050565b60006020820190508181036000830152614c8581614611565b9050919050565b60006020820190508181036000830152614ca581614634565b9050919050565b60006020820190508181036000830152614cc581614657565b9050919050565b6000602082019050614ce1600083018461467a565b92915050565b6000604082019050614cfc600083018661467a565b8181036020830152614d0f818486614191565b9050949350505050565b6000602082019050614d2e60008301846146a0565b92915050565b6000614d3e614d4f565b9050614d4a8282614f93565b919050565b6000604051905090565b600067ffffffffffffffff821115614d7457614d736150a3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614da057614d9f6150a3565b5b614da9826150d2565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614df982614f08565b9150614e0483614f08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3957614e38615045565b5b828201905092915050565b6000614e4f82614f08565b9150614e5a83614f08565b925082821015614e6d57614e6c615045565b5b828203905092915050565b6000614e8382614ee8565b9050919050565b6000614e9582614ee8565b9050919050565b60008115159050919050565b6000819050919050565b6000614ebd82614e78565b9050919050565b6000614ecf82614e78565b9050919050565b6000614ee182614e78565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614f4c578082015181840152602081019050614f31565b83811115614f5b576000848401525b50505050565b60006002820490506001821680614f7957607f821691505b60208210811415614f8d57614f8c615074565b5b50919050565b614f9c826150d2565b810181811067ffffffffffffffff82111715614fbb57614fba6150a3565b5b80604052505050565b6000614fcf82614f08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500257615001615045565b5b600182019050919050565b600061501882615029565b9050919050565b6000819050919050565b6000615034826150e3565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f20616c72656164792066726f7a656e0000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f206e6f742066726f7a656e000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20736f7572636520616464726573732060008201527f7761732066726f7a656e00000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a204163636573732064656e69656400000000600082015250565b7f476f7665726e616e6365546f6b656e3a2063616e2774207472616e736665722060008201527f746f20746f6b656e20636f6e74726163742073656c6600000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746172676574206163636f756e742060008201527f6973206e6f742066726f7a656e00000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f617070726f766542756c6b3a207370656e6465722e6c656e67746820213d207460008201527f6f6b656e732e6c656e6774680000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a2063616e6e6f7420706572666f726d2060008201527f62756c6b20776974682073696e676c6520746172676574000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207265636f7665726564206164647265737360008201527f206973206e6f74207369676e6572000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206e6f7420656e6f75676820636f6e66697260008201527f6d6174696f6e7300000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a207461726765742e6c656e677468202160008201527f3d20616d6f756e742e6c656e6774680000000000000000000000000000000000602082015250565b7f424355473a206275726e20616d6f756e74206578636565647320616c6c6f776160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207369676e6572206164647265737320757360008201527f6564206d6f7265207468616e206f6e6365000000000000000000000000000000602082015250565b7f7472616e7366657242756c6b3a20746f2e6c656e67746820213d20746f6b656e60008201527f732e6c656e677468000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6159f881614e78565b8114615a0357600080fd5b50565b615a0f81614e8a565b8114615a1a57600080fd5b50565b615a2681614e9c565b8114615a3157600080fd5b50565b615a3d81614ea8565b8114615a4857600080fd5b50565b615a5481614eb2565b8114615a5f57600080fd5b50565b615a6b81614ec4565b8114615a7657600080fd5b50565b615a8281614ed6565b8114615a8d57600080fd5b50565b615a9981614f08565b8114615aa457600080fd5b5056fea2646970667358221220b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a64736f6c63430008010033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae35400000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db600000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a03000000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d670000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169

-----Decoded View---------------
Arg [0] : allowedSigners (address[]): 0xFF0D75A60a66b8e15da951945c23DB34b45AE354,0x63f8d9577Cb91aAFb79A983724Cf2cf1131e2Db6,0x94f02A55B37cbfAccBd4D0F13EBD8E8e3F25a030,0x45F254FD3fef54F3a5A8D601D291F2A5bf9d8d67,0x7290490BC88A0Fefc2A2976EA411750836e5d169

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [2] : 000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae354
Arg [3] : 00000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db6
Arg [4] : 00000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a030
Arg [5] : 00000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d67
Arg [6] : 0000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169


Deployed Bytecode Sourcemap

46609:3921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6373:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39464:610;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8513:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39043:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7466:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9164:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49093:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31635:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7317:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33515:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50291:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49473:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32279:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31186:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42804:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43160:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35092:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7637:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32689:331;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29963:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40815:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48009:307;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40529:278;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41300:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6583:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10713:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7977:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38556:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48324:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48916:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31415:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41851:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47617:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46913:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40183:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8215:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30148:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42331:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30897:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43602:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6373:91;6418:13;6451:5;6444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6373:91;:::o;39464:610::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39618:1:::1;39602:6;;:13;;:17;39594:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39715:6;;:13;;39698:6;;:13;;:30;39690:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39793:21;39817:87;:62;37507:66;39834:18;;39854:6;;39861:1;39854:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39865:6;;:13;;39817:16;:62::i;:::-;:85;:87::i;:::-;39793:111;;39915:44;39933:10;39945:13;39915:17;:44::i;:::-;39977:6;39972:95;39993:6;;:13;;39989:1;:17;39972:95;;;40028:27;40034:6;;40041:1;40034:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40045:6;;40052:1;40045:9;;;;;;;;;;;;;;;;;;;;;40028:5;:27::i;:::-;40008:3;;;;;:::i;:::-;;;;39972:95;;;;29864:1;39464:610:::0;;;;;:::o;8513:169::-;8596:4;8613:39;8622:12;:10;:12::i;:::-;8636:7;8645:6;8613:8;:39::i;:::-;8670:4;8663:11;;8513:169;;;;:::o;39043:295::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39147:21:::1;39171:72;:47;37308:66;39188:13;;39203:6;39211;39171:16;:47::i;:::-;:70;:72::i;:::-;39147:96;;39254:44;39272:10;39284:13;39254:17;:44::i;:::-;39309:21;39315:6;39323;39309:5;:21::i;:::-;29864:1;39043:295:::0;;;:::o;7466:108::-;7527:7;7554:12;;7547:19;;7466:108;:::o;9164:422::-;9270:4;9287:36;9297:6;9305:9;9316:6;9287:9;:36::i;:::-;9336:24;9363:11;:19;9375:6;9363:19;;;;;;;;;;;;;;;:33;9383:12;:10;:12::i;:::-;9363:33;;;;;;;;;;;;;;;;9336:60;;9435:6;9415:16;:26;;9407:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9497:57;9506:6;9514:12;:10;:12::i;:::-;9547:6;9528:16;:25;;;;:::i;:::-;9497:8;:57::i;:::-;9574:4;9567:11;;;9164:422;;;;;:::o;49093:302::-;49183:12;49212:16;49224:3;49212:11;:16::i;:::-;49208:180;;;49252:38;49271:3;49276:6;49284:5;;49252:18;:38::i;:::-;49245:45;;;;49208:180;49339:37;49357:3;49362:6;49370:5;;49339:17;:37::i;:::-;49332:44;;49093:302;;;;;;;:::o;31635:185::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31742:1:::1;31718:21;:25;31714:99;;;31760:9;:18;;:41;31779:21;31760:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31714:99;31635:185:::0;:::o;7317:84::-;7366:5;7391:2;7384:9;;7317:84;:::o;33515:83::-;33559:7;33586:4;;33579:11;;33515:83;:::o;50291:236::-;50382:12;50407:34;50417:10;50429:3;50434:6;50407:9;:34::i;:::-;50478:3;50457:40;;50466:10;50457:40;;;50483:6;50491:5;;50457:40;;;;;;;;:::i;:::-;;;;;;;;50515:4;50508:11;;50291:236;;;;;;:::o;9995:215::-;10083:4;10100:80;10109:12;:10;:12::i;:::-;10123:7;10169:10;10132:11;:25;10144:12;:10;:12::i;:::-;10132:25;;;;;;;;;;;;;;;:34;10158:7;10132:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10100:8;:80::i;:::-;10198:4;10191:11;;9995:215;;;;:::o;49473:351::-;49565:12;49590:34;49600:10;49612:3;49617:6;49590:9;:34::i;:::-;49661:3;49640:40;;49649:10;49640:40;;;49666:6;49674:5;;49640:40;;;;;;;;:::i;:::-;;;;;;;;49691:22;49730:3;49691:43;;49745:8;:22;;;49768:10;49780:6;49788:5;;49745:49;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49812:4;49805:11;;;49473:351;;;;;;:::o;32279:91::-;32335:27;32341:12;:10;:12::i;:::-;32355:6;32335:5;:27::i;:::-;32279:91;:::o;31186:136::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31264:14:::1;:32;;;31297:10;31309:4;31264:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31186:136:::0;:::o;42804:253::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42877:21:::1;42901:72;:47;38481:66;42918:14;;42934:10;42946:1;42901:16;:47::i;:::-;:70;:72::i;:::-;42877:96;;42984:44;43002:10;43014:13;42984:17;:44::i;:::-;43041:8;:6;:8::i;:::-;29864:1;42804:253:::0;:::o;43160:257::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43235:21:::1;43259:72;:47;38481:66;43276:14;;43292:10;43304:1;43259:16;:47::i;:::-;:70;:72::i;:::-;43235:96;;43342:44;43360:10;43372:13;43342:17;:44::i;:::-;43399:10;:8;:10::i;:::-;29864:1;43160:257:::0;:::o;35092:86::-;35139:4;35163:7;;;;;;;;;;;35156:14;;35092:86;:::o;7637:127::-;7711:7;7738:9;:18;7748:7;7738:18;;;;;;;;;;;;;;;;7731:25;;7637:127;;;:::o;32689:331::-;32766:24;32793:32;32803:7;32812:12;:10;:12::i;:::-;32793:9;:32::i;:::-;32766:59;;32864:6;32844:16;:26;;32836:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32921:58;32930:7;32939:12;:10;:12::i;:::-;32972:6;32953:16;:25;;;;:::i;:::-;32921:8;:58::i;:::-;32990:22;32996:7;33005:6;32990:5;:22::i;:::-;32689:331;;;:::o;29963:100::-;30017:4;30041:7;:14;30049:5;30041:14;;;;;;;;;;;;;;;;;;;;;;;;;30034:21;;29963:100;;;:::o;40815:477::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40944:1:::1;40928:6;;:13;;:17;40920:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41018:21;41042:89;:64;37911:66;41059:20;;41081:6;;41088:1;41081:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41092:6;;:13;;41042:16;:64::i;:::-;:87;:89::i;:::-;41018:113;;41142:44;41160:10;41172:13;41142:17;:44::i;:::-;41204:6;41199:86;41220:6;;:13;;41216:1;:17;41199:86;;;41255:18;41263:6;;41270:1;41263:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41255:7;:18::i;:::-;41235:3;;;;;:::i;:::-;;;;41199:86;;;;29864:1;40815:477:::0;;;:::o;48009:307::-;48128:6;;:13;;48115:2;;:9;;:26;48107:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;48202:6;48197:112;48218:2;;:9;;48214:1;:13;48197:112;;;48258:39;48268:10;48280:2;;48283:1;48280:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48287:6;;48294:1;48287:9;;;;;;;;;;;;;;;;;;;;;48258;:39::i;:::-;48229:3;;;;;:::i;:::-;;;;48197:112;;;;48009:307;;;;:::o;40529:278::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40621:21:::1;40645:69;:44;37697:66;40662:15;;40679:6;40687:1;40645:16;:44::i;:::-;:67;:69::i;:::-;40621:93;;40725:44;40743:10;40755:13;40725:17;:44::i;:::-;40782:17;40792:6;40782:9;:17::i;:::-;29864:1;40529:278:::0;;:::o;41300:481::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41431:1:::1;41415:6;;:13;;:17;41407:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41505:21;41529:89;:64;37911:66;41546:20;;41568:6;;41575:1;41568:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41579:6;;:13;;41529:16;:64::i;:::-;:87;:89::i;:::-;41505:113;;41629:44;41647:10;41659:13;41629:17;:44::i;:::-;41691:6;41686:88;41707:6;;:13;;41703:1;:17;41686:88;;;41742:20;41752:6;;41759:1;41752:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41742;:20::i;:::-;41722:3;;;;;:::i;:::-;;;;41686:88;;;;29864:1;41300:481:::0;;;:::o;6583:95::-;6630:13;6663:7;6656:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6583:95;:::o;10713:377::-;10806:4;10823:24;10850:11;:25;10862:12;:10;:12::i;:::-;10850:25;;;;;;;;;;;;;;;:34;10876:7;10850:34;;;;;;;;;;;;;;;;10823:61;;10923:15;10903:16;:35;;10895:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10991:67;11000:12;:10;:12::i;:::-;11014:7;11042:15;11023:16;:34;;;;:::i;:::-;10991:8;:67::i;:::-;11078:4;11071:11;;;10713:377;;;;:::o;7977:175::-;8063:4;8080:42;8090:12;:10;:12::i;:::-;8104:9;8115:6;8080:9;:42::i;:::-;8140:4;8133:11;;7977:175;;;;:::o;38556:21::-;;;;:::o;48324:329::-;48452:6;;:13;;48434:7;;:14;;:31;48426:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;48530:6;48525:121;48546:7;;:14;;48542:1;:18;48525:121;;;48591:43;48600:10;48612:7;;48620:1;48612:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48624:6;;48631:1;48624:9;;;;;;;;;;;;;;;;;;;;;48591:8;:43::i;:::-;48562:3;;;;;:::i;:::-;;;;48525:121;;;;48324:329;;;;:::o;48916:169::-;49009:12;49041:36;49058:3;49063:6;49071:5;;49041:16;:36::i;:::-;49034:43;;48916:169;;;;;;:::o;31415:138::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31495:14:::1;:32;;;31528:10;31540:4;31495:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31415:138:::0;:::o;41851:393::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41959:16:::1;41968:6;41959:8;:16::i;:::-;41951:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42038:21;42062:74;:49;38107:66;42079:20;;42101:6;42109:1;42062:16;:49::i;:::-;:72;:74::i;:::-;42038:98;;42147:44;42165:10;42177:13;42147:17;:44::i;:::-;42204:32;42210:6;42218:17;42228:6;42218:9;:17::i;:::-;42204:5;:32::i;:::-;29864:1;41851:393:::0;;:::o;47617:294::-;47719:12;47744:37;47753:10;47765:7;47774:6;47744:8;:37::i;:::-;47816:7;47792:48;;;47841:10;47853:6;47869:4;47876;;47792:89;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47899:4;47892:11;;47617:294;;;;;;:::o;46913:244::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47029:15:::1;47047:14;:24;;;47080:4;47047:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47029:57;;47097:14;:23;;;47121:18;47141:7;47097:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29864:1;46913:244:::0;;:::o;40183:274::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40273:21:::1;40297:69;:44;37697:66;40314:15;;40331:6;40339:1;40297:16;:44::i;:::-;:67;:69::i;:::-;40273:93;;40377:44;40395:10;40407:13;40377:17;:44::i;:::-;40434:15;40442:6;40434:7;:15::i;:::-;29864:1;40183:274:::0;;:::o;8215:151::-;8304:7;8331:11;:18;8343:5;8331:18;;;;;;;;;;;;;;;:27;8350:7;8331:27;;;;;;;;;;;;;;;;8324:34;;8215:151;;;;:::o;30148:102::-;30203:4;30227:7;:15;30235:6;30227:15;;;;;;;;;;;;;;;;;;;;;;;;;30220:22;;30148:102;;;:::o;42331:339::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:21:::1;42458:78;:53;38310:66;42475:24;;42501:6;42509:1;42458:16;:53::i;:::-;:76;:78::i;:::-;42434:102;;42547:44;42565:10;42577:13;42547:17;:44::i;:::-;42604:15;42612:6;42604:7;:15::i;:::-;42630:32;42636:6;42644:17;42654:6;42644:9;:17::i;:::-;42630:5;:32::i;:::-;29864:1;42331:339:::0;;:::o;30897:197::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30974:15:::1;30992:14;:24;;;31025:4;30992:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30974:57;;31042:14;:23;;;31066:10;31078:7;31042:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29864:1;30897:197:::0;:::o;43602:205::-;43698:7;43760:4;43767:8;43777:6;43785:5;43792;;43735:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43725:74;;;;;;43718:81;;43602:205;;;;;:::o;28159:269::-;28228:7;28414:4;28361:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;28351:69;;;;;;28344:76;;28159:269;;;:::o;44769:909::-;44895:1;44874:10;:17;:22;;44866:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44953:26;45016:1;44996:10;:17;:21;;;;:::i;:::-;44982:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44953:65;;45044:10;45029:9;45039:1;45029:12;;;;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;45070:20;45079:10;45070:20;;;;;;:::i;:::-;;;;;;;;45108:6;45103:462;45124:10;:17;45120:1;:21;45103:462;;;45163:12;45178:36;45200:10;45211:1;45200:13;;;;;;;;;;;;;;;;;;;;;;45178;:21;;:36;;;;:::i;:::-;45163:51;;45237:14;45246:4;45237:8;:14::i;:::-;45229:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:6;45319:161;45340:9;:16;45336:1;:20;45319:161;;;45406:4;45390:20;;:9;45400:1;45390:12;;;;;;;;;;;;;;;;;;;;;;:20;;;;45382:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45358:3;;;;;:::i;:::-;;;;45319:161;;;;45515:4;45496:9;45510:1;45506;:5;;;;:::i;:::-;45496:16;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;45539:14;45548:4;45539:14;;;;;;:::i;:::-;;;;;;;;45103:462;45143:3;;;;;:::i;:::-;;;;45103:462;;;;45605:1;45585:9;:16;:21;;45577:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45663:5;;:7;;;;;;;;;:::i;:::-;;;;;;44769:909;;;:::o;12466:338::-;12569:1;12550:21;;:7;:21;;;;12542:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12620:49;12649:1;12653:7;12662:6;12620:20;:49::i;:::-;12698:6;12682:12;;:22;;;;;;;:::i;:::-;;;;;;;;12737:6;12715:9;:18;12725:7;12715:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12780:7;12759:37;;12776:1;12759:37;;;12789:6;12759:37;;;;;;:::i;:::-;;;;;;;;12466:338;;:::o;4068:98::-;4121:7;4148:10;4141:17;;4068:98;:::o;14069:346::-;14188:1;14171:19;;:5;:19;;;;14163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14269:1;14250:21;;:7;:21;;;;14242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14353:6;14323:11;:18;14335:5;14323:18;;;;;;;;;;;;;;;:27;14342:7;14323:27;;;;;;;;;;;;;;;:36;;;;14391:7;14375:32;;14384:5;14375:32;;;14400:6;14375:32;;;;;;:::i;:::-;;;;;;;;14069:346;;;:::o;11580:604::-;11704:1;11686:20;;:6;:20;;;;11678:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11788:1;11767:23;;:9;:23;;;;11759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11843:47;11864:6;11872:9;11883:6;11843:20;:47::i;:::-;11903:21;11927:9;:17;11937:6;11927:17;;;;;;;;;;;;;;;;11903:41;;11980:6;11963:13;:23;;11955:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12076:6;12060:13;:22;;;;:::i;:::-;12040:9;:17;12050:6;12040:17;;;;;;;;;;;;;;;:42;;;;12117:6;12093:9;:20;12103:9;12093:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12158:9;12141:35;;12150:6;12141:35;;;12169:6;12141:35;;;;;;:::i;:::-;;;;;;;;11580:604;;;;:::o;49926:287::-;49984:16;50013:11;50161:5;50149:18;50139:28;;50204:1;50195:6;:10;50188:17;;;49926:287;;;:::o;13137:494::-;13240:1;13221:21;;:7;:21;;;;13213:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13293:49;13314:7;13331:1;13335:6;13293:20;:49::i;:::-;13355:22;13380:9;:18;13390:7;13380:18;;;;;;;;;;;;;;;;13355:43;;13435:6;13417:14;:24;;13409:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13529:6;13512:14;:23;;;;:::i;:::-;13491:9;:18;13501:7;13491:18;;;;;;;;;;;;;;;:44;;;;13562:6;13546:12;;:22;;;;;;;:::i;:::-;;;;;;;;13612:1;13586:37;;13595:7;13586:37;;;13616:6;13586:37;;;;;;:::i;:::-;;;;;;;;13137:494;;;:::o;35892:118::-;35418:8;:6;:8::i;:::-;35417:9;35409:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35962:4:::1;35952:7;;:14;;;;;;;;;;;;;;;;;;35982:20;35989:12;:10;:12::i;:::-;35982:20;;;;;;:::i;:::-;;;;;;;;35892:118::o:0;36151:120::-;35695:8;:6;:8::i;:::-;35687:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36220:5:::1;36210:7;;:15;;;;;;;;;;;;;;;;;;36241:22;36250:12;:10;:12::i;:::-;36241:22;;;;;;:::i;:::-;;;;;;;;36151:120::o:0;30258:200::-;30320:7;:15;30328:6;30320:15;;;;;;;;;;;;;;;;;;;;;;;;;30319:16;30311:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30416:4;30398:7;:15;30406:6;30398:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30436:14;30443:6;30436:14;;;;;;:::i;:::-;;;;;;;;30258:200;:::o;30607:199::-;30670:7;:15;30678:6;30670:15;;;;;;;;;;;;;;;;;;;;;;;;;30662:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30751:7;:15;30759:6;30751:15;;;;;;;;;;;;;;;;30744:22;;;;;;;;;;;30782:16;30791:6;30782:16;;;;;;:::i;:::-;;;;;;;;30607:199;:::o;25538:761::-;25616:7;25699:2;25679:9;:16;:22;25675:96;;25718:41;;;;;;;;;;:::i;:::-;;;;;;;;25675:96;25840:9;25860;25880:7;26132:4;26121:9;26117:20;26111:27;26106:32;;26178:4;26167:9;26163:20;26157:27;26152:32;;26232:4;26221:9;26217:20;26211:27;26208:1;26203:36;26198:41;;26269:22;26277:4;26283:1;26286;26289;26269:7;:22::i;:::-;26262:29;;;;;25538:761;;;;:::o;44129:460::-;44258:44;44285:4;44291:2;44295:6;44258:26;:44::i;:::-;44337:4;44323:19;;:2;:19;;;;44315:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;44421:8;:6;:8::i;:::-;44420:9;44412:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44498:14;44507:4;44498:8;:14::i;:::-;44497:15;:37;;;;44530:3;44516:18;;:2;:18;;;44497:37;44489:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44129:460;;;:::o;26453:1432::-;26538:7;27463:66;27457:1;27449:10;;:80;;27441:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:2;27587:1;:7;;;:18;;;;27603:2;27598:1;:7;;;27587:18;27579:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27742:14;27759:24;27769:4;27775:1;27778;27781;27759:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27742:41;;27820:1;27802:20;;:6;:20;;;;27794:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:6;27864:13;;;26453:1432;;;;;;:::o;33785:316::-;33894:44;33921:4;33927:2;33931:6;33894:26;:44::i;:::-;33971:1;33955:18;;:4;:18;;;33951:143;;;34047:5;:3;:5::i;:::-;34037:6;34021:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;34013:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33951:143;33785:316;;;:::o;15018:92::-;;;;:::o;22:613:1:-;;152:90;168:73;234:6;168:73;:::i;:::-;152:90;:::i;:::-;143:99;;262:5;290:6;283:5;276:21;316:4;309:5;305:16;298:23;;341:6;372:1;357:272;382:6;379:1;376:13;357:272;;;474:3;461:17;453:6;449:30;504:46;546:3;534:10;504:46;:::i;:::-;499:3;492:59;580:4;575:3;571:14;564:21;;614:4;609:3;605:14;598:21;;417:212;404:1;401;397:9;392:14;;357:272;;;361:14;133:502;;;;;;;:::o;641:343::-;;743:65;759:48;800:6;759:48;:::i;:::-;743:65;:::i;:::-;734:74;;831:6;824:5;817:21;869:4;862:5;858:16;907:3;898:6;893:3;889:16;886:25;883:2;;;924:1;921;914:12;883:2;937:41;971:6;966:3;961;937:41;:::i;:::-;724:260;;;;;;:::o;990:139::-;;1074:6;1061:20;1052:29;;1090:33;1117:5;1090:33;:::i;:::-;1042:87;;;;:::o;1135:155::-;;1227:6;1214:20;1205:29;;1243:41;1278:5;1243:41;:::i;:::-;1195:95;;;;:::o;1313:367::-;;;1446:3;1439:4;1431:6;1427:17;1423:27;1413:2;;1464:1;1461;1454:12;1413:2;1500:6;1487:20;1477:30;;1530:18;1522:6;1519:30;1516:2;;;1562:1;1559;1552:12;1516:2;1599:4;1591:6;1587:17;1575:29;;1653:3;1645:4;1637:6;1633:17;1623:8;1619:32;1616:41;1613:2;;;1670:1;1667;1660:12;1613:2;1403:277;;;;;:::o;1701:321::-;;1830:3;1823:4;1815:6;1811:17;1807:27;1797:2;;1848:1;1845;1838:12;1797:2;1888:6;1875:20;1913:103;2012:3;2004:6;1997:4;1989:6;1985:17;1913:103;:::i;:::-;1904:112;;1787:235;;;;;:::o;2045:367::-;;;2178:3;2171:4;2163:6;2159:17;2155:27;2145:2;;2196:1;2193;2186:12;2145:2;2232:6;2219:20;2209:30;;2262:18;2254:6;2251:30;2248:2;;;2294:1;2291;2284:12;2248:2;2331:4;2323:6;2319:17;2307:29;;2385:3;2377:4;2369:6;2365:17;2355:8;2351:32;2348:41;2345:2;;;2402:1;2399;2392:12;2345:2;2135:277;;;;;:::o;2418:137::-;;2503:6;2497:13;2488:22;;2519:30;2543:5;2519:30;:::i;:::-;2478:77;;;;:::o;2561:139::-;;2645:6;2632:20;2623:29;;2661:33;2688:5;2661:33;:::i;:::-;2613:87;;;;:::o;2719:351::-;;;2836:3;2829:4;2821:6;2817:17;2813:27;2803:2;;2854:1;2851;2844:12;2803:2;2890:6;2877:20;2867:30;;2920:18;2912:6;2909:30;2906:2;;;2952:1;2949;2942:12;2906:2;2989:4;2981:6;2977:17;2965:29;;3043:3;3035:4;3027:6;3023:17;3013:8;3009:32;3006:41;3003:2;;;3060:1;3057;3050:12;3003:2;2793:277;;;;;:::o;3089:271::-;;3193:3;3186:4;3178:6;3174:17;3170:27;3160:2;;3211:1;3208;3201:12;3160:2;3251:6;3238:20;3276:78;3350:3;3342:6;3335:4;3327:6;3323:17;3276:78;:::i;:::-;3267:87;;3150:210;;;;;:::o;3366:171::-;;3466:6;3453:20;3444:29;;3482:49;3525:5;3482:49;:::i;:::-;3434:103;;;;:::o;3543:165::-;;3640:6;3627:20;3618:29;;3656:46;3696:5;3656:46;:::i;:::-;3608:100;;;;:::o;3714:169::-;;3813:6;3800:20;3791:29;;3829:48;3871:5;3829:48;:::i;:::-;3781:102;;;;:::o;3889:139::-;;3973:6;3960:20;3951:29;;3989:33;4016:5;3989:33;:::i;:::-;3941:87;;;;:::o;4034:143::-;;4122:6;4116:13;4107:22;;4138:33;4165:5;4138:33;:::i;:::-;4097:80;;;;:::o;4183:262::-;;4291:2;4279:9;4270:7;4266:23;4262:32;4259:2;;;4307:1;4304;4297:12;4259:2;4350:1;4375:53;4420:7;4411:6;4400:9;4396:22;4375:53;:::i;:::-;4365:63;;4321:117;4249:196;;;;:::o;4451:278::-;;4567:2;4555:9;4546:7;4542:23;4538:32;4535:2;;;4583:1;4580;4573:12;4535:2;4626:1;4651:61;4704:7;4695:6;4684:9;4680:22;4651:61;:::i;:::-;4641:71;;4597:125;4525:204;;;;:::o;4735:407::-;;;4860:2;4848:9;4839:7;4835:23;4831:32;4828:2;;;4876:1;4873;4866:12;4828:2;4919:1;4944:53;4989:7;4980:6;4969:9;4965:22;4944:53;:::i;:::-;4934:63;;4890:117;5046:2;5072:53;5117:7;5108:6;5097:9;5093:22;5072:53;:::i;:::-;5062:63;;5017:118;4818:324;;;;;:::o;5148:552::-;;;;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5349:1;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5320:117;5476:2;5502:53;5547:7;5538:6;5527:9;5523:22;5502:53;:::i;:::-;5492:63;;5447:118;5604:2;5630:53;5675:7;5666:6;5655:9;5651:22;5630:53;:::i;:::-;5620:63;;5575:118;5248:452;;;;;:::o;5706:568::-;;;5865:2;5853:9;5844:7;5840:23;5836:32;5833:2;;;5881:1;5878;5871:12;5833:2;5924:1;5949:53;5994:7;5985:6;5974:9;5970:22;5949:53;:::i;:::-;5939:63;;5895:117;6079:2;6068:9;6064:18;6051:32;6110:18;6102:6;6099:30;6096:2;;;6142:1;6139;6132:12;6096:2;6170:87;6249:7;6240:6;6229:9;6225:22;6170:87;:::i;:::-;6160:97;;6022:245;5823:451;;;;;:::o;6280:407::-;;;6405:2;6393:9;6384:7;6380:23;6376:32;6373:2;;;6421:1;6418;6411:12;6373:2;6464:1;6489:53;6534:7;6525:6;6514:9;6510:22;6489:53;:::i;:::-;6479:63;;6435:117;6591:2;6617:53;6662:7;6653:6;6642:9;6638:22;6617:53;:::i;:::-;6607:63;;6562:118;6363:324;;;;;:::o;6693:713::-;;;;6869:2;6857:9;6848:7;6844:23;6840:32;6837:2;;;6885:1;6882;6875:12;6837:2;6928:1;6953:53;6998:7;6989:6;6978:9;6974:22;6953:53;:::i;:::-;6943:63;;6899:117;7055:2;7081:53;7126:7;7117:6;7106:9;7102:22;7081:53;:::i;:::-;7071:63;;7026:118;7211:2;7200:9;7196:18;7183:32;7242:18;7234:6;7231:30;7228:2;;;7274:1;7271;7264:12;7228:2;7302:87;7381:7;7372:6;7361:9;7357:22;7302:87;:::i;:::-;7292:97;;7154:245;6827:579;;;;;:::o;7412:683::-;;;;;7573:2;7561:9;7552:7;7548:23;7544:32;7541:2;;;7589:1;7586;7579:12;7541:2;7632:1;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7603:117;7759:2;7785:53;7830:7;7821:6;7810:9;7806:22;7785:53;:::i;:::-;7775:63;;7730:118;7915:2;7904:9;7900:18;7887:32;7946:18;7938:6;7935:30;7932:2;;;7978:1;7975;7968:12;7932:2;8014:64;8070:7;8061:6;8050:9;8046:22;8014:64;:::i;:::-;7996:82;;;;7858:230;7531:564;;;;;;;:::o;8101:731::-;;;;8295:2;8283:9;8274:7;8270:23;8266:32;8263:2;;;8311:1;8308;8301:12;8263:2;8382:1;8371:9;8367:17;8354:31;8412:18;8404:6;8401:30;8398:2;;;8444:1;8441;8434:12;8398:2;8480:80;8552:7;8543:6;8532:9;8528:22;8480:80;:::i;:::-;8462:98;;;;8325:245;8637:2;8626:9;8622:18;8609:32;8668:18;8660:6;8657:30;8654:2;;;8700:1;8697;8690:12;8654:2;8728:87;8807:7;8798:6;8787:9;8783:22;8728:87;:::i;:::-;8718:97;;8580:245;8253:579;;;;;:::o;8838:733::-;;;;;9033:2;9021:9;9012:7;9008:23;9004:32;9001:2;;;9049:1;9046;9039:12;9001:2;9120:1;9109:9;9105:17;9092:31;9150:18;9142:6;9139:30;9136:2;;;9182:1;9179;9172:12;9136:2;9218:80;9290:7;9281:6;9270:9;9266:22;9218:80;:::i;:::-;9200:98;;;;9063:245;9375:2;9364:9;9360:18;9347:32;9406:18;9398:6;9395:30;9392:2;;;9438:1;9435;9428:12;9392:2;9474:80;9546:7;9537:6;9526:9;9522:22;9474:80;:::i;:::-;9456:98;;;;9318:246;8991:580;;;;;;;:::o;9577:1039::-;;;;;;9823:2;9811:9;9802:7;9798:23;9794:32;9791:2;;;9839:1;9836;9829:12;9791:2;9910:1;9899:9;9895:17;9882:31;9940:18;9932:6;9929:30;9926:2;;;9972:1;9969;9962:12;9926:2;10008:80;10080:7;10071:6;10060:9;10056:22;10008:80;:::i;:::-;9990:98;;;;9853:245;10165:2;10154:9;10150:18;10137:32;10196:18;10188:6;10185:30;10182:2;;;10228:1;10225;10218:12;10182:2;10264:80;10336:7;10327:6;10316:9;10312:22;10264:80;:::i;:::-;10246:98;;;;10108:246;10421:2;10410:9;10406:18;10393:32;10452:18;10444:6;10441:30;10438:2;;;10484:1;10481;10474:12;10438:2;10512:87;10591:7;10582:6;10571:9;10567:22;10512:87;:::i;:::-;10502:97;;10364:245;9781:835;;;;;;;;:::o;10622:423::-;;10764:2;10752:9;10743:7;10739:23;10735:32;10732:2;;;10780:1;10777;10770:12;10732:2;10851:1;10840:9;10836:17;10823:31;10881:18;10873:6;10870:30;10867:2;;;10913:1;10910;10903:12;10867:2;10941:87;11020:7;11011:6;11000:9;10996:22;10941:87;:::i;:::-;10931:97;;10794:244;10722:323;;;;:::o;11051:278::-;;11167:2;11155:9;11146:7;11142:23;11138:32;11135:2;;;11183:1;11180;11173:12;11135:2;11226:1;11251:61;11304:7;11295:6;11284:9;11280:22;11251:61;:::i;:::-;11241:71;;11197:125;11125:204;;;;:::o;11335:552::-;;;;11477:2;11465:9;11456:7;11452:23;11448:32;11445:2;;;11493:1;11490;11483:12;11445:2;11536:1;11561:53;11606:7;11597:6;11586:9;11582:22;11561:53;:::i;:::-;11551:63;;11507:117;11663:2;11689:53;11734:7;11725:6;11714:9;11710:22;11689:53;:::i;:::-;11679:63;;11634:118;11791:2;11817:53;11862:7;11853:6;11842:9;11838:22;11817:53;:::i;:::-;11807:63;;11762:118;11435:452;;;;;:::o;11893:294::-;;12017:2;12005:9;11996:7;11992:23;11988:32;11985:2;;;12033:1;12030;12023:12;11985:2;12076:1;12101:69;12162:7;12153:6;12142:9;12138:22;12101:69;:::i;:::-;12091:79;;12047:133;11975:212;;;;:::o;12193:288::-;;12314:2;12302:9;12293:7;12289:23;12285:32;12282:2;;;12330:1;12327;12320:12;12282:2;12373:1;12398:66;12456:7;12447:6;12436:9;12432:22;12398:66;:::i;:::-;12388:76;;12344:130;12272:209;;;;:::o;12487:433::-;;;12625:2;12613:9;12604:7;12600:23;12596:32;12593:2;;;12641:1;12638;12631:12;12593:2;12684:1;12709:66;12767:7;12758:6;12747:9;12743:22;12709:66;:::i;:::-;12699:76;;12655:130;12824:2;12850:53;12895:7;12886:6;12875:9;12871:22;12850:53;:::i;:::-;12840:63;;12795:118;12583:337;;;;;:::o;12926:292::-;;13049:2;13037:9;13028:7;13024:23;13020:32;13017:2;;;13065:1;13062;13055:12;13017:2;13108:1;13133:68;13193:7;13184:6;13173:9;13169:22;13133:68;:::i;:::-;13123:78;;13079:132;13007:211;;;;:::o;13224:262::-;;13332:2;13320:9;13311:7;13307:23;13303:32;13300:2;;;13348:1;13345;13338:12;13300:2;13391:1;13416:53;13461:7;13452:6;13441:9;13437:22;13416:53;:::i;:::-;13406:63;;13362:117;13290:196;;;;:::o;13492:284::-;;13611:2;13599:9;13590:7;13586:23;13582:32;13579:2;;;13627:1;13624;13617:12;13579:2;13670:1;13695:64;13751:7;13742:6;13731:9;13727:22;13695:64;:::i;:::-;13685:74;;13641:128;13569:207;;;;:::o;13782:118::-;13869:24;13887:5;13869:24;:::i;:::-;13864:3;13857:37;13847:53;;:::o;13906:157::-;14011:45;14031:24;14049:5;14031:24;:::i;:::-;14011:45;:::i;:::-;14006:3;13999:58;13989:74;;:::o;14069:109::-;14150:21;14165:5;14150:21;:::i;:::-;14145:3;14138:34;14128:50;;:::o;14184:118::-;14271:24;14289:5;14271:24;:::i;:::-;14266:3;14259:37;14249:53;;:::o;14308:157::-;14413:45;14433:24;14451:5;14433:24;:::i;:::-;14413:45;:::i;:::-;14408:3;14401:58;14391:74;;:::o;14493:301::-;;14610:70;14673:6;14668:3;14610:70;:::i;:::-;14603:77;;14690:43;14726:6;14721:3;14714:5;14690:43;:::i;:::-;14758:29;14780:6;14758:29;:::i;:::-;14753:3;14749:39;14742:46;;14593:201;;;;;:::o;14800:364::-;;14916:39;14949:5;14916:39;:::i;:::-;14971:71;15035:6;15030:3;14971:71;:::i;:::-;14964:78;;15051:52;15096:6;15091:3;15084:4;15077:5;15073:16;15051:52;:::i;:::-;15128:29;15150:6;15128:29;:::i;:::-;15123:3;15119:39;15112:46;;14892:272;;;;;:::o;15170:366::-;;15333:67;15397:2;15392:3;15333:67;:::i;:::-;15326:74;;15409:93;15498:3;15409:93;:::i;:::-;15527:2;15522:3;15518:12;15511:19;;15316:220;;;:::o;15542:366::-;;15705:67;15769:2;15764:3;15705:67;:::i;:::-;15698:74;;15781:93;15870:3;15781:93;:::i;:::-;15899:2;15894:3;15890:12;15883:19;;15688:220;;;:::o;15914:366::-;;16077:67;16141:2;16136:3;16077:67;:::i;:::-;16070:74;;16153:93;16242:3;16153:93;:::i;:::-;16271:2;16266:3;16262:12;16255:19;;16060:220;;;:::o;16286:366::-;;16449:67;16513:2;16508:3;16449:67;:::i;:::-;16442:74;;16525:93;16614:3;16525:93;:::i;:::-;16643:2;16638:3;16634:12;16627:19;;16432:220;;;:::o;16658:366::-;;16821:67;16885:2;16880:3;16821:67;:::i;:::-;16814:74;;16897:93;16986:3;16897:93;:::i;:::-;17015:2;17010:3;17006:12;16999:19;;16804:220;;;:::o;17030:366::-;;17193:67;17257:2;17252:3;17193:67;:::i;:::-;17186:74;;17269:93;17358:3;17269:93;:::i;:::-;17387:2;17382:3;17378:12;17371:19;;17176:220;;;:::o;17402:366::-;;17565:67;17629:2;17624:3;17565:67;:::i;:::-;17558:74;;17641:93;17730:3;17641:93;:::i;:::-;17759:2;17754:3;17750:12;17743:19;;17548:220;;;:::o;17774:402::-;;17955:85;18037:2;18032:3;17955:85;:::i;:::-;17948:92;;18049:93;18138:3;18049:93;:::i;:::-;18167:2;18162:3;18158:12;18151:19;;17938:238;;;:::o;18182:366::-;;18345:67;18409:2;18404:3;18345:67;:::i;:::-;18338:74;;18421:93;18510:3;18421:93;:::i;:::-;18539:2;18534:3;18530:12;18523:19;;18328:220;;;:::o;18554:366::-;;18717:67;18781:2;18776:3;18717:67;:::i;:::-;18710:74;;18793:93;18882:3;18793:93;:::i;:::-;18911:2;18906:3;18902:12;18895:19;;18700:220;;;:::o;18926:366::-;;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;19072:220;;;:::o;19298:366::-;;19461:67;19525:2;19520:3;19461:67;:::i;:::-;19454:74;;19537:93;19626:3;19537:93;:::i;:::-;19655:2;19650:3;19646:12;19639:19;;19444:220;;;:::o;19670:366::-;;19833:67;19897:2;19892:3;19833:67;:::i;:::-;19826:74;;19909:93;19998:3;19909:93;:::i;:::-;20027:2;20022:3;20018:12;20011:19;;19816:220;;;:::o;20042:366::-;;20205:67;20269:2;20264:3;20205:67;:::i;:::-;20198:74;;20281:93;20370:3;20281:93;:::i;:::-;20399:2;20394:3;20390:12;20383:19;;20188:220;;;:::o;20414:366::-;;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20560:220;;;:::o;20786:366::-;;20949:67;21013:2;21008:3;20949:67;:::i;:::-;20942:74;;21025:93;21114:3;21025:93;:::i;:::-;21143:2;21138:3;21134:12;21127:19;;20932:220;;;:::o;21158:366::-;;21321:67;21385:2;21380:3;21321:67;:::i;:::-;21314:74;;21397:93;21486:3;21397:93;:::i;:::-;21515:2;21510:3;21506:12;21499:19;;21304:220;;;:::o;21530:366::-;;21693:67;21757:2;21752:3;21693:67;:::i;:::-;21686:74;;21769:93;21858:3;21769:93;:::i;:::-;21887:2;21882:3;21878:12;21871:19;;21676:220;;;:::o;21902:366::-;;22065:67;22129:2;22124:3;22065:67;:::i;:::-;22058:74;;22141:93;22230:3;22141:93;:::i;:::-;22259:2;22254:3;22250:12;22243:19;;22048:220;;;:::o;22274:366::-;;22437:67;22501:2;22496:3;22437:67;:::i;:::-;22430:74;;22513:93;22602:3;22513:93;:::i;:::-;22631:2;22626:3;22622:12;22615:19;;22420:220;;;:::o;22646:366::-;;22809:67;22873:2;22868:3;22809:67;:::i;:::-;22802:74;;22885:93;22974:3;22885:93;:::i;:::-;23003:2;22998:3;22994:12;22987:19;;22792:220;;;:::o;23018:366::-;;23181:67;23245:2;23240:3;23181:67;:::i;:::-;23174:74;;23257:93;23346:3;23257:93;:::i;:::-;23375:2;23370:3;23366:12;23359:19;;23164:220;;;:::o;23390:366::-;;23553:67;23617:2;23612:3;23553:67;:::i;:::-;23546:74;;23629:93;23718:3;23629:93;:::i;:::-;23747:2;23742:3;23738:12;23731:19;;23536:220;;;:::o;23762:366::-;;23925:67;23989:2;23984:3;23925:67;:::i;:::-;23918:74;;24001:93;24090:3;24001:93;:::i;:::-;24119:2;24114:3;24110:12;24103:19;;23908:220;;;:::o;24134:366::-;;24297:67;24361:2;24356:3;24297:67;:::i;:::-;24290:74;;24373:93;24462:3;24373:93;:::i;:::-;24491:2;24486:3;24482:12;24475:19;;24280:220;;;:::o;24506:366::-;;24669:67;24733:2;24728:3;24669:67;:::i;:::-;24662:74;;24745:93;24834:3;24745:93;:::i;:::-;24863:2;24858:3;24854:12;24847:19;;24652:220;;;:::o;24878:366::-;;25041:67;25105:2;25100:3;25041:67;:::i;:::-;25034:74;;25117:93;25206:3;25117:93;:::i;:::-;25235:2;25230:3;25226:12;25219:19;;25024:220;;;:::o;25250:366::-;;25413:67;25477:2;25472:3;25413:67;:::i;:::-;25406:74;;25489:93;25578:3;25489:93;:::i;:::-;25607:2;25602:3;25598:12;25591:19;;25396:220;;;:::o;25622:366::-;;25785:67;25849:2;25844:3;25785:67;:::i;:::-;25778:74;;25861:93;25950:3;25861:93;:::i;:::-;25979:2;25974:3;25970:12;25963:19;;25768:220;;;:::o;25994:366::-;;26157:67;26221:2;26216:3;26157:67;:::i;:::-;26150:74;;26233:93;26322:3;26233:93;:::i;:::-;26351:2;26346:3;26342:12;26335:19;;26140:220;;;:::o;26366:366::-;;26529:67;26593:2;26588:3;26529:67;:::i;:::-;26522:74;;26605:93;26694:3;26605:93;:::i;:::-;26723:2;26718:3;26714:12;26707:19;;26512:220;;;:::o;26738:366::-;;26901:67;26965:2;26960:3;26901:67;:::i;:::-;26894:74;;26977:93;27066:3;26977:93;:::i;:::-;27095:2;27090:3;27086:12;27079:19;;26884:220;;;:::o;27110:366::-;;27273:67;27337:2;27332:3;27273:67;:::i;:::-;27266:74;;27349:93;27438:3;27349:93;:::i;:::-;27467:2;27462:3;27458:12;27451:19;;27256:220;;;:::o;27482:118::-;27569:24;27587:5;27569:24;:::i;:::-;27564:3;27557:37;27547:53;;:::o;27606:157::-;27711:45;27731:24;27749:5;27731:24;:::i;:::-;27711:45;:::i;:::-;27706:3;27699:58;27689:74;;:::o;27769:112::-;27852:22;27868:5;27852:22;:::i;:::-;27847:3;27840:35;27830:51;;:::o;27887:820::-;;28126:75;28197:3;28188:6;28126:75;:::i;:::-;28226:2;28221:3;28217:12;28210:19;;28239:75;28310:3;28301:6;28239:75;:::i;:::-;28339:2;28334:3;28330:12;28323:19;;28352:75;28423:3;28414:6;28352:75;:::i;:::-;28452:2;28447:3;28443:12;28436:19;;28465:75;28536:3;28527:6;28465:75;:::i;:::-;28565:2;28560:3;28556:12;28549:19;;28578:75;28649:3;28640:6;28578:75;:::i;:::-;28678:2;28673:3;28669:12;28662:19;;28698:3;28691:10;;28115:592;;;;;;;;:::o;28713:522::-;;28948:148;29092:3;28948:148;:::i;:::-;28941:155;;29106:75;29177:3;29168:6;29106:75;:::i;:::-;29206:2;29201:3;29197:12;29190:19;;29226:3;29219:10;;28930:305;;;;:::o;29241:222::-;;29372:2;29361:9;29357:18;29349:26;;29385:71;29453:1;29442:9;29438:17;29429:6;29385:71;:::i;:::-;29339:124;;;;:::o;29469:320::-;;29622:2;29611:9;29607:18;29599:26;;29635:71;29703:1;29692:9;29688:17;29679:6;29635:71;:::i;:::-;29716:66;29778:2;29767:9;29763:18;29754:6;29716:66;:::i;:::-;29589:200;;;;;:::o;29795:332::-;;29954:2;29943:9;29939:18;29931:26;;29967:71;30035:1;30024:9;30020:17;30011:6;29967:71;:::i;:::-;30048:72;30116:2;30105:9;30101:18;30092:6;30048:72;:::i;:::-;29921:206;;;;;:::o;30133:660::-;;30376:3;30365:9;30361:19;30353:27;;30390:71;30458:1;30447:9;30443:17;30434:6;30390:71;:::i;:::-;30471:72;30539:2;30528:9;30524:18;30515:6;30471:72;:::i;:::-;30553;30621:2;30610:9;30606:18;30597:6;30553:72;:::i;:::-;30672:9;30666:4;30662:20;30657:2;30646:9;30642:18;30635:48;30700:86;30781:4;30772:6;30764;30700:86;:::i;:::-;30692:94;;30343:450;;;;;;;;:::o;30799:549::-;;31014:2;31003:9;30999:18;30991:26;;31027:71;31095:1;31084:9;31080:17;31071:6;31027:71;:::i;:::-;31108:72;31176:2;31165:9;31161:18;31152:6;31108:72;:::i;:::-;31227:9;31221:4;31217:20;31212:2;31201:9;31197:18;31190:48;31255:86;31336:4;31327:6;31319;31255:86;:::i;:::-;31247:94;;30981:367;;;;;;;:::o;31354:210::-;;31479:2;31468:9;31464:18;31456:26;;31492:65;31554:1;31543:9;31539:17;31530:6;31492:65;:::i;:::-;31446:118;;;;:::o;31570:222::-;;31701:2;31690:9;31686:18;31678:26;;31714:71;31782:1;31771:9;31767:17;31758:6;31714:71;:::i;:::-;31668:124;;;;:::o;31798:545::-;;32009:3;31998:9;31994:19;31986:27;;32023:71;32091:1;32080:9;32076:17;32067:6;32023:71;:::i;:::-;32104:68;32168:2;32157:9;32153:18;32144:6;32104:68;:::i;:::-;32182:72;32250:2;32239:9;32235:18;32226:6;32182:72;:::i;:::-;32264;32332:2;32321:9;32317:18;32308:6;32264:72;:::i;:::-;31976:367;;;;;;;:::o;32349:313::-;;32500:2;32489:9;32485:18;32477:26;;32549:9;32543:4;32539:20;32535:1;32524:9;32520:17;32513:47;32577:78;32650:4;32641:6;32577:78;:::i;:::-;32569:86;;32467:195;;;;:::o;32668:419::-;;32872:2;32861:9;32857:18;32849:26;;32921:9;32915:4;32911:20;32907:1;32896:9;32892:17;32885:47;32949:131;33075:4;32949:131;:::i;:::-;32941:139;;32839:248;;;:::o;33093:419::-;;33297:2;33286:9;33282:18;33274:26;;33346:9;33340:4;33336:20;33332:1;33321:9;33317:17;33310:47;33374:131;33500:4;33374:131;:::i;:::-;33366:139;;33264:248;;;:::o;33518:419::-;;33722:2;33711:9;33707:18;33699:26;;33771:9;33765:4;33761:20;33757:1;33746:9;33742:17;33735:47;33799:131;33925:4;33799:131;:::i;:::-;33791:139;;33689:248;;;:::o;33943:419::-;;34147:2;34136:9;34132:18;34124:26;;34196:9;34190:4;34186:20;34182:1;34171:9;34167:17;34160:47;34224:131;34350:4;34224:131;:::i;:::-;34216:139;;34114:248;;;:::o;34368:419::-;;34572:2;34561:9;34557:18;34549:26;;34621:9;34615:4;34611:20;34607:1;34596:9;34592:17;34585:47;34649:131;34775:4;34649:131;:::i;:::-;34641:139;;34539:248;;;:::o;34793:419::-;;34997:2;34986:9;34982:18;34974:26;;35046:9;35040:4;35036:20;35032:1;35021:9;35017:17;35010:47;35074:131;35200:4;35074:131;:::i;:::-;35066:139;;34964:248;;;:::o;35218:419::-;;35422:2;35411:9;35407:18;35399:26;;35471:9;35465:4;35461:20;35457:1;35446:9;35442:17;35435:47;35499:131;35625:4;35499:131;:::i;:::-;35491:139;;35389:248;;;:::o;35643:419::-;;35847:2;35836:9;35832:18;35824:26;;35896:9;35890:4;35886:20;35882:1;35871:9;35867:17;35860:47;35924:131;36050:4;35924:131;:::i;:::-;35916:139;;35814:248;;;:::o;36068:419::-;;36272:2;36261:9;36257:18;36249:26;;36321:9;36315:4;36311:20;36307:1;36296:9;36292:17;36285:47;36349:131;36475:4;36349:131;:::i;:::-;36341:139;;36239:248;;;:::o;36493:419::-;;36697:2;36686:9;36682:18;36674:26;;36746:9;36740:4;36736:20;36732:1;36721:9;36717:17;36710:47;36774:131;36900:4;36774:131;:::i;:::-;36766:139;;36664:248;;;:::o;36918:419::-;;37122:2;37111:9;37107:18;37099:26;;37171:9;37165:4;37161:20;37157:1;37146:9;37142:17;37135:47;37199:131;37325:4;37199:131;:::i;:::-;37191:139;;37089:248;;;:::o;37343:419::-;;37547:2;37536:9;37532:18;37524:26;;37596:9;37590:4;37586:20;37582:1;37571:9;37567:17;37560:47;37624:131;37750:4;37624:131;:::i;:::-;37616:139;;37514:248;;;:::o;37768:419::-;;37972:2;37961:9;37957:18;37949:26;;38021:9;38015:4;38011:20;38007:1;37996:9;37992:17;37985:47;38049:131;38175:4;38049:131;:::i;:::-;38041:139;;37939:248;;;:::o;38193:419::-;;38397:2;38386:9;38382:18;38374:26;;38446:9;38440:4;38436:20;38432:1;38421:9;38417:17;38410:47;38474:131;38600:4;38474:131;:::i;:::-;38466:139;;38364:248;;;:::o;38618:419::-;;38822:2;38811:9;38807:18;38799:26;;38871:9;38865:4;38861:20;38857:1;38846:9;38842:17;38835:47;38899:131;39025:4;38899:131;:::i;:::-;38891:139;;38789:248;;;:::o;39043:419::-;;39247:2;39236:9;39232:18;39224:26;;39296:9;39290:4;39286:20;39282:1;39271:9;39267:17;39260:47;39324:131;39450:4;39324:131;:::i;:::-;39316:139;;39214:248;;;:::o;39468:419::-;;39672:2;39661:9;39657:18;39649:26;;39721:9;39715:4;39711:20;39707:1;39696:9;39692:17;39685:47;39749:131;39875:4;39749:131;:::i;:::-;39741:139;;39639:248;;;:::o;39893:419::-;;40097:2;40086:9;40082:18;40074:26;;40146:9;40140:4;40136:20;40132:1;40121:9;40117:17;40110:47;40174:131;40300:4;40174:131;:::i;:::-;40166:139;;40064:248;;;:::o;40318:419::-;;40522:2;40511:9;40507:18;40499:26;;40571:9;40565:4;40561:20;40557:1;40546:9;40542:17;40535:47;40599:131;40725:4;40599:131;:::i;:::-;40591:139;;40489:248;;;:::o;40743:419::-;;40947:2;40936:9;40932:18;40924:26;;40996:9;40990:4;40986:20;40982:1;40971:9;40967:17;40960:47;41024:131;41150:4;41024:131;:::i;:::-;41016:139;;40914:248;;;:::o;41168:419::-;;41372:2;41361:9;41357:18;41349:26;;41421:9;41415:4;41411:20;41407:1;41396:9;41392:17;41385:47;41449:131;41575:4;41449:131;:::i;:::-;41441:139;;41339:248;;;:::o;41593:419::-;;41797:2;41786:9;41782:18;41774:26;;41846:9;41840:4;41836:20;41832:1;41821:9;41817:17;41810:47;41874:131;42000:4;41874:131;:::i;:::-;41866:139;;41764:248;;;:::o;42018:419::-;;42222:2;42211:9;42207:18;42199:26;;42271:9;42265:4;42261:20;42257:1;42246:9;42242:17;42235:47;42299:131;42425:4;42299:131;:::i;:::-;42291:139;;42189:248;;;:::o;42443:419::-;;42647:2;42636:9;42632:18;42624:26;;42696:9;42690:4;42686:20;42682:1;42671:9;42667:17;42660:47;42724:131;42850:4;42724:131;:::i;:::-;42716:139;;42614:248;;;:::o;42868:419::-;;43072:2;43061:9;43057:18;43049:26;;43121:9;43115:4;43111:20;43107:1;43096:9;43092:17;43085:47;43149:131;43275:4;43149:131;:::i;:::-;43141:139;;43039:248;;;:::o;43293:419::-;;43497:2;43486:9;43482:18;43474:26;;43546:9;43540:4;43536:20;43532:1;43521:9;43517:17;43510:47;43574:131;43700:4;43574:131;:::i;:::-;43566:139;;43464:248;;;:::o;43718:419::-;;43922:2;43911:9;43907:18;43899:26;;43971:9;43965:4;43961:20;43957:1;43946:9;43942:17;43935:47;43999:131;44125:4;43999:131;:::i;:::-;43991:139;;43889:248;;;:::o;44143:419::-;;44347:2;44336:9;44332:18;44324:26;;44396:9;44390:4;44386:20;44382:1;44371:9;44367:17;44360:47;44424:131;44550:4;44424:131;:::i;:::-;44416:139;;44314:248;;;:::o;44568:419::-;;44772:2;44761:9;44757:18;44749:26;;44821:9;44815:4;44811:20;44807:1;44796:9;44792:17;44785:47;44849:131;44975:4;44849:131;:::i;:::-;44841:139;;44739:248;;;:::o;44993:419::-;;45197:2;45186:9;45182:18;45174:26;;45246:9;45240:4;45236:20;45232:1;45221:9;45217:17;45210:47;45274:131;45400:4;45274:131;:::i;:::-;45266:139;;45164:248;;;:::o;45418:419::-;;45622:2;45611:9;45607:18;45599:26;;45671:9;45665:4;45661:20;45657:1;45646:9;45642:17;45635:47;45699:131;45825:4;45699:131;:::i;:::-;45691:139;;45589:248;;;:::o;45843:419::-;;46047:2;46036:9;46032:18;46024:26;;46096:9;46090:4;46086:20;46082:1;46071:9;46067:17;46060:47;46124:131;46250:4;46124:131;:::i;:::-;46116:139;;46014:248;;;:::o;46268:222::-;;46399:2;46388:9;46384:18;46376:26;;46412:71;46480:1;46469:9;46465:17;46456:6;46412:71;:::i;:::-;46366:124;;;;:::o;46496:439::-;;46683:2;46672:9;46668:18;46660:26;;46696:71;46764:1;46753:9;46749:17;46740:6;46696:71;:::i;:::-;46814:9;46808:4;46804:20;46799:2;46788:9;46784:18;46777:48;46842:86;46923:4;46914:6;46906;46842:86;:::i;:::-;46834:94;;46650:285;;;;;;:::o;46941:214::-;;47068:2;47057:9;47053:18;47045:26;;47081:67;47145:1;47134:9;47130:17;47121:6;47081:67;:::i;:::-;47035:120;;;;:::o;47161:129::-;;47222:20;;:::i;:::-;47212:30;;47251:33;47279:4;47271:6;47251:33;:::i;:::-;47202:88;;;:::o;47296:75::-;;47362:2;47356:9;47346:19;;47336:35;:::o;47377:320::-;;47553:18;47545:6;47542:30;47539:2;;;47575:18;;:::i;:::-;47539:2;47625:4;47617:6;47613:17;47605:25;;47685:4;47679;47675:15;47667:23;;47468:229;;;:::o;47703:307::-;;47854:18;47846:6;47843:30;47840:2;;;47876:18;;:::i;:::-;47840:2;47914:29;47936:6;47914:29;:::i;:::-;47906:37;;47998:4;47992;47988:15;47980:23;;47769:241;;;:::o;48016:99::-;;48102:5;48096:12;48086:22;;48075:40;;;:::o;48121:168::-;;48238:6;48233:3;48226:19;48278:4;48273:3;48269:14;48254:29;;48216:73;;;;:::o;48295:169::-;;48413:6;48408:3;48401:19;48453:4;48448:3;48444:14;48429:29;;48391:73;;;;:::o;48470:148::-;;48609:3;48594:18;;48584:34;;;;:::o;48624:305::-;;48683:20;48701:1;48683:20;:::i;:::-;48678:25;;48717:20;48735:1;48717:20;:::i;:::-;48712:25;;48871:1;48803:66;48799:74;48796:1;48793:81;48790:2;;;48877:18;;:::i;:::-;48790:2;48921:1;48918;48914:9;48907:16;;48668:261;;;;:::o;48935:191::-;;48995:20;49013:1;48995:20;:::i;:::-;48990:25;;49029:20;49047:1;49029:20;:::i;:::-;49024:25;;49068:1;49065;49062:8;49059:2;;;49073:18;;:::i;:::-;49059:2;49118:1;49115;49111:9;49103:17;;48980:146;;;;:::o;49132:96::-;;49198:24;49216:5;49198:24;:::i;:::-;49187:35;;49177:51;;;:::o;49234:104::-;;49308:24;49326:5;49308:24;:::i;:::-;49297:35;;49287:51;;;:::o;49344:90::-;;49421:5;49414:13;49407:21;49396:32;;49386:48;;;:::o;49440:77::-;;49506:5;49495:16;;49485:32;;;:::o;49523:112::-;;49605:24;49623:5;49605:24;:::i;:::-;49594:35;;49584:51;;;:::o;49641:109::-;;49720:24;49738:5;49720:24;:::i;:::-;49709:35;;49699:51;;;:::o;49756:111::-;;49837:24;49855:5;49837:24;:::i;:::-;49826:35;;49816:51;;;:::o;49873:126::-;;49950:42;49943:5;49939:54;49928:65;;49918:81;;;:::o;50005:77::-;;50071:5;50060:16;;50050:32;;;:::o;50088:86::-;;50163:4;50156:5;50152:16;50141:27;;50131:43;;;:::o;50180:154::-;50264:6;50259:3;50254;50241:30;50326:1;50317:6;50312:3;50308:16;50301:27;50231:103;;;:::o;50340:307::-;50408:1;50418:113;50432:6;50429:1;50426:13;50418:113;;;50517:1;50512:3;50508:11;50502:18;50498:1;50493:3;50489:11;50482:39;50454:2;50451:1;50447:10;50442:15;;50418:113;;;50549:6;50546:1;50543:13;50540:2;;;50629:1;50620:6;50615:3;50611:16;50604:27;50540:2;50389:258;;;;:::o;50653:320::-;;50734:1;50728:4;50724:12;50714:22;;50781:1;50775:4;50771:12;50802:18;50792:2;;50858:4;50850:6;50846:17;50836:27;;50792:2;50920;50912:6;50909:14;50889:18;50886:38;50883:2;;;50939:18;;:::i;:::-;50883:2;50704:269;;;;:::o;50979:281::-;51062:27;51084:4;51062:27;:::i;:::-;51054:6;51050:40;51192:6;51180:10;51177:22;51156:18;51144:10;51141:34;51138:62;51135:2;;;51203:18;;:::i;:::-;51135:2;51243:10;51239:2;51232:22;51022:238;;;:::o;51266:233::-;;51328:24;51346:5;51328:24;:::i;:::-;51319:33;;51374:66;51367:5;51364:77;51361:2;;;51444:18;;:::i;:::-;51361:2;51491:1;51484:5;51480:13;51473:20;;51309:190;;;:::o;51505:100::-;;51573:26;51593:5;51573:26;:::i;:::-;51562:37;;51552:53;;;:::o;51611:79::-;;51679:5;51668:16;;51658:32;;;:::o;51696:94::-;;51764:20;51778:5;51764:20;:::i;:::-;51753:31;;51743:47;;;:::o;51796:79::-;;51864:5;51853:16;;51843:32;;;:::o;51881:180::-;51929:77;51926:1;51919:88;52026:4;52023:1;52016:15;52050:4;52047:1;52040:15;52067:180;52115:77;52112:1;52105:88;52212:4;52209:1;52202:15;52236:4;52233:1;52226:15;52253:180;52301:77;52298:1;52291:88;52398:4;52395:1;52388:15;52422:4;52419:1;52412:15;52439:102;;52531:2;52527:7;52522:2;52515:5;52511:14;52507:28;52497:38;;52487:54;;;:::o;52547:94::-;;52628:5;52624:2;52620:14;52599:35;;52589:52;;;:::o;52647:174::-;52787:26;52783:1;52775:6;52771:14;52764:50;52753:68;:::o;52827:234::-;52967:34;52963:1;52955:6;52951:14;52944:58;53036:17;53031:2;53023:6;53019:15;53012:42;52933:128;:::o;53067:222::-;53207:34;53203:1;53195:6;53191:14;53184:58;53276:5;53271:2;53263:6;53259:15;53252:30;53173:116;:::o;53295:170::-;53435:22;53431:1;53423:6;53419:14;53412:46;53401:64;:::o;53471:221::-;53611:34;53607:1;53599:6;53595:14;53588:58;53680:4;53675:2;53667:6;53663:15;53656:29;53577:115;:::o;53698:230::-;53838:34;53834:1;53826:6;53822:14;53815:58;53907:13;53902:2;53894:6;53890:15;53883:38;53804:124;:::o;53934:181::-;54074:33;54070:1;54062:6;54058:14;54051:57;54040:75;:::o;54121:214::-;54261:66;54257:1;54249:6;54245:14;54238:90;54227:108;:::o;54341:221::-;54481:34;54477:1;54469:6;54465:14;54458:58;54550:4;54545:2;54537:6;54533:15;54526:29;54447:115;:::o;54568:229::-;54708:34;54704:1;54696:6;54692:14;54685:58;54777:12;54772:2;54764:6;54760:15;54753:37;54674:123;:::o;54803:225::-;54943:34;54939:1;54931:6;54927:14;54920:58;55012:8;55007:2;54999:6;54995:15;54988:33;54909:119;:::o;55034:178::-;55174:30;55170:1;55162:6;55158:14;55151:54;55140:72;:::o;55218:241::-;55358:34;55354:1;55346:6;55342:14;55335:58;55427:24;55422:2;55414:6;55410:15;55403:49;55324:135;:::o;55465:221::-;55605:34;55601:1;55593:6;55589:14;55582:58;55674:4;55669:2;55661:6;55657:15;55650:29;55571:115;:::o;55692:232::-;55832:34;55828:1;55820:6;55816:14;55809:58;55901:15;55896:2;55888:6;55884:15;55877:40;55798:126;:::o;55930:166::-;56070:18;56066:1;56058:6;56054:14;56047:42;56036:60;:::o;56102:231::-;56242:34;56238:1;56230:6;56226:14;56219:58;56311:14;56306:2;56298:6;56294:15;56287:39;56208:125;:::o;56339:231::-;56479:34;56475:1;56467:6;56463:14;56456:58;56548:14;56543:2;56535:6;56531:15;56524:39;56445:125;:::o;56576:242::-;56716:34;56712:1;56704:6;56700:14;56693:58;56785:25;56780:2;56772:6;56768:15;56761:50;56682:136;:::o;56824:233::-;56964:34;56960:1;56952:6;56948:14;56941:58;57033:16;57028:2;57020:6;57016:15;57009:41;56930:127;:::o;57063:221::-;57203:34;57199:1;57191:6;57187:14;57180:58;57272:4;57267:2;57259:6;57255:15;57248:29;57169:115;:::o;57290:227::-;57430:34;57426:1;57418:6;57414:14;57407:58;57499:10;57494:2;57486:6;57482:15;57475:35;57396:121;:::o;57523:220::-;57663:34;57659:1;57651:6;57647:14;57640:58;57732:3;57727:2;57719:6;57715:15;57708:28;57629:114;:::o;57749:224::-;57889:34;57885:1;57877:6;57873:14;57866:58;57958:7;57953:2;57945:6;57941:15;57934:32;57855:118;:::o;57979:175::-;58119:27;58115:1;58107:6;58103:14;58096:51;58085:69;:::o;58160:223::-;58300:34;58296:1;58288:6;58284:14;58277:58;58369:6;58364:2;58356:6;58352:15;58345:31;58266:117;:::o;58389:226::-;58529:34;58525:1;58517:6;58513:14;58506:58;58598:9;58593:2;58585:6;58581:15;58574:34;58495:120;:::o;58621:234::-;58761:34;58757:1;58749:6;58745:14;58738:58;58830:17;58825:2;58817:6;58813:15;58806:42;58727:128;:::o;58861:222::-;59001:34;58997:1;58989:6;58985:14;58978:58;59070:5;59065:2;59057:6;59053:15;59046:30;58967:116;:::o;59089:236::-;59229:34;59225:1;59217:6;59213:14;59206:58;59298:19;59293:2;59285:6;59281:15;59274:44;59195:130;:::o;59331:227::-;59471:34;59467:1;59459:6;59455:14;59448:58;59540:10;59535:2;59527:6;59523:15;59516:35;59437:121;:::o;59564:224::-;59704:34;59700:1;59692:6;59688:14;59681:58;59773:7;59768:2;59760:6;59756:15;59749:32;59670:118;:::o;59794:181::-;59934:33;59930:1;59922:6;59918:14;59911:57;59900:75;:::o;59981:122::-;60054:24;60072:5;60054:24;:::i;:::-;60047:5;60044:35;60034:2;;60093:1;60090;60083:12;60034:2;60024:79;:::o;60109:138::-;60190:32;60216:5;60190:32;:::i;:::-;60183:5;60180:43;60170:2;;60237:1;60234;60227:12;60170:2;60160:87;:::o;60253:116::-;60323:21;60338:5;60323:21;:::i;:::-;60316:5;60313:32;60303:2;;60359:1;60356;60349:12;60303:2;60293:76;:::o;60375:122::-;60448:24;60466:5;60448:24;:::i;:::-;60441:5;60438:35;60428:2;;60487:1;60484;60477:12;60428:2;60418:79;:::o;60503:154::-;60592:40;60626:5;60592:40;:::i;:::-;60585:5;60582:51;60572:2;;60647:1;60644;60637:12;60572:2;60562:95;:::o;60663:148::-;60749:37;60780:5;60749:37;:::i;:::-;60742:5;60739:48;60729:2;;60801:1;60798;60791:12;60729:2;60719:92;:::o;60817:152::-;60905:39;60938:5;60905:39;:::i;:::-;60898:5;60895:50;60885:2;;60959:1;60956;60949:12;60885:2;60875:94;:::o;60975:122::-;61048:24;61066:5;61048:24;:::i;:::-;61041:5;61038:35;61028:2;;61087:1;61084;61077:12;61028:2;61018:79;:::o

Swarm Source

ipfs://b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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