Contract 0xa63d57042b2d462b8dcf1570f8288dba405cc909

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x2a3a6290f6f26f0cf59428c11320c7f901f7ea08f2715bfbe402714ee735c2ffCancel409357532023-03-30 10:44:2419 mins ago0xf742dba443297af11baea39c190d21ed3218fc1e IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.023188524798 125.271600049
0xc61951417a98d82b8a82b5bc69092161ee15aaaa843dc2e70dfc6af30fba0954Buy409357492023-03-30 10:44:1619 mins ago0x1654d2505b2e43ce6ecbb8590b49023b0de16a7c IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.051535939816 106.379868008
0x95402ff2fea58a1b38b1b75f62435b8dd1fed810e4a0a3fdacb920466865b8bfBuy409357452023-03-30 10:44:0819 mins ago0x1f7d84b9a7ba35279f03fc9624932e47b7222ba8 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.038846367085 101.075026502
0xb8240070f9b25520564ef6b6aae72c9f7ae60eadd7d61c2b0bcd2b34587aff66Cancel409357372023-03-30 10:43:5019 mins ago0xbbae2f1face0ae13c2a32b7d4ce2e1dea791ae18 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.020418873658 106.52195328
0x6497e93151f05f0ece0d1c5a229893079e7d0eff065de55a0f71e6d4589c18f7Buy409357252023-03-30 10:43:2420 mins ago0xe7680e02bcc48e40183978ce313bdb6eabd65089 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.041523345123 108.036928178
0x07c2579d16f96f4ace2a1b3c24ab4af4b7724ca372aa7f32843b12090afe68c9Buy ETH409357202023-03-30 10:43:1420 mins ago0x2b1ab36277c62d9c9b7b38692e52abc4dd5e778f IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.041685326202 108.558929453
0x208b2dd826424beee5be4a171afd162b2fa1c931333019305f64674096ebbc20Buy409357042023-03-30 10:42:4021 mins ago0x71c1b3fd35b14188ae61d52fa7cd4c542575dc52 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.041377475918 106.944242203
0xc442bf1031c9095bb11c7aba70f653a1b250207b0336f09a4fc9a1783ef1605aSell409356442023-03-30 10:40:3223 mins ago0x0bfae2f210d113c7b71bed15d0db617af55a4bbf IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.050723974067 111.966532019
0x72e1814c02b91778340704331353f3e6ace613ca0949af2f0062638ae0e6fb72Cancel409356322023-03-30 10:40:0823 mins ago0x0bfae2f210d113c7b71bed15d0db617af55a4bbf IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.01701292997 101.980086858
0x49af6287b1ccfad45a42c4222b63f2f7e031b675ebe1e830f7cb80a15938bad8Sell409356302023-03-30 10:40:0223 mins ago0x25f5819068eacc7b0eb6fa3f10dbe7503705606f IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.133611596473 99.519351686
0x13706ad015283cfaac41326767bc41ed0205d3fae30a0e159db46655c3b8a3e8Sell ETH409355972023-03-30 10:38:5224 mins ago0xaaade626078e49b794aa93c6ab23c08041aa6aba IN  0xa63d57042b2d462b8dcf1570f8288dba405cc909590 MATIC0.047178597817 110.768683831
0x7134ba1daf18ea300d40e4db7ab067953f96cddbfe5a56622324e67743cc802eCancel409355672023-03-30 10:37:4825 mins ago0x2b1ab36277c62d9c9b7b38692e52abc4dd5e778f IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.017166221478 113.654231544
0x1376e7d8318863597a8d3bf032aefc6cb7ef2c23990f051bd8cc0c5c5b94f75eCancel409355592023-03-30 10:37:3226 mins ago0x2b1ab36277c62d9c9b7b38692e52abc4dd5e778f IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.019615938421 122.105089522
0x3e65cc6a82815b2017008bbe249a43c8331f7eccebd3e8b6a4d340a3795317b3Buy ETH409355402023-03-30 10:36:5226 mins ago0x5a2755216c8807037080ea91cbf4bc18943837dc IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.090485452857 107.324570671
0x17f162fe65517624ffb9fbc204b7797c5b83c5cd3a13755b3c8a2972f8139b77Sell ETH409355172023-03-30 10:36:0227 mins ago0x2b1ab36277c62d9c9b7b38692e52abc4dd5e778f IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9097,000 MATIC0.042984415846 116.75376354
0xa908832776629d86aa1d423114dc460558b75d4984d51f03860fb53a0877e0b2Buy ETH409354942023-03-30 10:35:1428 mins ago0x5a2755216c8807037080ea91cbf4bc18943837dc IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.055711726563 111.902170612
0x3141bf532fcdf91fb3bf8d1213b7c4490de4f489333ec76b8675a1b4e8b46461Sell ETH409354862023-03-30 10:34:5628 mins ago0xe637f6659021a8faa9167f47721911e418f5edc3 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9095,000 MATIC0.065992513083 113.058763106
0xb29dcbb00e583a382137b9d7ce4adc69b3cd9c05da02da5f68e7791f99604f37Sell409354702023-03-30 10:34:2229 mins ago0x249da4ebe80f6f6e65a2c337a57aaeba50f88ea9 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.04219540693 108.936352895
0x9b7091b9a2dc9d407de69390870a9c78770771ab391fd223a3cef1a839c23cbdBuy409354642023-03-30 10:34:1029 mins ago0x8e86464e322c26f856cdd3d6584cb6e45fd619f3 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.041950496549 112.312448595
0x549210337bbff26a4ef562693ea7a7a4d160d2e4251720dc93658edbe43a10fdSell409354522023-03-30 10:33:4429 mins ago0xe403b2006a22473577b7ea028696014ba93cbb83 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.049947385233 110.255234327
0x60e19df3a1496ae032894f303826e476c55ab1106feb4113b824002352516a00Sell ETH409354462023-03-30 10:33:3230 mins ago0xe637f6659021a8faa9167f47721911e418f5edc3 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9095,000 MATIC0.059990562643 111.763595188
0xad7853ec41161376d2951a4447e8da90f750c5cd9e7f1e7b050c1157d3e5d9ceSell ETH409354342023-03-30 10:33:0630 mins ago0xe637f6659021a8faa9167f47721911e418f5edc3 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9095,000 MATIC0.065915500396 122.801870466
0x1b308f22056d0d3de9ec079731571d24391fcbbd62fe9d3bb4dbaeedd93e07a8Buy409353712023-03-30 10:30:5232 mins ago0x3d285d60822519777fc430852659af5fb6d1b959 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.130655875205 144.998069227
0x130ca021b9528f488c5b9c948aa42d16f12298620c0de0d5e7137055ae54e1d2Buy409353652023-03-30 10:30:4033 mins ago0x8e86464e322c26f856cdd3d6584cb6e45fd619f3 IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.064473138987 137.574393646
0x73ea12729a5b4e3b34fbfccb6e1663e4456f7a813ecab3e7ea04a0dad8e8002fBuy ETH409353562023-03-30 10:30:2033 mins ago0xaaade626078e49b794aa93c6ab23c08041aa6aba IN  0xa63d57042b2d462b8dcf1570f8288dba405cc9090 MATIC0.107665711471 136.460345418
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x13706ad015283cfaac41326767bc41ed0205d3fae30a0e159db46655c3b8a3e8409355972023-03-30 10:38:5224 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a4590 MATIC
0x17f162fe65517624ffb9fbc204b7797c5b83c5cd3a13755b3c8a2972f8139b77409355172023-03-30 10:36:0227 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a47,000 MATIC
0x3141bf532fcdf91fb3bf8d1213b7c4490de4f489333ec76b8675a1b4e8b46461409354862023-03-30 10:34:5628 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x60e19df3a1496ae032894f303826e476c55ab1106feb4113b824002352516a00409354462023-03-30 10:33:3230 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0xad7853ec41161376d2951a4447e8da90f750c5cd9e7f1e7b050c1157d3e5d9ce409354342023-03-30 10:33:0630 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x8fc39ad4eaba2f34d71b24da3fc4426d143dc5ffc16dff96edfb4fa826b2d4d7409353422023-03-30 10:29:5033 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x92e09346fde38dcbbf349798cb0eb2689256d3b3c4c2bafe0ed9208f372f0546409353192023-03-30 10:29:0234 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x0b77785963acf1f2225831255958e1e3f3bd8f9a2ba0236d7b697cf0200fce11409353002023-03-30 10:28:2235 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x52822a83fee47c3a224b002b89e65a642052f7be2fac7042e24dc063db9f4811409351822023-03-30 10:24:1039 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a43,000 MATIC
0xea6568a67ae393174a933351461481a2b0762a9bd906930f191af423d175dd65409351412023-03-30 10:22:4440 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0xe61b0e319258704c47d3b2fcbfd217e3d594ecc3df74f5525f8bfda1c53d63a8409350732023-03-30 10:19:5243 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x7ce860f8799d0b622955420db26e1d34d8406dde84a52c72da06b1aeda9cfc54409350452023-03-30 10:18:4844 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x07f18df7933e2174ef3936d7d72ca3f4ad46db68560c2965961a3f1d3239ed02409349902023-03-30 10:16:5046 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x1e485650478456b3ab4c4d160f35522f4a6df8b7f47741557942d5995a7ed5e6409349682023-03-30 10:16:0447 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x6392d75481c2d7fd3f0f28eeb7103a744cf0efe85f0774188fe3f28daccee492409349272023-03-30 10:14:3649 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x8d9f882748a340bd67aa2c42f3a1a262f8bcdbc86bad09d5506aef8fa728ef7f409348932023-03-30 10:13:1150 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x92b9452bcb59d0ad30d1ec76a857d5bd9cb3e0f2204c55e566bb01577c450ec3409348782023-03-30 10:12:3951 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a412,402 MATIC
0xd5b14291ad5dd20fa3671fe67b587bfbef6d6798f0159050e3c7f9d42ce323f3409348712023-03-30 10:12:2551 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a45,000 MATIC
0x5b7c7464292cfcab2f8895fa13f6ecdc7fceaebe27288f8d0ca5ef828256da9d409347672023-03-30 10:08:4155 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a47,000 MATIC
0x1a262011857236ba8cb4a233c2f833c01a19d4496cf413d62b9bc80f61c82e6a409347532023-03-30 10:08:1355 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a410,000 MATIC
0xcc9b52524fb40e80a771122df3d0a46409c6864dd777997d952006c771ecc5b4409347372023-03-30 10:07:3956 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a412,429 MATIC
0xe00e2828d97f9f467c1ab655dfdb06a3278a400d8597fe6c95d610393611804a409347282023-03-30 10:07:1956 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a410,000 MATIC
0xa280ed19e24ad2abaa58b06caba3989cd4c9a024f6b62faecf087277d0447450409346232023-03-30 10:03:031 hr ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a410,000 MATIC
0x58dfc9e9ef6d859e3cef5f72d62f86c741b6b4f570cdd82e12077e3f1a11fe89409342372023-03-30 9:49:161 hr 14 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a4720 MATIC
0x61f5de83f2e40215fd6491072b7359107d3277045574214d8d0b56ed208c49ef409336332023-03-30 9:26:501 hr 36 mins ago 0xa63d57042b2d462b8dcf1570f8288dba405cc909 0xd4013b79867c03d3fb5196899193efc8f29d54a47,000 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TDEX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: Tdex.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.0 <0.9.0;

import "./TokenConfig.sol";

abstract contract ERC20 {

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
}

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);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) return a;
        return b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >=0 && b>=0, "SafeMath: Cannot have negative numbers");
        if (a <= b) return a;
        return b;
    }
}

library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value : value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

struct Dish {
    uint256 price;
    uint256 number;
}

enum OrderType { Buy, Sell }
enum OrderStatus { None, Waiting, Finished, Cancelled }

struct Order {
    uint256 orderId;
    uint256 price;
    uint256 tokenTotal;
    uint256 tokenSurplus;
    uint256 tokenFee;
    uint256 usdtSurplus;
    uint256 usdtFee;
    uint256 createnTime;
    uint256 endTime;
    OrderType orderType;
    OrderStatus status;
    address sender;
}

struct Match {
    uint256 matchId;
    uint256 buyOrderId;
    uint256 sellOrderId;
    uint256 price;
    uint256 tokenDeal;
    uint256 usdtDeal;
    uint256 tokenFee;
    uint256 usdtFee;
    uint256 time;
}

interface OrderInterface {

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (Order memory);

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (Match memory);

    function getPrice(address _tokenContract) external view returns (uint256 price);

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId);

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId);

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint);

    function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory);

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory);

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint);

    function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory);

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256);

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256);

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory);

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory);

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint);

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint);

    function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory);
}

interface DexInterface {

    function createOrder(address _tokenContract, address _sender, uint256 _price, uint256 _token, uint256 _usdt, uint8 _type) external returns (uint256);

    function removeOrder(address _tokenContract, uint256 _orderId, address _sender) external returns (bool);

    function orderManager() external view returns (address);

    function books() external view returns (address);
}

interface TokenInterface {

    function getToken(address _tokenContract) external view returns (Token memory token);

    function getTokenMapLength() external view returns (uint length);

    function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list);
}

interface __tdexDelegate {

    function __buy(address __tokenContract, address __sender) external;

    function __sell(address __tokenContract, address __sender) external;
}

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract TDEX {

    address private _owner;

    address private _dexInterface = address(0);

    address private _tokenManager = address(0);

    address private _delegate = address(0);

    Token private USDT;

    Token private ETH;

    event CreateOrder(address indexed tokenContract, uint256 indexed orderId, address sender, OrderType ordertType, uint256 price, uint256 value);

    event CancelOrder(address indexed tokenContract, uint256 indexed orderId, address sender);

    constructor () {
        _owner = msg.sender;
        USDT = T.USDT();
        ETH = T.ETH();
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function init(address __dexInterface) external onlyOwner
    {
        require(_dexInterface == address(0), "Can only be assigned once");
        _dexInterface = __dexInterface;
    }

    function setTokenManager(address ___tokenManager) external onlyOwner
    {
        _tokenManager = ___tokenManager;
    }

    function setDelegate(address __delegate) external onlyOwner
    {
        _delegate = __delegate;
    }

    function getToken(address _tokenContract) external view returns (
        address tokenContract,
        string memory symbol,
        string memory name,
        uint decimals)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);

        tokenContract = token.tokenContract;
        symbol = token.symbol;
        name = token.name;
        decimals = token.decimals;
    }

    function getTokenAddressListLength() external view returns (uint length)
    {
        return TokenInterface(_tokenManager).getTokenMapLength();
    }

    function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list)
    {
        return TokenInterface(_tokenManager).getTokenAddressList(start, end);
    }

    /**********************************************************/

    function _buy(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__buy(_tokenContract, _sender);

        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC);

        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");

        TransferHelper.safeTransferFrom(USDT.tokenContract, _sender, _dexInterface, _usdt_amount);

        uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 0);

        emit CreateOrder(_tokenContract, orderId, _sender, OrderType.Buy, _price, _token_amount);

        return orderId;
    }

    function Buy(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != ETH.tokenContract, "Does not support ETH");
        return _buy(_tokenContract, _price, _token_amount, msg.sender);
    }

    function BuyETH(uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        return _buy(ETH.tokenContract, _price, _token_amount, msg.sender);
    }

    function _sell(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__sell(_tokenContract, _sender);

        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC);
        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");

        if (_tokenContract == ETH.tokenContract)
        {
            TransferHelper.safeTransferETH(_dexInterface, _token_amount);
        }
        else
        {
            TransferHelper.safeTransferFrom(_tokenContract, _sender, _dexInterface, _token_amount);
        }

        uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 1);

        emit CreateOrder(_tokenContract, orderId, _sender, OrderType.Sell, _price, _token_amount);

        return orderId;
    }

    function Sell(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != ETH.tokenContract, "Does not support ETH");
        return _sell(_tokenContract, _price, _token_amount, msg.sender);
    }

    function SellETH(uint256 _price) external payable returns (uint256 orderId)
    {
        return _sell(ETH.tokenContract, _price, msg.value, msg.sender);
    }

    function Cancel(address _tokenContract, uint256 _orderId) external returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        bool result = DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, msg.sender);

        emit CancelOrder(_tokenContract, _orderId, msg.sender);

        return result;
    }

    function CancelRoot(address _tokenContract, uint256 _orderId, address _sender) external onlyOwner returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        bool result = DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, _sender);

        emit CancelOrder(_tokenContract, _orderId, _sender);

        return result;
    }

    /**********************************************************/

    function balanceOf(address _tokenContract, address _sender) external view returns (uint256)
    {
        uint256 balance;
        if (_tokenContract == ETH.tokenContract)
        {
            balance = _sender.balance;
        }
        else
        {
            balance = IERC20(_tokenContract).balanceOf(_sender);
        }
        return balance;
    }

    function getOrderManager() internal view returns (OrderInterface)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager());
    }

    function getPrice(address _tokenContract) external view returns (uint256 price)
    {
        return getOrderManager().getPrice(_tokenContract);
    }

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId)
    {
        return getOrderManager().getLastMatchId(_tokenContract);
    }

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId)
    {
        return getOrderManager().getLastOrderId(_tokenContract);
    }

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    )
    {
        Order memory order = getOrderManager().getOrder(_tokenContract, _orderId);
        price = order.price;
        tokenTotal = order.tokenTotal;
        tokenSurplus = order.tokenSurplus;
        tokenFee = order.tokenFee;
        usdtSurplus = order.usdtSurplus;
        usdtFee = order.usdtFee;
        createnTime = order.createnTime;
        endTime = order.endTime;
        orderType = uint8(order.orderType);
        status = uint8(order.status);
        sender = order.sender;
    }

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    )
    {
        Match memory _match = getOrderManager().getMatch(_tokenContract, _matchId);

        matchId = _match.matchId;
        buyOrderId = _match.buyOrderId;
        sellOrderId = _match.sellOrderId;
        price = _match.price;
        tokenDeal = _match.tokenDeal;
        usdtDeal = _match.usdtDeal;
        tokenFee = _match.tokenFee;
        usdtFee = _match.usdtFee;
        time = _match.time;
    }

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return getOrderManager().getBuyOrderPriceListLength(_tokenContract);
    }

    function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceList(_tokenContract, start, end);
    }

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return getOrderManager().getBuyOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceListPublished(_tokenContract, count);
    }

    function getBuyOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list)
    {
        OrderInterface orderManager = getOrderManager();
        uint256[] memory priceList = orderManager.getBuyOrderPriceListPublished(_tokenContract, count);
        list = new Dish[](count);
        for (uint i=0; i<count; i++)
        {
            uint256 price = priceList[i];
            uint256 number = orderManager.getBuyOrderPriceTokenNumber(_tokenContract, price);
            list[i] = Dish(price, number);
        }
    }

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return getOrderManager().getSellOrderPriceListLength(_tokenContract);
    }

    function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceList(_tokenContract, start, end);
    }

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return getOrderManager().getSellOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceListPublished(_tokenContract, count);
    }

    function getSellOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list)
    {
        OrderInterface orderManager = getOrderManager();
        uint256[] memory priceList = orderManager.getSellOrderPriceListPublished(_tokenContract, count);
        list = new Dish[](count);
        for (uint i=0; i<count; i++)
        {
            uint256 price = priceList[i];
            uint256 number = orderManager.getSellOrderPriceTokenNumber(_tokenContract, price);
            list[i] = Dish(price, number);
        }
    }

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList)
    {
        return getOrderManager().getOrderMatching(_tokenContract, _orderId);
    }

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return getOrderManager().getOrderUnmatchedListLength(_tokenContract, _sender);
    }

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return getOrderManager().getOrderFinishedListLength(_tokenContract, _sender);
    }

    function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getOrderUnmatchedList(_tokenContract, _sender, start, end);
    }

    function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getOrderFinishedList(_tokenContract, _sender, start, end);
    }
}

File 2 of 2: TokenConfig.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.0 <0.9.0;

uint256 constant PDEC = 1e30;

struct Token {
    address tokenContract;
    string symbol;
    string name;
    uint decimals;
}

library T {

    function USDT() internal pure returns (Token memory)
    {
        return Token({
            symbol: "USDT",
            name: "Tether USD",
            tokenContract: 0xc2132D05D31c914a87C6611C10748AEb04B58e8F,
            decimals: 6
        });
    }

    function ETH() internal pure returns (Token memory)
    {
        return Token({
            symbol: "MATIC",
            name: "Matic Token",
            tokenContract: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,
            decimals: 18
        });
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"CancelOrder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"enum OrderType","name":"ordertType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateOrder","type":"event"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Buy","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"BuyETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"Cancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"CancelRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Sell","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"SellETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getBuyOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastMatchId","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastOrderId","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_matchId","type":"uint256"}],"name":"getMatch","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint256","name":"buyOrderId","type":"uint256"},{"internalType":"uint256","name":"sellOrderId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenDeal","type":"uint256"},{"internalType":"uint256","name":"usdtDeal","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrder","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenTotal","type":"uint256"},{"internalType":"uint256","name":"tokenSurplus","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtSurplus","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"createnTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"orderType","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderFinishedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderFinishedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrderMatching","outputs":[{"internalType":"uint256[]","name":"matchingList","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderUnmatchedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderUnmatchedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getSellOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getToken","outputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getTokenAddressList","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddressListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__dexInterface","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"__delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"___tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b031990811690915560028054821690556003805490911690553480156200003557600080fd5b5060008054336001600160a01b0319909116179055620000606200012f602090811b620019e917901c565b8051600480546001600160a01b0319166001600160a01b03909216919091178155602082015160059062000095908262000344565b5060408201516002820190620000ac908262000344565b5060608201518160030155905050620000cf620001e660201b62001a9f1760201c565b8051600880546001600160a01b0319166001600160a01b03909216919091178155602082015160099062000104908262000344565b50604082015160028201906200011b908262000344565b506060820151816003015590505062000410565b62000164604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073c2132d05d31c914a87c6611c10748aeb04b58e8f6001600160a01b03168152602001604051806040016040528060048152602001631554d11560e21b81525081526020016040518060400160405280600a81526020016915195d1a195c881554d160b21b81525081526020016006815250905090565b6200021b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001604051806040016040528060058152602001644d4154494360d81b81525081526020016040518060400160405280600b81526020016a26b0ba34b1902a37b5b2b760a91b81525081526020016012815250905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b038111156200036057620003606200029f565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612fac80620004206000396000f3fe6080604052600436106102045760003560e01c80637017689611610118578063d4de8ad2116100a0578063edb258411161006f578063edb2584114610660578063f248d4bb146106e2578063f3da8edf14610702578063f7888aec14610722578063f79fde671461074257600080fd5b8063d4de8ad2146105e0578063e3dddfc814610600578063e501d5f414610620578063ed7a144f1461064057600080fd5b80639fd95a42116100e75780639fd95a4214610540578063b424bd8314610560578063bdda1d1a14610580578063c27b6f29146105a0578063ca5eb5e1146105c057600080fd5b806370176896146104cd5780637cb2b79c146104e057806394f27d081461050057806395265e6c1461052057600080fd5b806327f83af91161019b57806350ab38711161016a57806350ab3871146103d9578063594251341461043d578063597704381461045d5780635d4e94071461048d5780635f8e651e146104ad57600080fd5b806327f83af91461035957806341976e091461037957806347c3b77d146103995780634f9f21f9146103b957600080fd5b8063161b71fa116101d7578063161b71fa146102bd57806319ab453c146102ea5780631cbc5ab11461030c5780631f69ae121461032c57600080fd5b80630479569f1461020957806305a7b0411461023f578063083c63511461026d5780630afbe8731461028d575b600080fd5b34801561021557600080fd5b506102296102243660046124b6565b610757565b60405161023691906124e2565b60405180910390f35b34801561024b57600080fd5b5061025f61025a366004612531565b610929565b604051908152602001610236565b34801561027957600080fd5b5061025f610288366004612531565b6109a6565b34801561029957600080fd5b506102ad6102a836600461254e565b6109e0565b6040519015158152602001610236565b3480156102c957600080fd5b506102dd6102d83660046124b6565b610b7b565b6040516102369190612590565b3480156102f657600080fd5b5061030a610305366004612531565b610bfe565b005b34801561031857600080fd5b5061025f6103273660046125d4565b610ca3565b34801561033857600080fd5b5061034c610347366004612609565b610d0f565b604051610236919061262b565b34801561036557600080fd5b506102ad6103743660046124b6565b610d88565b34801561038557600080fd5b5061025f610394366004612531565b610eed565b3480156103a557600080fd5b506102dd6103b43660046125d4565b610f27565b3480156103c557600080fd5b506102dd6103d43660046125d4565b610fb0565b3480156103e557600080fd5b506103f96103f43660046124b6565b610ff8565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610236565b34801561044957600080fd5b5061025f610458366004612531565b6110ce565b34801561046957600080fd5b5061047d610478366004612531565b611108565b60405161023694939291906126bc565b34801561049957600080fd5b506102296104a83660046124b6565b6111a7565b3480156104b957600080fd5b5061025f6104c8366004612704565b611370565b61025f6104db36600461273d565b6113ef565b3480156104ec57600080fd5b5061030a6104fb366004612531565b61140a565b34801561050c57600080fd5b506102dd61051b3660046124b6565b611456565b34801561052c57600080fd5b5061025f61053b3660046124b6565b61148d565b34801561054c57600080fd5b506102dd61055b3660046124b6565b6114c4565b34801561056c57600080fd5b5061025f61057b366004612531565b6114fb565b34801561058c57600080fd5b506102dd61059b3660046124b6565b611535565b3480156105ac57600080fd5b5061025f6105bb366004612704565b61156c565b3480156105cc57600080fd5b5061030a6105db366004612531565b6115ae565b3480156105ec57600080fd5b506102dd6105fb3660046124b6565b6115fa565b34801561060c57600080fd5b506102dd61061b366004612756565b611631565b34801561062c57600080fd5b5061025f61063b3660046124b6565b6116cb565b34801561064c57600080fd5b5061025f61065b3660046125d4565b611702565b34801561066c57600080fd5b5061068061067b3660046124b6565b611766565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e085015260ff908116610100850152166101208301526001600160a01b031661014082015261016001610236565b3480156106ee57600080fd5b506102dd6106fd366004612756565b611875565b34801561070e57600080fd5b5061025f61071d366004612609565b6118c5565b34801561072e57600080fd5b5061025f61073d366004612704565b6118e0565b34801561074e57600080fd5b5061025f611976565b60606000610763611b57565b90506000816001600160a01b0316639fd95a4286866040518363ffffffff1660e01b815260040161079592919061279c565b600060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107da9190810190612891565b90508367ffffffffffffffff8111156107f5576107f56127b5565b60405190808252806020026020018201604052801561083a57816020015b60408051808201909152600080825260208201528152602001906001900390816108135790505b50925060005b8481101561092057600082828151811061085c5761085c612927565b602002602001015190506000846001600160a01b031663e501d5f489846040518363ffffffff1660e01b815260040161089692919061279c565b602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d7919061293d565b905060405180604001604052808381526020018281525086848151811061090057610900612927565b6020026020010181905250505080806109189061296c565b915050610840565b50505092915050565b6000610933611b57565b6040516305a7b04160e01b81526001600160a01b03848116600483015291909116906305a7b041906024015b602060405180830381865afa15801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a0919061293d565b92915050565b60006109b0611b57565b60405163083c635160e01b81526001600160a01b038481166004830152919091169063083c63519060240161095f565b600080546001600160a01b03163314610a145760405162461bcd60e51b8152600401610a0b90612985565b60405180910390fd5b600254604051630b2ee08760e31b81526001600160a01b0386811660048301526000921690635977043890602401600060405180830381865afa158015610a5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a879190810190612a2e565b90506000816060015111610aad5760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b0387811660048301526024820187905285811660448301526000921690633a72b3fc906064016020604051808303816000875af1158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190612b25565b6040516001600160a01b03868116825291925086918816907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a395945050505050565b6060610b85611b57565b6001600160a01b031663161b71fa84846040518363ffffffff1660e01b8152600401610bb292919061279c565b600060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612891565b9392505050565b6000546001600160a01b03163314610c285760405162461bcd60e51b8152600401610a0b90612985565b6001546001600160a01b031615610c815760405162461bcd60e51b815260206004820152601960248201527f43616e206f6e6c792062652061737369676e6564206f6e6365000000000000006044820152606401610a0b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6008546000906001600160a01b0390811690851603610cfb5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611bc5565b949350505050565b600254604051630fb4d70960e11b815260048101849052602481018390526060916001600160a01b031690631f69ae1290604401600060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612b47565b600254604051630b2ee08760e31b81526001600160a01b0384811660048301526000928392911690635977043890602401600060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfe9190810190612a2e565b90506000816060015111610e245760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b038681166004830152602482018690523360448301526000921690633a72b3fc906064016020604051808303816000875af1158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea29190612b25565b60405133815290915084906001600160a01b038716907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a3949350505050565b6000610ef7611b57565b6040516341976e0960e01b81526001600160a01b03848116600483015291909116906341976e099060240161095f565b6060610f31611b57565b6040516347c3b77d60e01b81526001600160a01b038681166004830152602482018690526044820185905291909116906347c3b77d906064015b600060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d079190810190612891565b6060610fba611b57565b604051634f9f21f960e01b81526001600160a01b03868116600483015260248201869052604482018590529190911690634f9f21f990606401610f6b565b60008060008060008060008060008061100f611b57565b6001600160a01b03166350ab38718d8d6040518363ffffffff1660e01b815260040161103c92919061279c565b61012060405180830381865afa15801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e9190612bd6565b905080600001519950806020015198508060400151975080606001519650806080015195508060a0015194508060c0015193508060e0015192508061010001519150509295985092959850929598565b60006110d8611b57565b604051631650944d60e21b81526001600160a01b038481166004830152919091169063594251349060240161095f565b600254604051630b2ee08760e31b81526001600160a01b038381166004830152600092606092839285928392911690635977043890602401600060405180830381865afa15801561115d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111859190810190612a2e565b8051602082015160408301516060909301519199909850919650945092505050565b606060006111b3611b57565b90506000816001600160a01b031663d4de8ad286866040518363ffffffff1660e01b81526004016111e592919061279c565b600060405180830381865afa158015611202573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261122a9190810190612891565b90508367ffffffffffffffff811115611245576112456127b5565b60405190808252806020026020018201604052801561128a57816020015b60408051808201909152600080825260208201528152602001906001900390816112635790505b50925060005b848110156109205760008282815181106112ac576112ac612927565b602002602001015190506000846001600160a01b03166395265e6c89846040518363ffffffff1660e01b81526004016112e692919061279c565b602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061293d565b905060405180604001604052808381526020018281525086848151811061135057611350612927565b6020026020010181905250505080806113689061296c565b915050611290565b600061137a611b57565b604051632fc7328f60e11b81526001600160a01b03858116600483015284811660248301529190911690635f8e651e906044015b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf7919061293d565b6008546000906109a0906001600160a01b0316833433611eb6565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610a0b90612985565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6060611460611b57565b6001600160a01b03166394f27d0884846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611497611b57565b6001600160a01b03166395265e6c84846040518363ffffffff1660e01b81526004016113ae92919061279c565b60606114ce611b57565b6001600160a01b0316639fd95a4284846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611505611b57565b60405163b424bd8360e01b81526001600160a01b038481166004830152919091169063b424bd839060240161095f565b606061153f611b57565b6001600160a01b031663bdda1d1a84846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611576611b57565b60405163c27b6f2960e01b81526001600160a01b0385811660048301528481166024830152919091169063c27b6f29906044016113ae565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610a0b90612985565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060611604611b57565b6001600160a01b031663d4de8ad284846040518363ffffffff1660e01b8152600401610bb292919061279c565b606061163b611b57565b604051631c7bbbf960e31b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063e3dddfc8906084015b600060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116c29190810190612891565b95945050505050565b60006116d5611b57565b6001600160a01b031663e501d5f484846040518363ffffffff1660e01b81526004016113ae92919061279c565b6008546000906001600160a01b039081169085160361175a5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611eb6565b600080600080600080600080600080600080611780611b57565b6001600160a01b031663edb258418f8f6040518363ffffffff1660e01b81526004016117ad92919061279c565b61018060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190612c6f565b905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e0015195508061010001519450806101200151600181111561184157611841612d1d565b9350806101400151600381111561185a5761185a612d1d565b92508061016001519150509295989b509295989b9093969950565b606061187f611b57565b60405163f248d4bb60e01b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063f248d4bb9060840161167d565b600854600090610bf7906001600160a01b0316848433611bc5565b60085460009081906001600160a01b039081169085160361190c57506001600160a01b03821631610bf7565b6040516370a0823160e01b81526001600160a01b0384811660048301528516906370a0823190602401602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d07919061293d565b600254604080516303c381ad60e61b815290516000926001600160a01b03169163f0e06b409160048083019260209291908290030181865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e4919061293d565b905090565b611a1d604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073c2132d05d31c914a87c6611c10748aeb04b58e8f6001600160a01b03168152602001604051806040016040528060048152602001631554d11560e21b81525081526020016040518060400160405280600a81526020016915195d1a195c881554d160b21b81525081526020016006815250905090565b611ad3604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001604051806040016040528060058152602001644d4154494360d81b81525081526020016040518060400160405280600b81526020016a26b0ba34b1902a37b5b2b760a91b81525081526020016012815250905090565b6001546040805163f9b6117f60e01b815290516000926001600160a01b03169163f9b6117f9160048083019260209291908290030181865afa158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e49190612d33565b6003546000906001600160a01b031615611c41576003546040516316b3980160e11b81526001600160a01b038781166004830152848116602483015290911690632d67300290604401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050505b60008311611c8c5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cff9190810190612a2e565b90506000816060015111611d255760405162461bcd60e51b8152600401610a0b90612adf565b60008511611d645760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000611d86611d7386886121ae565b6c0c9f2c9cd04674edea40000000612230565b600754909150611d9790600a612e34565b611da490620186a0612e40565b811115611dc35760405162461bcd60e51b8152600401610a0b90612e57565b600454600154611de2916001600160a01b039081169187911684612272565b600154604051631b5522f960e11b81526000916001600160a01b0316906336aa45f290611e1d908b9089908c908c9089908990600401612ea4565b6020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e60919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760008b8b604051611ea39493929190612edc565b60405180910390a3979650505050505050565b6003546000906001600160a01b031615611f325760035460405163f46dc94760e01b81526001600160a01b03878116600483015284811660248301529091169063f46dc94790604401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050505b60008311611f7d5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ff09190810190612a2e565b905060008160600151116120165760405162461bcd60e51b8152600401610a0b90612adf565b600085116120555760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000612064611d7386886121ae565b60075490915061207590600a612e34565b61208290620186a0612e40565b8111156120a15760405162461bcd60e51b8152600401610a0b90612e57565b6008546001600160a01b03908116908816036120d2576001546120cd906001600160a01b0316866123a2565b6120ec565b6001546120ec90889086906001600160a01b031688612272565b60018054604051631b5522f960e11b81526000926001600160a01b03909216916336aa45f291612128918c918a918d918d918a91600401612ea4565b6020604051808303816000875af1158015612147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216b919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760018b8b604051611ea39493929190612edc565b6000826000036121c0575060006109a0565b60006121cc8385612e40565b9050826121d98583612f25565b14610bf75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0b565b6000610bf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612470565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122d69190612f47565b6000604051808303816000865af19150503d8060008114612313576040519150601f19603f3d011682016040523d82523d6000602084013e612318565b606091505b50915091508180156123425750805115806123425750808060200190518101906123429190612b25565b61239a5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610a0b565b505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516123cc9190612f47565b60006040518083038185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b505090508061246b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610a0b565b505050565b600081836124915760405162461bcd60e51b8152600401610a0b9190612f63565b5060006116c28486612f25565b6001600160a01b03811681146124b357600080fd5b50565b600080604083850312156124c957600080fd5b82356124d48161249e565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b82811015612524578151805185528601518685015292840192908501906001016124ff565b5091979650505050505050565b60006020828403121561254357600080fd5b8135610bf78161249e565b60008060006060848603121561256357600080fd5b833561256e8161249e565b92506020840135915060408401356125858161249e565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156125c8578351835292840192918401916001016125ac565b50909695505050505050565b6000806000606084860312156125e957600080fd5b83356125f48161249e565b95602085013595506040909401359392505050565b6000806040838503121561261c57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156125c85783516001600160a01b031683529284019291840191600101612647565b60005b8381101561268757818101518382015260200161266f565b50506000910152565b600081518084526126a881602086016020860161266c565b601f01601f19169290920160200192915050565b6001600160a01b03851681526080602082018190526000906126e090830186612690565b82810360408401526126f28186612690565b91505082606083015295945050505050565b6000806040838503121561271757600080fd5b82356127228161249e565b915060208301356127328161249e565b809150509250929050565b60006020828403121561274f57600080fd5b5035919050565b6000806000806080858703121561276c57600080fd5b84356127778161249e565b935060208501356127878161249e565b93969395505050506040820135916060013590565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156127ee576127ee6127b5565b60405290565b604051610120810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051610180810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051601f8201601f1916810167ffffffffffffffff81118282101715612865576128656127b5565b604052919050565b600067ffffffffffffffff821115612887576128876127b5565b5060051b60200190565b600060208083850312156128a457600080fd5b825167ffffffffffffffff8111156128bb57600080fd5b8301601f810185136128cc57600080fd5b80516128df6128da8261286d565b61283c565b81815260059190911b820183019083810190878311156128fe57600080fd5b928401925b8284101561291c57835182529284019290840190612903565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161297e5761297e612956565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80516129c58161249e565b919050565b600082601f8301126129db57600080fd5b815167ffffffffffffffff8111156129f5576129f56127b5565b612a08601f8201601f191660200161283c565b818152846020838601011115612a1d57600080fd5b610d0782602083016020870161266c565b600060208284031215612a4057600080fd5b815167ffffffffffffffff80821115612a5857600080fd5b9083019060808286031215612a6c57600080fd5b612a746127cb565b8251612a7f8161249e565b8152602083015182811115612a9357600080fd5b612a9f878286016129ca565b602083015250604083015182811115612ab757600080fd5b612ac3878286016129ca565b6040830152506060830151606082015280935050505092915050565b60208082526026908201527f5468697320636f6e74726163742061646472657373206973206e6f74207375706040820152651c1bdc9d195960d21b606082015260800190565b600060208284031215612b3757600080fd5b81518015158114610bf757600080fd5b60006020808385031215612b5a57600080fd5b825167ffffffffffffffff811115612b7157600080fd5b8301601f81018513612b8257600080fd5b8051612b906128da8261286d565b81815260059190911b82018301908381019087831115612baf57600080fd5b928401925b8284101561291c578351612bc78161249e565b82529284019290840190612bb4565b60006101208284031215612be957600080fd5b612bf16127f4565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b8051600281106129c557600080fd5b8051600481106129c557600080fd5b60006101808284031215612c8257600080fd5b612c8a612818565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120612cee818501612c51565b90820152610140612d00848201612c60565b90820152610160612d128482016129ba565b908201529392505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612d4557600080fd5b8151610bf78161249e565b600181815b80851115612d8b578160001904821115612d7157612d71612956565b80851615612d7e57918102915b93841c9390800290612d55565b509250929050565b600082612da2575060016109a0565b81612daf575060006109a0565b8160018114612dc55760028114612dcf57612deb565b60019150506109a0565b60ff841115612de057612de0612956565b50506001821b6109a0565b5060208310610133831016604e8410600b8410161715612e0e575081810a6109a0565b612e188383612d50565b8060001904821115612e2c57612e2c612956565b029392505050565b6000610bf78383612d93565b80820281158282048414176109a0576109a0612956565b6020808252602d908201527f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60408201526c1d080c4c0c0c0c0c081554d115609a1b606082015260800190565b6001600160a01b03968716815294909516602085015260408401929092526060830152608082015260ff90911660a082015260c00190565b6001600160a01b03851681526080810160028510612f0a57634e487b7160e01b600052602160045260246000fd5b84602083015283604083015282606083015295945050505050565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b60008251612f5981846020870161266c565b9190910192915050565b602081526000610bf7602083018461269056fea264697066735822122046a912d34f63a36f8db25e86d36c32d96d3d096ee16e53424ae187fec646b01e64736f6c63430008110033

Deployed ByteCode Sourcemap

10825:13291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20519:551;;;;;;;;;;-1:-1:-1;20519:551:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17695:164;;;;;;;;;;-1:-1:-1;17695:164:0;;;;;:::i;:::-;;:::i;:::-;;;1653:25:2;;;1641:2;1626:18;17695:164:0;1507:177:2;21302:186:0;;;;;;;;;;-1:-1:-1;21302:186:0;;;;;:::i;:::-;;:::i;16472:473::-;;;;;;;;;;-1:-1:-1;16472:473:0;;;;;:::i;:::-;;:::i;:::-;;;2315:14:2;;2308:22;2290:41;;2278:2;2263:18;16472:473:0;2150:187:2;21076:220:0;;;;;;;;;;-1:-1:-1;21076:220:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11536:183::-;;;;;;;;;;-1:-1:-1;11536:183:0;;;;;:::i;:::-;;:::i;:::-;;13867:272;;;;;;;;;;-1:-1:-1;13867:272:0;;;;;:::i;:::-;;:::i;12536:192::-;;;;;;;;;;-1:-1:-1;12536:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16018:448::-;;;;;;;;;;-1:-1:-1;16018:448:0;;;;;:::i;:::-;;:::i;17539:150::-;;;;;;;;;;-1:-1:-1;17539:150:0;;;;;:::i;:::-;;:::i;21494:224::-;;;;;;;;;;-1:-1:-1;21494:224:0;;;;;:::i;:::-;;:::i;19847:222::-;;;;;;;;;;-1:-1:-1;19847:222:0;;;;;:::i;:::-;;:::i;18917:734::-;;;;;;;;;;-1:-1:-1;18917:734:0;;;;;:::i;:::-;;:::i;:::-;;;;4654:25:2;;;4710:2;4695:18;;4688:34;;;;4738:18;;;4731:34;;;;4796:2;4781:18;;4774:34;;;;4839:3;4824:19;;4817:35;;;;4883:3;4868:19;;4861:35;4927:3;4912:19;;4905:35;4971:3;4956:19;;4949:35;5015:3;5000:19;;4993:35;4641:3;4626:19;18917:734:0;4283:751:2;19657:184:0;;;;;;;;;;-1:-1:-1;19657:184:0;;;;;:::i;:::-;;:::i;11961:413::-;;;;;;;;;;-1:-1:-1;11961:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;22172:554::-;;;;;;;;;;-1:-1:-1;22172:554:0;;;;;:::i;:::-;;:::i;23176:212::-;;;;;;;;;;-1:-1:-1;23176:212:0;;;;;:::i;:::-;;:::i;15853:159::-;;;;;;:::i;:::-;;:::i;11725:121::-;;;;;;;;;;-1:-1:-1;11725:121:0;;;;;:::i;:::-;;:::i;22732:222::-;;;;;;;;;;-1:-1:-1;22732:222:0;;;;;:::i;:::-;;:::i;21724:215::-;;;;;;;;;;-1:-1:-1;21724:215:0;;;;;:::i;:::-;;:::i;20294:219::-;;;;;;;;;;-1:-1:-1;20294:219:0;;;;;:::i;:::-;;:::i;17865:164::-;;;;;;;;;;-1:-1:-1;17865:164:0;;;;;:::i;:::-;;:::i;22960:210::-;;;;;;;;;;-1:-1:-1;22960:210:0;;;;;:::i;:::-;;:::i;23394:::-;;;;;;;;;;-1:-1:-1;23394:210:0;;;;;:::i;:::-;;:::i;11852:103::-;;;;;;;;;;-1:-1:-1;11852:103:0;;;;;:::i;:::-;;:::i;21945:221::-;;;;;;;;;;-1:-1:-1;21945:221:0;;;;;:::i;:::-;;:::i;23866:248::-;;;;;;;;;;-1:-1:-1;23866:248:0;;;;;:::i;:::-;;:::i;20075:213::-;;;;;;;;;;-1:-1:-1;20075:213:0;;;;;:::i;:::-;;:::i;15573:274::-;;;;;;;;;;-1:-1:-1;15573:274:0;;;;;:::i;:::-;;:::i;18035:876::-;;;;;;;;;;-1:-1:-1;18035:876:0;;;;;:::i;:::-;;:::i;:::-;;;;7656:25:2;;;7712:2;7697:18;;7690:34;;;;7740:18;;;7733:34;;;;7798:2;7783:18;;7776:34;;;;7841:3;7826:19;;7819:35;;;;7885:3;7870:19;;7863:35;;;;7929:3;7914:19;;7907:35;7973:3;7958:19;;7951:35;8035:4;8023:17;;;8017:3;8002:19;;7995:46;8078:17;8072:3;8057:19;;8050:46;-1:-1:-1;;;;;8133:33:2;8127:3;8112:19;;8105:62;7643:3;7628:19;18035:876:0;7236:937:2;23610:250:0;;;;;;;;;;-1:-1:-1;23610:250:0;;;;;:::i;:::-;;:::i;14145:176::-;;;;;;;;;;-1:-1:-1;14145:176:0;;;;;:::i;:::-;;:::i;17017:358::-;;;;;;;;;;-1:-1:-1;17017:358:0;;;;;:::i;:::-;;:::i;12380:150::-;;;;;;;;;;;;;:::i;20519:551::-;20608:18;20642:27;20672:17;:15;:17::i;:::-;20642:47;;20699:26;20728:12;-1:-1:-1;;;;;20728:42:0;;20771:14;20787:5;20728:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20728:65:0;;;;;;;;;;;;:::i;:::-;20699:94;;20821:5;20810:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;20810:17:0;;;;;;;;;;;;;;;;20803:24;;20842:6;20837:227;20854:5;20852:1;:7;20837:227;;;20888:13;20904:9;20914:1;20904:12;;;;;;;;:::i;:::-;;;;;;;20888:28;;20930:14;20947:12;-1:-1:-1;;;;;20947:40:0;;20988:14;21004:5;20947:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20930:80;;21034:19;;;;;;;;21039:5;21034:19;;;;21046:6;21034:19;;;21024:4;21029:1;21024:7;;;;;;;;:::i;:::-;;;;;;:29;;;;20874:190;;20861:3;;;;;:::i;:::-;;;;20837:227;;;;20632:438;;20519:551;;;;:::o;17695:164::-;17766:15;17804:17;:15;:17::i;:::-;:48;;-1:-1:-1;;;17804:48:0;;-1:-1:-1;;;;;11472:32:2;;;17804:48:0;;;11454:51:2;17804:32:0;;;;;;;11427:18:2;;17804:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17797:55;17695:164;-1:-1:-1;;17695:164:0:o;21302:186::-;21386:11;21420:17;:15;:17::i;:::-;:61;;-1:-1:-1;;;21420:61:0;;-1:-1:-1;;;;;11472:32:2;;;21420:61:0;;;11454:51:2;21420:45:0;;;;;;;11427:18:2;;21420:61:0;11308:203:2;16472:473:0;16579:4;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;;;;;;;;;16635:13:::1;::::0;16620:54:::1;::::0;-1:-1:-1;;;16620:54:0;;-1:-1:-1;;;;;11472:32:2;;;16620:54:0::1;::::0;::::1;11454:51:2::0;16599:18:0::1;::::0;16635:13:::1;::::0;16620:38:::1;::::0;11427:18:2;;16620:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;16620:54:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;16599:75;;16709:1;16692:5;:14;;;:18;16684:69;;;;-1:-1:-1::0;;;16684:69:0::1;;;;;;;:::i;:::-;16791:13;::::0;16778:74:::1;::::0;-1:-1:-1;;;16778:74:0;;-1:-1:-1;;;;;14172:15:2;;;16778:74:0::1;::::0;::::1;14154:34:2::0;14204:18;;;14197:34;;;14267:15;;;14247:18;;;14240:43;16764:11:0::1;::::0;16791:13:::1;::::0;16778:39:::1;::::0;14089:18:2;;16778:74:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16868:46;::::0;-1:-1:-1;;;;;11472:32:2;;;11454:51;;16764:88:0;;-1:-1:-1;16896:8:0;;16868:46;::::1;::::0;::::1;::::0;11442:2:2;11427:18;16868:46:0::1;;;;;;;16932:6:::0;16472:473;-1:-1:-1;;;;;16472:473:0:o;21076:220::-;21176:21;21220:17;:15;:17::i;:::-;-1:-1:-1;;;;;21220:45:0;;21266:14;21282:6;21220:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21220:69:0;;;;;;;;;;;;:::i;:::-;21213:76;21076:220;-1:-1:-1;;;21076:220:0:o;11536:183::-;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11615:13:::1;::::0;-1:-1:-1;;;;;11615:13:0::1;:27:::0;11607:65:::1;;;::::0;-1:-1:-1;;;11607:65:0;;14778:2:2;11607:65:0::1;::::0;::::1;14760:21:2::0;14817:2;14797:18;;;14790:30;14856:27;14836:18;;;14829:55;14901:18;;11607:65:0::1;14576:349:2::0;11607:65:0::1;11682:13;:30:::0;;-1:-1:-1;;;;;;11682:30:0::1;-1:-1:-1::0;;;;;11682:30:0;;;::::1;::::0;;;::::1;::::0;;11536:183::o;13867:272::-;14018:3;:17;13961:15;;-1:-1:-1;;;;;14018:17:0;;;14000:35;;;;13992:68;;;;-1:-1:-1;;;13992:68:0;;15132:2:2;13992:68:0;;;15114:21:2;15171:2;15151:18;;;15144:30;-1:-1:-1;;;15190:18:2;;;15183:50;15250:18;;13992:68:0;14930:344:2;13992:68:0;14077:55;14082:14;14098:6;14106:13;14121:10;14077:4;:55::i;:::-;14070:62;13867:272;-1:-1:-1;;;;13867:272:0:o;12536:192::-;12675:13;;12660:61;;-1:-1:-1;;;12660:61:0;;;;;15453:25:2;;;15494:18;;;15487:34;;;12616:21:0;;-1:-1:-1;;;;;12675:13:0;;12660:49;;15426:18:2;;12660:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12660:61:0;;;;;;;;;;;;:::i;16018:448::-;16150:13;;16135:54;;-1:-1:-1;;;16135:54:0;;-1:-1:-1;;;;;11472:32:2;;;16135:54:0;;;11454:51:2;16094:4:0;;;;16150:13;;;16135:38;;11427:18:2;;16135:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16135:54:0;;;;;;;;;;;;:::i;:::-;16114:75;;16224:1;16207:5;:14;;;:18;16199:69;;;;-1:-1:-1;;;16199:69:0;;;;;;;:::i;:::-;16306:13;;16293:77;;-1:-1:-1;;;16293:77:0;;-1:-1:-1;;;;;14172:15:2;;;16293:77:0;;;14154:34:2;14204:18;;;14197:34;;;16359:10:0;14247:18:2;;;14240:43;16279:11:0;;16306:13;;16293:39;;14089:18:2;;16293:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16386:49;;16424:10;11454:51:2;;16279:91:0;;-1:-1:-1;16414:8:0;;-1:-1:-1;;;;;16386:49:0;;;;;11442:2:2;11427:18;16386:49:0;;;;;;;16453:6;16018:448;-1:-1:-1;;;;16018:448:0:o;17539:150::-;17604:13;17640:17;:15;:17::i;:::-;:42;;-1:-1:-1;;;17640:42:0;;-1:-1:-1;;;;;11472:32:2;;;17640:42:0;;;11454:51:2;17640:26:0;;;;;;;11427:18:2;;17640:42:0;11308:203:2;21494:224:0;21600:21;21644:17;:15;:17::i;:::-;:67;;-1:-1:-1;;;21644:67:0;;-1:-1:-1;;;;;16713:32:2;;;21644:67:0;;;16695:51:2;16762:18;;;16755:34;;;16805:18;;;16798:34;;;21644:39:0;;;;;;;16668:18:2;;21644:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21644:67:0;;;;;;;;;;;;:::i;19847:222::-;19952:21;19996:17;:15;:17::i;:::-;:66;;-1:-1:-1;;;19996:66:0;;-1:-1:-1;;;;;16713:32:2;;;19996:66:0;;;16695:51:2;16762:18;;;16755:34;;;16805:18;;;16798:34;;;19996:38:0;;;;;;;16668:18:2;;19996:66:0;16493:345:2;18917:734:0;19009:15;19034:18;19062:19;19091:13;19114:17;19141:16;19167;19193:15;19218:12;19251:19;19273:17;:15;:17::i;:::-;-1:-1:-1;;;;;19273:26:0;;19300:14;19316:8;19273:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19251:74;;19346:6;:14;;;19336:24;;19383:6;:17;;;19370:30;;19424:6;:18;;;19410:32;;19460:6;:12;;;19452:20;;19494:6;:16;;;19482:28;;19531:6;:15;;;19520:26;;19567:6;:15;;;19556:26;;19602:6;:14;;;19592:24;;19633:6;:11;;;19626:18;;19241:410;18917:734;;;;;;;;;;;:::o;19657:184::-;19740:11;19774:17;:15;:17::i;:::-;:60;;-1:-1:-1;;;19774:60:0;;-1:-1:-1;;;;;11472:32:2;;;19774:60:0;;;11454:51:2;19774:44:0;;;;;;;11427:18:2;;19774:60:0;11308:203:2;11961:413:0;12189:13;;12174:54;;-1:-1:-1;;;12174:54:0;;-1:-1:-1;;;;;11472:32:2;;;12174:54:0;;;11454:51:2;12035:21:0;;12066:20;;;;12035:21;;;;12189:13;;;12174:38;;11427:18:2;;12174:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12174:54:0;;;;;;;;;;;;:::i;:::-;12255:19;;12293:12;;;;12322:10;;;;12353:14;;;;;12255:19;;12293:12;;-1:-1:-1;12322:10:0;;-1:-1:-1;12353:14:0;-1:-1:-1;11961:413:0;-1:-1:-1;;;11961:413:0:o;22172:554::-;22262:18;22296:27;22326:17;:15;:17::i;:::-;22296:47;;22353:26;22382:12;-1:-1:-1;;;;;22382:43:0;;22426:14;22442:5;22382:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22382:66:0;;;;;;;;;;;;:::i;:::-;22353:95;;22476:5;22465:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;22465:17:0;;;;;;;;;;;;;;;;22458:24;;22497:6;22492:228;22509:5;22507:1;:7;22492:228;;;22543:13;22559:9;22569:1;22559:12;;;;;;;;:::i;:::-;;;;;;;22543:28;;22585:14;22602:12;-1:-1:-1;;;;;22602:41:0;;22644:14;22660:5;22602:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22585:81;;22690:19;;;;;;;;22695:5;22690:19;;;;22702:6;22690:19;;;22680:4;22685:1;22680:7;;;;;;;;:::i;:::-;;;;;;:29;;;;22529:191;;22516:3;;;;;:::i;:::-;;;;22492:228;;23176:212;23277:11;23311:17;:15;:17::i;:::-;:70;;-1:-1:-1;;;23311:70:0;;-1:-1:-1;;;;;17852:15:2;;;23311:70:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;23311:45:0;;;;;;;17769:18:2;;23311:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15853:159::-;15956:3;:17;15912:15;;15950:55;;-1:-1:-1;;;;;15956:17:0;15975:6;15983:9;15994:10;15950:5;:55::i;11725:121::-;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11808:13:::1;:31:::0;;-1:-1:-1;;;;;;11808:31:0::1;-1:-1:-1::0;;;;;11808:31:0;;;::::1;::::0;;;::::1;::::0;;11725:121::o;22732:222::-;22833:21;22877:17;:15;:17::i;:::-;-1:-1:-1;;;;;22877:46:0;;22924:14;22940:6;22877:70;;;;;;;;;;;;;;;;:::i;21724:215::-;21825:14;21862:17;:15;:17::i;:::-;-1:-1:-1;;;;;21862:46:0;;21909:14;21925:6;21862:70;;;;;;;;;;;;;;;;:::i;20294:219::-;20392:21;20436:17;:15;:17::i;:::-;-1:-1:-1;;;;;20436:47:0;;20484:14;20500:5;20436:70;;;;;;;;;;;;;;;;:::i;17865:164::-;17936:15;17974:17;:15;:17::i;:::-;:48;;-1:-1:-1;;;17974:48:0;;-1:-1:-1;;;;;11472:32:2;;;17974:48:0;;;11454:51:2;17974:32:0;;;;;;;11427:18:2;;17974:48:0;11308:203:2;22960:210:0;23051:29;23103:17;:15;:17::i;:::-;-1:-1:-1;;;;;23103:34:0;;23138:14;23154:8;23103:60;;;;;;;;;;;;;;;;:::i;23394:210::-;23494:11;23528:17;:15;:17::i;:::-;:69;;-1:-1:-1;;;23528:69:0;;-1:-1:-1;;;;;17852:15:2;;;23528:69:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;23528:44:0;;;;;;;17769:18:2;;23528:69:0;17622:304:2;11852:103:0;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11926:9:::1;:22:::0;;-1:-1:-1;;;;;;11926:22:0::1;-1:-1:-1::0;;;;;11926:22:0;;;::::1;::::0;;;::::1;::::0;;11852:103::o;21945:221::-;22044:21;22088:17;:15;:17::i;:::-;-1:-1:-1;;;;;22088:48:0;;22137:14;22153:5;22088:71;;;;;;;;;;;;;;;;:::i;23866:248::-;23988:21;24032:17;:15;:17::i;:::-;:75;;-1:-1:-1;;;24032:75:0;;-1:-1:-1;;;;;18218:15:2;;;24032:75:0;;;18200:34:2;18270:15;;;18250:18;;;18243:43;18302:18;;;18295:34;;;18345:18;;;18338:34;;;24032:38:0;;;;;;;18134:19:2;;24032:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24032:75:0;;;;;;;;;;;;:::i;:::-;24025:82;23866:248;-1:-1:-1;;;;;23866:248:0:o;20075:213::-;20175:14;20212:17;:15;:17::i;:::-;-1:-1:-1;;;;;20212:45:0;;20258:14;20274:6;20212:69;;;;;;;;;;;;;;;;:::i;15573:274::-;15725:3;:17;15668:15;;-1:-1:-1;;;;;15725:17:0;;;15707:35;;;;15699:68;;;;-1:-1:-1;;;15699:68:0;;15132:2:2;15699:68:0;;;15114:21:2;15171:2;15151:18;;;15144:30;-1:-1:-1;;;15190:18:2;;;15183:50;15250:18;;15699:68:0;14930:344:2;15699:68:0;15784:56;15790:14;15806:6;15814:13;15829:10;15784:5;:56::i;18035:876::-;18127:13;18150:18;18178:20;18208:16;18234:19;18263:15;18288:19;18317:15;18342;18367:12;18389:14;18424:18;18445:17;:15;:17::i;:::-;-1:-1:-1;;;;;18445:26:0;;18472:14;18488:8;18445:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18424:73;;18515:5;:11;;;18507:19;;18549:5;:16;;;18536:29;;18590:5;:18;;;18575:33;;18629:5;:14;;;18618:25;;18667:5;:17;;;18653:31;;18704:5;:13;;;18694:23;;18741:5;:17;;;18727:31;;18778:5;:13;;;18768:23;;18819:5;:15;;;18813:22;;;;;;;;:::i;:::-;18801:34;;18860:5;:12;;;18854:19;;;;;;;;:::i;:::-;18845:28;;18892:5;:12;;;18883:21;;18414:497;18035:876;;;;;;;;;;;;;;:::o;23610:250::-;23733:21;23777:17;:15;:17::i;:::-;:76;;-1:-1:-1;;;23777:76:0;;-1:-1:-1;;;;;18218:15:2;;;23777:76:0;;;18200:34:2;18270:15;;;18250:18;;;18243:43;18302:18;;;18295:34;;;18345:18;;;18338:34;;;23777:39:0;;;;;;;18134:19:2;;23777:76:0;17931:447:2;14145:176:0;14261:3;:17;14218:15;;14256:58;;-1:-1:-1;;;;;14261:17:0;14280:6;14288:13;14303:10;14256:4;:58::i;17017:358::-;17170:3;:17;17100:7;;;;-1:-1:-1;;;;;17170:17:0;;;17152:35;;;;17148:197;;-1:-1:-1;;;;;;17221:15:0;;;17148:197;;;17293:41;;-1:-1:-1;;;17293:41:0;;-1:-1:-1;;;;;11472:32:2;;;17293:41:0;;;11454:51:2;17293:32:0;;;;;11427:18:2;;17293:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12380:150::-;12489:13;;12474:49;;;-1:-1:-1;;;12474:49:0;;;;12440:11;;-1:-1:-1;;;;;12489:13:0;;12474:47;;:49;;;;;;;;;;;;;;12489:13;12474:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12467:56;;12380:150;:::o;218:254:1:-;257:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;257:12:1;292:173;;;;;;;;387:42;-1:-1:-1;;;;;292:173:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;292:173:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;292:173:1;;;;;;;453:1;292:173;;;285:180;;218:254;:::o;478:256::-;516:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;516:12:1;551:176;;;;;;;;648:42;-1:-1:-1;;;;;551:176:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;551:176:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;551:176:1;;;;;;;714:2;551:176;;;544:183;;478:256;:::o;17381:152:0:-;17496:13;;17483:42;;;-1:-1:-1;;;17483:42:0;;;;17431:14;;-1:-1:-1;;;;;17496:13:0;;17483:40;;:42;;;;;;;;;;;;;;17496:13;17483:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12800:1061::-;12939:9;;12912:7;;-1:-1:-1;;;;;12939:9:0;:23;12935:85;;12979:9;;12964:56;;-1:-1:-1;;;12964:56:0;;-1:-1:-1;;;;;17852:15:2;;;12964:56:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;12979:9:0;;;;12964:31;;17769:18:2;;12964:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12935:85;13055:1;13039:13;:17;13031:54;;;;-1:-1:-1;;;13031:54:0;;20400:2:2;13031:54:0;;;20382:21:2;20439:2;20419:18;;;20412:30;-1:-1:-1;;;20458:18:2;;;20451:54;20522:18;;13031:54:0;20198:348:2;13031:54:0;13132:13;;13117:54;;-1:-1:-1;;;13117:54:0;;-1:-1:-1;;;;;11472:32:2;;;13117:54:0;;;11454:51:2;13096:18:0;;13132:13;;13117:38;;11427:18:2;;13117:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13117:54:0;;;;;;;;;;;;:::i;:::-;13096:75;;13206:1;13189:5;:14;;;:18;13181:69;;;;-1:-1:-1;;;13181:69:0;;;;;;;:::i;:::-;13277:1;13268:6;:10;13260:35;;;;-1:-1:-1;;;13260:35:0;;20753:2:2;13260:35:0;;;20735:21:2;20792:2;20772:18;;;20765:30;-1:-1:-1;;;20811:18:2;;;20804:42;20863:18;;13260:35:0;20551:336:2;13260:35:0;13306:20;13329:55;13342:35;13355:13;13370:6;13342:12;:35::i;:::-;94:4:1;13329:12:0;:55::i;:::-;13434:13;;13306:78;;-1:-1:-1;13428:19:0;;:2;:19;:::i;:::-;13419:28;;:6;:28;:::i;:::-;13403:12;:44;;13395:102;;;;-1:-1:-1;;;13395:102:0;;;;;;;:::i;:::-;13540:4;:18;;13569:13;13508:89;;-1:-1:-1;;;;;13540:18:0;;;;13560:7;;13569:13;13584:12;13508:31;:89::i;:::-;13639:13;;13626:104;;-1:-1:-1;;;13626:104:0;;13608:15;;-1:-1:-1;;;;;13639:13:0;;13626:39;;:104;;13666:14;;13682:7;;13691:6;;13699:13;;13714:12;;13608:15;;13626:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13608:122;;13774:7;13758:14;-1:-1:-1;;;;;13746:83:0;;13783:7;13792:13;13807:6;13815:13;13746:83;;;;;;;;;:::i;:::-;;;;;;;;13847:7;12800:1061;-1:-1:-1;;;;;;;12800:1061:0:o;14327:1240::-;14467:9;;14440:7;;-1:-1:-1;;;;;14467:9:0;:23;14463:86;;14507:9;;14492:57;;-1:-1:-1;;;14492:57:0;;-1:-1:-1;;;;;17852:15:2;;;14492:57:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;14507:9:0;;;;14492:32;;17769:18:2;;14492:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14463:86;14584:1;14568:13;:17;14560:54;;;;-1:-1:-1;;;14560:54:0;;20400:2:2;14560:54:0;;;20382:21:2;20439:2;20419:18;;;20412:30;-1:-1:-1;;;20458:18:2;;;20451:54;20522:18;;14560:54:0;20198:348:2;14560:54:0;14661:13;;14646:54;;-1:-1:-1;;;14646:54:0;;-1:-1:-1;;;;;11472:32:2;;;14646:54:0;;;11454:51:2;14625:18:0;;14661:13;;14646:38;;11427:18:2;;14646:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14646:54:0;;;;;;;;;;;;:::i;:::-;14625:75;;14735:1;14718:5;:14;;;:18;14710:69;;;;-1:-1:-1;;;14710:69:0;;;;;;;:::i;:::-;14806:1;14797:6;:10;14789:35;;;;-1:-1:-1;;;14789:35:0;;20753:2:2;14789:35:0;;;20735:21:2;20792:2;20772:18;;;20765:30;-1:-1:-1;;;20811:18:2;;;20804:42;20863:18;;14789:35:0;20551:336:2;14789:35:0;14835:20;14858:55;14871:35;14884:13;14899:6;14871:12;:35::i;14858:55::-;14962:13;;14835:78;;-1:-1:-1;14956:19:0;;:2;:19;:::i;:::-;14947:28;;:6;:28;:::i;:::-;14931:12;:44;;14923:102;;;;-1:-1:-1;;;14923:102:0;;;;;;;:::i;:::-;15058:3;:17;-1:-1:-1;;;;;15058:17:0;;;15040:35;;;;15036:267;;15130:13;;15099:60;;-1:-1:-1;;;;;15130:13:0;15145;15099:30;:60::i;:::-;15036:267;;;15263:13;;15206:86;;15238:14;;15254:7;;-1:-1:-1;;;;;15263:13:0;15278;15206:31;:86::i;:::-;15344:13;;;15331:104;;-1:-1:-1;;;15331:104:0;;15313:15;;-1:-1:-1;;;;;15344:13:0;;;;15331:39;;:104;;15371:14;;15387:7;;15396:6;;15404:13;;15419:12;;15331:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15313:122;;15479:7;15463:14;-1:-1:-1;;;;;15451:84:0;;15488:7;15497:14;15513:6;15521:13;15451:84;;;;;;;;;:::i;4038:459::-;4096:7;4337:1;4342;4337:6;4333:45;;-1:-1:-1;4366:1:0;4359:8;;4333:45;4388:9;4400:5;4404:1;4400;:5;:::i;:::-;4388:17;-1:-1:-1;4432:1:0;4423:5;4427:1;4388:17;4423:5;:::i;:::-;:10;4415:56;;;;-1:-1:-1;;;4415:56:0;;25089:2:2;4415:56:0;;;25071:21:2;25128:2;25108:18;;;25101:30;25167:34;25147:18;;;25140:62;-1:-1:-1;;;25218:18:2;;;25211:31;25259:19;;4415:56:0;24887:397:2;4503:130:0;4561:7;4587:39;4591:1;4594;4587:39;;;;;;;;;;;;;;;;;:3;:39::i;6300:398::-;6523:51;;;-1:-1:-1;;;;;25547:15:2;;;6523:51:0;;;25529:34:2;25599:15;;;25579:18;;;25572:43;25631:18;;;;25624:34;;;6523:51:0;;;;;;;;;;25464:18:2;;;;6523:51:0;;;;;;;-1:-1:-1;;;;;6523:51:0;-1:-1:-1;;;6523:51:0;;;6512:63;;-1:-1:-1;;;;6512:10:0;;;;:63;;6523:51;6512:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6476:99;;;;6593:7;:57;;;;-1:-1:-1;6605:11:0;;:16;;:44;;;6636:4;6625:24;;;;;;;;;;;;:::i;:::-;6585:106;;;;-1:-1:-1;;;6585:106:0;;26163:2:2;6585:106:0;;;26145:21:2;26202:2;26182:18;;;26175:30;26241:34;26221:18;;;26214:62;-1:-1:-1;;;26292:18:2;;;26285:34;26336:19;;6585:106:0;25961:400:2;6585:106:0;6388:310;;6300:398;;;;:::o;6704:194::-;6813:12;;;6773;6813;;;;;;;;;-1:-1:-1;;;;;6790:7:0;;;6806:5;;6790:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6772:54;;;6844:7;6836:55;;;;-1:-1:-1;;;6836:55:0;;26568:2:2;6836:55:0;;;26550:21:2;26607:2;26587:18;;;26580:30;26646:34;26626:18;;;26619:62;-1:-1:-1;;;26697:18:2;;;26690:33;26740:19;;6836:55:0;26366:399:2;6836:55:0;6762:136;6704:194;;:::o;4639:272::-;4725:7;4759:12;4752:5;4744:28;;;;-1:-1:-1;;;4744:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4782:9:0;4794:5;4798:1;4794;:5;:::i;14:131:2:-;-1:-1:-1;;;;;89:31:2;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:315::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:2:o;470:780::-;683:2;735:21;;;805:13;;708:18;;;827:22;;;654:4;;683:2;868;;886:18;;;;927:15;;;654:4;970:254;984:6;981:1;978:13;970:254;;;1043:13;;1081:9;;1069:22;;1131:11;;1125:18;1111:12;;;1104:40;1164:12;;;;1199:15;;;;1006:1;999:9;970:254;;;-1:-1:-1;1241:3:2;;470:780;-1:-1:-1;;;;;;;470:780:2:o;1255:247::-;1314:6;1367:2;1355:9;1346:7;1342:23;1338:32;1335:52;;;1383:1;1380;1373:12;1335:52;1422:9;1409:23;1441:31;1466:5;1441:31;:::i;1689:456::-;1766:6;1774;1782;1835:2;1823:9;1814:7;1810:23;1806:32;1803:52;;;1851:1;1848;1841:12;1803:52;1890:9;1877:23;1909:31;1934:5;1909:31;:::i;:::-;1959:5;-1:-1:-1;2011:2:2;1996:18;;1983:32;;-1:-1:-1;2067:2:2;2052:18;;2039:32;2080:33;2039:32;2080:33;:::i;:::-;2132:7;2122:17;;;1689:456;;;;;:::o;2342:632::-;2513:2;2565:21;;;2635:13;;2538:18;;;2657:22;;;2484:4;;2513:2;2736:15;;;;2710:2;2695:18;;;2484:4;2779:169;2793:6;2790:1;2787:13;2779:169;;;2854:13;;2842:26;;2923:15;;;;2888:12;;;;2815:1;2808:9;2779:169;;;-1:-1:-1;2965:3:2;;2342:632;-1:-1:-1;;;;;;2342:632:2:o;2979:383::-;3056:6;3064;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3180:9;3167:23;3199:31;3224:5;3199:31;:::i;:::-;3249:5;3301:2;3286:18;;3273:32;;-1:-1:-1;3352:2:2;3337:18;;;3324:32;;2979:383;-1:-1:-1;;;2979:383:2:o;3367:248::-;3435:6;3443;3496:2;3484:9;3475:7;3471:23;3467:32;3464:52;;;3512:1;3509;3502:12;3464:52;-1:-1:-1;;3535:23:2;;;3605:2;3590:18;;;3577:32;;-1:-1:-1;3367:248:2:o;3620:658::-;3791:2;3843:21;;;3913:13;;3816:18;;;3935:22;;;3762:4;;3791:2;4014:15;;;;3988:2;3973:18;;;3762:4;4057:195;4071:6;4068:1;4065:13;4057:195;;;4136:13;;-1:-1:-1;;;;;4132:39:2;4120:52;;4227:15;;;;4192:12;;;;4168:1;4086:9;4057:195;;5039:250;5124:1;5134:113;5148:6;5145:1;5142:13;5134:113;;;5224:11;;;5218:18;5205:11;;;5198:39;5170:2;5163:10;5134:113;;;-1:-1:-1;;5281:1:2;5263:16;;5256:27;5039:250::o;5294:271::-;5336:3;5374:5;5368:12;5401:6;5396:3;5389:19;5417:76;5486:6;5479:4;5474:3;5470:14;5463:4;5456:5;5452:16;5417:76;:::i;:::-;5547:2;5526:15;-1:-1:-1;;5522:29:2;5513:39;;;;5554:4;5509:50;;5294:271;-1:-1:-1;;5294:271:2:o;5570:553::-;-1:-1:-1;;;;;5823:32:2;;5805:51;;5892:3;5887:2;5872:18;;5865:31;;;-1:-1:-1;;5919:46:2;;5945:19;;5937:6;5919:46;:::i;:::-;6013:9;6005:6;6001:22;5996:2;5985:9;5981:18;5974:50;6041:33;6067:6;6059;6041:33;:::i;:::-;6033:41;;;6110:6;6105:2;6094:9;6090:18;6083:34;5570:553;;;;;;;:::o;6128:388::-;6196:6;6204;6257:2;6245:9;6236:7;6232:23;6228:32;6225:52;;;6273:1;6270;6263:12;6225:52;6312:9;6299:23;6331:31;6356:5;6331:31;:::i;:::-;6381:5;-1:-1:-1;6438:2:2;6423:18;;6410:32;6451:33;6410:32;6451:33;:::i;:::-;6503:7;6493:17;;;6128:388;;;;;:::o;6521:180::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:52;;;6649:1;6646;6639:12;6601:52;-1:-1:-1;6672:23:2;;6521:180;-1:-1:-1;6521:180:2:o;6706:525::-;6792:6;6800;6808;6816;6869:3;6857:9;6848:7;6844:23;6840:33;6837:53;;;6886:1;6883;6876:12;6837:53;6925:9;6912:23;6944:31;6969:5;6944:31;:::i;:::-;6994:5;-1:-1:-1;7051:2:2;7036:18;;7023:32;7064:33;7023:32;7064:33;:::i;:::-;6706:525;;7116:7;;-1:-1:-1;;;;7170:2:2;7155:18;;7142:32;;7221:2;7206:18;7193:32;;6706:525::o;8178:274::-;-1:-1:-1;;;;;8370:32:2;;;;8352:51;;8434:2;8419:18;;8412:34;8340:2;8325:18;;8178:274::o;8457:127::-;8518:10;8513:3;8509:20;8506:1;8499:31;8549:4;8546:1;8539:15;8573:4;8570:1;8563:15;8589:253;8661:2;8655:9;8703:4;8691:17;;8738:18;8723:34;;8759:22;;;8720:62;8717:88;;;8785:18;;:::i;:::-;8821:2;8814:22;8589:253;:::o;8847:252::-;8919:2;8913:9;8961:3;8949:16;;8995:18;8980:34;;9016:22;;;8977:62;8974:88;;;9042:18;;:::i;9104:252::-;9176:2;9170:9;9218:3;9206:16;;9252:18;9237:34;;9273:22;;;9234:62;9231:88;;;9299:18;;:::i;9361:275::-;9432:2;9426:9;9497:2;9478:13;;-1:-1:-1;;9474:27:2;9462:40;;9532:18;9517:34;;9553:22;;;9514:62;9511:88;;;9579:18;;:::i;:::-;9615:2;9608:22;9361:275;;-1:-1:-1;9361:275:2:o;9641:183::-;9701:4;9734:18;9726:6;9723:30;9720:56;;;9756:18;;:::i;:::-;-1:-1:-1;9801:1:2;9797:14;9813:4;9793:25;;9641:183::o;9829:881::-;9924:6;9955:2;9998;9986:9;9977:7;9973:23;9969:32;9966:52;;;10014:1;10011;10004:12;9966:52;10047:9;10041:16;10080:18;10072:6;10069:30;10066:50;;;10112:1;10109;10102:12;10066:50;10135:22;;10188:4;10180:13;;10176:27;-1:-1:-1;10166:55:2;;10217:1;10214;10207:12;10166:55;10246:2;10240:9;10269:60;10285:43;10325:2;10285:43;:::i;:::-;10269:60;:::i;:::-;10363:15;;;10445:1;10441:10;;;;10433:19;;10429:28;;;10394:12;;;;10469:19;;;10466:39;;;10501:1;10498;10491:12;10466:39;10525:11;;;;10545:135;10561:6;10556:3;10553:15;10545:135;;;10627:10;;10615:23;;10578:12;;;;10658;;;;10545:135;;;10699:5;9829:881;-1:-1:-1;;;;;;;9829:881:2:o;10715:127::-;10776:10;10771:3;10767:20;10764:1;10757:31;10807:4;10804:1;10797:15;10831:4;10828:1;10821:15;10847:184;10917:6;10970:2;10958:9;10949:7;10945:23;10941:32;10938:52;;;10986:1;10983;10976:12;10938:52;-1:-1:-1;11009:16:2;;10847:184;-1:-1:-1;10847:184:2:o;11036:127::-;11097:10;11092:3;11088:20;11085:1;11078:31;11128:4;11125:1;11118:15;11152:4;11149:1;11142:15;11168:135;11207:3;11228:17;;;11225:43;;11248:18;;:::i;:::-;-1:-1:-1;11295:1:2;11284:13;;11168:135::o;11516:356::-;11718:2;11700:21;;;11737:18;;;11730:30;11796:34;11791:2;11776:18;;11769:62;11863:2;11848:18;;11516:356::o;11877:138::-;11956:13;;11978:31;11956:13;11978:31;:::i;:::-;11877:138;;;:::o;12020:510::-;12074:5;12127:3;12120:4;12112:6;12108:17;12104:27;12094:55;;12145:1;12142;12135:12;12094:55;12174:6;12168:13;12200:18;12196:2;12193:26;12190:52;;;12222:18;;:::i;:::-;12266:55;12309:2;12290:13;;-1:-1:-1;;12286:27:2;12315:4;12282:38;12266:55;:::i;:::-;12346:2;12337:7;12330:19;12392:3;12385:4;12380:2;12372:6;12368:15;12364:26;12361:35;12358:55;;;12409:1;12406;12399:12;12358:55;12422:77;12496:2;12489:4;12480:7;12476:18;12469:4;12461:6;12457:17;12422:77;:::i;12535:967::-;12628:6;12681:2;12669:9;12660:7;12656:23;12652:32;12649:52;;;12697:1;12694;12687:12;12649:52;12730:9;12724:16;12759:18;12800:2;12792:6;12789:14;12786:34;;;12816:1;12813;12806:12;12786:34;12839:22;;;;12895:4;12877:16;;;12873:27;12870:47;;;12913:1;12910;12903:12;12870:47;12939:22;;:::i;:::-;12991:2;12985:9;13003:33;13028:7;13003:33;:::i;:::-;13045:22;;13106:2;13098:11;;13092:18;13122:16;;;13119:36;;;13151:1;13148;13141:12;13119:36;13187:56;13235:7;13224:8;13220:2;13216:17;13187:56;:::i;:::-;13182:2;13175:5;13171:14;13164:80;;13283:2;13279;13275:11;13269:18;13312:2;13302:8;13299:16;13296:36;;;13328:1;13325;13318:12;13296:36;13364:56;13412:7;13401:8;13397:2;13393:17;13364:56;:::i;:::-;13359:2;13352:5;13348:14;13341:80;;13467:2;13463;13459:11;13453:18;13448:2;13441:5;13437:14;13430:42;13491:5;13481:15;;;;;12535:967;;;;:::o;13507:402::-;13709:2;13691:21;;;13748:2;13728:18;;;13721:30;13787:34;13782:2;13767:18;;13760:62;-1:-1:-1;;;13853:2:2;13838:18;;13831:36;13899:3;13884:19;;13507:402::o;14294:277::-;14361:6;14414:2;14402:9;14393:7;14389:23;14385:32;14382:52;;;14430:1;14427;14420:12;14382:52;14462:9;14456:16;14515:5;14508:13;14501:21;14494:5;14491:32;14481:60;;14537:1;14534;14527:12;15532:956;15627:6;15658:2;15701;15689:9;15680:7;15676:23;15672:32;15669:52;;;15717:1;15714;15707:12;15669:52;15750:9;15744:16;15783:18;15775:6;15772:30;15769:50;;;15815:1;15812;15805:12;15769:50;15838:22;;15891:4;15883:13;;15879:27;-1:-1:-1;15869:55:2;;15920:1;15917;15910:12;15869:55;15949:2;15943:9;15972:60;15988:43;16028:2;15988:43;:::i;15972:60::-;16066:15;;;16148:1;16144:10;;;;16136:19;;16132:28;;;16097:12;;;;16172:19;;;16169:39;;;16204:1;16201;16194:12;16169:39;16228:11;;;;16248:210;16264:6;16259:3;16256:15;16248:210;;;16337:3;16331:10;16354:31;16379:5;16354:31;:::i;:::-;16398:18;;16281:12;;;;16436;;;;16248:210;;16843:774;16935:6;16988:3;16976:9;16967:7;16963:23;16959:33;16956:53;;;17005:1;17002;16995:12;16956:53;17031:22;;:::i;:::-;17082:9;17076:16;17069:5;17062:31;17146:2;17135:9;17131:18;17125:25;17120:2;17113:5;17109:14;17102:49;17204:2;17193:9;17189:18;17183:25;17178:2;17171:5;17167:14;17160:49;17262:2;17251:9;17247:18;17241:25;17236:2;17229:5;17225:14;17218:49;17321:3;17310:9;17306:19;17300:26;17294:3;17287:5;17283:15;17276:51;17381:3;17370:9;17366:19;17360:26;17354:3;17347:5;17343:15;17336:51;17441:3;17430:9;17426:19;17420:26;17414:3;17407:5;17403:15;17396:51;17501:3;17490:9;17486:19;17480:26;17474:3;17467:5;17463:15;17456:51;17526:3;17582:2;17571:9;17567:18;17561:25;17556:2;17549:5;17545:14;17538:49;;17606:5;17596:15;;;16843:774;;;;:::o;18383:154::-;18469:13;;18511:1;18501:12;;18491:40;;18527:1;18524;18517:12;18542:156;18630:13;;18672:1;18662:12;;18652:40;;18688:1;18685;18678:12;18703:1102;18795:6;18848:3;18836:9;18827:7;18823:23;18819:33;18816:53;;;18865:1;18862;18855:12;18816:53;18891:22;;:::i;:::-;18942:9;18936:16;18929:5;18922:31;19006:2;18995:9;18991:18;18985:25;18980:2;18973:5;18969:14;18962:49;19064:2;19053:9;19049:18;19043:25;19038:2;19031:5;19027:14;19020:49;19122:2;19111:9;19107:18;19101:25;19096:2;19089:5;19085:14;19078:49;19181:3;19170:9;19166:19;19160:26;19154:3;19147:5;19143:15;19136:51;19241:3;19230:9;19226:19;19220:26;19214:3;19207:5;19203:15;19196:51;19301:3;19290:9;19286:19;19280:26;19274:3;19267:5;19263:15;19256:51;19361:3;19350:9;19346:19;19340:26;19334:3;19327:5;19323:15;19316:51;19386:3;19442:2;19431:9;19427:18;19421:25;19416:2;19409:5;19405:14;19398:49;;19466:3;19501:56;19553:2;19542:9;19538:18;19501:56;:::i;:::-;19485:14;;;19478:80;19577:3;19612:58;19651:18;;;19612:58;:::i;:::-;19596:14;;;19589:82;19690:3;19725:49;19755:18;;;19725:49;:::i;:::-;19709:14;;;19702:73;19713:5;18703:1102;-1:-1:-1;;;18703:1102:2:o;19810:127::-;19871:10;19866:3;19862:20;19859:1;19852:31;19902:4;19899:1;19892:15;19926:4;19923:1;19916:15;19942:251;20012:6;20065:2;20053:9;20044:7;20040:23;20036:32;20033:52;;;20081:1;20078;20071:12;20033:52;20113:9;20107:16;20132:31;20157:5;20132:31;:::i;20892:422::-;20981:1;21024:5;20981:1;21038:270;21059:7;21049:8;21046:21;21038:270;;;21118:4;21114:1;21110:6;21106:17;21100:4;21097:27;21094:53;;;21127:18;;:::i;:::-;21177:7;21167:8;21163:22;21160:55;;;21197:16;;;;21160:55;21276:22;;;;21236:15;;;;21038:270;;;21042:3;20892:422;;;;;:::o;21319:806::-;21368:5;21398:8;21388:80;;-1:-1:-1;21439:1:2;21453:5;;21388:80;21487:4;21477:76;;-1:-1:-1;21524:1:2;21538:5;;21477:76;21569:4;21587:1;21582:59;;;;21655:1;21650:130;;;;21562:218;;21582:59;21612:1;21603:10;;21626:5;;;21650:130;21687:3;21677:8;21674:17;21671:43;;;21694:18;;:::i;:::-;-1:-1:-1;;21750:1:2;21736:16;;21765:5;;21562:218;;21864:2;21854:8;21851:16;21845:3;21839:4;21836:13;21832:36;21826:2;21816:8;21813:16;21808:2;21802:4;21799:12;21795:35;21792:77;21789:159;;;-1:-1:-1;21901:19:2;;;21933:5;;21789:159;21980:34;22005:8;21999:4;21980:34;:::i;:::-;22050:6;22046:1;22042:6;22038:19;22029:7;22026:32;22023:58;;;22061:18;;:::i;:::-;22099:20;;21319:806;-1:-1:-1;;;21319:806:2:o;22130:131::-;22190:5;22219:36;22246:8;22240:4;22219:36;:::i;22266:168::-;22339:9;;;22370;;22387:15;;;22381:22;;22367:37;22357:71;;22408:18;;:::i;22439:409::-;22641:2;22623:21;;;22680:2;22660:18;;;22653:30;22719:34;22714:2;22699:18;;22692:62;-1:-1:-1;;;22785:2:2;22770:18;;22763:43;22838:3;22823:19;;22439:409::o;22853:608::-;-1:-1:-1;;;;;23202:15:2;;;23184:34;;23254:15;;;;23249:2;23234:18;;23227:43;23301:2;23286:18;;23279:34;;;;23344:2;23329:18;;23322:34;23387:3;23372:19;;23365:35;23449:4;23437:17;;;23164:3;23416:19;;23409:46;23133:3;23118:19;;22853:608::o;23466:581::-;-1:-1:-1;;;;;23726:32:2;;23708:51;;23695:3;23680:19;;23789:1;23778:13;;23768:144;;23834:10;23829:3;23825:20;23822:1;23815:31;23869:4;23866:1;23859:15;23897:4;23894:1;23887:15;23768:144;23948:6;23943:2;23932:9;23928:18;23921:34;23991:6;23986:2;23975:9;23971:18;23964:34;24034:6;24029:2;24018:9;24014:18;24007:34;23466:581;;;;;;;:::o;24665:217::-;24705:1;24731;24721:132;;24775:10;24770:3;24766:20;24763:1;24756:31;24810:4;24807:1;24800:15;24838:4;24835:1;24828:15;24721:132;-1:-1:-1;24867:9:2;;24665:217::o;25669:287::-;25798:3;25836:6;25830:13;25852:66;25911:6;25906:3;25899:4;25891:6;25887:17;25852:66;:::i;:::-;25934:16;;;;;25669:287;-1:-1:-1;;25669:287:2:o;26770:220::-;26919:2;26908:9;26901:21;26882:4;26939:45;26980:2;26969:9;26965:18;26957:6;26939:45;:::i

Swarm Source

ipfs://46a912d34f63a36f8db25e86d36c32d96d3d096ee16e53424ae187fec646b01e
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.