** Reindexing in progress, block data might not be up to date **

Contract 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290

 

Contract Overview

Balance:
12.853472700442891286 BNB

BNB Value:
$6,055.27 (@ $471.10/BNB)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3b6463b66e020548de3f68989059bcb912a421ae493a9fe0a5f09b26c42affabApprove144309842022-01-17 1:15:471 day 23 hrs ago0xdd82f9f47f2af05cc307840ed89d4d88fc9fc45f IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x43cf3a005716da54c5f20ba0ab139a5ac7b96bd521801aac3de2bf234144cc8bApprove143140372022-01-12 23:33:296 days 1 hr ago0x9a11f826b680c6a94c98d0afd24ca1604fddebef IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0xbd5c19fb3ca881a987bfcd272567cc629c3a5fe66108ed777a1978bda37df336Approve125226572021-11-10 5:36:0269 days 19 hrs ago0xc86cbcd0e64789736175656612fbe69e05618800 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x95fb4990e61782b34446e9f7bece390b516ae85675ed2d0148b54fd907b107a3Approve124918742021-11-09 3:40:3570 days 20 hrs ago0xbdd48ff7708934f700905ea7965eae22ed5683d5 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x1dd56a4a3657d42ffe41e626653cbf98fc8d90e00dd7d87141e0daa6faca60b6Approve123265902021-11-03 7:07:4476 days 17 hrs ago0x6473db2f7300af7faa393ddfb86225fe82bca7f7 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x2b4e644f9b567a445e73d8de09668fb5318451b3263d94f442f86910dd49e91dApprove119146242021-10-19 17:49:1391 days 6 hrs ago0x2ac84584e89d251181130771359b0f2aef1c78bc IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x2641662d873a5c01f37c6fb738f7a8fc72dc9f5324ea6a5f49a93bf1dd24a429Approve118536342021-10-17 14:38:3593 days 10 hrs ago0x031b89b71cd470d462798562a0c4c064407dcd0e IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000101738
0x1a75777052152c4868177d995314f196c5b19690e7920c28f7f507adf6e4645fApprove109166422021-09-14 20:39:56126 days 3 hrs ago0x8cc7bc33f5188b1fb683bedc4dbffa77b136833b IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000124755
0x36a662cca4a3818bdcead03beee32f3c871b38ad00ed880863df9bba1d28f151Approve109166382021-09-14 20:39:44126 days 3 hrs ago0x8cc7bc33f5188b1fb683bedc4dbffa77b136833b IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000220755
0xd7fa0a04258378378a8189b429b3c0ae06d2fa9525e5c62d04f6c1b24684a67cApprove103894192021-08-27 8:18:42144 days 16 hrs ago0x5c1ffdbe3a284000e9ea6f97b37de922572ff42a IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x02b59cab3ef7bc5f8377f38e3f00876177260731ad1867404d0e6d12b9a1a198Approve103764822021-08-26 21:31:50145 days 3 hrs ago0x335da6d2e733a81d4dd9fbe2e2e543a2c2b1f099 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x2e2fd92f4753190d6a1e7852e994ee48b98742ec3b052eeec7c1343bfe26b546Approve103395502021-08-25 14:38:45146 days 10 hrs ago0xdc8920e8d2339bb2458da2b20895c3b7bfae93ba IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0xb6f7164d9bddc24f4c42018b97edda01be0bcf8372f2fac5516ce83c62cd80e8Approve101397702021-08-18 15:07:40153 days 9 hrs ago0x2d12b00a0d595d5a4023aede3622186d6a6df212 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0xc3ef5196c05d82d16e3f97aeee0a561d0ba1c1ea043b971b80d7b68e563e73f7Approve99413312021-08-11 15:41:13160 days 8 hrs ago0x0633c746f4425109dcc8226cc89a57ca62dd6a5d IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x579fd5f6f8a68768824242e228004c0db122cb6522504f2e9a3ebece0f7de4cbApprove98439092021-08-08 4:50:51163 days 19 hrs ago0x07d80ae6f36a5e08dca74ce884a24d39db9934ed IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000149706
0xc78da9e0eb5cbf726fb40a7ca7352f8352fc7595bf0864ca6dd37fe0c5b1981eApprove98439032021-08-08 4:50:33163 days 19 hrs ago0x07d80ae6f36a5e08dca74ce884a24d39db9934ed IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000264906
0x64cfd68070e76c20bda1f7855db341a465ae53c8c5f279c061a2d83456c7405fApprove98149632021-08-07 4:03:26164 days 20 hrs ago0x5e110c0cd29a6f51db301a2aff285d12c1b08878 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x4e8ff2b13285763bf21d9ac75ec98e7c075232497b316d2e3d210b8f679b7d13Approve96478882021-08-01 3:28:58170 days 21 hrs ago0x9831b13844b5e8fa099057d324ac2929df86295e IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0x1fbfbae99e9b2ba4797ee0e5c0a7143702e07dacf387b7c35f3fbca984d585dcApprove96393852021-07-31 20:14:32171 days 4 hrs ago0x1ce362aadb43a272177ededa6c2a1a27441adc77 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x7e30c1ca1139136bea3736508a85547442890c7b8e84eca0cb883243ffee73f3Approve96184462021-07-31 2:16:33171 days 22 hrs ago0x9e41b711e32f0aa05057d279d5c645a40ae83659 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.00007267
0xfb69fc4e281f67eab30de1c5869efa093bf865985e50b298664f4a0865aaa881Approve94369142021-07-24 12:28:22178 days 12 hrs ago0x53e692337609187f2af1ebd277e0f520526940ba IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0xb41b49f3932a13e330894946bea81d287723d6af798b67727caafa2e5902affcApprove94343872021-07-24 10:21:40178 days 14 hrs ago0xc66da203ab04147a374597aa18d0b8a61a0aa40b IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0xa923b0e79076f434da2e3b5aeef6c02fd47735e9da814981c7609bc1b73f4227Approve94016102021-07-23 6:52:07179 days 17 hrs ago0x2e24a16a1753e70637228c17987e98d378adb246 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x1adc8af2e2703f28f93f3034b639924aef5edf79f49dc455e0064a4fd0b983c0Approve93918502021-07-22 22:43:35180 days 1 hr ago0xb0111e5fb4c30a3391e1a43361abc59141da7def IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
0x296edff0f9062ddc5a9d0f525f110b3ed7a8305665a4d436dec4a0ca9be28566Approve93750292021-07-22 8:42:25180 days 15 hrs ago0x0294bcde01fca2d683732a7412ba007da35673c4 IN  0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900 BNB0.000222255
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1e1b1cf56e240e568f852b4e82ff681648020ded30fb838aded2adb5aee42e85127439712021-11-18 6:33:2161 days 18 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000395929899565547 BNB
0x1e1b1cf56e240e568f852b4e82ff681648020ded30fb838aded2adb5aee42e85127439712021-11-18 6:33:2161 days 18 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000791859799131094 BNB
0x1e1b1cf56e240e568f852b4e82ff681648020ded30fb838aded2adb5aee42e85127439712021-11-18 6:33:2161 days 18 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002771509296958829 BNB
0xa7be96fda141e83223a302800c1f3d492d2b2ad9ddb035d8caed2149969352e8119193222021-10-19 22:08:4291 days 2 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0xa7be96fda141e83223a302800c1f3d492d2b2ad9ddb035d8caed2149969352e8119193222021-10-19 22:08:4291 days 2 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0xa7be96fda141e83223a302800c1f3d492d2b2ad9ddb035d8caed2149969352e8119193222021-10-19 22:08:4291 days 2 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x870a8ce31fdd46ba03450bb66531e42cdfb22ea7c398888801de77a7140de17e118429592021-10-17 5:41:1593 days 18 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x870a8ce31fdd46ba03450bb66531e42cdfb22ea7c398888801de77a7140de17e118429592021-10-17 5:41:1593 days 18 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x870a8ce31fdd46ba03450bb66531e42cdfb22ea7c398888801de77a7140de17e118429592021-10-17 5:41:1593 days 18 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x4ce8226695c0d245c66e09fa800d4d767592f0a0da5f495604b32e6a1ef89354117686122021-10-14 15:30:0596 days 9 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x4ce8226695c0d245c66e09fa800d4d767592f0a0da5f495604b32e6a1ef89354117686122021-10-14 15:30:0596 days 9 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x4ce8226695c0d245c66e09fa800d4d767592f0a0da5f495604b32e6a1ef89354117686122021-10-14 15:30:0596 days 9 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x432ee5239c056af890c9f3231fa7d158c3ea6c0108cf4756cf3d1ef2a1c9b5fb116765032021-10-11 9:23:2899 days 15 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x432ee5239c056af890c9f3231fa7d158c3ea6c0108cf4756cf3d1ef2a1c9b5fb116765032021-10-11 9:23:2899 days 15 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x432ee5239c056af890c9f3231fa7d158c3ea6c0108cf4756cf3d1ef2a1c9b5fb116765032021-10-11 9:23:2899 days 15 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x5f375f2b108a7122fdea5dfb926f2e36cde6f8ebedf6e20b4468f75afff98711116305442021-10-09 18:58:11101 days 5 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x5f375f2b108a7122fdea5dfb926f2e36cde6f8ebedf6e20b4468f75afff98711116305442021-10-09 18:58:11101 days 5 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x5f375f2b108a7122fdea5dfb926f2e36cde6f8ebedf6e20b4468f75afff98711116305442021-10-09 18:58:11101 days 5 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x0f910a4c53791d7ad801526ba8751f288c428892baf30394d561010bf3812152116077072021-10-08 23:53:35102 days 45 mins ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x0f910a4c53791d7ad801526ba8751f288c428892baf30394d561010bf3812152116077072021-10-08 23:53:35102 days 45 mins ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x0f910a4c53791d7ad801526ba8751f288c428892baf30394d561010bf3812152116077072021-10-08 23:53:35102 days 45 mins ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x5cbfe81041ea58d5ec8dd48bd0933e41b80c5fbd3135479770f8df9c2c424b5c115992412021-10-08 16:46:06102 days 7 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
0x5cbfe81041ea58d5ec8dd48bd0933e41b80c5fbd3135479770f8df9c2c424b5c115992412021-10-08 16:46:06102 days 7 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a290 0x0333ce71ca5d49187e9ebd5d3b309c369fedb4480.000803669877819892 BNB
0x5cbfe81041ea58d5ec8dd48bd0933e41b80c5fbd3135479770f8df9c2c424b5c115992412021-10-08 16:46:06102 days 7 hrs ago PancakeSwap: Router v2 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900.002812844572369624 BNB
0x27a224b056dac1c4c0cf6c55db8c19a37e74600f64b6045d7cd74e9f24464610115741872021-10-07 19:52:30103 days 4 hrs ago 0x06d2e78c10d3d743b70e4f4b2d090db4aa71a2900x772d2a359c245a590be77d9cc5a446c526a9d3a10.000401834938909946 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RisingSun

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-12
*/

/**
 *Submitted for verification at BscScan.com on 2021-07-09
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/**
                                               `._.'                  
 * 
 *  https://BUSDShiba.com
 *  https://t.me/BUSDShiba
 */

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
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) {
        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) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

enum Permission {
    ChangeFees,
    Buyback,
    AdjustContractVariables,
    Authorize,
    Unauthorize,
    PauseUnpauseContract,
    BypassPause,
    LockPermissions,
    ExcludeInclude,
    Blacklist
}

/**
 * Allows for contract ownership along with multi-address authorization for different permissions
 */
abstract contract RSunAuth {
    struct PermissionLock {
        bool isLocked;
        uint64 expiryTime;
    }

    address public owner;
    mapping(address => mapping(uint256 => bool)) private authorizations; // uint256 is permission index
    
    uint256 constant NUM_PERMISSIONS = 10; // always has to be adjusted when Permission element is added or removed
    mapping(string => uint256) permissionNameToIndex;
    mapping(uint256 => string) permissionIndexToName;

    mapping(uint256 => PermissionLock) lockedPermissions;

    constructor(address owner_) {
        owner = owner_;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[owner_][i] = true;
        }

        permissionNameToIndex["ChangeFees"] = uint256(Permission.ChangeFees);
        permissionNameToIndex["Buyback"] = uint256(Permission.Buyback);
        permissionNameToIndex["AdjustContractVariables"] = uint256(Permission.AdjustContractVariables);
        permissionNameToIndex["Authorize"] = uint256(Permission.Authorize);
        permissionNameToIndex["Unauthorize"] = uint256(Permission.Unauthorize);
        permissionNameToIndex["PauseUnpauseContract"] = uint256(Permission.PauseUnpauseContract);
        permissionNameToIndex["BypassPause"] = uint256(Permission.BypassPause);
        permissionNameToIndex["LockPermissions"] = uint256(Permission.LockPermissions);
        permissionNameToIndex["ExcludeInclude"] = uint256(Permission.ExcludeInclude);
        permissionNameToIndex["Blacklist"] = uint256(Permission.Blacklist);

        permissionIndexToName[uint256(Permission.ChangeFees)] = "ChangeFees";
        permissionIndexToName[uint256(Permission.Buyback)] = "Buyback";
        permissionIndexToName[uint256(Permission.AdjustContractVariables)] = "AdjustContractVariables";
        permissionIndexToName[uint256(Permission.Authorize)] = "Authorize";
        permissionIndexToName[uint256(Permission.Unauthorize)] = "Unauthorize";
        permissionIndexToName[uint256(Permission.PauseUnpauseContract)] = "PauseUnpauseContract";
        permissionIndexToName[uint256(Permission.BypassPause)] = "BypassPause";
        permissionIndexToName[uint256(Permission.LockPermissions)] = "LockPermissions";
        permissionIndexToName[uint256(Permission.ExcludeInclude)] = "ExcludeInclude";
        permissionIndexToName[uint256(Permission.Blacklist)] = "Blacklist";
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownership required."); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorizedFor(Permission permission) {
        require(!lockedPermissions[uint256(permission)].isLocked, "Permission is locked.");
        require(isAuthorizedFor(msg.sender, permission), string(abi.encodePacked("Not authorized. You need the permission ", permissionIndexToName[uint256(permission)]))); _;
    }

    /**
     * Authorize address for one permission
     */
    function authorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Authorize) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = true;
        emit AuthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Authorize address for multiple permissions
     */
    function authorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Authorize) {
        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = true;
            emit AuthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    /**
     * Remove address' authorization
     */
    function unauthorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = false;
        emit UnauthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Unauthorize address for multiple permissions
     */
    function unauthorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = false;
            emit UnauthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, string memory permissionName) public view returns (bool) {
        return authorizations[adr][permissionNameToIndex[permissionName]];
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, Permission permission) public view returns (bool) {
        return authorizations[adr][uint256(permission)];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        address oldOwner = owner;
        owner = adr;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[oldOwner][i] = false;
            authorizations[owner][i] = true;
        }
        emit OwnershipTransferred(oldOwner, owner);
    }

    /**
     * Get the index of the permission by its name
     */
    function getPermissionNameToIndex(string memory permissionName) public view returns (uint256) {
        return permissionNameToIndex[permissionName];
    }
    
    /**
     * Get the time the timelock expires
     */
    function getPermissionUnlockTime(string memory permissionName) public view returns (uint256) {
        return lockedPermissions[permissionNameToIndex[permissionName]].expiryTime;
    }

    /**
     * Check if the permission is locked
     */
    function isLocked(string memory permissionName) public view returns (bool) {
        return lockedPermissions[permissionNameToIndex[permissionName]].isLocked;
    }

    /*
     *Locks the permission from being used for the amount of time provided
     */
    function lockPermission(string memory permissionName, uint64 time) public virtual authorizedFor(Permission.LockPermissions) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        uint64 expiryTime = uint64(block.timestamp) + time;
        lockedPermissions[permIndex] = PermissionLock(true, expiryTime);
        emit PermissionLocked(permissionName, permIndex, expiryTime);
    }
    
    /*
     * Unlocks the permission if the lock has expired 
     */
    function unlockPermission(string memory permissionName) public virtual {
        require(block.timestamp > getPermissionUnlockTime(permissionName) , "Permission is locked until the expiry time.");
        uint256 permIndex = permissionNameToIndex[permissionName];
        lockedPermissions[permIndex].isLocked = false;
        emit PermissionUnlocked(permissionName, permIndex);
    }

    event PermissionLocked(string permissionName, uint256 permissionIndex, uint64 expiryTime);
    event PermissionUnlocked(string permissionName, uint256 permissionIndex);
    event OwnershipTransferred(address from, address to);
    event AuthorizedFor(address adr, string permissionName, uint256 permissionIndex);
    event UnauthorizedFor(address adr, string permissionName, uint256 permissionIndex);
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
    function claimDividend() external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IBEP20 BUSD = IBEP20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours; // min 1 hour delay
    uint256 public minDistribution = 1 * (10 ** 18); // 1 BUSD minimum auto send

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BUSD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BUSD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = BUSD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            BUSD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external override {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract RisingSun is IBEP20, RSunAuth {
    using SafeMath for uint256;

    address BUSD = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "BUSDShiba";
    string constant _symbol = "BUSDShiba";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10 * 10 ** 9 * (10 ** _decimals); // 10 billion
    uint256 public _maxTxAmount = _totalSupply / 1000; // 0.1%

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) isBlacklisted;

    uint256 liquidityFee = 500;
    uint256 buybackFee = 300;
    uint256 reflectionFee = 400;
    uint256 marketingFee = 200;
    uint256 totalBuyFee = 1400;
    uint256 totalSellFee = 1600;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address pancakeV2BNBPair;
    address[] public pairs;

    uint256 public launchedAt;

    uint256 buybackMultiplierNumerator = 150;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public feesOnNormalTransfers = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () RSunAuth(msg.sender) {
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pancakeV2BNBPair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = ~uint256(0);

        pairs.push(pancakeV2BNBPair);
        distributor = new DividendDistributor(address(router));

        address owner_ = msg.sender;

        isFeeExempt[owner_] = true;
        isTxLimitExempt[owner_] = true;
        isDividendExempt[pancakeV2BNBPair] = true;
        isDividendExempt[address(this)] = true;
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = owner_;
        marketingFeeReceiver = owner_;

        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, ~uint256(0));
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != ~uint256(0)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender], "Address is blacklisted");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

        if(!launched() && recipient == pancakeV2BNBPair){ require(_balances[sender] > 0); launch(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if (isFeeExempt[sender] || isFeeExempt[recipient] || !launched()) return false;

        address[] memory liqPairs = pairs;

        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (sender == liqPairs[i] || recipient == liqPairs[i]) return true;
        }

        return feesOnNormalTransfers;
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return selling ? totalSellFee : totalBuyFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        uint totalFee = totalSellFee;
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(isSell(recipient))).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }
        
    function isSell(address recipient) internal view returns (bool) {
        address[] memory liqPairs = pairs;
        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (recipient == liqPairs[i]) return true;
        }
        return false;
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pancakeV2BNBPair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalBuyFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;

        uint256 balanceBefore = address(this).balance;

        try router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        ) {

            uint256 amountBNB = address(this).balance.sub(balanceBefore);

            uint256 totalBNBFee = totalBuyFee.sub(dynamicLiquidityFee.div(2));

            uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
            uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
            uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

            try distributor.deposit{value: amountBNBReflection}() {} catch {}
            payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");

            if(amountToLiquify > 0){
                try router.addLiquidityETH{ value: amountBNBLiquidity }(
                    address(this),
                    amountToLiquify,
                    0,
                    0,
                    autoLiquidityReceiver,
                    block.timestamp
                ) {
                    emit AutoLiquify(amountToLiquify, amountBNBLiquidity);
                } catch {
                    emit AutoLiquify(0, 0);
                }
            }

            emit SwapBackSuccess(amountToSwap);
        } catch Error(string memory e) {
            emit SwapBackFailed(string(abi.encodePacked("SwapBack failed with error ", e)));
        } catch {
            emit SwapBackFailed("SwapBack failed without an error message from pancakeSwap");
        }
    }

    function triggerBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorizedFor(Permission.Buyback) {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    function clearBuybackMultiplier() external authorizedFor(Permission.Buyback) {
        buybackMultiplierTriggeredAt = 0;
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        try router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }(
            0,
            path,
            to,
            block.timestamp
        ) {
            emit BoughtBack(amount, to);
        } catch Error(string memory reason) {
            revert(string(abi.encodePacked("Buyback failed with error ", reason)));
        } catch {
            revert("Buyback failed without an error message from pancakeSwap");
        }
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorizedFor(Permission.AdjustContractVariables) {
        require(numerator / denominator <= 3 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        emit Launched(block.number, block.timestamp);
    }

    function setTxLimit(uint256 amount) external authorizedFor(Permission.AdjustContractVariables) {
        require(amount >= _totalSupply / 2000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        require(holder != address(this) && holder != pancakeV2BNBPair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator, uint256 _totalSellFee) external authorizedFor(Permission.AdjustContractVariables) {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        totalSellFee = _totalSellFee;
        require(totalBuyFee <= feeDenominator / 10, "Buy fee too high");
        require(totalSellFee <= feeDenominator / 5, "Sell fee too high");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorizedFor(Permission.AdjustContractVariables) {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorizedFor(Permission.AdjustContractVariables) {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorizedFor(Permission.AdjustContractVariables) {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorizedFor(Permission.AdjustContractVariables) {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorizedFor(Permission.AdjustContractVariables) {
        require(gas <= 1000000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pancakeV2BNBPair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function claimDividend() external {
        distributor.claimDividend();
    }
    
    function addPair(address pair) external authorizedFor(Permission.AdjustContractVariables) {
        pairs.push(pair);
    }
    
    function removeLastPair() external authorizedFor(Permission.AdjustContractVariables) {
        pairs.pop();
    }
    
    function setFeesOnNormalTransfers(bool _enabled) external authorizedFor(Permission.AdjustContractVariables) {
        feesOnNormalTransfers = _enabled;
    }
        
    function setIsBlacklisted(address adr, bool blacklisted) external authorizedFor(Permission.Blacklist) {
        isBlacklisted[adr] = blacklisted;
    }

    function setLaunchedAt(uint256 launched_) external authorizedFor(Permission.AdjustContractVariables) {
        launchedAt = launched_;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
    event BoughtBack(uint256 amount, address to);
    event Launched(uint256 blockNumber, uint256 timestamp);
    event SwapBackSuccess(uint256 amount);
    event SwapBackFailed(string message);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"AuthorizedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"BoughtBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiryTime","type":"uint64"}],"name":"PermissionLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"PermissionUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SwapBackFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"UnauthorizedFor","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"authorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"authorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionNameToIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"enum Permission","name":"permission","type":"uint8"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"},{"internalType":"uint64","name":"time","type":"uint64"}],"name":"lockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLastPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launched_","type":"uint256"}],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"unauthorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"unauthorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"unlockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d561790915560068054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560078054821661dead1790556008805490911690556200006e6009600a62000b76565b6200007f906402540be40062000c37565b6009556103e860095462000094919062000b0c565b600a556101f460115561012c60125561019060135560c86014908155610578601555610640601655612710601755601a556064601b81905560966020556021556107086023556024805460ff199081169091556207a1206025556026805490911660011790556009546200010c906113889062000b0c565b6027553480156200011c57600080fd5b50600080546001600160a01b031916339081178255905b600a81101562000181576001600160a01b0382166000908152600160208181526040808420858552909152909120805460ff1916909117905580620001788162000c96565b91505062000133565b506000604051694368616e67654665657360b01b8152600290600a01908152604051908190036020019020556001604051664275796261636b60c81b81526002906007019081526040519081900360200190205560026040517f41646a757374436f6e74726163745661726961626c6573000000000000000000815260029060170190815260405190819003602001902055600360405168417574686f72697a6560b81b81526002906009019081526040519081900360200190205560046040516a556e617574686f72697a6560a81b8152600290600b019081526040519081900360200190205560056040517f5061757365556e7061757365436f6e747261637400000000000000000000000081526002906014019081526040519081900360200190205560066040516a427970617373506175736560a81b8152600290600b019081526040519081900360200190205560076040516e4c6f636b5065726d697373696f6e7360881b8152600290600f019081526040519081900360200190205560086040516d4578636c756465496e636c75646560901b8152600290600e0190815260405190819003602001902055600960405168109b1858dadb1a5cdd60ba1b8152600290600901908152604080519182900360209081018320939093558181019052600a8152694368616e67654665657360b01b82820190815260008052600390925251620003b6917f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff9162000a28565b506040805180820190915260078152664275796261636b60c81b6020808301918252600160005260039052905162000410917fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c9162000a28565b5060408051808201909152601781527f41646a757374436f6e74726163745661726961626c65730000000000000000006020808301918252600260005260039052905162000480917fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d9162000a28565b50604080518082019091526009815268417574686f72697a6560b81b60208083019182526003600081905290529051620004dc917fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af9162000a28565b5060408051808201909152600b81526a556e617574686f72697a6560a81b602080830191825260046000526003905290516200053a917f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724659162000a28565b5060408051808201909152601481527f5061757365556e7061757365436f6e747261637400000000000000000000000060208083019182526005600052600390529051620005aa917f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422509162000a28565b5060408051808201909152600b81526a427970617373506175736560a81b6020808301918252600660005260039052905162000608917fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f39162000a28565b5060408051808201909152600f81526e4c6f636b5065726d697373696f6e7360881b602080830191825260076000526003905290516200066a917ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd29162000a28565b5060408051808201909152600e81526d4578636c756465496e636c75646560901b60208083019182526008600052600390529051620006cb917f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe9162000a28565b5060408051808201909152600980825268109b1858dadb1a5cdd60ba1b6020808401918252600092909252600390915290516200072a917f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4589162000a28565b5050601c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200078c57600080fd5b505afa158015620007a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c7919062000adc565b6006546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200081457600080fd5b505af115801562000829573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200084f919062000adc565b601d80546001600160a01b039283166001600160a01b0319918216178255306000908152600c60209081526040808320601c805488168552925280832060001990559354601e805460018101825593527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350909201805490931691851691909117909155549051911690620008e39062000ab7565b6001600160a01b039091168152602001604051809103906000f08015801562000910573d6000803e3d6000fd5b5060248054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600d60208181526040808420805460ff199081166001908117909255600e8085528387208054831684179055601d5489168752600f8086528488208054841685179055308852848820805484168517905595855283872080548316841790558452828620805482168317905560075490971685529282528084208054909616909217909455601880546001600160a01b031990811685179091556019805490911684179055600954838352600b85528183208190559051908152919283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000cca565b82805462000a369062000c59565b90600052602060002090601f01602090048101928262000a5a576000855562000aa5565b82601f1062000a7557805160ff191683800117855562000aa5565b8280016001018555821562000aa5579182015b8281111562000aa557825182559160200191906001019062000a88565b5062000ab392915062000ac5565b5090565b61107e80620054aa83390190565b5b8082111562000ab3576000815560010162000ac6565b60006020828403121562000aee578081fd5b81516001600160a01b038116811462000b05578182fd5b9392505050565b60008262000b2857634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111562000b6e57816000190482111562000b525762000b5262000cb4565b8085161562000b6057918102915b93841c939080029062000b32565b509250929050565b600062000b0560ff84168360008262000b925750600162000c31565b8162000ba15750600062000c31565b816001811462000bba576002811462000bc55762000be5565b600191505062000c31565b60ff84111562000bd95762000bd962000cb4565b50506001821b62000c31565b5060208310610133831016604e8410600b841016171562000c0a575081810a62000c31565b62000c16838362000b2d565b806000190482111562000c2d5762000c2d62000cb4565b0290505b92915050565b600081600019048311821515161562000c545762000c5462000cb4565b500290565b600181811c9082168062000c6e57607f821691505b6020821081141562000c9057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000cad5762000cad62000cb4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6147d08062000cda6000396000f3fe6080604052600436106103845760003560e01c806386f6c3c1116101d1578063c41235a611610102578063e96fada2116100a0578063f3a54f2c1161006f578063f3a54f2c14610a5a578063f708a64f14610a7a578063f84ba65d14610a9a578063f887ea4014610aba57600080fd5b8063e96fada2146109e5578063f0fc6bca14610a05578063f1f3bca314610a1a578063f2fde38b14610a3a57600080fd5b8063d806d12f116100dc578063d806d12f1461094a578063dd62ed3e1461095f578063df20fd49146109a5578063e75cae79146109c557600080fd5b8063c41235a6146108ea578063ca33e64c1461090a578063d51ed1c81461092a57600080fd5b8063a4b45c001161016f578063b210b06d11610149578063b210b06d1461087f578063b91ac78814610894578063bf56b371146108b4578063c2b7bbb6146108ca57600080fd5b8063a4b45c001461081f578063a9059cbb1461083f578063af05cf931461085f57600080fd5b806395d89b41116101ab57806395d89b41146103f0578063971563fc146107bf5780639d1944f5146107df578063a0e38492146107ff57600080fd5b806386f6c3c11461074d578063893d20e81461076d5780638da5cb5b1461079f57600080fd5b80632d48e896116102b65780635c85974f1161025457806370a082311161022357806370a08231146106c15780637d1db4a5146106f75780638032eccb1461070d5780638101cae31461072d57600080fd5b80635c85974f14610647578063658d4b7f146106675780636a6e3cbe146106875780636ddd1713146106a757600080fd5b806339e67c8a1161029057806339e67c8a146105cd578063571ac8b0146105ed57806357b785411461060d5780635abe67111461062d57600080fd5b80632d48e896146105625780632f54bf6e14610582578063313ce567146105b157600080fd5b806318160ddd11610323578063201e7991116102fd578063201e7991146104ed5780632375ce401461050d57806323b872dd1461052d5780632b112e491461054d57600080fd5b806318160ddd146104985780631ad6084f146104ad5780631e8f5283146104cd57600080fd5b806306fdde031161035f57806306fdde03146103f057806307858b0214610428578063095ea7b3146104485780631161ae391461047857600080fd5b806293dc14146103905780630445b667146103a757806306fbdcd8146103d057600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a5610ada565b005b3480156103b357600080fd5b506103bd60275481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103bd6103eb366004614030565b610bdd565b3480156103fc57600080fd5b50604080518082018252600981526842555344536869626160b81b602082015290516103c79190614467565b34801561043457600080fd5b506103a5610443366004614030565b610c05565b34801561045457600080fd5b50610468610463366004613fd0565b610ce7565b60405190151581526020016103c7565b34801561048457600080fd5b506104686104933660046140fc565b610d54565b3480156104a457600080fd5b506009546103bd565b3480156104b957600080fd5b506103a56104c8366004613e9b565b610d68565b3480156104d957600080fd5b506103a56104e8366004613f82565b610f98565b3480156104f957600080fd5b506103a56105083660046140fc565b6110f2565b34801561051957600080fd5b506103a561052836600461411d565b6111b4565b34801561053957600080fd5b50610468610548366004613e5b565b61129b565b34801561055957600080fd5b506103bd61135d565b34801561056e57600080fd5b506103a561057d3660046140fc565b6113af565b34801561058e57600080fd5b5061046861059d366004613e07565b6000546001600160a01b0391821691161490565b3480156105bd57600080fd5b50604051600981526020016103c7565b3480156105d957600080fd5b506103a56105e83660046140c2565b6114d3565b3480156105f957600080fd5b50610468610608366004613e07565b61158f565b34801561061957600080fd5b50610468610628366004613f52565b61159d565b34801561063957600080fd5b506024546104689060ff1681565b34801561065357600080fd5b506103a56106623660046140c2565b6115f1565b34801561067357600080fd5b506103a5610682366004613f1e565b6116c9565b34801561069357600080fd5b506103a56106a23660046140da565b6117bd565b3480156106b357600080fd5b506026546104689060ff1681565b3480156106cd57600080fd5b506103bd6106dc366004613e07565b6001600160a01b03166000908152600b602052604090205490565b34801561070357600080fd5b506103bd600a5481565b34801561071957600080fd5b50610468610728366004614030565b6118e2565b34801561073957600080fd5b506103a5610748366004613f82565b611921565b34801561075957600080fd5b506103a5610768366004614175565b611ac0565b34801561077957600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103c7565b3480156107ab57600080fd5b50600054610787906001600160a01b031681565b3480156107cb57600080fd5b506103a56107da36600461406b565b611c50565b3480156107eb57600080fd5b506103a56107fa3660046140c2565b611de9565b34801561080b57600080fd5b506103a561081a366004613f1e565b611eb5565b34801561082b57600080fd5b506103a561083a366004613e23565b611fa9565b34801561084b57600080fd5b5061046861085a366004613fd0565b61208e565b34801561086b57600080fd5b506103a561087a366004613e9b565b61209b565b34801561088b57600080fd5b506103a5612273565b3480156108a057600080fd5b506107876108af3660046140c2565b612343565b3480156108c057600080fd5b506103bd601f5481565b3480156108d657600080fd5b506103a56108e5366004613e07565b61236d565b3480156108f657600080fd5b50610468610905366004613f82565b612476565b34801561091657600080fd5b50601854610787906001600160a01b031681565b34801561093657600080fd5b506103bd6109453660046140c2565b6124cb565b34801561095657600080fd5b506103bd61250f565b34801561096b57600080fd5b506103bd61097a366004613e23565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156109b157600080fd5b506103a56109c0366004614015565b612584565b3480156109d157600080fd5b506103bd6109e0366004614030565b612652565b3480156109f157600080fd5b50601954610787906001600160a01b031681565b348015610a1157600080fd5b506103a561269d565b348015610a2657600080fd5b506103bd610a35366004613ffb565b612707565b348015610a4657600080fd5b506103a5610a55366004613e07565b612770565b348015610a6657600080fd5b506103a5610a75366004613ffb565b61288d565b348015610a8657600080fd5b506103a5610a95366004613f1e565b612957565b348015610aa657600080fd5b506103a5610ab5366004613f1e565b612b0f565b348015610ac657600080fd5b50601c54610787906001600160a01b031681565b60026000819052600460205260008051602061477b8339815191525460ff1615610b1f5760405162461bcd60e51b8152600401610b16906144cf565b60405180910390fd5b610b29338261159d565b60036000836009811115610b4d57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001610b6b91906142dc565b60405160208183030381529060405290610b985760405162461bcd60e51b8152600401610b169190614467565b50601e805480610bb857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600282604051610bef9190614236565b9081526020016040518091039020549050919050565b610c0e81612652565b4211610c705760405162461bcd60e51b815260206004820152602b60248201527f5065726d697373696f6e206973206c6f636b656420756e74696c20746865206560448201526a3c3834b93c903a34b6b29760a91b6064820152608401610b16565b6000600282604051610c829190614236565b9081526040805191829003602090810183205460008181526004909252919020805460ff1916905591507ffc8b383b99ea2b22b71f1093a47597b46df7078bee32a803a3bdd4a206723b8890610cdb908490849061447a565b60405180910390a15050565b336000818152600c602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d429086815260200190565b60405180910390a35060015b92915050565b600082610d60836124cb565b119392505050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff1615610db65760405162461bcd60e51b8152600401610b16906144cf565b610dc0338261159d565b60036000836009811115610de457634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001610e0291906142dc565b60405160208183030381529060405290610e2f5760405162461bcd60e51b8152600401610b169190614467565b506000546001600160a01b0385811691161415610e885760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b16565b60005b82811015610f915760006002858584818110610eb757634e487b7160e01b600052603260045260246000fd5b9050602002810190610ec9919061453a565b604051610ed7929190614226565b9081526040805160209281900383019020546001600160a01b0389166000908152600184528281208282529093529120805460ff1916905590507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e1186868685818110610f5357634e487b7160e01b600052603260045260246000fd5b9050602002810190610f65919061453a565b84604051610f7694939291906143b5565b60405180910390a15080610f8981614679565b915050610e8b565b5050505050565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615610fe65760405162461bcd60e51b8152600401610b16906144cf565b610ff0338261159d565b6003600083600981111561101457634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161103291906142dc565b6040516020818303038152906040529061105f5760405162461bcd60e51b8152600401610b169190614467565b5060006002836040516110729190614236565b908152604080519182900360209081018320546001600160a01b0388166000908152600180845284822083835290935292909220805460ff1916909117905591507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643906110e4908690869085906143fe565b60405180910390a150505050565b60026000819052600460205260008051602061477b8339815191525460ff161561112e5760405162461bcd60e51b8152600401610b16906144cf565b611138338261159d565b6003600083600981111561115c57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161117a91906142dc565b604051602081830303815290604052906111a75760405162461bcd60e51b8152600401610b169190614467565b5050601a91909155601b55565b60026000819052600460205260008051602061477b8339815191525460ff16156111f05760405162461bcd60e51b8152600401610b16906144cf565b6111fa338261159d565b6003600083600981111561121e57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161123c91906142dc565b604051602081830303815290604052906112695760405162461bcd60e51b8152600401610b169190614467565b50600361127684866145ca565b1115801561128357508284115b61128c57600080fd5b50602092909255602155602355565b6001600160a01b0383166000908152600c6020908152604080832033845290915281205460001914611348576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c82528381203382529091529190912054611323918490612c03565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b611353848484612c3d565b90505b9392505050565b6008546001600160a01b03166000908152600b60205260408120546113aa906007546001600160a01b03166000908152600b60205260409020546113a49060095490612fd9565b90612fd9565b905090565b60026000819052600460205260008051602061477b8339815191525460ff16156113eb5760405162461bcd60e51b8152600401610b16906144cf565b6113f5338261159d565b6003600083600981111561141957634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161143791906142dc565b604051602081830303815290604052906114645760405162461bcd60e51b8152600401610b169190614467565b50602480546040516316a4744b60e11b81526004810186905291820184905261010090046001600160a01b031690632d48e896906044015b600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b50505050505050565b60026000819052600460205260008051602061477b8339815191525460ff161561150f5760405162461bcd60e51b8152600401610b16906144cf565b611519338261159d565b6003600083600981111561153d57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161155b91906142dc565b604051602081830303815290604052906115885760405162461bcd60e51b8152600401610b169190614467565b5050601f55565b6000610d4e82600019610ce7565b6001600160a01b0382166000908152600160205260408120818360098111156115d657634e487b7160e01b600052602160045260246000fd5b815260208101919091526040016000205460ff169392505050565b60026000819052600460205260008051602061477b8339815191525460ff161561162d5760405162461bcd60e51b8152600401610b16906144cf565b611637338261159d565b6003600083600981111561165b57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161167991906142dc565b604051602081830303815290604052906116a65760405162461bcd60e51b8152600401610b169190614467565b506107d06009546116b791906145ca565b8210156116c357600080fd5b50600a55565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156117175760405162461bcd60e51b8152600401610b16906144cf565b611721338261159d565b6003600083600981111561174557634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161176391906142dc565b604051602081830303815290604052906117905760405162461bcd60e51b8152600401610b169190614467565b50506001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff161561180b5760405162461bcd60e51b8152600401610b16906144cf565b611815338261159d565b6003600083600981111561183957634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161185791906142dc565b604051602081830303815290604052906118845760405162461bcd60e51b8152600401610b169190614467565b5060075461189c9084906001600160a01b031661301b565b81156118dd57426022556023546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b505050565b6000600460006002846040516118f89190614236565b908152604080516020928190038301902054835290820192909252016000205460ff1692915050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff161561196f5760405162461bcd60e51b8152600401610b16906144cf565b611979338261159d565b6003600083600981111561199d57634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016119bb91906142dc565b604051602081830303815290604052906119e85760405162461bcd60e51b8152600401610b169190614467565b506000546001600160a01b0384811691161415611a415760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b16565b6000600283604051611a539190614236565b908152604080519182900360209081018320546001600160a01b038816600090815260018352838120828252909252919020805460ff1916905591507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e11906110e4908690869085906143fe565b60026000819052600460205260008051602061477b8339815191525460ff1615611afc5760405162461bcd60e51b8152600401610b16906144cf565b611b06338261159d565b60036000836009811115611b2a57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611b4891906142dc565b60405160208183030381529060405290611b755760405162461bcd60e51b8152600401610b169190614467565b506011879055601286905560138590556014849055611ba084611b9a87818b8b61324d565b9061324d565b60155560178390556016829055611bb8600a846145ca565b6015541115611bfc5760405162461bcd60e51b815260206004820152601060248201526f084eaf240cccaca40e8dede40d0d2ced60831b6044820152606401610b16565b6005601754611c0b91906145ca565b60165411156114ca5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840cccaca40e8dede40d0d2ced607b1b6044820152606401610b16565b6007600081905260046020527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515460ff1615611c9e5760405162461bcd60e51b8152600401610b16906144cf565b611ca8338261159d565b60036000836009811115611ccc57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611cea91906142dc565b60405160208183030381529060405290611d175760405162461bcd60e51b8152600401610b169190614467565b506000600284604051611d2a9190614236565b9081526040519081900360200190205490506000611d48844261459e565b6040805180820182526001815267ffffffffffffffff83811660208084019182526000888152600490915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055519091507f1a64a9fcf40ce1b5dcb813e1f2ef6c6f70310b51c853865d4bfe7ca8f37d854f90611dda9087908590859061449c565b60405180910390a15050505050565b60026000819052600460205260008051602061477b8339815191525460ff1615611e255760405162461bcd60e51b8152600401610b16906144cf565b611e2f338261159d565b60036000836009811115611e5357634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611e7191906142dc565b60405160208183030381529060405290611e9e5760405162461bcd60e51b8152600401610b169190614467565b50620f4240821115611eaf57600080fd5b50602555565b6009600081905260046020527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9335460ff1615611f035760405162461bcd60e51b8152600401610b16906144cf565b611f0d338261159d565b60036000836009811115611f3157634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611f4f91906142dc565b60405160208183030381529060405290611f7c5760405162461bcd60e51b8152600401610b169190614467565b50506001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b60026000819052600460205260008051602061477b8339815191525460ff1615611fe55760405162461bcd60e51b8152600401610b16906144cf565b611fef338261159d565b6003600083600981111561201357634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161203191906142dc565b6040516020818303038152906040529061205e5760405162461bcd60e51b8152600401610b169190614467565b5050601880546001600160a01b039384166001600160a01b03199182161790915560198054929093169116179055565b6000611356338484612c3d565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff16156120e95760405162461bcd60e51b8152600401610b16906144cf565b6120f3338261159d565b6003600083600981111561211757634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161213591906142dc565b604051602081830303815290604052906121625760405162461bcd60e51b8152600401610b169190614467565b5060005b82811015610f91576000600285858481811061219257634e487b7160e01b600052603260045260246000fd5b90506020028101906121a4919061453a565b6040516121b2929190614226565b9081526040805160209281900383019020546001600160a01b0389166000908152600180855283822083835290945291909120805460ff191690921790915590507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec6438686868581811061223557634e487b7160e01b600052603260045260246000fd5b9050602002810190612247919061453a565b8460405161225894939291906143b5565b60405180910390a1508061226b81614679565b915050612166565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff16156122c15760405162461bcd60e51b8152600401610b16906144cf565b6122cb338261159d565b600360008360098111156122ef57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161230d91906142dc565b6040516020818303038152906040529061233a5760405162461bcd60e51b8152600401610b169190614467565b50506000602255565b601e818154811061235357600080fd5b6000918252602090912001546001600160a01b0316905081565b60026000819052600460205260008051602061477b8339815191525460ff16156123a95760405162461bcd60e51b8152600401610b16906144cf565b6123b3338261159d565b600360008360098111156123d757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016123f591906142dc565b604051602081830303815290604052906124225760405162461bcd60e51b8152600401610b169190614467565b5050601e80546001810182556000919091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260016020526040808220905182906002906124a1908690614236565b908152604080516020928190038301902054835290820192909252016000205460ff169392505050565b6000610d4e6124d861135d565b601d546001600160a01b03166000908152600b6020526040902054612509906125029060026132ac565b85906132ac565b9061332b565b60008060165490506000612534426113a460235460225461324d90919063ffffffff16565b90506000612557836113a4602154612509602054886132ac90919063ffffffff16565b905061257c61257560235461250985856132ac90919063ffffffff16565b849061324d565b935050505090565b60026000819052600460205260008051602061477b8339815191525460ff16156125c05760405162461bcd60e51b8152600401610b16906144cf565b6125ca338261159d565b600360008360098111156125ee57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161260c91906142dc565b604051602081830303815290604052906126395760405162461bcd60e51b8152600401610b169190614467565b50506026805460ff191692151592909217909155602755565b6000600460006002846040516126689190614236565b9081526040805160209281900383019020548352908201929092520160002054610100900467ffffffffffffffff1692915050565b602460019054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126ed57600080fd5b505af1158015612701573d6000803e3d6000fd5b50505050565b600043601f5460016127199190614586565b1061272c57601754610d4e906001612fd9565b81801561274e57504261274c60235460225461324d90919063ffffffff16565b115b1561275b57610d4e61250f565b8161276857601554610d4e565b505060165490565b6000546001600160a01b031633146127c05760405162461bcd60e51b815260206004820152601360248201527227bbb732b939b434b8103932b8bab4b932b21760691b6044820152606401610b16565b600080546001600160a01b038381166001600160a01b0319831617835516905b600a811015612848576001600160a01b0380831660009081526001602081815260408084208685528252808420805460ff199081169091558454909516845282825280842086855290915290912080549092161790558061284081614679565b9150506127e0565b50600054604080516001600160a01b03808516825290921660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09101610cdb565b60026000819052600460205260008051602061477b8339815191525460ff16156128c95760405162461bcd60e51b8152600401610b16906144cf565b6128d3338261159d565b600360008360098111156128f757634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161291591906142dc565b604051602081830303815290604052906129425760405162461bcd60e51b8152600401610b169190614467565b50506024805460ff1916911515919091179055565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156129a55760405162461bcd60e51b8152600401610b16906144cf565b6129af338261159d565b600360008360098111156129d357634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016129f191906142dc565b60405160208183030381529060405290612a1e5760405162461bcd60e51b8152600401610b169190614467565b506001600160a01b0383163014801590612a465750601d546001600160a01b03848116911614155b612a4f57600080fd5b6001600160a01b0383166000908152600f60205260409020805460ff19168315801591909117909155612abe5760248054604051630a5b654b60e11b81526001600160a01b038681166004830152600093820193909352610100909104909116906314b6ca969060440161149c565b602480546001600160a01b038581166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca969060440161149c565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff1615612b5d5760405162461bcd60e51b8152600401610b16906144cf565b612b67338261159d565b60036000836009811115612b8b57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001612ba991906142dc565b60405160208183030381529060405290612bd65760405162461bcd60e51b8152600401610b169190614467565b50506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60008184841115612c275760405162461bcd60e51b8152600401610b169190614467565b506000612c348486614609565b95945050505050565b6001600160a01b03831660009081526010602052604081205460ff1615612c9f5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610b16565b60285460ff1615612cbc57612cb584848461336d565b9050611356565b612cc68483613453565b612cce6134c0565b15612cdb57612cdb61350f565b601f54158015612cf85750601d546001600160a01b038481169116145b15612d27576001600160a01b0384166000908152600b6020526040902054612d1f57600080fd5b612d27613a31565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b9091529190912054612d79918490612c03565b6001600160a01b0385166000908152600b6020526040812091909155612d9f8585613a71565b612da95782612db4565b612db4858585613be3565b6001600160a01b0385166000908152600b6020526040902054909150612dda908261324d565b6001600160a01b038086166000908152600b60209081526040808320949094559188168152600f909152205460ff16612e8657602480546001600160a01b038781166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca9690604401600060405180830381600087803b158015612e7357600080fd5b505af1925050508015612e84575060015b505b6001600160a01b0384166000908152600f602052604090205460ff16612f1f57602480546001600160a01b038681166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca9690604401600060405180830381600087803b158015612f0c57600080fd5b505af1925050508015612f1d575060015b505b602480546025546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169163ffb2c4799101600060405180830381600087803b158015612f6f57600080fd5b505af1925050508015612f80575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fc691815260200190565b60405180910390a3506001949350505050565b600061135683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c03565b6028805460ff19166001179055604080516002808252606082018352600092602083019080368337505060065482519293506001600160a01b03169183915060009061307757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106130b957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601c5460405163b6f9de9560e01b815291169063b6f9de959085906130ff90600090869088904290600401614432565b6000604051808303818588803b15801561311857600080fd5b505af19350505050801561312a575060015b6131fd576131366146c0565b806308c379a0141561318d575061314b6146d8565b80613156575061318f565b806040516020016131679190614252565b60408051601f198184030181529082905262461bcd60e51b8252610b1691600401614467565b505b60405162461bcd60e51b815260206004820152603860248201527f4275796261636b206661696c656420776974686f757420616e206572726f722060448201527f6d6573736167652066726f6d2070616e63616b655377617000000000000000006064820152608401610b16565b604080518481526001600160a01b03841660208201527fe27ecc9c85b6367f7abddc4723456b31bb75434354f83adc03236515846f31e1910160405180910390a150506028805460ff1916905550565b60008061325a8385614586565b9050838110156113565760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b16565b6000826132bb57506000610d4e565b60006132c783856145ea565b9050826132d485836145ca565b146113565760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b16565b600061135683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c82565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b909152918220546133be918490612c03565b6001600160a01b038086166000908152600b602052604080822093909355908516815220546133ed908361324d565b6001600160a01b038085166000818152600b602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906134419086815260200190565b60405180910390a35060019392505050565b600a548111158061347c57506001600160a01b0382166000908152600e602052604090205460ff165b6134bc5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b16565b5050565b601d546000906001600160a01b031633148015906134e1575060285460ff16155b80156134ef575060265460ff165b80156113aa575050602754306000908152600b6020526040902054101590565b6028805460ff19166001179055601a54601b5460009161352e91610d54565b61353a5760115461353d565b60005b905060006135616002612509601554612509866027546132ac90919063ffffffff16565b9050600061357a82602754612fd990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106135c257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065482519116908290600190811061360157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac9479061364b9086906000908790309042906004016144fe565b600060405180830381600087803b15801561366557600080fd5b505af1925050508015613676575060015b613790576136826146c0565b806308c379a014156136fc57506136976146d8565b806136a257506136fe565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e02816040516020016136d49190614297565b60408051601f19818403018152908290526136ee91614467565b60405180910390a150613a20565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e026040516137839060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a1613a20565b600061379c4783612fd9565b905060006137b76137ae88600261332b565b60155490612fd9565b905060006137cc60026125098481878d6132ac565b905060006137e983612509601354876132ac90919063ffffffff16565b9050600061380684612509601454886132ac90919063ffffffff16565b9050602460019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385857600080fd5b505af19350505050801561386a575060015b506019546040516001600160a01b03909116906175309083906000818181858888f193505050503d80600081146138bd576040519150601f19603f3d011682016040523d82523d6000602084013e6138c2565b606091505b5050891590506139e757601c5460185460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b15801561393757600080fd5b505af193505050508015613968575060408051601f3d908101601f1916820190925261396591810190614148565b60015b6139aa5760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a16139e7565b5050604080518b8152602081018690527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518881527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a150505050505b50506028805460ff19169055505050565b43601f819055604080519182524260208301527f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b19001910160405180910390a1565b6001600160a01b0382166000908152600d602052604081205460ff1680613ab057506001600160a01b0382166000908152600d602052604090205460ff165b80613abb5750601f54155b15613ac857506000610d4e565b6000601e805480602002602001604051908101604052809291908181526020018280548015613b2057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b02575b5050505050905060005b8151811015613bd457818181518110613b5357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316856001600160a01b03161480613bb25750818181518110613b9557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316846001600160a01b0316145b15613bc257600192505050610d4e565b80613bcc81614679565b915050613b2a565b505060245460ff169392505050565b600080613c02601754612509613bfb610a3588613cb0565b86906132ac565b306000908152600b6020526040902054909150613c1f908261324d565b306000818152600b6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613c709085815260200190565b60405180910390a3612c348382612fd9565b60008183613ca35760405162461bcd60e51b8152600401610b169190614467565b506000612c3484866145ca565b600080601e805480602002602001604051908101604052809291908181526020018280548015613d0957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613ceb575b5050505050905060005b8151811015613d7957818181518110613d3c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316846001600160a01b03161415613d67575060019392505050565b80613d7181614679565b915050613d13565b5060009392505050565b80358015158114613d9357600080fd5b919050565b600082601f830112613da8578081fd5b813567ffffffffffffffff811115613dc257613dc26146aa565b604051613dd9601f8301601f19166020018261464c565b818152846020838601011115613ded578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613e18578081fd5b813561135681614762565b60008060408385031215613e35578081fd5b8235613e4081614762565b91506020830135613e5081614762565b809150509250929050565b600080600060608486031215613e6f578081fd5b8335613e7a81614762565b92506020840135613e8a81614762565b929592945050506040919091013590565b600080600060408486031215613eaf578283fd5b8335613eba81614762565b9250602084013567ffffffffffffffff80821115613ed6578384fd5b818601915086601f830112613ee9578384fd5b813581811115613ef7578485fd5b8760208260051b8501011115613f0b578485fd5b6020830194508093505050509250925092565b60008060408385031215613f30578182fd5b8235613f3b81614762565b9150613f4960208401613d83565b90509250929050565b60008060408385031215613f64578182fd5b8235613f6f81614762565b91506020830135600a8110613e50578182fd5b60008060408385031215613f94578182fd5b8235613f9f81614762565b9150602083013567ffffffffffffffff811115613fba578182fd5b613fc685828601613d98565b9150509250929050565b60008060408385031215613fe2578182fd5b8235613fed81614762565b946020939093013593505050565b60006020828403121561400c578081fd5b61135682613d83565b60008060408385031215614027578182fd5b613fed83613d83565b600060208284031215614041578081fd5b813567ffffffffffffffff811115614057578182fd5b61406384828501613d98565b949350505050565b6000806040838503121561407d578182fd5b823567ffffffffffffffff80821115614094578384fd5b6140a086838701613d98565b93506020850135915080821682146140b6578283fd5b50809150509250929050565b6000602082840312156140d3578081fd5b5035919050565b600080604083850312156140ec578182fd5b82359150613f4960208401613d83565b6000806040838503121561410e578182fd5b50508035926020909101359150565b600080600060608486031215614131578081fd5b505081359360208301359350604090920135919050565b60008060006060848603121561415c578081fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561418d578384fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000815180845260208085019450808401835b838110156141ef5781516001600160a01b0316875295820195908201906001016141ca565b509495945050505050565b60008151808452614212816020860160208601614620565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251614248818460208701614620565b9190910192915050565b7f4275796261636b206661696c65642077697468206572726f722000000000000081526000825161428a81601a850160208701614620565b91909101601a0192915050565b7f537761704261636b206661696c65642077697468206572726f722000000000008152600082516142cf81601b850160208701614620565b91909101601b0192915050565b7f4e6f7420617574686f72697a65642e20596f75206e656564207468652070657281526000602067036b4b9b9b4b7b7160c51b81840152602882855484600182811c91508083168061432f57607f831692505b86831081141561434d57634e487b7160e01b88526022600452602488fd5b8080156143615760018114614376576143a6565b60ff1985168a880152838a01870195506143a6565b60008b815260209020895b8581101561439c5781548c82018a0152908401908901614381565b505086848b010195505b50939998505050505050505050565b6001600160a01b0385168152606060208201819052810183905282846080830137600080608085840101526080601f19601f860116830101905082604083015295945050505050565b6001600160a01b0384168152606060208201819052600090614422908301856141fa565b9050826040830152949350505050565b84815260806020820152600061444b60808301866141b7565b6001600160a01b03949094166040830152506060015292915050565b60208152600061135660208301846141fa565b60408152600061448d60408301856141fa565b90508260208301529392505050565b6060815260006144af60608301866141fa565b905083602083015267ffffffffffffffff83166040830152949350505050565b6020808252601590820152742832b936b4b9b9b4b7b71034b9903637b1b5b2b21760591b604082015260600190565b85815284602082015260a06040820152600061451d60a08301866141b7565b6001600160a01b0394909416606083015250608001529392505050565b6000808335601e19843603018112614550578283fd5b83018035915067ffffffffffffffff82111561456a578283fd5b60200191503681900382131561457f57600080fd5b9250929050565b6000821982111561459957614599614694565b500190565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614694565b01949350505050565b6000826145e557634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561460457614604614694565b500290565b60008282101561461b5761461b614694565b500390565b60005b8381101561463b578181015183820152602001614623565b838111156127015750506000910152565b601f8201601f1916810167ffffffffffffffff81118282101715614672576146726146aa565b6040525050565b600060001982141561468d5761468d614694565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156146d557600481823e5160e01c5b90565b600060443d10156146e65790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561471657505050505090565b828501915081518181111561472e5750505050505090565b843d87010160208285010111156147485750505050505090565b6147576020828601018761464c565b509095945050505050565b6001600160a01b038116811461477757600080fd5b5056fe91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a26469706673582212201a14cc2e5745932ac399832c0d65c0fa2fc6e6415d8159ac1be5dbcc385d360364736f6c634300080400336080604052600180546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d56179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561007d57600080fd5b5060405161107e38038061107e83398101604081905261009c916100f6565b6001600160a01b0381166100c4577310ed43c718714eb63d5aa57b78b54704e256024e6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610124565b600060208284031215610107578081fd5b81516001600160a01b038116811461011d578182fd5b9392505050565b610f4b806101336000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610d20565b610285565b005b34801561013957600080fd5b506100f8610148366004610d06565b6103fd565b34801561015957600080fd5b5061012b610168366004610d99565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610d06565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b610711565b34801561025b57600080fd5b5061012b61026a366004610d69565b61071c565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c382610838565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b156103825761038282610963565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610ab0565b90610afb565b6008556001600160a01b03821660009081526007602052604090208190556103da81610b5f565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610b5f565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610ab0565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610d81565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061058f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260018054835192169183919081106105cd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061061390600090869030904290600401610dba565b6000604051808303818588803b15801561062c57600080fd5b505af1158015610640573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106cf93508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561069157600080fd5b505afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190610d81565b90610ab0565b6009549091506106df9082610afb565b600955600854600c5461070991610700916106fa9085610b7c565b90610bfb565b600b5490610afb565b600b55505050565b61071a33610838565b565b6000546001600160a01b0316331461073357600080fd5b6004548061073f575050565b6000805a905060005b848310801561075657508381105b156108315783600f541061076a576000600f555b6107aa6004600f548154811061079057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610c3d565b156107ef576107ef6004600f54815481106107d557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610838565b6108046107fd5a8490610ab0565b8490610afb565b92505a600f8054919350600061081983610ee4565b9190505550808061082990610ee4565b915050610748565b5050505050565b6001600160a01b0381166000908152600760205260409020546108585750565b6000610863826103fd565b9050801561095f57600a546108789082610afb565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190610d49565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109359082610afb565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610b5f565b5050565b6004805461097390600190610ecd565b8154811061099157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109dd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a2990600190610ecd565b81548110610a4757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a8b57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610af283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c82565b90505b92915050565b600080610b088385610e76565b905083811015610af25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610af5600c546106fa600b5485610b7c90919063ffffffff16565b600082610b8b57506000610af5565b6000610b978385610eae565b905082610ba48583610e8e565b14610af25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000610af283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cbc565b600d546001600160a01b03821660009081526006602052604081205490914291610c679190610e76565b108015610af55750600e54610c7b836103fd565b1192915050565b60008184841115610ca65760405162461bcd60e51b8152600401610b569190610e23565b506000610cb38486610ecd565b95945050505050565b60008183610cdd5760405162461bcd60e51b8152600401610b569190610e23565b506000610cb38486610e8e565b80356001600160a01b0381168114610d0157600080fd5b919050565b600060208284031215610d17578081fd5b610af282610cea565b60008060408385031215610d32578081fd5b610d3b83610cea565b946020939093013593505050565b600060208284031215610d5a578081fd5b81518015158114610af2578182fd5b600060208284031215610d7a578081fd5b5035919050565b600060208284031215610d92578081fd5b5051919050565b60008060408385031215610dab578182fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015610e035784516001600160a01b031683529383019391830191600101610dde565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b81811015610e4f57858101830151858201604001528201610e33565b81811115610e605783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e8957610e89610eff565b500190565b600082610ea957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615610ec857610ec8610eff565b500290565b600082821015610edf57610edf610eff565b500390565b6000600019821415610ef857610ef8610eff565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212204feb15cd81e409554dce6ce3afe2efcf1c5ae501bb1684e6ad63fc08ebd1a24b64736f6c63430008040033

Deployed ByteCode Sourcemap

18570:16527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34172:115;;;;;;;;;;;;;:::i;:::-;;20370:50;;;;;;;;;;;;;;;;;;;20953:25:1;;;20941:2;20926:18;20370:50:0;;;;;;;;10401:157;;;;;;;;;;-1:-1:-1;10401:157:0;;;;;:::i;:::-;;:::i;21757:80::-;;;;;;;;;;-1:-1:-1;21829:5:0;;;;;;;;;;;-1:-1:-1;;;21829:5:0;;;;21757:80;;;;21829:5;21757:80;:::i;11642:389::-;;;;;;;;;;-1:-1:-1;11642:389:0;;;;;:::i;:::-;;:::i;22179:216::-;;;;;;;;;;-1:-1:-1;22179:216:0;;;;;:::i;:::-;;:::i;:::-;;;14400:14:1;;14393:22;14375:41;;14363:2;14348:18;22179:216:0;14330:92:1;33785:150:0;;;;;;;;;;-1:-1:-1;33785:150:0;;;;;:::i;:::-;;:::i;21487:88::-;;;;;;;;;;-1:-1:-1;21560:12:0;;21487:88;;8775:476;;;;;;;;;;-1:-1:-1;8775:476:0;;;;;:::i;:::-;;:::i;7493:293::-;;;;;;;;;;-1:-1:-1;7493:293:0;;;;;:::i;:::-;;:::i;32799:222::-;;;;;;;;;;-1:-1:-1;32799:222:0;;;;;:::i;:::-;;:::i;30077:381::-;;;;;;;;;;-1:-1:-1;30077:381:0;;;;;:::i;:::-;;:::i;22691:364::-;;;;;;;;;;-1:-1:-1;22691:364:0;;;;;:::i;:::-;;:::i;33448:142::-;;;;;;;;;;;;;:::i;33029:222::-;;;;;;;;;;-1:-1:-1;33029:222:0;;;;;:::i;:::-;;:::i;9311:103::-;;;;;;;;;;-1:-1:-1;9311:103:0;;;;;:::i;:::-;9366:4;9401:5;-1:-1:-1;;;;;9390:16:0;;;9401:5;;9390:16;;9311:103;21581:80;;;;;;;;;;-1:-1:-1;21581:80:0;;19022:1;22250:36:1;;22238:2;22223:18;21581:80:0;22205:87:1;34635:142:0;;;;;;;;;;-1:-1:-1;34635:142:0;;;;;:::i;:::-;;:::i;22403:116::-;;;;;;;;;;-1:-1:-1;22403:116:0;;;;;:::i;:::-;;:::i;9735:154::-;;;;;;;;;;-1:-1:-1;9735:154:0;;;;;:::i;:::-;;:::i;20205:41::-;;;;;;;;;;-1:-1:-1;20205:41:0;;;;;;;;30698:184;;;;;;;;;;-1:-1:-1;30698:184:0;;;;;:::i;:::-;;:::i;31287:150::-;;;;;;;;;;-1:-1:-1;31287:150:0;;;;;:::i;:::-;;:::i;28933:335::-;;;;;;;;;;-1:-1:-1;28933:335:0;;;;;:::i;:::-;;:::i;20333:30::-;;;;;;;;;;-1:-1:-1;20333:30:0;;;;;;;;21927:105;;;;;;;;;;-1:-1:-1;21927:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;22011:18:0;21993:7;22011:18;;;:9;:18;;;;;;;21927:105;19108:49;;;;;;;;;;;;;;;;10884:166;;;;;;;;;;-1:-1:-1;10884:166:0;;;;;:::i;:::-;;:::i;8335:361::-;;;;;;;;;;-1:-1:-1;8335:361:0;;;;;:::i;:::-;;:::i;31611:702::-;;;;;;;;;;-1:-1:-1;31611:702:0;;;;;:::i;:::-;;:::i;21843:78::-;;;;;;;;;;-1:-1:-1;21895:7:0;21913:5;-1:-1:-1;;;;;21913:5:0;21843:78;;;-1:-1:-1;;;;;11742:32:1;;;11724:51;;11712:2;11697:18;21843:78:0;11679:102:1;4527:20:0;;;;;;;;;;-1:-1:-1;4527:20:0;;;;-1:-1:-1;;;;;4527:20:0;;;11151:406;;;;;;;;;;-1:-1:-1;11151:406:0;;;;;:::i;:::-;;:::i;33259:177::-;;;;;;;;;;-1:-1:-1;33259:177:0;;;;;:::i;:::-;;:::i;34474:153::-;;;;;;;;;;-1:-1:-1;34474:153:0;;;;;:::i;:::-;;:::i;32321:267::-;;;;;;;;;;-1:-1:-1;32321:267:0;;;;;:::i;:::-;;:::i;22527:156::-;;;;;;;;;;-1:-1:-1;22527:156:0;;;;;:::i;:::-;;:::i;7863:408::-;;;;;;;;;;-1:-1:-1;7863:408:0;;;;;:::i;:::-;;:::i;29280:128::-;;;;;;;;;;;;;:::i;19948:22::-;;;;;;;;;;-1:-1:-1;19948:22:0;;;;;:::i;:::-;;:::i;19979:25::-;;;;;;;;;;;;;;;;34035:125;;;;;;;;;;-1:-1:-1;34035:125:0;;;;;:::i;:::-;;:::i;9485:179::-;;;;;;;;;;-1:-1:-1;9485:179:0;;;;;:::i;:::-;;:::i;19715:36::-;;;;;;;;;;-1:-1:-1;19715:36:0;;;;-1:-1:-1;;;;;19715:36:0;;;33598:179;;;;;;;;;;-1:-1:-1;33598:179:0;;;;;:::i;:::-;;:::i;25454:430::-;;;;;;;;;;;;;:::i;22038:133::-;;;;;;;;;;-1:-1:-1;22038:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;22140:19:0;;;22122:7;22140:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;22038:133;32596:195;;;;;;;;;;-1:-1:-1;32596:195:0;;;;;:::i;:::-;;:::i;10630:186::-;;;;;;;;;;-1:-1:-1;10630:186:0;;;;;:::i;:::-;;:::i;19758:35::-;;;;;;;;;;-1:-1:-1;19758:35:0;;;;-1:-1:-1;;;;;19758:35:0;;;33943:80;;;;;;;;;;;;;:::i;25112:334::-;;;;;;;;;;-1:-1:-1;25112:334:0;;;;;:::i;:::-;;:::i;9980:343::-;;;;;;;;;;-1:-1:-1;9980:343:0;;;;;:::i;:::-;;:::i;34299:159::-;;;;;;;;;;-1:-1:-1;34299:159:0;;;;;:::i;:::-;;:::i;30890:389::-;;;;;;;;;;-1:-1:-1;30890:389:0;;;;;:::i;:::-;;:::i;31445:158::-;;;;;;;;;;-1:-1:-1;31445:158:0;;;;;:::i;:::-;;:::i;19886:24::-;;;;;;;;;;-1:-1:-1;19886:24:0;;;;-1:-1:-1;;;;;19886:24:0;;;34172:115;34221:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;;;;;;;;;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;34268:5:::1;:11;;;;;-1:-1:-1::0;;;34268:11:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34268:11:0;;;;;-1:-1:-1;;;;;;34268:11:0::1;::::0;;;;;-1:-1:-1;34172:115:0:o;10401:157::-;10486:7;10513:21;10535:14;10513:37;;;;;;:::i;:::-;;;;;;;;;;;;;;10506:44;;10401:157;;;:::o;11642:389::-;11750:39;11774:14;11750:23;:39::i;:::-;11732:15;:57;11724:114;;;;-1:-1:-1;;;11724:114:0;;18776:2:1;11724:114:0;;;18758:21:1;18815:2;18795:18;;;18788:30;18854:34;18834:18;;;18827:62;-1:-1:-1;;;18905:18:1;;;18898:41;18956:19;;11724:114:0;18748:233:1;11724:114:0;11849:17;11869:21;11891:14;11869:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11957:5;11917:28;;;:17;:28;;;;;;:45;;-1:-1:-1;;11917:45:0;;;11869:37;-1:-1:-1;11978:45:0;;;;11997:14;;11869:37;;11978:45;:::i;:::-;;;;;;;;11642:389;;:::o;22179:216::-;22283:10;22254:4;22271:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22271:32:0;;;;;;;;;;:41;;;22328:37;22254:4;;22271:32;;22328:37;;;;22306:6;20953:25:1;;20941:2;20926:18;;20908:76;22328:37:0;;;;;;;;-1:-1:-1;22383:4:0;22179:216;;;;;:::o;33785:150::-;33865:4;33921:6;33889:29;33909:8;33889:19;:29::i;:::-;:38;;33785:150;-1:-1:-1;;;33785:150:0:o;8775:476::-;8887:22;7165:38;;;;;;;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;8937:5:0::1;::::0;-1:-1:-1;;;;;8930:12:0;;::::1;8937:5:::0;::::1;8930:12;;8922:48;;;::::0;-1:-1:-1;;;8922:48:0;;17597:2:1;8922:48:0::1;::::0;::::1;17579:21:1::0;17636:2;17616:18;;;17609:30;-1:-1:-1;;;17655:18:1;;;17648:53;17718:18;;8922:48:0::1;17569:173:1::0;8922:48:0::1;8988:9;8983:261;8999:26:::0;;::::1;8983:261;;;9047:17;9067:21;9089:15;;9105:1;9089:18;;;;;-1:-1:-1::0;;;9089:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;9067:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;9123:19:0;::::1;9156:5;9123:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;:38;;-1:-1:-1;;9123:38:0::1;::::0;;9067:41;-1:-1:-1;9181:51:0::1;9123:19:::0;9202:15;;9218:1;9202:18;;::::1;;;-1:-1:-1::0;;;9202:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;9222:9;9181:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;9027:3:0;::::1;::::0;::::1;:::i;:::-;;;;8983:261;;;;8775:476:::0;;;;:::o;7493:293::-;7579:20;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;7612:17:::1;7632:21;7654:14;7632:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;7680:19:0;::::1;;::::0;;;7713:4:::1;7680:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;7680:37:0::1;::::0;;::::1;::::0;;7632;-1:-1:-1;7733:45:0::1;::::0;::::1;::::0;7695:3;;7752:14;;7632:37;;7733:45:::1;:::i;:::-;;;;;;;;7413:1;7493:293:::0;;;:::o;32799:222::-;32889:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32936:15:0::1;:25:::0;;;;32972:26:::1;:41:::0;32799:222::o;30077:381::-;30194:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;30276:1:0::1;30249:23;30261:11:::0;30249:9;:23:::1;:::i;:::-;:28;;:55;;;;;30293:11;30281:9;:23;30249:55;30241:64;;;::::0;::::1;;-1:-1:-1::0;30316:26:0::1;:38:::0;;;;30365:28:::1;:42:::0;30418:23:::1;:32:::0;30077:381::o;22691:364::-;-1:-1:-1;;;;;22811:19:0;;22791:4;22811:19;;;:11;:19;;;;;;;;22831:10;22811:31;;;;;;;;-1:-1:-1;;22811:46:0;22808:180;;22907:69;;;;;;;;;;;-1:-1:-1;;;22907:69:0;;;;;;;;-1:-1:-1;;;;;22907:19:0;;-1:-1:-1;22907:19:0;;;:11;:19;;;;;22927:10;22907:31;;;;;;;;;;:69;;22943:6;;22907:35;:69::i;:::-;-1:-1:-1;;;;;22873:19:0;;;;;;:11;:19;;;;;;;;22893:10;22873:31;;;;;;;:103;22808:180;23007:40;23021:6;23029:9;23040:6;23007:13;:40::i;:::-;23000:47;;22691:364;;;;;;:::o;33448:142::-;33576:4;;-1:-1:-1;;;;;33576:4:0;33501:7;22011:18;;;:9;:18;;;;;;33528:54;;33555:4;;-1:-1:-1;;;;;33555:4:0;21993:7;22011:18;;;:9;:18;;;;;;33528:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33521:61;;33448:142;:::o;33029:222::-;33131:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;33178:11:0::1;::::0;;:65:::1;::::0;-1:-1:-1;;;33178:65:0;;::::1;::::0;::::1;15358:25:1::0;;;15399:18;;;15392:34;;;33178:11:0::1;::::0;::::1;-1:-1:-1::0;;;;;33178:11:0::1;::::0;:35:::1;::::0;15331:18:1;;33178:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33029:222:::0;;;:::o;34635:142::-;34700:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34747:10:0::1;:22:::0;34635:142::o;22403:116::-;22458:4;22482:29;22490:7;-1:-1:-1;;22482:7:0;:29::i;9735:154::-;-1:-1:-1;;;;;9841:19:0;;9817:4;9841:19;;;:14;:19;;;;;9817:4;9869:10;9861:19;;;;;;-1:-1:-1;;;9861:19:0;;;;;;;;;9841:40;;;;;;;;;;;-1:-1:-1;9841:40:0;;;;;9735:154;-1:-1:-1;;;9735:154:0:o;30698:184::-;30757:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;30837:4:::1;30822:12;;:19;;;;:::i;:::-;30812:6;:29;;30804:38;;;::::0;::::1;;-1:-1:-1::0;30853:12:0::1;:21:::0;30698:184::o;31287:150::-;31363:25;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;31401:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;31401:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31287:150::o;28933:335::-;29027:18;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;29076:4:0::1;::::0;29058:23:::1;::::0;29068:6;;-1:-1:-1;;;;;29076:4:0::1;29058:9;:23::i;:::-;29095:24;29092:169;;;29166:15;29135:28;:46:::0;29225:23:::1;::::0;29201:48:::1;::::0;20953:25:1;;;29201:48:0::1;::::0;20941:2:1;20926:18;29201:48:0::1;;;;;;;29092:169;28933:335:::0;;;:::o;10884:166::-;10953:4;10977:17;:56;10995:21;11017:14;10995:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10977:56;;;;;;;;;;-1:-1:-1;10977:56:0;:65;;;;;-1:-1:-1;;10884:166:0:o;8335:361::-;8423:22;7165:38;;;;;;;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;8473:5:0::1;::::0;-1:-1:-1;;;;;8466:12:0;;::::1;8473:5:::0;::::1;8466:12;;8458:48;;;::::0;-1:-1:-1;;;8458:48:0;;17597:2:1;8458:48:0::1;::::0;::::1;17579:21:1::0;17636:2;17616:18;;;17609:30;-1:-1:-1;;;17655:18:1;;;17648:53;17718:18;;8458:48:0::1;17569:173:1::0;8458:48:0::1;8519:17;8539:21;8561:14;8539:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;8587:19:0;::::1;8620:5;8587:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;;:38;;-1:-1:-1;;8587:38:0::1;::::0;;8539:37;-1:-1:-1;8641:47:0::1;::::0;::::1;::::0;8602:3;;8662:14;;8539:37;;8641:47:::1;:::i;31611:702::-:0;31790:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;31837:12:0::1;:28:::0;;;31876:10:::1;:24:::0;;;31911:13:::1;:30:::0;;;31952:12:::1;:28:::0;;;32005:69:::1;31967:13:::0;32005:50:::1;31927:14:::0;32005:50;31852:13;31889:11;32005:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;31991:11;:83:::0;32085:14:::1;:32:::0;;;32128:12:::1;:28:::0;;;32190:19:::1;32207:2;32102:15:::0;32190:19:::1;:::i;:::-;32175:11;;:34;;32167:63;;;::::0;-1:-1:-1;;;32167:63:0;;17252:2:1;32167:63:0::1;::::0;::::1;17234:21:1::0;17291:2;17271:18;;;17264:30;-1:-1:-1;;;17310:18:1;;;17303:46;17366:18;;32167:63:0::1;17224:166:1::0;32167:63:0::1;32282:1;32265:14;;:18;;;;:::i;:::-;32249:12;;:34;;32241:64;;;::::0;-1:-1:-1;;;32241:64:0;;20237:2:1;32241:64:0::1;::::0;::::1;20219:21:1::0;20276:2;20256:18;;;20249:30;-1:-1:-1;;;20295:18:1;;;20288:47;20352:18;;32241:64:0::1;20209:167:1::0;11151:406:0;11247:26;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;11286:17:::1;11306:21;11328:14;11306:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;-1:-1:-1;11354:17:0::1;11374:30;11400:4:::0;11381:15:::1;11374:30;:::i;:::-;11446:32;::::0;;;;::::1;::::0;;11461:4:::1;11446:32:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;11415:28:0;;;:17:::1;:28:::0;;;;;;:63;;;;;;-1:-1:-1;;11415:63:0;;;;::::1;;-1:-1:-1::0;;11415:63:0;;::::1;::::0;;;::::1;;;::::0;;11494:55;11446:32;;-1:-1:-1;11494:55:0::1;::::0;::::1;::::0;11511:14;;11415:28;;11446:32;;11494:55:::1;:::i;:::-;;;;;;;;7413:1;;11151:406:::0;;;:::o;33259:177::-;33327:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;33389:7:::1;33382:3;:14;;33374:23;;;::::0;::::1;;-1:-1:-1::0;33408:14:0::1;:20:::0;33259:177::o;34474:153::-;34554:20;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;34587:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:32;;-1:-1:-1;;34587:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34474:153::o;32321:267::-;32432:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32479:21:0::1;:46:::0;;-1:-1:-1;;;;;32479:46:0;;::::1;-1:-1:-1::0;;;;;;32479:46:0;;::::1;;::::0;;;32536:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;32321:267::o;22527:156::-;22607:4;22631:44;22645:10;22657:9;22668:6;22631:13;:44::i;7863:408::-;7973:20;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;;8011:9:::1;8006:258;8022:26:::0;;::::1;8006:258;;;8070:17;8090:21;8112:15;;8128:1;8112:18;;;;;-1:-1:-1::0;;;8112:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;8090:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;8146:19:0;::::1;;::::0;;;8179:4:::1;8146:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8146:37:0::1;::::0;;::::1;::::0;;;8090:41;-1:-1:-1;8203:49:0::1;8146:19:::0;8222:15;;8238:1;8222:18;;::::1;;;-1:-1:-1::0;;;8222:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;8242:9;8203:49;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;8050:3:0;::::1;::::0;::::1;:::i;:::-;;;;8006:258;;29280:128:::0;29337:18;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;29399:1:0::1;29368:28;:32:::0;29280:128::o;19948:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19948:22:0;;-1:-1:-1;19948:22:0;:::o;34035:125::-;34089:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34136:5:0::1;:16:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34136:16:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34136:16:0::1;-1:-1:-1::0;;;;;34136:16:0;;;::::1;::::0;;;::::1;::::0;;34035:125::o;9485:179::-;-1:-1:-1;;;;;9598:19:0;;9574:4;9598:19;;;:14;:19;;;;;;9618:37;;9574:4;;9618:21;;:37;;9640:14;;9618:37;:::i;:::-;;;;;;;;;;;;;;;;;9598:58;;;;;;;;;;-1:-1:-1;9598:58:0;;;;;9485:179;-1:-1:-1;;;9485:179:0:o;33598:::-;33666:7;33693:76;33746:22;:20;:22::i;:::-;33716:16;;-1:-1:-1;;;;;33716:16:0;21993:7;22011:18;;;:9;:18;;;;;;33693:48;;33706:34;;33738:1;33706:31;:34::i;:::-;33693:8;;:12;:48::i;:::-;:52;;:76::i;25454:430::-;25503:7;25523:13;25539:12;;25523:28;;25562:21;25586:78;25648:15;25586:57;25619:23;;25586:28;;:32;;:57;;;;:::i;:78::-;25562:102;;25675:19;25697:88;25776:8;25697:74;25742:28;;25697:40;25710:26;;25697:8;:12;;:40;;;;:::i;:88::-;25675:110;;25803:73;25816:59;25851:23;;25816:30;25832:13;25816:11;:15;;:30;;;;:::i;:59::-;25803:8;;:12;:73::i;:::-;25796:80;;;;;25454:430;:::o;32596:195::-;32680:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32727:11:0::1;:22:::0;;-1:-1:-1;;32727:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;32760:13:::1;:23:::0;32596:195::o;10630:186::-;10714:7;10741:17;:56;10759:21;10781:14;10759:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10741:56;;;;;;;;;;-1:-1:-1;10741:56:0;:67;;;;;;;;-1:-1:-1;;10630:186:0:o;33943:80::-;33988:11;;;;;;;;;-1:-1:-1;;;;;33988:11:0;-1:-1:-1;;;;;33988:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33943:80::o;25112:334::-;25168:7;25209:12;25191:10;;25204:1;25191:14;;;;:::i;:::-;:30;25188:67;;25231:14;;:21;;25250:1;25231:18;:21::i;25188:67::-;25268:7;:86;;;;;25339:15;25279:57;25312:23;;25279:28;;:32;;:57;;;;:::i;:::-;:75;25268:86;25265:120;;;25364:18;:16;:18::i;25265:120::-;25402:7;:36;;25427:11;;25402:36;;;-1:-1:-1;;25412:12:0;;;25112:334::o;9980:343::-;9366:4;9401:5;-1:-1:-1;;;;;9401:5:0;6966:10;9390:16;6950:51;;;;-1:-1:-1;;;6950:51:0;;19188:2:1;6950:51:0;;;19170:21:1;19227:2;19207:18;;;19200:30;-1:-1:-1;;;19246:18:1;;;19239:49;19305:18;;6950:51:0;19160:169:1;6950:51:0;10056:16:::1;10075:5:::0;;-1:-1:-1;;;;;10091:11:0;;::::1;-1:-1:-1::0;;;;;;10091:11:0;::::1;;::::0;;10075:5:::1;::::0;10113:150:::1;4700:2;10129:1;:19;10113:150;;;-1:-1:-1::0;;;;;10170:24:0;;::::1;10200:5;10170:24:::0;;;:14:::1;:24;::::0;;;;;;;:27;;;;;;;;:35;;-1:-1:-1;;10170:35:0;;::::1;::::0;;;10235:5;;;;::::1;10220:21:::0;;;;;;;;:24;;;;;;;;;:31;;;;::::1;;::::0;;10195:1;10150:3:::1;10195:1:::0;10150:3:::1;:::i;:::-;;;;10113:150;;;-1:-1:-1::0;10309:5:0::1;::::0;10278:37:::1;::::0;;-1:-1:-1;;;;;12016:15:1;;;11998:34;;10309:5:0;;::::1;12063:2:1::0;12048:18;;12041:43;10278:37:0::1;::::0;11933:18:1;10278:37:0::1;11915:175:1::0;34299:159:0;34371:34;7165:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7165:47:0;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34418:21:0::1;:32:::0;;-1:-1:-1;;34418:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34299:159::o;30890:389::-;30971:25;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31017:23:0;::::1;31035:4;31017:23;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;31054:16:0::1;::::0;-1:-1:-1;;;;;31044:26:0;;::::1;31054:16:::0;::::1;31044:26;;31017:53;31009:62;;;::::0;::::1;;-1:-1:-1::0;;;;;31082:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31082:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31126:146:::1;;31151:11;::::0;;:31:::1;::::0;-1:-1:-1;;;31151:31:0;;-1:-1:-1;;;;;12295:32:1;;;31151:31:0::1;::::0;::::1;12277:51:1::0;31180:1:0::1;12344:18:1::0;;;12337:34;;;;31151:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;12250:18:1;;31151:31:0::1;12232:145:1::0;31126:146:0::1;31213:11;::::0;;-1:-1:-1;;;;;31242:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;31213:47;;-1:-1:-1;;;31213:47:0;;::::1;::::0;::::1;12277:51:1::0;;;;12344:18;;;12337:34;;;;31213:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;12250:18:1;;31213:47:0::1;12232:145:1::0;31445:158:0;31525:25;7165:38;;;;:17;:38;;;:47;;;7164:48;7156:82;;;;-1:-1:-1;;;7156:82:0;;;;;;;:::i;:::-;7257:39;7273:10;7285;7257:15;:39::i;:::-;7366:21;:42;7396:10;7388:19;;;;;;-1:-1:-1;;;7388:19:0;;;;;;;;;7366:42;;;;;;;;;;;7305:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7249:162;;;;;-1:-1:-1;;;7249:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;31563:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31563:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31445:158::o;699:192::-;785:7;821:12;813:6;;;;805:29;;;;-1:-1:-1;;;805:29:0;;;;;;;;:::i;:::-;-1:-1:-1;845:9:0;857:5;861:1;857;:5;:::i;:::-;845:17;699:192;-1:-1:-1;;;;;699:192:0:o;23063:1095::-;-1:-1:-1;;;;;23181:21:0;;23155:4;23181:21;;;:13;:21;;;;;;;;23180:22;23172:57;;;;-1:-1:-1;;;23172:57:0;;19536:2:1;23172:57:0;;;19518:21:1;19575:2;19555:18;;;19548:30;-1:-1:-1;;;19594:18:1;;;19587:52;19656:18;;23172:57:0;19508:172:1;23172:57:0;23245:6;;;;23242:63;;;23261:41;23276:6;23284:9;23295:6;23261:14;:41::i;:::-;23254:48;;;;23242:63;23325:28;23338:6;23346;23325:12;:28::i;:::-;23369:16;:14;:16::i;:::-;23366:35;;;23388:10;:8;:10::i;:::-;30533;;:15;;;23416:44;;-1:-1:-1;23444:16:0;;-1:-1:-1;;;;;23431:29:0;;;23444:16;;23431:29;23416:44;23413:93;;;-1:-1:-1;;;;;23471:17:0;;23491:1;23471:17;;;:9;:17;;;;;;23463:30;;;;;;23495:8;:6;:8::i;:::-;23538:53;;;;;;;;;;;-1:-1:-1;;;23538:53:0;;;;;;;;-1:-1:-1;;;;;23538:17:0;;-1:-1:-1;23538:17:0;;;:9;:17;;;;;;;;:53;;23560:6;;23538:21;:53::i;:::-;-1:-1:-1;;;;;23518:17:0;;;;;;:9;:17;;;;;:73;;;;23629:32;23528:6;23651:9;23629:13;:32::i;:::-;:78;;23701:6;23629:78;;;23664:34;23672:6;23680:9;23691:6;23664:7;:34::i;:::-;-1:-1:-1;;;;;23741:20:0;;;;;;:9;:20;;;;;;23604:103;;-1:-1:-1;23741:40:0;;23604:103;23741:24;:40::i;:::-;-1:-1:-1;;;;;23718:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23798:24;;;;;:16;:24;;;;;;;23794:96;;23829:11;;;-1:-1:-1;;;;;23858:17:0;;;;;;;:9;:17;;;;;;;;23829:47;;-1:-1:-1;;;23829:47:0;;;;;12277:51:1;;;;12344:18;;;12337:34;;;;23829:11:0;;;;;;:20;;12250:18:1;;23829:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23825:63;;-1:-1:-1;;;;;23904:27:0;;;;;;:16;:27;;;;;;;;23900:105;;23938:11;;;-1:-1:-1;;;;;23970:20:0;;;;;;;:9;:20;;;;;;;;23938:53;;-1:-1:-1;;;23938:53:0;;;;;12277:51:1;;;;12344:18;;;12337:34;;;;23938:11:0;;;;;;:20;;12250:18:1;;23938:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23934:69;;24021:11;;;24041:14;;24021:35;;-1:-1:-1;;;;;;24021:35:0;;;;;20953:25:1;;;;24021:11:0;;;;-1:-1:-1;;;;;24021:11:0;;:19;;20926:18:1;24021:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24017:51;24102:9;-1:-1:-1;;;;;24085:43:0;24094:6;-1:-1:-1;;;;;24085:43:0;;24113:14;24085:43;;;;20953:25:1;;20941:2;20926:18;;20908:76;24085:43:0;;;;;;;;-1:-1:-1;24146:4:0;;23063:1095;-1:-1:-1;;;;23063:1095:0:o;557:136::-;615:7;642:43;646:1;649;642:43;;;;;;;;;;;;;;;;;:3;:43::i;29416:653::-;20476:6;:13;;-1:-1:-1;;20476:13:0;20485:4;20476:13;;;29516:16:::1;::::0;;29530:1:::1;29516:16:::0;;;;;::::1;::::0;;-1:-1:-1;;29516:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29553:4:0::1;::::0;29543:7;;;;-1:-1:-1;;;;;;29553:4:0::1;::::0;29543:7;;-1:-1:-1;29553:4:0::1;::::0;29543:7:::1;;-1:-1:-1::0;;;29543:7:0::1;;;;;;;;;;;;;;:14;-1:-1:-1::0;;;;;29543:14:0::1;;;-1:-1:-1::0;;;;;29543:14:0::1;;;::::0;::::1;29586:4;29568;29573:1;29568:7;;;;;;-1:-1:-1::0;;;29568:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;29568:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29608:6:::1;::::0;:167:::1;::::0;-1:-1:-1;;;29608:167:0;;:6;::::1;::::0;:57:::1;::::0;29674:6;;29608:167:::1;::::0;:6:::1;::::0;29713:4;;29732:2;;29749:15:::1;::::0;29608:167:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29604:458;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29941:6;29894:54;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;29894:54:0;;::::1;::::0;;;;;;;-1:-1:-1;;;29880:70:0;;::::1;::::0;::::1;;;:::i;29604:458::-;;;29984:66;::::0;-1:-1:-1;;;29984:66:0;;17949:2:1;29984:66:0::1;::::0;::::1;17931:21:1::0;17988:2;17968:18;;;17961:30;18027:34;18007:18;;;18000:62;18098:26;18078:18;;;18071:54;18142:19;;29984:66:0::1;17921:246:1::0;29604:458:0::1;29796:22;::::0;;21163:25:1;;;-1:-1:-1;;;;;21224:32:1;;21219:2;21204:18;;21197:60;29796:22:0::1;::::0;21136:18:1;29796:22:0::1;;;;;;;-1:-1:-1::0;;20494:6:0;:14;;-1:-1:-1;;20494:14:0;;;-1:-1:-1;29416:653:0:o;370:181::-;428:7;;460:5;464:1;460;:5;:::i;:::-;448:17;;489:1;484;:6;;476:46;;;;-1:-1:-1;;;476:46:0;;16896:2:1;476:46:0;;;16878:21:1;16935:2;16915:18;;;16908:30;16974:29;16954:18;;;16947:57;17021:18;;476:46:0;16868:177:1;897:250:0;955:7;979:6;975:47;;-1:-1:-1;1009:1:0;1002:8;;975:47;1034:9;1046:5;1050:1;1046;:5;:::i;:::-;1034:17;-1:-1:-1;1079:1:0;1070:5;1074:1;1034:17;1070:5;:::i;:::-;:10;1062:56;;;;-1:-1:-1;;;1062:56:0;;18374:2:1;1062:56:0;;;18356:21:1;18413:2;18393:18;;;18386:30;18452:34;18432:18;;;18425:62;-1:-1:-1;;;18503:18:1;;;18496:31;18544:19;;1062:56:0;18346:223:1;1153:132:0;1211:7;1238:39;1242:1;1245;1238:39;;;;;;;;;;;;;;;;;:3;:39::i;24170:330::-;24300:53;;;;;;;;;;;-1:-1:-1;;;24300:53:0;;;;;;;;-1:-1:-1;;;;;24300:17:0;;24263:4;24300:17;;;:9;:17;;;;;;;:53;;24322:6;;24300:21;:53::i;:::-;-1:-1:-1;;;;;24280:17:0;;;;;;;:9;:17;;;;;;:73;;;;24387:20;;;;;;;:32;;24412:6;24387:24;:32::i;:::-;-1:-1:-1;;;;;24364:20:0;;;;;;;:9;:20;;;;;;;:55;;;;24435:35;;;;;;;;;;24463:6;20953:25:1;;20941:2;20926:18;;20908:76;24435:35:0;;;;;;;;-1:-1:-1;24488:4:0;24170:330;;;;;:::o;24508:166::-;24605:12;;24595:6;:22;;:49;;;-1:-1:-1;;;;;;24621:23:0;;;;;;:15;:23;;;;;;;;24595:49;24587:79;;;;-1:-1:-1;;;24587:79:0;;16550:2:1;24587:79:0;;;16532:21:1;16589:2;16569:18;;;16562:30;-1:-1:-1;;;16608:18:1;;;16601:47;16665:18;;24587:79:0;16522:167:1;24587:79:0;24508:166;;:::o;26553:209::-;26640:16;;26602:4;;-1:-1:-1;;;;;26640:16:0;26626:10;:30;;;;:50;;-1:-1:-1;26670:6:0;;;;26669:7;26626:50;:74;;;;-1:-1:-1;26689:11:0;;;;26626:74;:128;;;;-1:-1:-1;;26741:13:0;;26731:4;26713:24;;;;:9;:24;;;;;;:41;;;26553:209::o;26770:2155::-;20476:6;:13;;-1:-1:-1;;20476:13:0;20485:4;20476:13;;;26865:15:::1;::::0;26882:26:::1;::::0;20476:6;;26849:60:::1;::::0;:15:::1;:60::i;:::-;:79;;26916:12;;26849:79;;;26912:1;26849:79;26819:109;;26939:23;26965:62;27025:1;26965:55;27008:11;;26965:38;26983:19;26965:13;;:17;;:38;;;;:::i;:62::-;26939:88;;27038:20;27061:34;27079:15;27061:13;;:17;;:34;;;;:::i;:::-;27132:16;::::0;;27146:1:::1;27132:16:::0;;;;;::::1;::::0;;27038:57;;-1:-1:-1;27108:21:0::1;::::0;27132:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27132:16:0::1;27108:40;;27177:4;27159;27164:1;27159:7;;;;;;-1:-1:-1::0;;;27159:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;27159:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27203:4:::1;::::0;27193:7;;27203:4;::::1;::::0;27193;;27203;;27193:7;::::1;;;-1:-1:-1::0;;;27193:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;27193:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27282:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27282:188:0;;27244:21:::1;::::0;27282:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27354:12;;27220:21:::1;::::0;27397:4;;27424::::1;::::0;27444:15:::1;::::0;27282:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27278:1640;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;28718:74;28788:1;28740:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;28740:50:0;;::::1;::::0;;;;;;;28718:74:::1;::::0;::::1;:::i;:::-;;;;;;;;28669:135;27278:1640;;;;;28831:75;;;;;20583:2:1::0;20565:21;;;20622:2;20602:18;;;20595:30;20661:34;20656:2;20641:18;;20634:62;20732:27;20727:2;20712:18;;20705:55;20792:3;20777:19;;20555:247;28831:75:0::1;;;;;;;;27278:1640;;;27488:17;27508:40;:21;27534:13:::0;27508:25:::1;:40::i;:::-;27488:60:::0;-1:-1:-1;27565:19:0::1;27587:43;27603:26;:19:::0;27627:1:::1;27603:23;:26::i;:::-;27587:11;::::0;;:15:::1;:43::i;:::-;27565:65:::0;-1:-1:-1;27647:26:0::1;27676:58;27732:1;27676:51;27565:65:::0;27676:51;:9;27690:19;27676:13:::1;:34::i;:58::-;27647:87;;27749:27;27779:45;27812:11;27779:28;27793:13;;27779:9;:13;;:28;;;;:::i;:45::-;27749:75;;27839:26;27868:44;27900:11;27868:27;27882:12;;27868:9;:13;;:27;;;;:::i;:44::-;27839:73;;27933:11;;;;;;;;;-1:-1:-1::0;;;;;27933:11:0::1;-1:-1:-1::0;;;;;27933:19:0::1;;27960;27933:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;28016:20:0::1;::::0;28008:77:::1;::::0;-1:-1:-1;;;;;28016:20:0;;::::1;::::0;28075:5:::1;::::0;28050:18;;28008:77:::1;::::0;;;28050:18;28016:20;28075:5;28008:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28105:19:0;;;-1:-1:-1;28102:504:0::1;;28148:6;::::0;28344:21:::1;::::0;28148:274:::1;::::0;-1:-1:-1;;;28148:274:0;;28230:4:::1;28148:274;::::0;::::1;13964:34:1::0;14014:18;;;14007:34;;;28148:6:0::1;14057:18:1::0;;;14050:34;;;14100:18;;;14093:34;-1:-1:-1;;;;;28344:21:0;;::::1;14143:19:1::0;;;14136:44;28388:15:0::1;14196:19:1::0;;;14189:35;28148:6:0;::::1;::::0;:22:::1;::::0;28179:18;;13898:19:1;;28148:274:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;28148:274:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;28148:274:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;28144:447;;28554:17;::::0;;28566:1:::1;15358:25:1::0;;;15414:2;15399:18;;15392:34;28554:17:0::1;::::0;15331:18:1;28554:17:0::1;;;;;;;28144:447;;;-1:-1:-1::0;;28451:48:0::1;::::0;;15358:25:1;;;15414:2;15399:18;;15392:34;;;28451:48:0::1;::::0;-1:-1:-1;15331:18:1;28451:48:0::1;;;;;;;28144:447;28627:29;::::0;20953:25:1;;;28627:29:0::1;::::0;20941:2:1;20926:18;28627:29:0::1;;;;;;;27471:1197;;;;;27278:1640;-1:-1:-1::0;;20494:6:0;:14;;-1:-1:-1;;20494:14:0;;;-1:-1:-1;;;26770:2155:0:o;30564:126::-;30615:12;30602:10;:25;;;30643:39;;;15358:25:1;;;30666:15:0;15414:2:1;15399:18;;15392:34;30643:39:0;;15331:18:1;30643:39:0;;;;;;;30564:126::o;24682:422::-;-1:-1:-1;;;;;24784:19:0;;24763:4;24784:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;24807:22:0;;;;;;:11;:22;;;;;;;;24784:45;:60;;;-1:-1:-1;30533:10:0;;:15;24784:60;24780:78;;;-1:-1:-1;24853:5:0;24846:12;;24780:78;24871:25;24899:5;24871:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24871:33:0;;;;;;;;;;;;;;;;;;;;;;;24922:9;24917:139;24941:8;:15;24937:1;:19;24917:139;;;24992:8;25001:1;24992:11;;;;;;-1:-1:-1;;;24992:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24982:21:0;:6;-1:-1:-1;;;;;24982:21:0;;:49;;;;25020:8;25029:1;25020:11;;;;;;-1:-1:-1;;;25020:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25007:24:0;:9;-1:-1:-1;;;;;25007:24:0;;24982:49;24978:66;;;25040:4;25033:11;;;;;;24978:66;24958:3;;;;:::i;:::-;;;;24917:139;;;-1:-1:-1;;25075:21:0;;;;;24682:422;-1:-1:-1;;;24682:422:0:o;25892:374::-;25978:7;25998:17;26018:62;26065:14;;26018:42;26029:30;26041:17;26048:9;26041:6;:17::i;26029:30::-;26018:6;;:10;:42::i;:62::-;26138:4;26120:24;;;;:9;:24;;;;;;25998:82;;-1:-1:-1;26120:39:0;;25998:82;26120:28;:39::i;:::-;26111:4;26093:24;;;;:9;:24;;;;;;;:66;;;;26175:42;;-1:-1:-1;;;;;26175:42:0;;;;;;;26207:9;20953:25:1;;20941:2;20926:18;;20908:76;26175:42:0;;;;;;;;26237:21;:6;26248:9;26237:10;:21::i;1291:345::-;1377:7;1479:12;1472:5;1464:28;;;;-1:-1:-1;;;1464:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1503:9:0;1515:5;1519:1;1515;:5;:::i;26282:263::-;26340:4;26357:25;26385:5;26357:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26357:33:0;;;;;;;;;;;;;;;;;;;;;;;26406:9;26401:114;26425:8;:15;26421:1;:19;26401:114;;;26479:8;26488:1;26479:11;;;;;;-1:-1:-1;;;26479:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26466:24:0;:9;-1:-1:-1;;;;;26466:24:0;;26462:41;;;-1:-1:-1;26499:4:0;;26282:263;-1:-1:-1;;;26282:263:0:o;26462:41::-;26442:3;;;;:::i;:::-;;;;26401:114;;;-1:-1:-1;26532:5:0;;26282:263;-1:-1:-1;;;26282:263:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:576::-;222:5;275:3;268:4;260:6;256:17;252:27;242:2;;297:5;290;283:20;242:2;337:6;324:20;363:18;359:2;356:26;353:2;;;385:18;;:::i;:::-;434:2;428:9;446:67;501:2;482:13;;-1:-1:-1;;478:27:1;507:4;474:38;428:9;446:67;:::i;:::-;537:2;529:6;522:18;583:3;576:4;571:2;563:6;559:15;555:26;552:35;549:2;;;604:5;597;590:20;549:2;672;665:4;657:6;653:17;646:4;638:6;634:17;621:54;695:15;;;712:4;691:26;684:41;;;;699:6;232:523;-1:-1:-1;;232:523:1:o;760:257::-;819:6;872:2;860:9;851:7;847:23;843:32;840:2;;;893:6;885;878:22;840:2;937:9;924:23;956:31;981:5;956:31;:::i;1292:398::-;1360:6;1368;1421:2;1409:9;1400:7;1396:23;1392:32;1389:2;;;1442:6;1434;1427:22;1389:2;1486:9;1473:23;1505:31;1530:5;1505:31;:::i;:::-;1555:5;-1:-1:-1;1612:2:1;1597:18;;1584:32;1625:33;1584:32;1625:33;:::i;:::-;1677:7;1667:17;;;1379:311;;;;;:::o;1695:466::-;1772:6;1780;1788;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1862:6;1854;1847:22;1809:2;1906:9;1893:23;1925:31;1950:5;1925:31;:::i;:::-;1975:5;-1:-1:-1;2032:2:1;2017:18;;2004:32;2045:33;2004:32;2045:33;:::i;:::-;1799:362;;2097:7;;-1:-1:-1;;;2151:2:1;2136:18;;;;2123:32;;1799:362::o;2166:812::-;2273:6;2281;2289;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;2363:6;2355;2348:22;2310:2;2407:9;2394:23;2426:31;2451:5;2426:31;:::i;:::-;2476:5;-1:-1:-1;2532:2:1;2517:18;;2504:32;2555:18;2585:14;;;2582:2;;;2617:6;2609;2602:22;2582:2;2660:6;2649:9;2645:22;2635:32;;2705:7;2698:4;2694:2;2690:13;2686:27;2676:2;;2732:6;2724;2717:22;2676:2;2777;2764:16;2803:2;2795:6;2792:14;2789:2;;;2824:6;2816;2809:22;2789:2;2882:7;2877:2;2867:6;2864:1;2860:14;2856:2;2852:23;2848:32;2845:45;2842:2;;;2908:6;2900;2893:22;2842:2;2944;2940;2936:11;2926:21;;2966:6;2956:16;;;;;2300:678;;;;;:::o;2983:325::-;3048:6;3056;3109:2;3097:9;3088:7;3084:23;3080:32;3077:2;;;3130:6;3122;3115:22;3077:2;3174:9;3161:23;3193:31;3218:5;3193:31;:::i;:::-;3243:5;-1:-1:-1;3267:35:1;3298:2;3283:18;;3267:35;:::i;:::-;3257:45;;3067:241;;;;;:::o;3313:432::-;3395:6;3403;3456:2;3444:9;3435:7;3431:23;3427:32;3424:2;;;3477:6;3469;3462:22;3424:2;3521:9;3508:23;3540:31;3565:5;3540:31;:::i;:::-;3590:5;-1:-1:-1;3647:2:1;3632:18;;3619:32;3682:2;3670:15;;3660:2;;3704:6;3696;3689:22;3750:477;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:2;;;3910:6;3902;3895:22;3857:2;3954:9;3941:23;3973:31;3998:5;3973:31;:::i;:::-;4023:5;-1:-1:-1;4079:2:1;4064:18;;4051:32;4106:18;4095:30;;4092:2;;;4143:6;4135;4128:22;4092:2;4171:50;4213:7;4204:6;4193:9;4189:22;4171:50;:::i;:::-;4161:60;;;3847:380;;;;;:::o;4232:325::-;4300:6;4308;4361:2;4349:9;4340:7;4336:23;4332:32;4329:2;;;4382:6;4374;4367:22;4329:2;4426:9;4413:23;4445:31;4470:5;4445:31;:::i;:::-;4495:5;4547:2;4532:18;;;;4519:32;;-1:-1:-1;;;4319:238:1:o;4562:190::-;4618:6;4671:2;4659:9;4650:7;4646:23;4642:32;4639:2;;;4692:6;4684;4677:22;4639:2;4720:26;4736:9;4720:26;:::i;4757:258::-;4822:6;4830;4883:2;4871:9;4862:7;4858:23;4854:32;4851:2;;;4904:6;4896;4889:22;4851:2;4932:26;4948:9;4932:26;:::i;5020:342::-;5089:6;5142:2;5130:9;5121:7;5117:23;5113:32;5110:2;;;5163:6;5155;5148:22;5110:2;5208:9;5195:23;5241:18;5233:6;5230:30;5227:2;;;5278:6;5270;5263:22;5227:2;5306:50;5348:7;5339:6;5328:9;5324:22;5306:50;:::i;:::-;5296:60;5100:262;-1:-1:-1;;;;5100:262:1:o;5367:529::-;5444:6;5452;5505:2;5493:9;5484:7;5480:23;5476:32;5473:2;;;5526:6;5518;5511:22;5473:2;5571:9;5558:23;5600:18;5641:2;5633:6;5630:14;5627:2;;;5662:6;5654;5647:22;5627:2;5690:50;5732:7;5723:6;5712:9;5708:22;5690:50;:::i;:::-;5680:60;;5790:2;5779:9;5775:18;5762:32;5749:45;;5834:2;5827:5;5823:14;5816:5;5813:25;5803:2;;5857:6;5849;5842:22;5803:2;;5885:5;5875:15;;;5463:433;;;;;:::o;5901:190::-;5960:6;6013:2;6001:9;5992:7;5988:23;5984:32;5981:2;;;6034:6;6026;6019:22;5981:2;-1:-1:-1;6062:23:1;;5971:120;-1:-1:-1;5971:120:1:o;6096:258::-;6161:6;6169;6222:2;6210:9;6201:7;6197:23;6193:32;6190:2;;;6243:6;6235;6228:22;6190:2;6284:9;6271:23;6261:33;;6313:35;6344:2;6333:9;6329:18;6313:35;:::i;6359:258::-;6427:6;6435;6488:2;6476:9;6467:7;6463:23;6459:32;6456:2;;;6509:6;6501;6494:22;6456:2;-1:-1:-1;;6537:23:1;;;6607:2;6592:18;;;6579:32;;-1:-1:-1;6446:171:1:o;6622:326::-;6699:6;6707;6715;6768:2;6756:9;6747:7;6743:23;6739:32;6736:2;;;6789:6;6781;6774:22;6736:2;-1:-1:-1;;6817:23:1;;;6887:2;6872:18;;6859:32;;-1:-1:-1;6938:2:1;6923:18;;;6910:32;;6726:222;-1:-1:-1;6726:222:1:o;6953:316::-;7041:6;7049;7057;7110:2;7098:9;7089:7;7085:23;7081:32;7078:2;;;7131:6;7123;7116:22;7078:2;7165:9;7159:16;7149:26;;7215:2;7204:9;7200:18;7194:25;7184:35;;7259:2;7248:9;7244:18;7238:25;7228:35;;7068:201;;;;;:::o;7274:533::-;7378:6;7386;7394;7402;7410;7418;7471:3;7459:9;7450:7;7446:23;7442:33;7439:2;;;7493:6;7485;7478:22;7439:2;-1:-1:-1;;7521:23:1;;;7591:2;7576:18;;7563:32;;-1:-1:-1;7642:2:1;7627:18;;7614:32;;7693:2;7678:18;;7665:32;;-1:-1:-1;7744:3:1;7729:19;;7716:33;;-1:-1:-1;7796:3:1;7781:19;7768:33;;-1:-1:-1;7429:378:1;-1:-1:-1;7429:378:1:o;7812:463::-;7865:3;7903:5;7897:12;7930:6;7925:3;7918:19;7956:4;7985:2;7980:3;7976:12;7969:19;;8022:2;8015:5;8011:14;8043:3;8055:195;8069:6;8066:1;8063:13;8055:195;;;8134:13;;-1:-1:-1;;;;;8130:39:1;8118:52;;8190:12;;;;8225:15;;;;8166:1;8084:9;8055:195;;;-1:-1:-1;8266:3:1;;7873:402;-1:-1:-1;;;;;7873:402:1:o;8280:258::-;8322:3;8360:5;8354:12;8387:6;8382:3;8375:19;8403:63;8459:6;8452:4;8447:3;8443:14;8436:4;8429:5;8425:16;8403:63;:::i;:::-;8520:2;8499:15;-1:-1:-1;;8495:29:1;8486:39;;;;8527:4;8482:50;;8330:208;-1:-1:-1;;8330:208:1:o;8543:275::-;8728:6;8720;8715:3;8702:33;8684:3;8754:16;;8779:15;;;8754:16;8692:126;-1:-1:-1;8692:126:1:o;8823:276::-;8954:3;8992:6;8986:13;9008:53;9054:6;9049:3;9042:4;9034:6;9030:17;9008:53;:::i;:::-;9077:16;;;;;8962:137;-1:-1:-1;;8962:137:1:o;9104:445::-;9366:28;9361:3;9354:41;9336:3;9424:6;9418:13;9440:62;9495:6;9490:2;9485:3;9481:12;9474:4;9466:6;9462:17;9440:62;:::i;:::-;9522:16;;;;9540:2;9518:25;;9344:205;-1:-1:-1;;9344:205:1:o;9554:446::-;9816:29;9811:3;9804:42;9786:3;9875:6;9869:13;9891:62;9946:6;9941:2;9936:3;9932:12;9925:4;9917:6;9913:17;9891:62;:::i;:::-;9973:16;;;;9991:2;9969:25;;9794:206;-1:-1:-1;;9794:206:1:o;10215:1358::-;10474:34;10469:3;10462:47;10444:3;10528:2;-1:-1:-1;;;10555:2:1;10550:3;10546:12;10539:32;10590:2;10612:3;10647:6;10641:13;10677:3;10699:1;10727:9;10723:2;10719:18;10709:28;;10787:2;10776:9;10772:18;10809;10799:2;;10853:4;10845:6;10841:17;10831:27;;10799:2;10906;10898:6;10895:14;10875:18;10872:38;10869:2;;;-1:-1:-1;;;10933:33:1;;10989:4;10986:1;10979:15;11019:4;10940:3;11007:17;10869:2;11050:18;11077:122;;;;11213:1;11208:340;;;;11043:505;;11077:122;-1:-1:-1;;11119:24:1;;11105:12;;;11098:46;11168:16;;;11164:25;;;-1:-1:-1;11077:122:1;;11208:340;22883:4;22902:17;;;22952:4;22936:21;;11303:3;11319:174;11333:6;11330:1;11327:13;11319:174;;;11420:14;;11402:11;;;11398:20;;11391:44;11463:16;;;;11348:10;;11319:174;;;11323:3;;11535:2;11526:6;11521:3;11517:16;11513:25;11506:32;;11043:505;-1:-1:-1;11564:3:1;;10452:1121;-1:-1:-1;;;;;;;;;10452:1121:1:o;12382:564::-;-1:-1:-1;;;;;12597:32:1;;12579:51;;12666:2;12661;12646:18;;12639:30;;;12685:18;;12678:34;;;12705:6;12755;12749:3;12734:19;;12721:49;12560:4;12820;12814:3;12805:6;12794:9;12790:22;12786:32;12779:46;12893:3;12886:2;12882:7;12877:2;12869:6;12865:15;12861:29;12850:9;12846:45;12842:55;12834:63;;12933:6;12928:2;12917:9;12913:18;12906:34;12569:377;;;;;;;:::o;12951:388::-;-1:-1:-1;;;;;13156:32:1;;13138:51;;13225:2;13220;13205:18;;13198:30;;;-1:-1:-1;;13245:45:1;;13271:18;;13263:6;13245:45;:::i;:::-;13237:53;;13326:6;13321:2;13310:9;13306:18;13299:34;13128:211;;;;;;:::o;14653:510::-;14924:6;14913:9;14906:25;14967:3;14962:2;14951:9;14947:18;14940:31;14887:4;14988:57;15040:3;15029:9;15025:19;15017:6;14988:57;:::i;:::-;-1:-1:-1;;;;;15081:32:1;;;;15076:2;15061:18;;15054:60;-1:-1:-1;15145:2:1;15130:18;15123:34;14980:65;14896:267;-1:-1:-1;;14896:267:1:o;15437:220::-;15586:2;15575:9;15568:21;15549:4;15606:45;15647:2;15636:9;15632:18;15624:6;15606:45;:::i;15662:291::-;15839:2;15828:9;15821:21;15802:4;15859:45;15900:2;15889:9;15885:18;15877:6;15859:45;:::i;:::-;15851:53;;15940:6;15935:2;15924:9;15920:18;15913:34;15811:142;;;;;:::o;15958:385::-;16161:2;16150:9;16143:21;16124:4;16181:45;16222:2;16211:9;16207:18;16199:6;16181:45;:::i;:::-;16173:53;;16262:6;16257:2;16246:9;16242:18;16235:34;16317:18;16309:6;16305:31;16300:2;16289:9;16285:18;16278:59;16133:210;;;;;;:::o;19685:345::-;19887:2;19869:21;;;19926:2;19906:18;;;19899:30;-1:-1:-1;;;19960:2:1;19945:18;;19938:51;20021:2;20006:18;;19859:171::o;21268:582::-;21567:6;21556:9;21549:25;21610:6;21605:2;21594:9;21590:18;21583:34;21653:3;21648:2;21637:9;21633:18;21626:31;21530:4;21674:57;21726:3;21715:9;21711:19;21703:6;21674:57;:::i;:::-;-1:-1:-1;;;;;21767:32:1;;;;21762:2;21747:18;;21740:60;-1:-1:-1;21831:3:1;21816:19;21809:35;21666:65;21539:311;-1:-1:-1;;;21539:311:1:o;22297:534::-;22375:4;22381:6;22441:11;22428:25;22535:2;22531:7;22520:8;22504:14;22500:29;22496:43;22476:18;22472:68;22462:2;;22557:4;22551;22544:18;22462:2;22587:33;;22639:20;;;-1:-1:-1;22682:18:1;22671:30;;22668:2;;;22717:4;22711;22704:18;22668:2;22753:4;22741:17;;-1:-1:-1;22784:14:1;22780:27;;;22770:38;;22767:2;;;22821:1;22818;22811:12;22767:2;22392:439;;;;;:::o;22968:128::-;23008:3;23039:1;23035:6;23032:1;23029:13;23026:2;;;23045:18;;:::i;:::-;-1:-1:-1;23081:9:1;;23016:80::o;23101:236::-;23140:3;23168:18;23213:2;23210:1;23206:10;23243:2;23240:1;23236:10;23274:3;23270:2;23266:12;23261:3;23258:21;23255:2;;;23282:18;;:::i;:::-;23318:13;;23148:189;-1:-1:-1;;;;23148:189:1:o;23342:217::-;23382:1;23408;23398:2;;-1:-1:-1;;;23433:31:1;;23487:4;23484:1;23477:15;23515:4;23440:1;23505:15;23398:2;-1:-1:-1;23544:9:1;;23388:171::o;23564:168::-;23604:7;23670:1;23666;23662:6;23658:14;23655:1;23652:21;23647:1;23640:9;23633:17;23629:45;23626:2;;;23677:18;;:::i;:::-;-1:-1:-1;23717:9:1;;23616:116::o;23737:125::-;23777:4;23805:1;23802;23799:8;23796:2;;;23810:18;;:::i;:::-;-1:-1:-1;23847:9:1;;23786:76::o;23867:258::-;23939:1;23949:113;23963:6;23960:1;23957:13;23949:113;;;24039:11;;;24033:18;24020:11;;;24013:39;23985:2;23978:10;23949:113;;;24080:6;24077:1;24074:13;24071:2;;;-1:-1:-1;;24115:1:1;24097:16;;24090:27;23920:205::o;24130:249::-;24240:2;24221:13;;-1:-1:-1;;24217:27:1;24205:40;;24275:18;24260:34;;24296:22;;;24257:62;24254:2;;;24322:18;;:::i;:::-;24358:2;24351:22;-1:-1:-1;;24177:202:1:o;24384:135::-;24423:3;-1:-1:-1;;24444:17:1;;24441:2;;;24464:18;;:::i;:::-;-1:-1:-1;24511:1:1;24500:13;;24431:88::o;24524:127::-;24585:10;24580:3;24576:20;24573:1;24566:31;24616:4;24613:1;24606:15;24640:4;24637:1;24630:15;24656:127;24717:10;24712:3;24708:20;24705:1;24698:31;24748:4;24745:1;24738:15;24772:4;24769:1;24762:15;24788:185;24823:3;24865:1;24847:16;24844:23;24841:2;;;24915:1;24910:3;24905;24890:27;24946:10;24941:3;24937:20;24841:2;24831:142;:::o;24978:671::-;25017:3;25059:4;25041:16;25038:26;25035:2;;;25025:624;:::o;25035:2::-;25101;25095:9;-1:-1:-1;;25166:16:1;25162:25;;25159:1;25095:9;25138:50;25217:4;25211:11;25241:16;25276:18;25347:2;25340:4;25332:6;25328:17;25325:25;25320:2;25312:6;25309:14;25306:45;25303:2;;;25354:5;;;;;25025:624;:::o;25303:2::-;25391:6;25385:4;25381:17;25370:28;;25427:3;25421:10;25454:2;25446:6;25443:14;25440:2;;;25460:5;;;;;;25025:624;:::o;25440:2::-;25544;25525:16;25519:4;25515:27;25511:36;25504:4;25495:6;25490:3;25486:16;25482:27;25479:69;25476:2;;;25551:5;;;;;;25025:624;:::o;25476:2::-;25567:57;25618:4;25609:6;25601;25597:19;25593:30;25587:4;25567:57;:::i;:::-;-1:-1:-1;25640:3:1;;25025:624;-1:-1:-1;;;;;25025:624:1:o;25654:131::-;-1:-1:-1;;;;;25729:31:1;;25719:42;;25709:2;;25775:1;25772;25765:12;25709:2;25699:86;:::o

Swarm Source

ipfs://4feb15cd81e409554dce6ce3afe2efcf1c5ae501bb1684e6ad63fc08ebd1a24b
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.