Contract 0x7e3cfd1a285a7df192b51368bd25123a5823abf6

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6436137c1bc884e1c7a22afbf7d83dc014166abc612b75e28e2dfbd21fe52106Create Order111109422021-09-21 15:10:3776 days 19 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00291335
0x8e22c3f1583021a4bfa3ad86c51bdc1f75c8a0f7a158692fbdd534b66cf74a5fCreate Order111109302021-09-21 15:10:0176 days 19 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
0x5e859c985221a6fd66e4d4e6a1f755aead09ea33b1536315f0d5c3897d0d5d5eCreate Order111065852021-09-21 11:32:4176 days 3 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.002718215
0x6f9e3ee2ce0f94c9e420c6ae4cb227866eef7c4cbabbe5fce1cf272df5d146ffCreate Order110822532021-09-20 15:13:1777 days 16 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00291329
0x7f5198435519130996bed1d16bafa270e18e739cc0f98bca3d810dfecdc2f72eCreate Order110822332021-09-20 15:12:1777 days 17 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281675
0xfd04df714a6a392f65e0d5962210aac19e18545407a86f2fa893c6a82be99ecaCreate Order110722322021-09-20 6:49:5177 days 8 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.02 BNB0.00300726
0xa7c4f5f523ed696443c5e5f95974673d154dff8157fb4215673615a686ee2211Create Order110722222021-09-20 6:49:2177 days 8 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.001393015
0x5879ca414079704a57b50c4106f65d85ba52ed8f5662e4893e02b603a659a418Create Order110521402021-09-19 14:05:0678 days 1 hr ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.002772455
0x499297d16bc79783af08003fb53940018f0c5fcf1ba5bdd129ba1b66e54121e6Create Order110521312021-09-19 14:04:3978 days 1 hr ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
0x033732154b769863268beec47d9849404e6356f0cfb69c05eee9df421495bc5bCreate Order109960122021-09-17 14:59:1780 days 30 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00289349
0x5a07685aa5fcf1c6b57348ce186de6fddb338053b7baebe29ad89eaf886a5399Create Order109960022021-09-17 14:58:4780 days 31 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
0x590122b274f47d8ef76a675a566b7572dc70b71b0034503e9e6a1054541e0256Create Order109674482021-09-16 15:09:2481 days 20 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00289349
0xdf789fd68c7b7bbd1d08402b51766d3e664c468721fffa13d5f7aeb3f809792aCreate Order109674072021-09-16 15:07:2181 days 22 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
0x706eb13ec4d840fc908bced5a1003c8ce0a3a05f29c2e2908d11fed483fbdfa2Create Order109516262021-09-16 1:55:5381 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.002549055
0x3ae951a6d04f6f470cabed9d5e92cef3a0aa44d98f41021a69b5154dbde2a879Create Order109515752021-09-16 1:53:2081 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.002794145
0x858b04ba8d3ef79312b1197671e3830a6f7b95a094e14dbfe979d34b8b88905cCreate Order109515622021-09-16 1:52:4181 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00267009
0x8d9a4661ab31ea10a044a37570d1cc226a266c760a24f17576dc06830f67f975Create Order109515452021-09-16 1:51:5081 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00277809
0x0bf0aeb61572ed6e4becbe9653ad0d2e4c04a8a461c7224f1233f0a1fb152cb5Create Order109515152021-09-16 1:50:2081 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00277809
0xe2c4e38f1b0b9d7eeb3e34ad2e5bad1036f76d8467edb4d947ebde7d05d814faCreate Order109390402021-09-15 15:26:3482 days 3 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.09 BNB0.00273393
0x6c404ce7c0a030ea158a05d6488d85bfd5f088f6779d44112d9cf7062d282120Create Order109390252021-09-15 15:25:4982 days 4 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.001393135
0x0ab49cbc609e0deaa2d7a14a9e0b66ed2a78894e3616be2fceb3a6ec62333f9fCreate Order109389292021-09-15 15:21:0182 days 8 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.002772455
0xa48125cf72bf5139c0cf18087dbce51060fdf8595cff719420d79e27d7aa0fc8Create Order109389172021-09-15 15:20:2582 days 9 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
0x2fcf769429a6fbf6741359ff1d96e4cd184986e011eb6edf77216055c0b9d216Create Order109224462021-09-15 1:30:2982 days 13 hrs ago0x478f7847ff9fc419d6cb0f03441b785819075aa5 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00277809
0xe5cc11fd0c832ec46449eefbac020c5ce0f7f7a1effd015da6203f1808eacf03Create Order109100192021-09-14 15:07:0383 days 22 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60 BNB0.00289349
0xcc217ea8d66035d5d118a5fa98e3c03dc1b5ca12ab3ee20e2cf3d6bcf3429b9aCreate Order109099992021-09-14 15:06:0383 days 23 mins ago0xcfcc07cf9e620cee68309759fdd79c8caad34009 IN  0x7e3cfd1a285a7df192b51368bd25123a5823abf60.04 BNB0.001281735
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6436137c1bc884e1c7a22afbf7d83dc014166abc612b75e28e2dfbd21fe52106111109422021-09-21 15:10:3776 days 19 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.0002 BNB
0x6436137c1bc884e1c7a22afbf7d83dc014166abc612b75e28e2dfbd21fe52106111109422021-09-21 15:10:3776 days 19 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xcfcc07cf9e620cee68309759fdd79c8caad340090.0398 BNB
0x5e859c985221a6fd66e4d4e6a1f755aead09ea33b1536315f0d5c3897d0d5d5e111065852021-09-21 11:32:4176 days 3 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.00005 BNB
0x5e859c985221a6fd66e4d4e6a1f755aead09ea33b1536315f0d5c3897d0d5d5e111065852021-09-21 11:32:4176 days 3 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.00995 BNB
0x6f9e3ee2ce0f94c9e420c6ae4cb227866eef7c4cbabbe5fce1cf272df5d146ff110822532021-09-20 15:13:1777 days 16 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.0002 BNB
0x6f9e3ee2ce0f94c9e420c6ae4cb227866eef7c4cbabbe5fce1cf272df5d146ff110822532021-09-20 15:13:1777 days 16 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xcfcc07cf9e620cee68309759fdd79c8caad340090.0398 BNB
0xfd04df714a6a392f65e0d5962210aac19e18545407a86f2fa893c6a82be99eca110722322021-09-20 6:49:5177 days 8 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.00005 BNB
0xfd04df714a6a392f65e0d5962210aac19e18545407a86f2fa893c6a82be99eca110722322021-09-20 6:49:5177 days 8 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.00995 BNB
0x5879ca414079704a57b50c4106f65d85ba52ed8f5662e4893e02b603a659a418110521402021-09-19 14:05:0678 days 1 hr ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.0002 BNB
0x5879ca414079704a57b50c4106f65d85ba52ed8f5662e4893e02b603a659a418110521402021-09-19 14:05:0678 days 1 hr ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xcfcc07cf9e620cee68309759fdd79c8caad340090.0398 BNB
0x033732154b769863268beec47d9849404e6356f0cfb69c05eee9df421495bc5b109960122021-09-17 14:59:1780 days 30 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.0002 BNB
0x033732154b769863268beec47d9849404e6356f0cfb69c05eee9df421495bc5b109960122021-09-17 14:59:1780 days 30 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xcfcc07cf9e620cee68309759fdd79c8caad340090.0398 BNB
0x590122b274f47d8ef76a675a566b7572dc70b71b0034503e9e6a1054541e0256109674482021-09-16 15:09:2481 days 20 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.0002 BNB
0x590122b274f47d8ef76a675a566b7572dc70b71b0034503e9e6a1054541e0256109674482021-09-16 15:09:2481 days 20 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xcfcc07cf9e620cee68309759fdd79c8caad340090.0398 BNB
0x706eb13ec4d840fc908bced5a1003c8ce0a3a05f29c2e2908d11fed483fbdfa2109516262021-09-16 1:55:5381 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.000175 BNB
0x706eb13ec4d840fc908bced5a1003c8ce0a3a05f29c2e2908d11fed483fbdfa2109516262021-09-16 1:55:5381 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.034825 BNB
0x3ae951a6d04f6f470cabed9d5e92cef3a0aa44d98f41021a69b5154dbde2a879109515752021-09-16 1:53:2081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.000025 BNB
0x3ae951a6d04f6f470cabed9d5e92cef3a0aa44d98f41021a69b5154dbde2a879109515752021-09-16 1:53:2081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.004975 BNB
0x858b04ba8d3ef79312b1197671e3830a6f7b95a094e14dbfe979d34b8b88905c109515622021-09-16 1:52:4181 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.000025 BNB
0x858b04ba8d3ef79312b1197671e3830a6f7b95a094e14dbfe979d34b8b88905c109515622021-09-16 1:52:4181 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.004975 BNB
0x8d9a4661ab31ea10a044a37570d1cc226a266c760a24f17576dc06830f67f975109515452021-09-16 1:51:5081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.000025 BNB
0x8d9a4661ab31ea10a044a37570d1cc226a266c760a24f17576dc06830f67f975109515452021-09-16 1:51:5081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.004975 BNB
0x0bf0aeb61572ed6e4becbe9653ad0d2e4c04a8a461c7224f1233f0a1fb152cb5109515152021-09-16 1:50:2081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.000025 BNB
0x0bf0aeb61572ed6e4becbe9653ad0d2e4c04a8a461c7224f1233f0a1fb152cb5109515152021-09-16 1:50:2081 days 13 hrs ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60x478f7847ff9fc419d6cb0f03441b785819075aa50.004975 BNB
0xe2c4e38f1b0b9d7eeb3e34ad2e5bad1036f76d8467edb4d947ebde7d05d814fa109390402021-09-15 15:26:3482 days 3 mins ago 0x7e3cfd1a285a7df192b51368bd25123a5823abf60xbfa377c8024254e9839bbb44a0e7aaa46e481f840.00045 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeferSwap

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license
/**
 *Submitted for verification at BscScan.com on 2021-09-03
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.8.0;

/**
 * @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);
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol

pragma solidity ^0.8.0;

/*
 * @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 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) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/NotifyInterface.sol

pragma solidity ^0.8.0;

interface NotifyInterface {
    function notify(
        string memory _pair1,
        uint256 _amount1,
        address _owner
    ) external;
}

// File: contracts/DeferSwap.sol

// SPDX-License-Identifier: APACHE-2.0
pragma solidity ^0.8.0;





contract DeferSwap is Ownable, ReentrancyGuard {
    uint8 constant STATUS_DEFAULT = 0;
    uint8 constant STATUS_CANCEL = 5;
    uint8 constant STATUS_PART = 7;
    uint8 constant STATUS_DEAL = 9;

    uint256 constant PRICE_DECIMAL = 100000000;

    struct OrderModel {
        uint256 order_no;
        address payable owner;
        string pair0;
        string pair1;
        uint256 amount0;
        uint256 amount1;
        uint256 amount0_rem;
        uint256 amount1_rem;
        bool is_sell;
        uint256 price;
        uint8 status;
    }

    struct DealRecordModel {
        uint256 id;
        uint256 sell_order_no;
        uint256 buy_order_no;
        uint256 amount0;
        uint256 amount1;
        address payable submitter;
    }

    struct TokenModel {
        string name;
        uint256 decimal;
        IERC20 dist;
    }

    uint256 public orderTotal;
    mapping(uint256 => OrderModel) public orders;

    uint256 public dealRecordTotal;
    mapping(uint256 => DealRecordModel) public dealRecords;

    mapping(uint256 => uint256[]) public orderDealRecords;

    mapping(string => TokenModel) public tokens;

    uint256 public fee;

    address payable public feeAddress;

    NotifyInterface notifyContract;

    event OrderCreatedEvt(
        uint256 order_no,
        address owner,
        string pair0,
        string pair1,
        uint256 amount0,
        uint256 amount1,
        uint256 amount0_rem,
        uint256 amount1_rem,
        bool is_sell,
        uint256 price,
        uint8 status
    );
    event OrderCancelEvt(
        uint256 order_no,
        uint256 amount0_rem,
        uint256 amount1_rem,
        uint8 status
    );
    event OrderUpdatedEvt(
        uint256 order_no,
        uint256 amount0_rem,
        uint256 amount1_rem,
        uint8 status
    );
    event DealEvt(
        string pair0,
        string pair1,
        uint256 amount0,
        uint256 amount1,
        address seller,
        address buyer
    );

    function setFee(uint256 _fee) public onlyOwner {
        fee = _fee;
    }

    function setFeeAddress(address payable _address) public onlyOwner {
        feeAddress = _address;
    }

    function setToken(
        string memory _name,
        uint256 _decimal,
        IERC20 _tokenAddress
    ) public onlyOwner {
        tokens[_name] = TokenModel(_name, _decimal, _tokenAddress);
    }

    function setNotifyContract(NotifyInterface _address) public onlyOwner {
        notifyContract = _address;
    }

    function createOrder(
        string memory _pair0,
        string memory _pair1,
        uint256 _amount0,
        uint256 _amount1,
        bool _isSell,
        uint256[] memory _orderIds
    ) public payable nonReentrant {
        require(_amount0 > 0 && _amount1 > 0, "DeferSwap: params error.1");
        require(
            tokens[_pair0].decimal != 0 && tokens[_pair1].decimal != 0,
            "DeferSwap: token unsupport"
        );
        require(!_tokenEqual(_pair0, _pair1), "DeferSwap: params error.2");

        uint256 _price = (_amount1 * PRICE_DECIMAL) / _amount0;

        for (uint256 i = 0; i < _orderIds.length; i++) {
            uint256 _tmpOrderNo = _orderIds[i];
            require(
                orders[_tmpOrderNo].order_no != 0 &&
                    (orders[_tmpOrderNo].status == STATUS_DEFAULT ||
                        orders[_tmpOrderNo].status == STATUS_PART) &&
                    orders[_tmpOrderNo].is_sell != _isSell &&
                    _tokenEqual(_pair0, orders[_tmpOrderNo].pair0) &&
                    _tokenEqual(_pair1, orders[_tmpOrderNo].pair1),
                "DeferSwap: params error.3"
            );
            if (_isSell) {
                require(
                    orders[_tmpOrderNo].price >= _price,
                    "DeferSwap: params error.5"
                );
            } else {
                require(
                    orders[_tmpOrderNo].price <= _price,
                    "DeferSwap: params error.5"
                );
            }
        }

        string memory _payToken = _isSell ? _pair0 : _pair1;
        uint256 _payAmount = _isSell ? _amount0 : _amount1;

        if (_isEth(_payToken)) {
            require(_payAmount == msg.value, "DeferSwap: params error.4");
        } else {
            tokens[_payToken].dist.transferFrom(
                _msgSender(),
                address(this),
                _payAmount
            );
        }

        orderTotal++;
        OrderModel memory _order = OrderModel(
            orderTotal,
            payable(_msgSender()),
            _pair0,
            _pair1,
            _amount0,
            _amount1,
            _amount0,
            _amount1,
            _isSell,
            _price,
            STATUS_DEFAULT
        );
        orders[orderTotal] = _order;

        emit OrderCreatedEvt(
            _order.order_no,
            _order.owner,
            _order.pair0,
            _order.pair1,
            _order.amount0,
            _order.amount1,
            _order.amount0_rem,
            _order.amount1_rem,
            _order.is_sell,
            _order.price,
            _order.status
        );

        for (uint256 i = 0; i < _orderIds.length; i++) {
            uint256 _tmpOrderNo = _orderIds[i];
            bool _isContinue = false;
            if (_order.is_sell) {
                _isContinue = _match(_order.order_no, _tmpOrderNo);
            } else {
                _isContinue = _match(_tmpOrderNo, _order.order_no);
            }

            if (_isContinue == false) {
                break;
            }
        }
    }

    function cancelOrder(uint256 _orderNo) public nonReentrant {
        OrderModel memory _order = orders[_orderNo];
        require(_order.order_no != 0, "DeferSwap: order not exists");
        require(_order.owner == _msgSender(), "DeferSwap: unauthorized");
        require(
            _order.status == STATUS_DEFAULT || _order.status == STATUS_PART,
            "DeferSwap: order has cancel/complete"
        );

        string memory _payToken = _order.is_sell ? _order.pair0 : _order.pair1;
        uint256 _payAmount = _order.is_sell
            ? _order.amount0_rem
            : _order.amount1_rem;

        orders[_orderNo].status = STATUS_CANCEL;

        if (_payAmount > 0) {
            if (_isEth(_payToken)) {
                _order.owner.transfer(_payAmount);
            } else {
                tokens[_payToken].dist.transfer(_order.owner, _payAmount);
            }
        }

        emit OrderCancelEvt(
            _order.order_no,
            orders[_order.order_no].amount0_rem,
            orders[_order.order_no].amount1_rem,
            orders[_order.order_no].status
        );
    }

    function dealOrder(uint256 _orderNo, uint256 _amount)
        public
        payable
        nonReentrant
    {
        OrderModel memory _order = orders[_orderNo];
        require(_order.order_no != 0, "DeferSwap: order not exists");
        require(
            _order.status == STATUS_DEFAULT || _order.status == STATUS_PART,
            "DeferSwap: order has cancel/complete"
        );

        string memory _dealToken = _order.is_sell ? _order.pair1 : _order.pair0;
        uint256 _dealAmount = _order.is_sell
            ? _order.amount1_rem
            : _order.amount0_rem;

        require(_amount <= _dealAmount, "DeferSwap: params error.1");

        address payable _buyerAddress = payable(_msgSender());

        if (_isEth(_dealToken)) {
            require(_amount == msg.value, "DeferSwap: params error.2");
        } else {
            tokens[_dealToken].dist.transferFrom(
                _buyerAddress,
                address(this),
                _amount
            );
        }

        DealRecordModel memory _dealRecord;

        if (_order.is_sell) {
            _dealRecord = DealRecordModel(
                dealRecordTotal,
                _order.order_no,
                0,
                (_amount * _order.amount0_rem) / _order.amount1_rem,
                _amount,
                _buyerAddress
            );
        } else {
            _dealRecord = DealRecordModel(
                dealRecordTotal,
                0,
                _order.order_no,
                _amount,
                (_amount * _order.amount1_rem) / _order.amount0_rem,
                _buyerAddress
            );
        }

        dealRecords[_dealRecord.id] = _dealRecord;
        dealRecordTotal++;

        orderDealRecords[_orderNo].push(_dealRecord.id);

        orders[_order.order_no].amount0_rem -= _dealRecord.amount0;
        orders[_order.order_no].amount1_rem -= _dealRecord.amount1;
        orders[_order.order_no].status = orders[_order.order_no].amount0_rem ==
            0 ||
            orders[_order.order_no].amount1_rem == 0
            ? STATUS_DEAL
            : STATUS_PART;

        string memory _orderOwnerReceiveToken;
        uint256 _orderOwnerReceiveAmount;

        string memory _buyerReceiveToken;
        uint256 _buyerReceiveAmount;

        if (_order.is_sell) {
            _orderOwnerReceiveToken = _order.pair1;
            _orderOwnerReceiveAmount = _dealRecord.amount1;

            _buyerReceiveToken = _order.pair0;
            _buyerReceiveAmount = _dealRecord.amount0;
        } else {
            _orderOwnerReceiveToken = _order.pair0;
            _orderOwnerReceiveAmount = _dealRecord.amount0;

            _buyerReceiveToken = _order.pair1;
            _buyerReceiveAmount = _dealRecord.amount1;
        }

        _orderTransferHandle(
            _orderOwnerReceiveToken,
            _order.owner,
            _orderOwnerReceiveAmount,
            _compFee(_orderOwnerReceiveAmount)
        );

        _orderTransferHandle(
            _buyerReceiveToken,
            _buyerAddress,
            _buyerReceiveAmount,
            _compFee(_buyerReceiveAmount)
        );

        notifyContract.notify(_order.pair1, _dealRecord.amount1, _order.owner);
        notifyContract.notify(_order.pair1, _dealRecord.amount1, _buyerAddress);

        emit OrderUpdatedEvt(
            _order.order_no,
            orders[_order.order_no].amount0_rem,
            orders[_order.order_no].amount1_rem,
            orders[_order.order_no].status
        );

        emit DealEvt(
            _order.pair0,
            _order.pair1,
            _dealRecord.amount0,
            _dealRecord.amount1,
            _order.owner,
            _buyerAddress
        );
    }

    function mergeOrder(uint256 _orderNo, uint256[] memory _orderIds)
        public
        nonReentrant
    {
        require(_orderIds.length > 0, "DeferSwap: params error");

        OrderModel memory _order = orders[_orderNo];
        require(_order.order_no != 0, "DeferSwap: order not exists");
        require(
            _order.status == STATUS_DEFAULT || _order.status == STATUS_PART,
            "DeferSwap: order has cancel/deal"
        );

        for (uint256 i = 0; i < _orderIds.length; i++) {
            uint256 _tmpOrderNo = _orderIds[i];
            require(
                orders[_tmpOrderNo].order_no != 0 &&
                    (orders[_tmpOrderNo].status == STATUS_DEFAULT ||
                        orders[_tmpOrderNo].status == STATUS_PART) &&
                    orders[_tmpOrderNo].is_sell != _order.is_sell &&
                    _tokenEqual(orders[_tmpOrderNo].pair0, _order.pair0) &&
                    _tokenEqual(orders[_tmpOrderNo].pair1, _order.pair1),
                "DeferSwap: params error.2"
            );
            if (_order.is_sell) {
                require(
                    orders[_tmpOrderNo].price >= _order.price,
                    "DeferSwap: params error.3"
                );
            } else {
                require(
                    orders[_tmpOrderNo].price <= _order.price,
                    "DeferSwap: params error.3"
                );
            }
        }

        for (uint256 i = 0; i < _orderIds.length; i++) {
            uint256 _tmpOrderNo = _orderIds[i];
            bool _isContinue = false;

            if (_order.is_sell) {
                _isContinue = _match(_order.order_no, _tmpOrderNo);
            } else {
                _isContinue = _match(_tmpOrderNo, _order.order_no);
            }

            if (_isContinue == false) {
                break;
            }
        }
    }

    function _match(uint256 _sellOrderNo, uint256 _buyOrderNo)
        internal
        returns (bool)
    {
        OrderModel memory _sellOrder = orders[_sellOrderNo];
        OrderModel memory _buyOrder = orders[_buyOrderNo];

        if (
            _sellOrder.amount0_rem == 0 ||
            _sellOrder.amount1_rem == 0 ||
            _buyOrder.amount0_rem == 0 ||
            _buyOrder.amount1_rem == 0
        ) {
            return false;
        }

        uint256 _amount0 = _sellOrder.amount0_rem > _buyOrder.amount0_rem
            ? _buyOrder.amount0_rem
            : _sellOrder.amount0_rem;

        uint256 _sellAmount1 = (_amount0 * _sellOrder.amount1_rem) /
            _sellOrder.amount0_rem;
        uint256 _buyAmount1 = (_amount0 * _buyOrder.amount1_rem) /
            _buyOrder.amount0_rem;

        uint256 _amount1 = _sellAmount1;
        uint256 _buyAmountOver = _buyAmount1 > _amount1
            ? _buyAmount1 - _amount1
            : 0;

        DealRecordModel memory _dealRecord = DealRecordModel(
            dealRecordTotal,
            _sellOrder.order_no,
            _buyOrder.order_no,
            _amount0,
            _amount1,
            payable(address(0))
        );

        orderDealRecords[_sellOrder.order_no].push(_dealRecord.id);
        orderDealRecords[_buyOrder.order_no].push(_dealRecord.id);

        orders[_sellOrder.order_no].amount0_rem -= _dealRecord.amount0;
        orders[_sellOrder.order_no].amount1_rem -= _sellAmount1;
        orders[_sellOrder.order_no].status = orders[_sellOrder.order_no]
            .amount0_rem == 0
            ? STATUS_DEAL
            : STATUS_PART;

        orders[_buyOrder.order_no].amount0_rem -= _dealRecord.amount0;
        orders[_buyOrder.order_no].amount1_rem -= _buyAmount1;
        orders[_buyOrder.order_no].status = orders[_buyOrder.order_no]
            .amount0_rem == 0
            ? STATUS_DEAL
            : STATUS_PART;

        _orderTransferHandle(
            _sellOrder.pair1,
            _sellOrder.owner,
            _dealRecord.amount1,
            _compFee(_dealRecord.amount1)
        );

        _orderTransferHandle(
            _buyOrder.pair0,
            _buyOrder.owner,
            _dealRecord.amount0,
            _compFee(_dealRecord.amount0)
        );

        if (_buyAmountOver > 0) {
            _orderTransferHandle(
                _buyOrder.pair1,
                _buyOrder.owner,
                _buyAmountOver,
                0
            );
        }

        emit OrderUpdatedEvt(
            _sellOrder.order_no,
            orders[_sellOrder.order_no].amount0_rem,
            orders[_sellOrder.order_no].amount1_rem,
            orders[_sellOrder.order_no].status
        );
        emit OrderUpdatedEvt(
            _buyOrder.order_no,
            orders[_buyOrder.order_no].amount0_rem,
            orders[_buyOrder.order_no].amount1_rem,
            orders[_buyOrder.order_no].status
        );

        emit DealEvt(
            _sellOrder.pair0,
            _sellOrder.pair1,
            _dealRecord.amount0,
            _dealRecord.amount1,
            _sellOrder.owner,
            _buyOrder.owner
        );

        notifyContract.notify(
            _sellOrder.pair1,
            _dealRecord.amount1,
            _sellOrder.owner
        );
        notifyContract.notify(
            _buyOrder.pair1,
            _dealRecord.amount1,
            _buyOrder.owner
        );

        return true;
    }

    function _orderTransferHandle(
        string memory _token,
        address payable _owner,
        uint256 _amount,
        uint256 _fee
    ) internal {
        uint256 _realAmount = _amount - _fee;

        if (_isEth(_token)) {
            _owner.transfer(_realAmount);
            if (_fee > 0) {
                feeAddress.transfer(_fee);
            }
        } else {
            _tokenTransfer(_token, _owner, _realAmount);
            if (_fee > 0) {
                _tokenTransfer(_token, feeAddress, _fee);
            }
        }
    }

    function _tokenEqual(string memory _t1, string memory _t2)
        internal
        view
        returns (bool)
    {
        return address(tokens[_t1].dist) == address(tokens[_t2].dist);
    }

    function _tokenTransfer(
        string memory _token,
        address _receive,
        uint256 _amount
    ) internal {
        tokens[_token].dist.transfer(_receive, _amount);
    }

    function _compFee(uint256 _amount) internal view returns (uint256) {
        if (fee == 0) {
            return 0;
        }

        return (_amount * fee) / 10000;
    }

    function _isEth(string memory _token) internal view returns (bool) {
        return address(tokens[_token].dist) == address(0);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"pair0","type":"string"},{"indexed":false,"internalType":"string","name":"pair1","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"DealEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"order_no","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0_rem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1_rem","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"status","type":"uint8"}],"name":"OrderCancelEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"order_no","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"pair0","type":"string"},{"indexed":false,"internalType":"string","name":"pair1","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0_rem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1_rem","type":"uint256"},{"indexed":false,"internalType":"bool","name":"is_sell","type":"bool"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"status","type":"uint8"}],"name":"OrderCreatedEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"order_no","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0_rem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1_rem","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"status","type":"uint8"}],"name":"OrderUpdatedEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_orderNo","type":"uint256"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_pair0","type":"string"},{"internalType":"string","name":"_pair1","type":"string"},{"internalType":"uint256","name":"_amount0","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"bool","name":"_isSell","type":"bool"},{"internalType":"uint256[]","name":"_orderIds","type":"uint256[]"}],"name":"createOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderNo","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"dealOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dealRecordTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dealRecords","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"sell_order_no","type":"uint256"},{"internalType":"uint256","name":"buy_order_no","type":"uint256"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"address payable","name":"submitter","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderNo","type":"uint256"},{"internalType":"uint256[]","name":"_orderIds","type":"uint256[]"}],"name":"mergeOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"orderDealRecords","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orderTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"uint256","name":"order_no","type":"uint256"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"string","name":"pair0","type":"string"},{"internalType":"string","name":"pair1","type":"string"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"amount0_rem","type":"uint256"},{"internalType":"uint256","name":"amount1_rem","type":"uint256"},{"internalType":"bool","name":"is_sell","type":"bool"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract NotifyInterface","name":"_address","type":"address"}],"name":"setNotifyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_decimal","type":"uint256"},{"internalType":"contract IERC20","name":"_tokenAddress","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"tokens","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"decimal","type":"uint256"},{"internalType":"contract IERC20","name":"dist","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5062000032620000266200003f60201b60201c565b6200004760201b60201c565b600180819055506200010b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6151b1806200011b6000396000f3fe6080604052600436106101145760003560e01c80638705fcd4116100a0578063a85c38ef11610064578063a85c38ef14610381578063a9669ae2146103c8578063cce9a250146103f3578063ddca3f431461040f578063f2fde38b1461043a57610114565b80638705fcd414610283578063896b299a146102ac5780638da5cb5b146102ee578063a412ddf414610319578063a54246e31461034457610114565b8063514fcac7116100e7578063514fcac7146101c857806354b5921d146101f15780635a636d601461021a57806369fe0e2d14610243578063715018a61461026c57610114565b806304c2320b146101195780630b579c4414610158578063136a8e0614610181578063412753581461019d575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b9190613f85565b610463565b60405161014f9392919061462e565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190613f5c565b61054b565b005b61019b60048036038101906101969190613fc6565b61060b565b005b3480156101a957600080fd5b506101b2610f50565b6040516101bf91906144a6565b60405180910390f35b3480156101d457600080fd5b506101ef60048036038101906101ea91906140fe565b610f76565b005b3480156101fd57600080fd5b5061021860048036038101906102139190614127565b61154b565b005b34801561022657600080fd5b50610241600480360381019061023c9190614097565b611cea565b005b34801561024f57600080fd5b5061026a600480360381019061026591906140fe565b611e2b565b005b34801561027857600080fd5b50610281611eb1565b005b34801561028f57600080fd5b506102aa60048036038101906102a59190613f0a565b611f39565b005b3480156102b857600080fd5b506102d360048036038101906102ce91906140fe565b611ff9565b6040516102e5969594939291906149b9565b60405180910390f35b3480156102fa57600080fd5b50610303612055565b604051610310919061448b565b60405180910390f35b34801561032557600080fd5b5061032e61207e565b60405161033b919061482c565b60405180910390f35b34801561035057600080fd5b5061036b6004803603810190610366919061417b565b612084565b604051610378919061482c565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906140fe565b6120b5565b6040516103bf9b9a99989796959493929190614847565b60405180910390f35b3480156103d457600080fd5b506103dd612259565b6040516103ea919061482c565b60405180910390f35b61040d6004803603810190610408919061417b565b61225f565b005b34801561041b57600080fd5b50610424612c98565b604051610431919061482c565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613ee1565b612c9e565b005b60078180516020810182018051848252602083016020850120818352809550505050505060009150905080600001805461049c90614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890614cee565b80156105155780601f106104ea57610100808354040283529160200191610515565b820191906000526020600020905b8154815290600101906020018083116104f857829003601f168201915b5050505050908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b610553612d96565b73ffffffffffffffffffffffffffffffffffffffff16610571612055565b73ffffffffffffffffffffffffffffffffffffffff16146105c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9061474c565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60026001541415610651576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610648906147ec565b60405180910390fd5b60026001819055506000841180156106695750600083115b6106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061466c565b60405180910390fd5b60006007876040516106ba9190614474565b908152602001604051809103902060010154141580156106fc575060006007866040516106e79190614474565b90815260200160405180910390206001015414155b61073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107329061468c565b60405180910390fd5b6107458686612d9e565b15610785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077c906146cc565b60405180910390fd5b6000846305f5e100856107989190614b39565b6107a29190614b08565b905060005b8251811015610b1d5760008382815181106107eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006003600083815260200190815260200160002060000154141580156108795750600060ff1660036000838152602001908152602001600020600a0160009054906101000a900460ff1660ff1614806108785750600760ff1660036000838152602001908152602001600020600a0160009054906101000a900460ff1660ff16145b5b80156108ac57508415156003600083815260200190815260200160002060080160009054906101000a900460ff16151514155b801561095c575061095b896003600084815260200190815260200160002060020180546108d890614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461090490614cee565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050612d9e565b5b8015610a0c5750610a0b8860036000848152602001908152602001600020600301805461098890614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546109b490614cee565b8015610a015780601f106109d657610100808354040283529160200191610a01565b820191906000526020600020905b8154815290600101906020018083116109e457829003601f168201915b5050505050612d9e565b5b610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a42906146ec565b60405180910390fd5b8415610aaf578260036000838152602001908152602001600020600901541015610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa19061480c565b60405180910390fd5b610b09565b8260036000838152602001908152602001600020600901541115610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff9061480c565b60405180910390fd5b5b508080610b1590614d51565b9150506107a7565b50600083610b2b5786610b2d565b875b9050600084610b3c5785610b3e565b865b9050610b4982612e59565b15610b9557348114610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879061476c565b60405180910390fd5b610c6e565b600782604051610ba59190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd610bfa612d96565b30846040518463ffffffff1660e01b8152600401610c1a93929190614521565b602060405180830381600087803b158015610c3457600080fd5b505af1158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190613f33565b505b60026000815480929190610c8190614d51565b919050555060006040518061016001604052806002548152602001610ca4612d96565b73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018981526020018881526020018981526020018881526020018715158152602001858152602001600060ff168152509050806003600060025481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610d7e929190613c61565b506060820151816003019080519060200190610d9b929190613c61565b506080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff021916908315150217905550610120820151816009015561014082015181600a0160006101000a81548160ff021916908360ff1602179055509050507f290099e0757e0af4af7e6402430bbf6177244b6fae32e19ea22fa25c672b2848816000015182602001518360400151846060015185608001518660a001518760c001518860e001518961010001518a61012001518b6101400151604051610e879b9a99989796959493929190614900565b60405180910390a160005b8551811015610f3c576000868281518110610ed6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600083610100015115610f0257610efb846000015183612ed2565b9050610f13565b610f10828560000151612ed2565b90505b600015158115151415610f27575050610f3c565b50508080610f3490614d51565b915050610e92565b505050505060018081905550505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb3906147ec565b60405180910390fd5b600260018190555060006003600083815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461105590614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461108190614cee565b80156110ce5780601f106110a3576101008083540402835291602001916110ce565b820191906000526020600020905b8154815290600101906020018083116110b157829003601f168201915b505050505081526020016003820180546110e790614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461111390614cee565b80156111605780601f1061113557610100808354040283529160200191611160565b820191906000526020600020905b81548152906001019060200180831161114357829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1615151515815260200160098201548152602001600a820160009054906101000a900460ff1660ff1660ff1681525050905060008160000151141561121d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611214906147ac565b60405180910390fd5b611225612d96565b73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d9061472c565b60405180910390fd5b600060ff1681610140015160ff1614806112bb5750600760ff1681610140015160ff16145b6112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f19061470c565b60405180910390fd5b6000816101000151611310578160600151611316565b81604001515b9050600082610100015161132e578260e00151611334565b8260c001515b9050600560036000868152602001908152602001600020600a0160006101000a81548160ff021916908360ff16021790555060008111156114a25761137882612e59565b156113cd57826020015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113c7573d6000803e3d6000fd5b506114a1565b6007826040516113dd9190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151836040518363ffffffff1660e01b815260040161144d9291906144f8565b602060405180830381600087803b15801561146757600080fd5b505af115801561147b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149f9190613f33565b505b5b7fd1c1d9d72053d0c03d52c1f8051ec2ee4b83eb60f9f8568f68c7ec14407d066183600001516003600086600001518152602001908152602001600020600601546003600087600001518152602001908152602001600020600701546003600088600001518152602001908152602001600020600a0160009054906101000a900460ff166040516115369493929190614a1a565b60405180910390a15050506001808190555050565b60026001541415611591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611588906147ec565b60405180910390fd5b600260018190555060008151116115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906147cc565b60405180910390fd5b60006003600084815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461166e90614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461169a90614cee565b80156116e75780601f106116bc576101008083540402835291602001916116e7565b820191906000526020600020905b8154815290600101906020018083116116ca57829003601f168201915b5050505050815260200160038201805461170090614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461172c90614cee565b80156117795780601f1061174e57610100808354040283529160200191611779565b820191906000526020600020905b81548152906001019060200180831161175c57829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1615151515815260200160098201548152602001600a820160009054906101000a900460ff1660ff1660ff16815250509050600081600001511415611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906147ac565b60405180910390fd5b600060ff1681610140015160ff16148061185b5750600760ff1681610140015160ff16145b61189a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118919061478c565b60405180910390fd5b60005b8251811015611c2f5760008382815181106118e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060036000838152602001908152602001600020600001541415801561196f5750600060ff1660036000838152602001908152602001600020600a0160009054906101000a900460ff1660ff16148061196e5750600760ff1660036000838152602001908152602001600020600a0160009054906101000a900460ff1660ff16145b5b80156119a7575082610100015115156003600083815260200190815260200160002060080160009054906101000a900460ff16151514155b8015611a5b5750611a5a6003600083815260200190815260200160002060020180546119d290614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546119fe90614cee565b8015611a4b5780601f10611a2057610100808354040283529160200191611a4b565b820191906000526020600020905b815481529060010190602001808311611a2e57829003601f168201915b50505050508460400151612d9e565b5b8015611b0f5750611b0e600360008381526020019081526020016000206003018054611a8690614cee565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab290614cee565b8015611aff5780601f10611ad457610100808354040283529160200191611aff565b820191906000526020600020905b815481529060010190602001808311611ae257829003601f168201915b50505050508460600151612d9e565b5b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b45906146cc565b60405180910390fd5b82610100015115611bbc5782610120015160036000838152602001908152602001600020600901541015611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906146ec565b60405180910390fd5b611c1b565b82610120015160036000838152602001908152602001600020600901541115611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906146ec565b60405180910390fd5b5b508080611c2790614d51565b91505061189d565b5060005b8251811015611cdd576000838281518110611c77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600083610100015115611ca357611c9c846000015183612ed2565b9050611cb4565b611cb1828560000151612ed2565b90505b600015158115151415611cc8575050611cdd565b50508080611cd590614d51565b915050611c33565b5050600180819055505050565b611cf2612d96565b73ffffffffffffffffffffffffffffffffffffffff16611d10612055565b73ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061474c565b60405180910390fd5b60405180606001604052808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600784604051611da79190614474565b90815260200160405180910390206000820151816000019080519060200190611dd1929190613c61565b506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050565b611e33612d96565b73ffffffffffffffffffffffffffffffffffffffff16611e51612055565b73ffffffffffffffffffffffffffffffffffffffff1614611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e9061474c565b60405180910390fd5b8060088190555050565b611eb9612d96565b73ffffffffffffffffffffffffffffffffffffffff16611ed7612055565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f249061474c565b60405180910390fd5b611f37600061396a565b565b611f41612d96565b73ffffffffffffffffffffffffffffffffffffffff16611f5f612055565b73ffffffffffffffffffffffffffffffffffffffff1614611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac9061474c565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905086565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b600660205281600052604060002081815481106120a057600080fd5b90600052602060002001600091509150505481565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461210490614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461213090614cee565b801561217d5780601f106121525761010080835404028352916020019161217d565b820191906000526020600020905b81548152906001019060200180831161216057829003601f168201915b50505050509080600301805461219290614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546121be90614cee565b801561220b5780601f106121e05761010080835404028352916020019161220b565b820191906000526020600020905b8154815290600101906020018083116121ee57829003601f168201915b5050505050908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff169080600901549080600a0160009054906101000a900460ff1690508b565b60025481565b600260015414156122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c906147ec565b60405180910390fd5b600260018190555060006003600084815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461233e90614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461236a90614cee565b80156123b75780601f1061238c576101008083540402835291602001916123b7565b820191906000526020600020905b81548152906001019060200180831161239a57829003601f168201915b505050505081526020016003820180546123d090614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546123fc90614cee565b80156124495780601f1061241e57610100808354040283529160200191612449565b820191906000526020600020905b81548152906001019060200180831161242c57829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1615151515815260200160098201548152602001600a820160009054906101000a900460ff1660ff1660ff16815250509050600081600001511415612506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fd906147ac565b60405180910390fd5b600060ff1681610140015160ff16148061252b5750600760ff1681610140015160ff16145b61256a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125619061470c565b60405180910390fd5b6000816101000151612580578160400151612586565b81606001515b9050600082610100015161259e578260c001516125a4565b8260e001515b9050808411156125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e09061466c565b60405180910390fd5b60006125f3612d96565b90506125fe83612e59565b1561264a57348514612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263c906146cc565b60405180910390fd5b61271c565b60078360405161265a9190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230886040518463ffffffff1660e01b81526004016126c8939291906144c1565b602060405180830381600087803b1580156126e257600080fd5b505af11580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271a9190613f33565b505b612724613ce7565b8461010001511561279e576040518060c00160405280600454815260200186600001518152602001600081526020018660e001518760c00151896127689190614b39565b6127729190614b08565b81526020018781526020018373ffffffffffffffffffffffffffffffffffffffff168152509050612809565b6040518060c00160405280600454815260200160008152602001866000015181526020018781526020018660c001518760e00151896127dd9190614b39565b6127e79190614b08565b81526020018373ffffffffffffffffffffffffffffffffffffffff1681525090505b806005600083600001518152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460008154809291906128b090614d51565b919050555060066000888152602001908152602001600020816000015190806001815401808255809150506001900390600052602060002001600090919091909150558060600151600360008760000151815260200190815260200160002060060160008282546129219190614b93565b925050819055508060800151600360008760000151815260200190815260200160002060070160008282546129569190614b93565b92505081905550600060036000876000015181526020019081526020016000206006015414806129a057506000600360008760000151815260200190815260200160002060070154145b6129ab5760076129ae565b60095b6003600087600001518152602001908152602001600020600a0160006101000a81548160ff021916908360ff160217905550606060006060600088610100015115612a145788606001519350846080015192508860400151915084606001519050612a31565b886040015193508460600151925088606001519150846080015190505b612a49848a6020015185612a4487613a2e565b613a66565b612a5d828783612a5885613a2e565b613a66565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1d6284d8a6060015187608001518c602001516040518463ffffffff1660e01b8152600401612ac8939291906145f0565b600060405180830381600087803b158015612ae257600080fd5b505af1158015612af6573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1d6284d8a606001518760800151896040518463ffffffff1660e01b8152600401612b61939291906145f0565b600060405180830381600087803b158015612b7b57600080fd5b505af1158015612b8f573d6000803e3d6000fd5b505050507f4ac2f62058fa9823e2e595d2b57814e16551b2864632de1d05b6dadec9d409118960000151600360008c60000151815260200190815260200160002060060154600360008d60000151815260200190815260200160002060070154600360008e600001518152602001908152602001600020600a0160009054906101000a900460ff16604051612c279493929190614a1a565b60405180910390a17fc43d665a3e318930acdc1181fe561603032d3baedfed6e8cc091296a2bbe5e3d89604001518a60600151876060015188608001518d602001518b604051612c7c96959493929190614581565b60405180910390a1505050505050505050600180819055505050565b60085481565b612ca6612d96565b73ffffffffffffffffffffffffffffffffffffffff16612cc4612055565b73ffffffffffffffffffffffffffffffffffffffff1614612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d119061474c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d81906146ac565b60405180910390fd5b612d938161396a565b50565b600033905090565b6000600782604051612db09190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600784604051612e089190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600783604051612e829190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806003600085815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054612f6490614cee565b80601f0160208091040260200160405190810160405280929190818152602001828054612f9090614cee565b8015612fdd5780601f10612fb257610100808354040283529160200191612fdd565b820191906000526020600020905b815481529060010190602001808311612fc057829003601f168201915b50505050508152602001600382018054612ff690614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461302290614cee565b801561306f5780601f106130445761010080835404028352916020019161306f565b820191906000526020600020905b81548152906001019060200180831161305257829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1615151515815260200160098201548152602001600a820160009054906101000a900460ff1660ff1660ff1681525050905060006003600085815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461317590614cee565b80601f01602080910402602001604051908101604052809291908181526020018280546131a190614cee565b80156131ee5780601f106131c3576101008083540402835291602001916131ee565b820191906000526020600020905b8154815290600101906020018083116131d157829003601f168201915b5050505050815260200160038201805461320790614cee565b80601f016020809104026020016040519081016040528092919081815260200182805461323390614cee565b80156132805780601f1061325557610100808354040283529160200191613280565b820191906000526020600020905b81548152906001019060200180831161326357829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1615151515815260200160098201548152602001600a820160009054906101000a900460ff1660ff1660ff1681525050905060008260c00151148061330c575060008260e00151145b8061331b575060008160c00151145b8061332a575060008160e00151145b1561333a57600092505050613964565b60008160c001518360c0015111613355578260c0015161335b565b8160c001515b905060008360c001518460e00151836133749190614b39565b61337e9190614b08565b905060008360c001518460e00151846133979190614b39565b6133a19190614b08565b9050600082905060008183116133b85760006133c5565b81836133c49190614b93565b5b905060006040518060c0016040528060045481526020018960000151815260200188600001518152602001878152602001848152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090506006600089600001518152602001908152602001600020816000015190806001815401808255809150506001900390600052602060002001600090919091909150556006600088600001518152602001908152602001600020816000015190806001815401808255809150506001900390600052602060002001600090919091909150558060600151600360008a60000151815260200190815260200160002060060160008282546134cb9190614b93565b9250508190555084600360008a60000151815260200190815260200160002060070160008282546134fc9190614b93565b925050819055506000600360008a600001518152602001908152602001600020600601541461352c57600761352f565b60095b600360008a600001518152602001908152602001600020600a0160006101000a81548160ff021916908360ff16021790555080606001516003600089600001518152602001908152602001600020600601600082825461358f9190614b93565b9250508190555083600360008960000151815260200190815260200160002060070160008282546135c09190614b93565b925050819055506000600360008960000151815260200190815260200160002060060154146135f05760076135f3565b60095b6003600089600001518152602001908152602001600020600a0160006101000a81548160ff021916908360ff1602179055506136498860600151896020015183608001516136448560800151613a2e565b613a66565b61366d8760400151886020015183606001516136688560600151613a2e565b613a66565b600082111561368c5761368b87606001518860200151846000613a66565b5b7f4ac2f62058fa9823e2e595d2b57814e16551b2864632de1d05b6dadec9d409118860000151600360008b60000151815260200190815260200160002060060154600360008c60000151815260200190815260200160002060070154600360008d600001518152602001908152602001600020600a0160009054906101000a900460ff166040516137209493929190614a1a565b60405180910390a17f4ac2f62058fa9823e2e595d2b57814e16551b2864632de1d05b6dadec9d409118760000151600360008a60000151815260200190815260200160002060060154600360008b60000151815260200190815260200160002060070154600360008c600001518152602001908152602001600020600a0160009054906101000a900460ff166040516137bc9493929190614a1a565b60405180910390a17fc43d665a3e318930acdc1181fe561603032d3baedfed6e8cc091296a2bbe5e3d88604001518960600151836060015184608001518c602001518c6020015160405161381596959493929190614581565b60405180910390a1600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1d6284d896060015183608001518b602001516040518463ffffffff1660e01b8152600401613888939291906145f0565b600060405180830381600087803b1580156138a257600080fd5b505af11580156138b6573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1d6284d886060015183608001518a602001516040518463ffffffff1660e01b8152600401613925939291906145f0565b600060405180830381600087803b15801561393f57600080fd5b505af1158015613953573d6000803e3d6000fd5b505050506001985050505050505050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806008541415613a435760009050613a61565b61271060085483613a549190614b39565b613a5e9190614b08565b90505b919050565b60008183613a749190614b93565b9050613a7f85612e59565b15613b43578373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613aca573d6000803e3d6000fd5b506000821115613b3e57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613b3c573d6000803e3d6000fd5b505b613b86565b613b4e858583613b8d565b6000821115613b8557613b8485600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613b8d565b5b5b5050505050565b600783604051613b9d9190614474565b908152602001604051809103902060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401613c09929190614558565b602060405180830381600087803b158015613c2357600080fd5b505af1158015613c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5b9190613f33565b50505050565b828054613c6d90614cee565b90600052602060002090601f016020900481019282613c8f5760008555613cd6565b82601f10613ca857805160ff1916838001178555613cd6565b82800160010185558215613cd6579182015b82811115613cd5578251825591602001919060010190613cba565b5b509050613ce39190613d33565b5090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b80821115613d4c576000816000905550600101613d34565b5090565b6000613d63613d5e84614a84565b614a5f565b90508083825260208201905082856020860282011115613d8257600080fd5b60005b85811015613db25781613d988882613ecc565b845260208401935060208301925050600181019050613d85565b5050509392505050565b6000613dcf613dca84614ab0565b614a5f565b905082815260208101848484011115613de757600080fd5b613df2848285614cac565b509392505050565b600081359050613e09816150f1565b92915050565b600081359050613e1e81615108565b92915050565b600082601f830112613e3557600080fd5b8135613e45848260208601613d50565b91505092915050565b600081359050613e5d8161511f565b92915050565b600081519050613e728161511f565b92915050565b600081359050613e8781615136565b92915050565b600081359050613e9c8161514d565b92915050565b600082601f830112613eb357600080fd5b8135613ec3848260208601613dbc565b91505092915050565b600081359050613edb81615164565b92915050565b600060208284031215613ef357600080fd5b6000613f0184828501613dfa565b91505092915050565b600060208284031215613f1c57600080fd5b6000613f2a84828501613e0f565b91505092915050565b600060208284031215613f4557600080fd5b6000613f5384828501613e63565b91505092915050565b600060208284031215613f6e57600080fd5b6000613f7c84828501613e8d565b91505092915050565b600060208284031215613f9757600080fd5b600082013567ffffffffffffffff811115613fb157600080fd5b613fbd84828501613ea2565b91505092915050565b60008060008060008060c08789031215613fdf57600080fd5b600087013567ffffffffffffffff811115613ff957600080fd5b61400589828a01613ea2565b965050602087013567ffffffffffffffff81111561402257600080fd5b61402e89828a01613ea2565b955050604061403f89828a01613ecc565b945050606061405089828a01613ecc565b935050608061406189828a01613e4e565b92505060a087013567ffffffffffffffff81111561407e57600080fd5b61408a89828a01613e24565b9150509295509295509295565b6000806000606084860312156140ac57600080fd5b600084013567ffffffffffffffff8111156140c657600080fd5b6140d286828701613ea2565b93505060206140e386828701613ecc565b92505060406140f486828701613e78565b9150509250925092565b60006020828403121561411057600080fd5b600061411e84828501613ecc565b91505092915050565b6000806040838503121561413a57600080fd5b600061414885828601613ecc565b925050602083013567ffffffffffffffff81111561416557600080fd5b61417185828601613e24565b9150509250929050565b6000806040838503121561418e57600080fd5b600061419c85828601613ecc565b92505060206141ad85828601613ecc565b9150509250929050565b6141c081614c52565b82525050565b6141cf81614bd9565b82525050565b6141de81614bc7565b82525050565b6141ed81614beb565b82525050565b6141fc81614c64565b82525050565b600061420d82614ae1565b6142178185614aec565b9350614227818560208601614cbb565b61423081614e56565b840191505092915050565b600061424682614ae1565b6142508185614afd565b9350614260818560208601614cbb565b80840191505092915050565b6000614279601983614aec565b915061428482614e67565b602082019050919050565b600061429c601a83614aec565b91506142a782614e90565b602082019050919050565b60006142bf602683614aec565b91506142ca82614eb9565b604082019050919050565b60006142e2601983614aec565b91506142ed82614f08565b602082019050919050565b6000614305601983614aec565b915061431082614f31565b602082019050919050565b6000614328602483614aec565b915061433382614f5a565b604082019050919050565b600061434b601783614aec565b915061435682614fa9565b602082019050919050565b600061436e602083614aec565b915061437982614fd2565b602082019050919050565b6000614391601983614aec565b915061439c82614ffb565b602082019050919050565b60006143b4602083614aec565b91506143bf82615024565b602082019050919050565b60006143d7601b83614aec565b91506143e28261504d565b602082019050919050565b60006143fa601783614aec565b915061440582615076565b602082019050919050565b600061441d601f83614aec565b91506144288261509f565b602082019050919050565b6000614440601983614aec565b915061444b826150c8565b602082019050919050565b61445f81614c3b565b82525050565b61446e81614c45565b82525050565b6000614480828461423b565b915081905092915050565b60006020820190506144a060008301846141d5565b92915050565b60006020820190506144bb60008301846141c6565b92915050565b60006060820190506144d660008301866141b7565b6144e360208301856141d5565b6144f06040830184614456565b949350505050565b600060408201905061450d60008301856141b7565b61451a6020830184614456565b9392505050565b600060608201905061453660008301866141d5565b61454360208301856141d5565b6145506040830184614456565b949350505050565b600060408201905061456d60008301856141d5565b61457a6020830184614456565b9392505050565b600060c082019050818103600083015261459b8189614202565b905081810360208301526145af8188614202565b90506145be6040830187614456565b6145cb6060830186614456565b6145d860808301856141b7565b6145e560a08301846141b7565b979650505050505050565b6000606082019050818103600083015261460a8186614202565b90506146196020830185614456565b61462660408301846141b7565b949350505050565b600060608201905081810360008301526146488186614202565b90506146576020830185614456565b61466460408301846141f3565b949350505050565b600060208201905081810360008301526146858161426c565b9050919050565b600060208201905081810360008301526146a58161428f565b9050919050565b600060208201905081810360008301526146c5816142b2565b9050919050565b600060208201905081810360008301526146e5816142d5565b9050919050565b60006020820190508181036000830152614705816142f8565b9050919050565b600060208201905081810360008301526147258161431b565b9050919050565b600060208201905081810360008301526147458161433e565b9050919050565b6000602082019050818103600083015261476581614361565b9050919050565b6000602082019050818103600083015261478581614384565b9050919050565b600060208201905081810360008301526147a5816143a7565b9050919050565b600060208201905081810360008301526147c5816143ca565b9050919050565b600060208201905081810360008301526147e5816143ed565b9050919050565b6000602082019050818103600083015261480581614410565b9050919050565b6000602082019050818103600083015261482581614433565b9050919050565b60006020820190506148416000830184614456565b92915050565b60006101608201905061485d600083018e614456565b61486a602083018d6141c6565b818103604083015261487c818c614202565b90508181036060830152614890818b614202565b905061489f608083018a614456565b6148ac60a0830189614456565b6148b960c0830188614456565b6148c660e0830187614456565b6148d46101008301866141e4565b6148e2610120830185614456565b6148f0610140830184614465565b9c9b505050505050505050505050565b600061016082019050614916600083018e614456565b614923602083018d6141b7565b8181036040830152614935818c614202565b90508181036060830152614949818b614202565b9050614958608083018a614456565b61496560a0830189614456565b61497260c0830188614456565b61497f60e0830187614456565b61498d6101008301866141e4565b61499b610120830185614456565b6149a9610140830184614465565b9c9b505050505050505050505050565b600060c0820190506149ce6000830189614456565b6149db6020830188614456565b6149e86040830187614456565b6149f56060830186614456565b614a026080830185614456565b614a0f60a08301846141c6565b979650505050505050565b6000608082019050614a2f6000830187614456565b614a3c6020830186614456565b614a496040830185614456565b614a566060830184614465565b95945050505050565b6000614a69614a7a565b9050614a758282614d20565b919050565b6000604051905090565b600067ffffffffffffffff821115614a9f57614a9e614e27565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614acb57614aca614e27565b5b614ad482614e56565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000614b1382614c3b565b9150614b1e83614c3b565b925082614b2e57614b2d614dc9565b5b828204905092915050565b6000614b4482614c3b565b9150614b4f83614c3b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8857614b87614d9a565b5b828202905092915050565b6000614b9e82614c3b565b9150614ba983614c3b565b925082821015614bbc57614bbb614d9a565b5b828203905092915050565b6000614bd282614c1b565b9050919050565b6000614be482614c1b565b9050919050565b60008115159050919050565b6000614c0282614bc7565b9050919050565b6000614c1482614bc7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614c5d82614c88565b9050919050565b6000614c6f82614c76565b9050919050565b6000614c8182614c1b565b9050919050565b6000614c9382614c9a565b9050919050565b6000614ca582614c1b565b9050919050565b82818337600083830152505050565b60005b83811015614cd9578082015181840152602081019050614cbe565b83811115614ce8576000848401525b50505050565b60006002820490506001821680614d0657607f821691505b60208210811415614d1a57614d19614df8565b5b50919050565b614d2982614e56565b810181811067ffffffffffffffff82111715614d4857614d47614e27565b5b80604052505050565b6000614d5c82614c3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d8f57614d8e614d9a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4465666572537761703a20706172616d73206572726f722e3100000000000000600082015250565b7f4465666572537761703a20746f6b656e20756e737570706f7274000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4465666572537761703a20706172616d73206572726f722e3200000000000000600082015250565b7f4465666572537761703a20706172616d73206572726f722e3300000000000000600082015250565b7f4465666572537761703a206f72646572206861732063616e63656c2f636f6d7060008201527f6c65746500000000000000000000000000000000000000000000000000000000602082015250565b7f4465666572537761703a20756e617574686f72697a6564000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4465666572537761703a20706172616d73206572726f722e3400000000000000600082015250565b7f4465666572537761703a206f72646572206861732063616e63656c2f6465616c600082015250565b7f4465666572537761703a206f72646572206e6f74206578697374730000000000600082015250565b7f4465666572537761703a20706172616d73206572726f72000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4465666572537761703a20706172616d73206572726f722e3500000000000000600082015250565b6150fa81614bc7565b811461510557600080fd5b50565b61511181614bd9565b811461511c57600080fd5b50565b61512881614beb565b811461513357600080fd5b50565b61513f81614bf7565b811461514a57600080fd5b50565b61515681614c09565b811461516157600080fd5b50565b61516d81614c3b565b811461517857600080fd5b5056fea26469706673582212201f7dbf52bcf8f8df40812ded2bd2324a227968b14718ea0be2f9ea15582850a264736f6c63430008040033

Deployed ByteCode Sourcemap

8964:17645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10107:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11459:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11581:3204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14793:1141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19794:1930;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11244:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11046:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8000:94;;;;;;;;;;;;;:::i;:::-;;11130:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9982:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;7349:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9945:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10045:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9892:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;9860:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15942:3844;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10159:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8249:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10107:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11459:114::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11557:8:::1;11540:14;;:25;;;;;;;;;;;;;;;;;;11459:114:::0;:::o;11581:3204::-;4576:1;5172:7;;:19;;5164:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4576:1;5305:7;:18;;;;11843:1:::1;11832:8;:12;:28;;;;;11859:1;11848:8;:12;11832:28;11824:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11949:1;11923:6;11930;11923:14;;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;:27;;:58;;;;;11980:1;11954:6;11961;11954:14;;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;:27;;11923:58;11901:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12055:27;12067:6;12075;12055:11;:27::i;:::-;12054:28;12046:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12125:14;12171:8;9206:9;12143:8;:24;;;;:::i;:::-;12142:37;;;;:::i;:::-;12125:54;;12197:9;12192:960;12216:9;:16;12212:1;:20;12192:960;;;12254:19;12276:9;12286:1;12276:12;;;;;;;;;;;;;;;;;;;;;;12254:34;;12361:1;12329:6;:19;12336:11;12329:19;;;;;;;;;;;:28;;;:33;;:174;;;;;9050:1;12388:44;;:6;:19;12395:11;12388:19;;;;;;;;;;;:26;;;;;;;;;;;;:44;;;:114;;;;9126:1;12461:41;;:6;:19;12468:11;12461:19;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;12388:114;12329:174;:237;;;;;12559:7;12528:38;;:6;:19;12535:11;12528:19;;;;;;;;;;;:27;;;;;;;;;;;;:38;;;;12329:237;:308;;;;;12591:46;12603:6;12611;:19;12618:11;12611:19;;;;;;;;;;;:25;;12591:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:46::i;:::-;12329:308;:379;;;;;12662:46;12674:6;12682;:19;12689:11;12682:19;;;;;;;;;;;:25;;12662:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:46::i;:::-;12329:379;12303:466;;;;;;;;;;;;:::i;:::-;;;;;;;;;12788:7;12784:357;;;12875:6;12846;:19;12853:11;12846:19;;;;;;;;;;;:25;;;:35;;12816:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12784:357;;;13050:6;13021;:19;13028:11;13021:19;;;;;;;;;;;:25;;;:35;;12991:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12784:357;12192:960;12234:3;;;;;:::i;:::-;;;;12192:960;;;;13164:23;13190:7;:25;;13209:6;13190:25;;;13200:6;13190:25;13164:51;;13226:18;13247:7;:29;;13268:8;13247:29;;;13257:8;13247:29;13226:50;;13293:17;13300:9;13293:6;:17::i;:::-;13289:286;;;13349:9;13335:10;:23;13327:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;13289:286;;;13421:6;13428:9;13421:17;;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;;;;;;;;;:35;;;13475:12;:10;:12::i;:::-;13514:4;13538:10;13421:142;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13289:286;13587:10;;:12;;;;;;;;;:::i;:::-;;;;;;13610:24;13637:288;;;;;;;;13662:10;;13637:288;;;;13695:12;:10;:12::i;:::-;13637:288;;;;;;13723:6;13637:288;;;;13744:6;13637:288;;;;13765:8;13637:288;;;;13788:8;13637:288;;;;13811:8;13637:288;;;;13834:8;13637:288;;;;13857:7;13637:288;;;;;;13879:6;13637:288;;;;9050:1;13637:288;;;;::::0;13610:315:::1;;13957:6;13936;:18;13943:10;;13936:18;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13981:345;14011:6;:15;;;14041:6;:12;;;14068:6;:12;;;14095:6;:12;;;14122:6;:14;;;14151:6;:14;;;14180:6;:18;;;14213:6;:18;;;14246:6;:14;;;14275:6;:12;;;14302:6;:13;;;13981:345;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;14344:9;14339:439;14363:9;:16;14359:1;:20;14339:439;;;14401:19;14423:9;14433:1;14423:12;;;;;;;;;;;;;;;;;;;;;;14401:34;;14450:16;14493:6;:14;;;14489:196;;;14542:36;14549:6;:15;;;14566:11;14542:6;:36::i;:::-;14528:50;;14489:196;;;14633:36;14640:11;14653:6;:15;;;14633:6;:36::i;:::-;14619:50;;14489:196;14720:5;14705:20;;:11;:20;;;14701:66;;;14746:5;;;;14701:66;14339:439;;14381:3;;;;;:::i;:::-;;;;14339:439;;;;5336:1;;;;4532::::0;5484:7;:22;;;;11581:3204;;;;;;:::o;10186:33::-;;;;;;;;;;;;;:::o;14793:1141::-;4576:1;5172:7;;:19;;5164:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4576:1;5305:7;:18;;;;14863:24:::1;14890:6;:16;14897:8;14890:16;;;;;;;;;;;14863:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;14944:1;14925:6;:15;;;:20;;14917:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15012:12;:10;:12::i;:::-;14996:28;;:6;:12;;;:28;;;14988:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9050:1;15085:31;;:6;:13;;;:31;;;:63;;;;9126:1;15120:28;;:6;:13;;;:28;;;15085:63;15063:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;15225:23;15251:6;:14;;;:44;;15283:6;:12;;;15251:44;;;15268:6;:12;;;15251:44;15225:70;;15306:18;15327:6;:14;;;:82;;15391:6;:18;;;15327:82;;;15357:6;:18;;;15327:82;15306:103;;9089:1;15422:6;:16;15429:8;15422:16;;;;;;;;;;;:23;;;:39;;;;;;;;;;;;;;;;;;15491:1;15478:10;:14;15474:235;;;15513:17;15520:9;15513:6;:17::i;:::-;15509:189;;;15551:6;:12;;;:21;;:33;15573:10;15551:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15509:189;;;15625:6;15632:9;15625:17;;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;;;;;;;;;:31;;;15657:6;:12;;;15671:10;15625:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15509:189;15474:235;15726:200;15755:6;:15;;;15785:6;:23;15792:6;:15;;;15785:23;;;;;;;;;;;:35;;;15835:6;:23;15842:6;:15;;;15835:23;;;;;;;;;;;:35;;;15885:6;:23;15892:6;:15;;;15885:23;;;;;;;;;;;:30;;;;;;;;;;;;15726:200;;;;;;;;;:::i;:::-;;;;;;;;5336:1;;;4532::::0;5484:7;:22;;;;14793:1141;:::o;19794:1930::-;4576:1;5172:7;;:19;;5164:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4576:1;5305:7;:18;;;;19941:1:::1;19922:9;:16;:20;19914:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:24;20010:6;:16;20017:8;20010:16;;;;;;;;;;;19983:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;20064:1;20045:6;:15;;;:20;;20037:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9050:1;20130:31;;:6;:13;;;:31;;;:63;;;;9126:1;20165:28;;:6;:13;;;:28;;;20130:63;20108:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;20271:9;20266:998;20290:9;:16;20286:1;:20;20266:998;;;20328:19;20350:9;20360:1;20350:12;;;;;;;;;;;;;;;;;;;;;;20328:34;;20435:1;20403:6;:19;20410:11;20403:19;;;;;;;;;;;:28;;;:33;;:174;;;;;9050:1;20462:44;;:6;:19;20469:11;20462:19;;;;;;;;;;;:26;;;;;;;;;;;;:44;;;:114;;;;9126:1;20535:41;;:6;:19;20542:11;20535:19;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;20462:114;20403:174;:244;;;;;20633:6;:14;;;20602:45;;:6;:19;20609:11;20602:19;;;;;;;;;;;:27;;;;;;;;;;;;:45;;;;20403:244;:321;;;;;20672:52;20684:6;:19;20691:11;20684:19;;;;;;;;;;;:25;;20672:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20711:6;:12;;;20672:11;:52::i;:::-;20403:321;:398;;;;;20749:52;20761:6;:19;20768:11;20761:19;;;;;;;;;;;:25;;20749:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20788:6;:12;;;20749:11;:52::i;:::-;20403:398;20377:485;;;;;;;;;;;;:::i;:::-;;;;;;;;;20881:6;:14;;;20877:376;;;20975:6;:12;;;20946:6;:19;20953:11;20946:19;;;;;;;;;;;:25;;;:41;;20916:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20877:376;;;21156:6;:12;;;21127:6;:19;21134:11;21127:19;;;;;;;;;;;:25;;;:41;;21097:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20877:376;20266:998;20308:3;;;;;:::i;:::-;;;;20266:998;;;;21281:9;21276:441;21300:9;:16;21296:1;:20;21276:441;;;21338:19;21360:9;21370:1;21360:12;;;;;;;;;;;;;;;;;;;;;;21338:34;;21387:16;21432:6;:14;;;21428:196;;;21481:36;21488:6;:15;;;21505:11;21481:6;:36::i;:::-;21467:50;;21428:196;;;21572:36;21579:11;21592:6;:15;;;21572:6;:36::i;:::-;21558:50;;21428:196;21659:5;21644:20;;:11;:20;;;21640:66;;;21685:5;;;;21640:66;21276:441;;21318:3;;;;;:::i;:::-;;;;21276:441;;;;5336:1;4532::::0;5484:7;:22;;;;19794:1930;;:::o;11244:207::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11401:42:::1;;;;;;;;11412:5;11401:42;;;;11419:8;11401:42;;;;11429:13;11401:42;;;;::::0;11385:6:::1;11392:5;11385:13;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:207:::0;;;:::o;11046:76::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11110:4:::1;11104:3;:10;;;;11046:76:::0;:::o;8000:94::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8065:21:::1;8083:1;8065:9;:21::i;:::-;8000:94::o:0;11130:106::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11220:8:::1;11207:10;;:21;;;;;;;;;;;;;;;;;;11130:106:::0;:::o;9982:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7349:87::-;7395:7;7422:6;;;;;;;;;;;7415:13;;7349:87;:::o;9945:30::-;;;;:::o;10045:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9892:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9860:25::-;;;;:::o;15942:3844::-;4576:1;5172:7;;:19;;5164:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4576:1;5305:7;:18;;;;16067:24:::1;16094:6;:16;16101:8;16094:16;;;;;;;;;;;16067:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;16148:1;16129:6;:15;;;:20;;16121:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9050:1;16214:31;;:6;:13;;;:31;;;:63;;;;9126:1;16249:28;;:6;:13;;;:28;;;16214:63;16192:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;16354:24;16381:6;:14;;;:44;;16413:6;:12;;;16381:44;;;16398:6;:12;;;16381:44;16354:71;;16436:19;16458:6;:14;;;:82;;16522:6;:18;;;16458:82;;;16488:6;:18;;;16458:82;16436:104;;16572:11;16561:7;:22;;16553:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16626:29;16666:12;:10;:12::i;:::-;16626:53;;16696:18;16703:10;16696:6;:18::i;:::-;16692:283;;;16750:9;16739:7;:20;16731:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16692:283;;;16822:6;16829:10;16822:18;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:36;;;16877:13;16917:4;16941:7;16822:141;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16692:283;16987:34;;:::i;:::-;17038:6;:14;;;17034:600;;;17083:246;;;;;;;;17117:15;;17083:246;;;;17151:6;:15;;;17083:246;;;;17185:1;17083:246;;;;17238:6;:18;;;17216:6;:18;;;17206:7;:28;;;;:::i;:::-;17205:51;;;;:::i;:::-;17083:246;;;;17275:7;17083:246;;;;17301:13;17083:246;;;;::::0;17069:260:::1;;17034:600;;;17376:246;;;;;;;;17410:15;;17376:246;;;;17444:1;17376:246;;;;17464:6;:15;;;17376:246;;;;17498:7;17376:246;;;;17557:6;:18;;;17535:6;:18;;;17525:7;:28;;;;:::i;:::-;17524:51;;;;:::i;:::-;17376:246;;;;17594:13;17376:246;;;;::::0;17362:260:::1;;17034:600;17676:11;17646;:27;17658:11;:14;;;17646:27;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17698:15;;:17;;;;;;;;;:::i;:::-;;;;;;17728:16;:26;17745:8;17728:26;;;;;;;;;;;17760:11;:14;;;17728:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17827:11;:19;;;17788:6;:23;17795:6;:15;;;17788:23;;;;;;;;;;;:35;;;:58;;;;;;;:::i;:::-;;;;;;;;17896:11;:19;;;17857:6;:23;17864:6;:15;;;17857:23;;;;;;;;;;;:35;;;:58;;;;;;;:::i;:::-;;;;;;;;18011:1;17959:6;:23;17966:6;:15;;;17959:23;;;;;;;;;;;:35;;;:53;:110;;;;18068:1;18029:6;:23;18036:6;:15;;;18029:23;;;;;;;;;;;:35;;;:40;17959:110;:164;;9126:1;17959:164;;;9163:1;17959:164;17926:6;:23;17933:6;:15;;;17926:23;;;;;;;;;;;:30;;;:197;;;;;;;;;;;;;;;;;;18136:37;18184:32;18229;18272:27;18316:6;:14;;;18312:490;;;18373:6;:12;;;18347:38;;18427:11;:19;;;18400:46;;18484:6;:12;;;18463:33;;18533:11;:19;;;18511:41;;18312:490;;;18611:6;:12;;;18585:38;;18665:11;:19;;;18638:46;;18722:6;:12;;;18701:33;;18771:11;:19;;;18749:41;;18312:490;18814:184;18849:23;18887:6;:12;;;18914:24;18953:34;18962:24;18953:8;:34::i;:::-;18814:20;:184::i;:::-;19011:170;19046:18;19079:13;19107:19;19141:29;19150:19;19141:8;:29::i;:::-;19011:20;:170::i;:::-;19194:14;;;;;;;;;;;:21;;;19216:6;:12;;;19230:11;:19;;;19251:6;:12;;;19194:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19275:14;;;;;;;;;;;:21;;;19297:6;:12;;;19311:11;:19;;;19332:13;19275:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19364:201;19394:6;:15;;;19424:6;:23;19431:6;:15;;;19424:23;;;;;;;;;;;:35;;;19474:6;:23;19481:6;:15;;;19474:23;;;;;;;;;;;:35;;;19524:6;:23;19531:6;:15;;;19524:23;;;;;;;;;;;:30;;;;;;;;;;;;19364:201;;;;;;;;;:::i;:::-;;;;;;;;19583:195;19605:6;:12;;;19632:6;:12;;;19659:11;:19;;;19693:11;:19;;;19727:6;:12;;;19754:13;19583:195;;;;;;;;;;;:::i;:::-;;;;;;;;5336:1;;;;;;;;;4532::::0;5484:7;:22;;;;15942:3844;;:::o;10159:18::-;;;;:::o;8249:192::-;7580:12;:10;:12::i;:::-;7569:23;;:7;:5;:7::i;:::-;:23;;;7561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8358:1:::1;8338:22;;:8;:22;;;;8330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8414:19;8424:8;8414:9;:19::i;:::-;8249:192:::0;:::o;6141:98::-;6194:7;6221:10;6214:17;;6141:98;:::o;25880:200::-;25989:4;26055:6;26062:3;26055:11;;;;;;:::i;:::-;;;;;;;;;;;;;:16;;;;;;;;;;;;26018:54;;26026:6;26033:3;26026:11;;;;;;:::i;:::-;;;;;;;;;;;;;:16;;;;;;;;;;;;26018:54;;;26011:61;;25880:200;;;;:::o;26471:135::-;26532:4;26596:1;26556:42;;26564:6;26571;26564:14;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;;;;;;;;;;26556:42;;;26549:49;;26471:135;;;:::o;21732:3564::-;21827:4;21849:28;21880:6;:20;21887:12;21880:20;;;;;;;;;;;21849:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21911:27;21941:6;:19;21948:11;21941:19;;;;;;;;;;;21911:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22017:1;21991:10;:22;;;:27;:71;;;;22061:1;22035:10;:22;;;:27;21991:71;:114;;;;22104:1;22079:9;:21;;;:26;21991:114;:157;;;;22147:1;22122:9;:21;;;:26;21991:157;21973:226;;;22182:5;22175:12;;;;;;21973:226;22211:16;22255:9;:21;;;22230:10;:22;;;:46;:121;;22329:10;:22;;;22230:121;;;22292:9;:21;;;22230:121;22211:140;;22364:20;22438:10;:22;;;22399:10;:22;;;22388:8;:33;;;;:::i;:::-;22387:73;;;;:::i;:::-;22364:96;;22471:19;22543:9;:21;;;22505:9;:21;;;22494:8;:32;;;;:::i;:::-;22493:71;;;;:::i;:::-;22471:93;;22577:16;22596:12;22577:31;;22619:22;22658:8;22644:11;:22;:77;;22720:1;22644:77;;;22696:8;22682:11;:22;;;;:::i;:::-;22644:77;22619:102;;22734:34;22771:203;;;;;;;;22801:15;;22771:203;;;;22831:10;:19;;;22771:203;;;;22865:9;:18;;;22771:203;;;;22898:8;22771:203;;;;22921:8;22771:203;;;;22960:1;22771:203;;;;;22734:240;;22987:16;:37;23004:10;:19;;;22987:37;;;;;;;;;;;23030:11;:14;;;22987:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23056:16;:36;23073:9;:18;;;23056:36;;;;;;;;;;;23098:11;:14;;;23056:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23169:11;:19;;;23126:6;:27;23133:10;:19;;;23126:27;;;;;;;;;;;:39;;;:62;;;;;;;:::i;:::-;;;;;;;;23242:12;23199:6;:27;23206:10;:19;;;23199:27;;;;;;;;;;;:39;;;:55;;;;;;;:::i;:::-;;;;;;;;23359:1;23302:6;:27;23309:10;:19;;;23302:27;;;;;;;;;;;:53;;;:58;:112;;9126:1;23302:112;;;9163:1;23302:112;23265:6;:27;23272:10;:19;;;23265:27;;;;;;;;;;;:34;;;:149;;;;;;;;;;;;;;;;;;23469:11;:19;;;23427:6;:26;23434:9;:18;;;23427:26;;;;;;;;;;;:38;;;:61;;;;;;;:::i;:::-;;;;;;;;23541:11;23499:6;:26;23506:9;:18;;;23499:26;;;;;;;;;;;:38;;;:53;;;;;;;:::i;:::-;;;;;;;;23655:1;23599:6;:26;23606:9;:18;;;23599:26;;;;;;;;;;;:52;;;:57;:111;;9126:1;23599:111;;;9163:1;23599:111;23563:6;:26;23570:9;:18;;;23563:26;;;;;;;;;;;:33;;;:147;;;;;;;;;;;;;;;;;;23723:171;23758:10;:16;;;23789:10;:16;;;23820:11;:19;;;23854:29;23863:11;:19;;;23854:8;:29::i;:::-;23723:20;:171::i;:::-;23907:169;23942:9;:15;;;23972:9;:15;;;24002:11;:19;;;24036:29;24045:11;:19;;;24036:8;:29::i;:::-;23907:20;:169::i;:::-;24110:1;24093:14;:18;24089:207;;;24128:156;24167:9;:15;;;24201:9;:15;;;24235:14;24268:1;24128:20;:156::i;:::-;24089:207;24313:217;24343:10;:19;;;24377:6;:27;24384:10;:19;;;24377:27;;;;;;;;;;;:39;;;24431:6;:27;24438:10;:19;;;24431:27;;;;;;;;;;;:39;;;24485:6;:27;24492:10;:19;;;24485:27;;;;;;;;;;;:34;;;;;;;;;;;;24313:217;;;;;;;;;:::i;:::-;;;;;;;;24546:213;24576:9;:18;;;24609:6;:26;24616:9;:18;;;24609:26;;;;;;;;;;;:38;;;24662:6;:26;24669:9;:18;;;24662:26;;;;;;;;;;;:38;;;24715:6;:26;24722:9;:18;;;24715:26;;;;;;;;;;;:33;;;;;;;;;;;;24546:213;;;;;;;;;:::i;:::-;;;;;;;;24777:209;24799:10;:16;;;24830:10;:16;;;24861:11;:19;;;24895:11;:19;;;24929:10;:16;;;24960:9;:15;;;24777:209;;;;;;;;;;;:::i;:::-;;;;;;;;24999:14;;;;;;;;;;;:21;;;25035:10;:16;;;25066:11;:19;;;25100:10;:16;;;24999:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25138:14;;;;;;;;;;;:21;;;25174:9;:15;;;25204:11;:19;;;25238:9;:15;;;25138:126;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25284:4;25277:11;;;;;;;;;;21732:3564;;;;;:::o;8449:173::-;8505:16;8524:6;;;;;;;;;;;8505:25;;8550:8;8541:6;;:17;;;;;;;;;;;;;;;;;;8605:8;8574:40;;8595:8;8574:40;;;;;;;;;;;;8449:173;;:::o;26286:177::-;26344:7;26375:1;26368:3;;:8;26364:49;;;26400:1;26393:8;;;;26364:49;26450:5;26443:3;;26433:7;:13;;;;:::i;:::-;26432:23;;;;:::i;:::-;26425:30;;26286:177;;;;:::o;25304:568::-;25474:19;25506:4;25496:7;:14;;;;:::i;:::-;25474:36;;25527:14;25534:6;25527;:14::i;:::-;25523:342;;;25558:6;:15;;:28;25574:11;25558:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25612:1;25605:4;:8;25601:74;;;25634:10;;;;;;;;;;;:19;;:25;25654:4;25634:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25601:74;25523:342;;;25707:43;25722:6;25730;25738:11;25707:14;:43::i;:::-;25776:1;25769:4;:8;25765:89;;;25798:40;25813:6;25821:10;;;;;;;;;;;25833:4;25798:14;:40::i;:::-;25765:89;25523:342;25304:568;;;;;:::o;26088:190::-;26223:6;26230;26223:14;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;;;;;;;;;;:28;;;26252:8;26262:7;26223:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26088:190;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:345::-;763:5;788:66;804:49;846:6;804:49;:::i;:::-;788:66;:::i;:::-;779:75;;877:6;870:5;863:21;915:4;908:5;904:16;953:3;944:6;939:3;935:16;932:25;929:2;;;970:1;967;960:12;929:2;983:41;1017:6;1012:3;1007;983:41;:::i;:::-;769:261;;;;;;:::o;1036:139::-;1082:5;1120:6;1107:20;1098:29;;1136:33;1163:5;1136:33;:::i;:::-;1088:87;;;;:::o;1181:155::-;1235:5;1273:6;1260:20;1251:29;;1289:41;1324:5;1289:41;:::i;:::-;1241:95;;;;:::o;1359:303::-;1430:5;1479:3;1472:4;1464:6;1460:17;1456:27;1446:2;;1497:1;1494;1487:12;1446:2;1537:6;1524:20;1562:94;1652:3;1644:6;1637:4;1629:6;1625:17;1562:94;:::i;:::-;1553:103;;1436:226;;;;;:::o;1668:133::-;1711:5;1749:6;1736:20;1727:29;;1765:30;1789:5;1765:30;:::i;:::-;1717:84;;;;:::o;1807:137::-;1861:5;1892:6;1886:13;1877:22;;1908:30;1932:5;1908:30;:::i;:::-;1867:77;;;;:::o;1950:165::-;2009:5;2047:6;2034:20;2025:29;;2063:46;2103:5;2063:46;:::i;:::-;2015:100;;;;:::o;2121:185::-;2190:5;2228:6;2215:20;2206:29;;2244:56;2294:5;2244:56;:::i;:::-;2196:110;;;;:::o;2326:273::-;2382:5;2431:3;2424:4;2416:6;2412:17;2408:27;2398:2;;2449:1;2446;2439:12;2398:2;2489:6;2476:20;2514:79;2589:3;2581:6;2574:4;2566:6;2562:17;2514:79;:::i;:::-;2505:88;;2388:211;;;;;:::o;2605:139::-;2651:5;2689:6;2676:20;2667:29;;2705:33;2732:5;2705:33;:::i;:::-;2657:87;;;;:::o;2750:262::-;2809:6;2858:2;2846:9;2837:7;2833:23;2829:32;2826:2;;;2874:1;2871;2864:12;2826:2;2917:1;2942:53;2987:7;2978:6;2967:9;2963:22;2942:53;:::i;:::-;2932:63;;2888:117;2816:196;;;;:::o;3018:278::-;3085:6;3134:2;3122:9;3113:7;3109:23;3105:32;3102:2;;;3150:1;3147;3140:12;3102:2;3193:1;3218:61;3271:7;3262:6;3251:9;3247:22;3218:61;:::i;:::-;3208:71;;3164:125;3092:204;;;;:::o;3302:278::-;3369:6;3418:2;3406:9;3397:7;3393:23;3389:32;3386:2;;;3434:1;3431;3424:12;3386:2;3477:1;3502:61;3555:7;3546:6;3535:9;3531:22;3502:61;:::i;:::-;3492:71;;3448:125;3376:204;;;;:::o;3586:308::-;3668:6;3717:2;3705:9;3696:7;3692:23;3688:32;3685:2;;;3733:1;3730;3723:12;3685:2;3776:1;3801:76;3869:7;3860:6;3849:9;3845:22;3801:76;:::i;:::-;3791:86;;3747:140;3675:219;;;;:::o;3900:375::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:2;;;4034:1;4031;4024:12;3986:2;4105:1;4094:9;4090:17;4077:31;4135:18;4127:6;4124:30;4121:2;;;4167:1;4164;4157:12;4121:2;4195:63;4250:7;4241:6;4230:9;4226:22;4195:63;:::i;:::-;4185:73;;4048:220;3976:299;;;;:::o;4281:1353::-;4427:6;4435;4443;4451;4459;4467;4516:3;4504:9;4495:7;4491:23;4487:33;4484:2;;;4533:1;4530;4523:12;4484:2;4604:1;4593:9;4589:17;4576:31;4634:18;4626:6;4623:30;4620:2;;;4666:1;4663;4656:12;4620:2;4694:63;4749:7;4740:6;4729:9;4725:22;4694:63;:::i;:::-;4684:73;;4547:220;4834:2;4823:9;4819:18;4806:32;4865:18;4857:6;4854:30;4851:2;;;4897:1;4894;4887:12;4851:2;4925:63;4980:7;4971:6;4960:9;4956:22;4925:63;:::i;:::-;4915:73;;4777:221;5037:2;5063:53;5108:7;5099:6;5088:9;5084:22;5063:53;:::i;:::-;5053:63;;5008:118;5165:2;5191:53;5236:7;5227:6;5216:9;5212:22;5191:53;:::i;:::-;5181:63;;5136:118;5293:3;5320:50;5362:7;5353:6;5342:9;5338:22;5320:50;:::i;:::-;5310:60;;5264:116;5447:3;5436:9;5432:19;5419:33;5479:18;5471:6;5468:30;5465:2;;;5511:1;5508;5501:12;5465:2;5539:78;5609:7;5600:6;5589:9;5585:22;5539:78;:::i;:::-;5529:88;;5390:237;4474:1160;;;;;;;;:::o;5640:691::-;5740:6;5748;5756;5805:2;5793:9;5784:7;5780:23;5776:32;5773:2;;;5821:1;5818;5811:12;5773:2;5892:1;5881:9;5877:17;5864:31;5922:18;5914:6;5911:30;5908:2;;;5954:1;5951;5944:12;5908:2;5982:63;6037:7;6028:6;6017:9;6013:22;5982:63;:::i;:::-;5972:73;;5835:220;6094:2;6120:53;6165:7;6156:6;6145:9;6141:22;6120:53;:::i;:::-;6110:63;;6065:118;6222:2;6248:66;6306:7;6297:6;6286:9;6282:22;6248:66;:::i;:::-;6238:76;;6193:131;5763:568;;;;;:::o;6337:262::-;6396:6;6445:2;6433:9;6424:7;6420:23;6416:32;6413:2;;;6461:1;6458;6451:12;6413:2;6504:1;6529:53;6574:7;6565:6;6554:9;6550:22;6529:53;:::i;:::-;6519:63;;6475:117;6403:196;;;;:::o;6605:550::-;6698:6;6706;6755:2;6743:9;6734:7;6730:23;6726:32;6723:2;;;6771:1;6768;6761:12;6723:2;6814:1;6839:53;6884:7;6875:6;6864:9;6860:22;6839:53;:::i;:::-;6829:63;;6785:117;6969:2;6958:9;6954:18;6941:32;7000:18;6992:6;6989:30;6986:2;;;7032:1;7029;7022:12;6986:2;7060:78;7130:7;7121:6;7110:9;7106:22;7060:78;:::i;:::-;7050:88;;6912:236;6713:442;;;;;:::o;7161:407::-;7229:6;7237;7286:2;7274:9;7265:7;7261:23;7257:32;7254:2;;;7302:1;7299;7292:12;7254:2;7345:1;7370:53;7415:7;7406:6;7395:9;7391:22;7370:53;:::i;:::-;7360:63;;7316:117;7472:2;7498:53;7543:7;7534:6;7523:9;7519:22;7498:53;:::i;:::-;7488:63;;7443:118;7244:324;;;;;:::o;7574:147::-;7669:45;7708:5;7669:45;:::i;:::-;7664:3;7657:58;7647:74;;:::o;7727:142::-;7830:32;7856:5;7830:32;:::i;:::-;7825:3;7818:45;7808:61;;:::o;7875:118::-;7962:24;7980:5;7962:24;:::i;:::-;7957:3;7950:37;7940:53;;:::o;7999:109::-;8080:21;8095:5;8080:21;:::i;:::-;8075:3;8068:34;8058:50;;:::o;8114:157::-;8214:50;8258:5;8214:50;:::i;:::-;8209:3;8202:63;8192:79;;:::o;8277:364::-;8365:3;8393:39;8426:5;8393:39;:::i;:::-;8448:71;8512:6;8507:3;8448:71;:::i;:::-;8441:78;;8528:52;8573:6;8568:3;8561:4;8554:5;8550:16;8528:52;:::i;:::-;8605:29;8627:6;8605:29;:::i;:::-;8600:3;8596:39;8589:46;;8369:272;;;;;:::o;8647:377::-;8753:3;8781:39;8814:5;8781:39;:::i;:::-;8836:89;8918:6;8913:3;8836:89;:::i;:::-;8829:96;;8934:52;8979:6;8974:3;8967:4;8960:5;8956:16;8934:52;:::i;:::-;9011:6;9006:3;9002:16;8995:23;;8757:267;;;;;:::o;9030:366::-;9172:3;9193:67;9257:2;9252:3;9193:67;:::i;:::-;9186:74;;9269:93;9358:3;9269:93;:::i;:::-;9387:2;9382:3;9378:12;9371:19;;9176:220;;;:::o;9402:366::-;9544:3;9565:67;9629:2;9624:3;9565:67;:::i;:::-;9558:74;;9641:93;9730:3;9641:93;:::i;:::-;9759:2;9754:3;9750:12;9743:19;;9548:220;;;:::o;9774:366::-;9916:3;9937:67;10001:2;9996:3;9937:67;:::i;:::-;9930:74;;10013:93;10102:3;10013:93;:::i;:::-;10131:2;10126:3;10122:12;10115:19;;9920:220;;;:::o;10146:366::-;10288:3;10309:67;10373:2;10368:3;10309:67;:::i;:::-;10302:74;;10385:93;10474:3;10385:93;:::i;:::-;10503:2;10498:3;10494:12;10487:19;;10292:220;;;:::o;10518:366::-;10660:3;10681:67;10745:2;10740:3;10681:67;:::i;:::-;10674:74;;10757:93;10846:3;10757:93;:::i;:::-;10875:2;10870:3;10866:12;10859:19;;10664:220;;;:::o;10890:366::-;11032:3;11053:67;11117:2;11112:3;11053:67;:::i;:::-;11046:74;;11129:93;11218:3;11129:93;:::i;:::-;11247:2;11242:3;11238:12;11231:19;;11036:220;;;:::o;11262:366::-;11404:3;11425:67;11489:2;11484:3;11425:67;:::i;:::-;11418:74;;11501:93;11590:3;11501:93;:::i;:::-;11619:2;11614:3;11610:12;11603:19;;11408:220;;;:::o;11634:366::-;11776:3;11797:67;11861:2;11856:3;11797:67;:::i;:::-;11790:74;;11873:93;11962:3;11873:93;:::i;:::-;11991:2;11986:3;11982:12;11975:19;;11780:220;;;:::o;12006:366::-;12148:3;12169:67;12233:2;12228:3;12169:67;:::i;:::-;12162:74;;12245:93;12334:3;12245:93;:::i;:::-;12363:2;12358:3;12354:12;12347:19;;12152:220;;;:::o;12378:366::-;12520:3;12541:67;12605:2;12600:3;12541:67;:::i;:::-;12534:74;;12617:93;12706:3;12617:93;:::i;:::-;12735:2;12730:3;12726:12;12719:19;;12524:220;;;:::o;12750:366::-;12892:3;12913:67;12977:2;12972:3;12913:67;:::i;:::-;12906:74;;12989:93;13078:3;12989:93;:::i;:::-;13107:2;13102:3;13098:12;13091:19;;12896:220;;;:::o;13122:366::-;13264:3;13285:67;13349:2;13344:3;13285:67;:::i;:::-;13278:74;;13361:93;13450:3;13361:93;:::i;:::-;13479:2;13474:3;13470:12;13463:19;;13268:220;;;:::o;13494:366::-;13636:3;13657:67;13721:2;13716:3;13657:67;:::i;:::-;13650:74;;13733:93;13822:3;13733:93;:::i;:::-;13851:2;13846:3;13842:12;13835:19;;13640:220;;;:::o;13866:366::-;14008:3;14029:67;14093:2;14088:3;14029:67;:::i;:::-;14022:74;;14105:93;14194:3;14105:93;:::i;:::-;14223:2;14218:3;14214:12;14207:19;;14012:220;;;:::o;14238:118::-;14325:24;14343:5;14325:24;:::i;:::-;14320:3;14313:37;14303:53;;:::o;14362:112::-;14445:22;14461:5;14445:22;:::i;:::-;14440:3;14433:35;14423:51;;:::o;14480:275::-;14612:3;14634:95;14725:3;14716:6;14634:95;:::i;:::-;14627:102;;14746:3;14739:10;;14616:139;;;;:::o;14761:222::-;14854:4;14892:2;14881:9;14877:18;14869:26;;14905:71;14973:1;14962:9;14958:17;14949:6;14905:71;:::i;:::-;14859:124;;;;:::o;14989:254::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15149:87;15233:1;15222:9;15218:17;15209:6;15149:87;:::i;:::-;15103:140;;;;:::o;15249:458::-;15406:4;15444:2;15433:9;15429:18;15421:26;;15457:79;15533:1;15522:9;15518:17;15509:6;15457:79;:::i;:::-;15546:72;15614:2;15603:9;15599:18;15590:6;15546:72;:::i;:::-;15628;15696:2;15685:9;15681:18;15672:6;15628:72;:::i;:::-;15411:296;;;;;;:::o;15713:348::-;15842:4;15880:2;15869:9;15865:18;15857:26;;15893:79;15969:1;15958:9;15954:17;15945:6;15893:79;:::i;:::-;15982:72;16050:2;16039:9;16035:18;16026:6;15982:72;:::i;:::-;15847:214;;;;;:::o;16067:442::-;16216:4;16254:2;16243:9;16239:18;16231:26;;16267:71;16335:1;16324:9;16320:17;16311:6;16267:71;:::i;:::-;16348:72;16416:2;16405:9;16401:18;16392:6;16348:72;:::i;:::-;16430;16498:2;16487:9;16483:18;16474:6;16430:72;:::i;:::-;16221:288;;;;;;:::o;16515:332::-;16636:4;16674:2;16663:9;16659:18;16651:26;;16687:71;16755:1;16744:9;16740:17;16731:6;16687:71;:::i;:::-;16768:72;16836:2;16825:9;16821:18;16812:6;16768:72;:::i;:::-;16641:206;;;;;:::o;16853:989::-;17142:4;17180:3;17169:9;17165:19;17157:27;;17230:9;17224:4;17220:20;17216:1;17205:9;17201:17;17194:47;17258:78;17331:4;17322:6;17258:78;:::i;:::-;17250:86;;17383:9;17377:4;17373:20;17368:2;17357:9;17353:18;17346:48;17411:78;17484:4;17475:6;17411:78;:::i;:::-;17403:86;;17499:72;17567:2;17556:9;17552:18;17543:6;17499:72;:::i;:::-;17581;17649:2;17638:9;17634:18;17625:6;17581:72;:::i;:::-;17663:81;17739:3;17728:9;17724:19;17715:6;17663:81;:::i;:::-;17754;17830:3;17819:9;17815:19;17806:6;17754:81;:::i;:::-;17147:695;;;;;;;;;:::o;17848:549::-;18025:4;18063:2;18052:9;18048:18;18040:26;;18112:9;18106:4;18102:20;18098:1;18087:9;18083:17;18076:47;18140:78;18213:4;18204:6;18140:78;:::i;:::-;18132:86;;18228:72;18296:2;18285:9;18281:18;18272:6;18228:72;:::i;:::-;18310:80;18386:2;18375:9;18371:18;18362:6;18310:80;:::i;:::-;18030:367;;;;;;:::o;18403:559::-;18585:4;18623:2;18612:9;18608:18;18600:26;;18672:9;18666:4;18662:20;18658:1;18647:9;18643:17;18636:47;18700:78;18773:4;18764:6;18700:78;:::i;:::-;18692:86;;18788:72;18856:2;18845:9;18841:18;18832:6;18788:72;:::i;:::-;18870:85;18951:2;18940:9;18936:18;18927:6;18870:85;:::i;:::-;18590:372;;;;;;:::o;18968:419::-;19134:4;19172:2;19161:9;19157:18;19149:26;;19221:9;19215:4;19211:20;19207:1;19196:9;19192:17;19185:47;19249:131;19375:4;19249:131;:::i;:::-;19241:139;;19139:248;;;:::o;19393:419::-;19559:4;19597:2;19586:9;19582:18;19574:26;;19646:9;19640:4;19636:20;19632:1;19621:9;19617:17;19610:47;19674:131;19800:4;19674:131;:::i;:::-;19666:139;;19564:248;;;:::o;19818:419::-;19984:4;20022:2;20011:9;20007:18;19999:26;;20071:9;20065:4;20061:20;20057:1;20046:9;20042:17;20035:47;20099:131;20225:4;20099:131;:::i;:::-;20091:139;;19989:248;;;:::o;20243:419::-;20409:4;20447:2;20436:9;20432:18;20424:26;;20496:9;20490:4;20486:20;20482:1;20471:9;20467:17;20460:47;20524:131;20650:4;20524:131;:::i;:::-;20516:139;;20414:248;;;:::o;20668:419::-;20834:4;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20839:248;;;:::o;21093:419::-;21259:4;21297:2;21286:9;21282:18;21274:26;;21346:9;21340:4;21336:20;21332:1;21321:9;21317:17;21310:47;21374:131;21500:4;21374:131;:::i;:::-;21366:139;;21264:248;;;:::o;21518:419::-;21684:4;21722:2;21711:9;21707:18;21699:26;;21771:9;21765:4;21761:20;21757:1;21746:9;21742:17;21735:47;21799:131;21925:4;21799:131;:::i;:::-;21791:139;;21689:248;;;:::o;21943:419::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;22114:248;;;:::o;22368:419::-;22534:4;22572:2;22561:9;22557:18;22549:26;;22621:9;22615:4;22611:20;22607:1;22596:9;22592:17;22585:47;22649:131;22775:4;22649:131;:::i;:::-;22641:139;;22539:248;;;:::o;22793:419::-;22959:4;22997:2;22986:9;22982:18;22974:26;;23046:9;23040:4;23036:20;23032:1;23021:9;23017:17;23010:47;23074:131;23200:4;23074:131;:::i;:::-;23066:139;;22964:248;;;:::o;23218:419::-;23384:4;23422:2;23411:9;23407:18;23399:26;;23471:9;23465:4;23461:20;23457:1;23446:9;23442:17;23435:47;23499:131;23625:4;23499:131;:::i;:::-;23491:139;;23389:248;;;:::o;23643:419::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23814:248;;;:::o;24068:419::-;24234:4;24272:2;24261:9;24257:18;24249:26;;24321:9;24315:4;24311:20;24307:1;24296:9;24292:17;24285:47;24349:131;24475:4;24349:131;:::i;:::-;24341:139;;24239:248;;;:::o;24493:419::-;24659:4;24697:2;24686:9;24682:18;24674:26;;24746:9;24740:4;24736:20;24732:1;24721:9;24717:17;24710:47;24774:131;24900:4;24774:131;:::i;:::-;24766:139;;24664:248;;;:::o;24918:222::-;25011:4;25049:2;25038:9;25034:18;25026:26;;25062:71;25130:1;25119:9;25115:17;25106:6;25062:71;:::i;:::-;25016:124;;;;:::o;25146:1526::-;25566:4;25604:3;25593:9;25589:19;25581:27;;25618:71;25686:1;25675:9;25671:17;25662:6;25618:71;:::i;:::-;25699:88;25783:2;25772:9;25768:18;25759:6;25699:88;:::i;:::-;25834:9;25828:4;25824:20;25819:2;25808:9;25804:18;25797:48;25862:78;25935:4;25926:6;25862:78;:::i;:::-;25854:86;;25987:9;25981:4;25977:20;25972:2;25961:9;25957:18;25950:48;26015:78;26088:4;26079:6;26015:78;:::i;:::-;26007:86;;26103:73;26171:3;26160:9;26156:19;26147:6;26103:73;:::i;:::-;26186;26254:3;26243:9;26239:19;26230:6;26186:73;:::i;:::-;26269;26337:3;26326:9;26322:19;26313:6;26269:73;:::i;:::-;26352;26420:3;26409:9;26405:19;26396:6;26352:73;:::i;:::-;26435:67;26497:3;26486:9;26482:19;26473:6;26435:67;:::i;:::-;26512:73;26580:3;26569:9;26565:19;26556:6;26512:73;:::i;:::-;26595:70;26660:3;26649:9;26645:19;26635:7;26595:70;:::i;:::-;25571:1101;;;;;;;;;;;;;;:::o;26678:1510::-;27090:4;27128:3;27117:9;27113:19;27105:27;;27142:71;27210:1;27199:9;27195:17;27186:6;27142:71;:::i;:::-;27223:80;27299:2;27288:9;27284:18;27275:6;27223:80;:::i;:::-;27350:9;27344:4;27340:20;27335:2;27324:9;27320:18;27313:48;27378:78;27451:4;27442:6;27378:78;:::i;:::-;27370:86;;27503:9;27497:4;27493:20;27488:2;27477:9;27473:18;27466:48;27531:78;27604:4;27595:6;27531:78;:::i;:::-;27523:86;;27619:73;27687:3;27676:9;27672:19;27663:6;27619:73;:::i;:::-;27702;27770:3;27759:9;27755:19;27746:6;27702:73;:::i;:::-;27785;27853:3;27842:9;27838:19;27829:6;27785:73;:::i;:::-;27868;27936:3;27925:9;27921:19;27912:6;27868:73;:::i;:::-;27951:67;28013:3;28002:9;27998:19;27989:6;27951:67;:::i;:::-;28028:73;28096:3;28085:9;28081:19;28072:6;28028:73;:::i;:::-;28111:70;28176:3;28165:9;28161:19;28151:7;28111:70;:::i;:::-;27095:1093;;;;;;;;;;;;;;:::o;28194:807::-;28443:4;28481:3;28470:9;28466:19;28458:27;;28495:71;28563:1;28552:9;28548:17;28539:6;28495:71;:::i;:::-;28576:72;28644:2;28633:9;28629:18;28620:6;28576:72;:::i;:::-;28658;28726:2;28715:9;28711:18;28702:6;28658:72;:::i;:::-;28740;28808:2;28797:9;28793:18;28784:6;28740:72;:::i;:::-;28822:73;28890:3;28879:9;28875:19;28866:6;28822:73;:::i;:::-;28905:89;28989:3;28978:9;28974:19;28965:6;28905:89;:::i;:::-;28448:553;;;;;;;;;:::o;29007:545::-;29180:4;29218:3;29207:9;29203:19;29195:27;;29232:71;29300:1;29289:9;29285:17;29276:6;29232:71;:::i;:::-;29313:72;29381:2;29370:9;29366:18;29357:6;29313:72;:::i;:::-;29395;29463:2;29452:9;29448:18;29439:6;29395:72;:::i;:::-;29477:68;29541:2;29530:9;29526:18;29517:6;29477:68;:::i;:::-;29185:367;;;;;;;:::o;29558:129::-;29592:6;29619:20;;:::i;:::-;29609:30;;29648:33;29676:4;29668:6;29648:33;:::i;:::-;29599:88;;;:::o;29693:75::-;29726:6;29759:2;29753:9;29743:19;;29733:35;:::o;29774:311::-;29851:4;29941:18;29933:6;29930:30;29927:2;;;29963:18;;:::i;:::-;29927:2;30013:4;30005:6;30001:17;29993:25;;30073:4;30067;30063:15;30055:23;;29856:229;;;:::o;30091:308::-;30153:4;30243:18;30235:6;30232:30;30229:2;;;30265:18;;:::i;:::-;30229:2;30303:29;30325:6;30303:29;:::i;:::-;30295:37;;30387:4;30381;30377:15;30369:23;;30158:241;;;:::o;30405:99::-;30457:6;30491:5;30485:12;30475:22;;30464:40;;;:::o;30510:169::-;30594:11;30628:6;30623:3;30616:19;30668:4;30663:3;30659:14;30644:29;;30606:73;;;;:::o;30685:148::-;30787:11;30824:3;30809:18;;30799:34;;;;:::o;30839:185::-;30879:1;30896:20;30914:1;30896:20;:::i;:::-;30891:25;;30930:20;30948:1;30930:20;:::i;:::-;30925:25;;30969:1;30959:2;;30974:18;;:::i;:::-;30959:2;31016:1;31013;31009:9;31004:14;;30881:143;;;;:::o;31030:348::-;31070:7;31093:20;31111:1;31093:20;:::i;:::-;31088:25;;31127:20;31145:1;31127:20;:::i;:::-;31122:25;;31315:1;31247:66;31243:74;31240:1;31237:81;31232:1;31225:9;31218:17;31214:105;31211:2;;;31322:18;;:::i;:::-;31211:2;31370:1;31367;31363:9;31352:20;;31078:300;;;;:::o;31384:191::-;31424:4;31444:20;31462:1;31444:20;:::i;:::-;31439:25;;31478:20;31496:1;31478:20;:::i;:::-;31473:25;;31517:1;31514;31511:8;31508:2;;;31522:18;;:::i;:::-;31508:2;31567:1;31564;31560:9;31552:17;;31429:146;;;;:::o;31581:96::-;31618:7;31647:24;31665:5;31647:24;:::i;:::-;31636:35;;31626:51;;;:::o;31683:104::-;31728:7;31757:24;31775:5;31757:24;:::i;:::-;31746:35;;31736:51;;;:::o;31793:90::-;31827:7;31870:5;31863:13;31856:21;31845:32;;31835:48;;;:::o;31889:109::-;31939:7;31968:24;31986:5;31968:24;:::i;:::-;31957:35;;31947:51;;;:::o;32004:119::-;32064:7;32093:24;32111:5;32093:24;:::i;:::-;32082:35;;32072:51;;;:::o;32129:126::-;32166:7;32206:42;32199:5;32195:54;32184:65;;32174:81;;;:::o;32261:77::-;32298:7;32327:5;32316:16;;32306:32;;;:::o;32344:86::-;32379:7;32419:4;32412:5;32408:16;32397:27;;32387:43;;;:::o;32436:134::-;32494:9;32527:37;32558:5;32527:37;:::i;:::-;32514:50;;32504:66;;;:::o;32576:152::-;32639:9;32672:50;32716:5;32672:50;:::i;:::-;32659:63;;32649:79;;;:::o;32734:126::-;32797:9;32830:24;32848:5;32830:24;:::i;:::-;32817:37;;32807:53;;;:::o;32866:126::-;32916:9;32949:37;32980:5;32949:37;:::i;:::-;32936:50;;32926:66;;;:::o;32998:113::-;33048:9;33081:24;33099:5;33081:24;:::i;:::-;33068:37;;33058:53;;;:::o;33117:154::-;33201:6;33196:3;33191;33178:30;33263:1;33254:6;33249:3;33245:16;33238:27;33168:103;;;:::o;33277:307::-;33345:1;33355:113;33369:6;33366:1;33363:13;33355:113;;;33454:1;33449:3;33445:11;33439:18;33435:1;33430:3;33426:11;33419:39;33391:2;33388:1;33384:10;33379:15;;33355:113;;;33486:6;33483:1;33480:13;33477:2;;;33566:1;33557:6;33552:3;33548:16;33541:27;33477:2;33326:258;;;;:::o;33590:320::-;33634:6;33671:1;33665:4;33661:12;33651:22;;33718:1;33712:4;33708:12;33739:18;33729:2;;33795:4;33787:6;33783:17;33773:27;;33729:2;33857;33849:6;33846:14;33826:18;33823:38;33820:2;;;33876:18;;:::i;:::-;33820:2;33641:269;;;;:::o;33916:281::-;33999:27;34021:4;33999:27;:::i;:::-;33991:6;33987:40;34129:6;34117:10;34114:22;34093:18;34081:10;34078:34;34075:62;34072:2;;;34140:18;;:::i;:::-;34072:2;34180:10;34176:2;34169:22;33959:238;;;:::o;34203:233::-;34242:3;34265:24;34283:5;34265:24;:::i;:::-;34256:33;;34311:66;34304:5;34301:77;34298:2;;;34381:18;;:::i;:::-;34298:2;34428:1;34421:5;34417:13;34410:20;;34246:190;;;:::o;34442:180::-;34490:77;34487:1;34480:88;34587:4;34584:1;34577:15;34611:4;34608:1;34601:15;34628:180;34676:77;34673:1;34666:88;34773:4;34770:1;34763:15;34797:4;34794:1;34787:15;34814:180;34862:77;34859:1;34852:88;34959:4;34956:1;34949:15;34983:4;34980:1;34973:15;35000:180;35048:77;35045:1;35038:88;35145:4;35142:1;35135:15;35169:4;35166:1;35159:15;35186:102;35227:6;35278:2;35274:7;35269:2;35262:5;35258:14;35254:28;35244:38;;35234:54;;;:::o;35294:175::-;35434:27;35430:1;35422:6;35418:14;35411:51;35400:69;:::o;35475:176::-;35615:28;35611:1;35603:6;35599:14;35592:52;35581:70;:::o;35657:225::-;35797:34;35793:1;35785:6;35781:14;35774:58;35866:8;35861:2;35853:6;35849:15;35842:33;35763:119;:::o;35888:175::-;36028:27;36024:1;36016:6;36012:14;36005:51;35994:69;:::o;36069:175::-;36209:27;36205:1;36197:6;36193:14;36186:51;36175:69;:::o;36250:223::-;36390:34;36386:1;36378:6;36374:14;36367:58;36459:6;36454:2;36446:6;36442:15;36435:31;36356:117;:::o;36479:173::-;36619:25;36615:1;36607:6;36603:14;36596:49;36585:67;:::o;36658:182::-;36798:34;36794:1;36786:6;36782:14;36775:58;36764:76;:::o;36846:175::-;36986:27;36982:1;36974:6;36970:14;36963:51;36952:69;:::o;37027:182::-;37167:34;37163:1;37155:6;37151:14;37144:58;37133:76;:::o;37215:177::-;37355:29;37351:1;37343:6;37339:14;37332:53;37321:71;:::o;37398:173::-;37538:25;37534:1;37526:6;37522:14;37515:49;37504:67;:::o;37577:181::-;37717:33;37713:1;37705:6;37701:14;37694:57;37683:75;:::o;37764:175::-;37904:27;37900:1;37892:6;37888:14;37881:51;37870:69;:::o;37945:122::-;38018:24;38036:5;38018:24;:::i;:::-;38011:5;38008:35;37998:2;;38057:1;38054;38047:12;37998:2;37988:79;:::o;38073:138::-;38154:32;38180:5;38154:32;:::i;:::-;38147:5;38144:43;38134:2;;38201:1;38198;38191:12;38134:2;38124:87;:::o;38217:116::-;38287:21;38302:5;38287:21;:::i;:::-;38280:5;38277:32;38267:2;;38323:1;38320;38313:12;38267:2;38257:76;:::o;38339:148::-;38425:37;38456:5;38425:37;:::i;:::-;38418:5;38415:48;38405:2;;38477:1;38474;38467:12;38405:2;38395:92;:::o;38493:168::-;38589:47;38630:5;38589:47;:::i;:::-;38582:5;38579:58;38569:2;;38651:1;38648;38641:12;38569:2;38559:102;:::o;38667:122::-;38740:24;38758:5;38740:24;:::i;:::-;38733:5;38730:35;38720:2;;38779:1;38776;38769:12;38720:2;38710:79;:::o

Swarm Source

ipfs://1f7dbf52bcf8f8df40812ded2bd2324a227968b14718ea0be2f9ea15582850a2
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.