Contract 0x5ea29eee799aa7cc379fde5cf370bc24f2ea7c81

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x58d4f0980520641aea89bd4551c4c2dd1fb917ff1f7ce5c3ca61f5fd686cabbd85079182021-06-22 3:37:421 hr 58 mins ago0xf22a162b9ed246557b4f6b2519dad1824be33bd6 IN  Keep3rb Network: KP3RB Token0 BNB0.000106435
0x907bafcfa470c98ba95c129fa0379f8211ce6268a2778319f316fcff67b13cad85057952021-06-22 1:50:533 hrs 45 mins ago0xeaf4b691f4bf2b76d8cd834cac543b4e24a5f2d4 IN  Keep3rb Network: KP3RB Token0 BNB0.000254093
0xe3d6f53371f70a67ac34254b32972276743304f48081b58096b4447f3c281dd285057822021-06-22 1:50:143 hrs 45 mins ago0xa6a7f041c7c207f25aeec5e99e441f515c63e21c IN  Keep3rb Network: KP3RB Token0 BNB0.000253841
0x52eb41f26ce516a02a2a15b473532de24d8e49b10d9efd04e84b9d1c7f001abd85053752021-06-22 1:29:534 hrs 6 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  Keep3rb Network: KP3RB Token0 BNB0.000181495
0xa67743032233b8ac0fb0d64376b36914193026f4b0c24954e049c2522530d9a585019352021-06-21 22:35:587 hrs ago0xe295cff351dfd2bcad9b8c81f7f8447469a92410 IN  Keep3rb Network: KP3RB Token0 BNB0.000181315
0x85908a41634b2e31edef6b07f2667a4f0bbf84ffcf88a8f83acf8c9c47689cbf84996532021-06-21 20:41:268 hrs 54 mins ago0xe20193b98487c9922c8059f2270682c0bac9c561 IN  Keep3rb Network: KP3RB Token0 BNB0.000072325
0x57d7071e861c0995aa7824c83077698f8c47c01bb3db5fcb0d1282373a0cc74d84970362021-06-21 18:30:2711 hrs 5 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  Keep3rb Network: KP3RB Token0 BNB0.000106375
0x731dea55c47e57540898f54f9457b6c76e3ca1c7c29f0388bc31bb58051b80bc84966722021-06-21 18:11:5011 hrs 24 mins agoHotbit 2 IN  Keep3rb Network: KP3RB Token0 BNB0.000253925
0x715165545ead39dee8615ea0829cdf2730dd9e086a9a5acae53dfc396263ef1984942882021-06-21 16:12:1013 hrs 24 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  Keep3rb Network: KP3RB Token0 BNB0.000106375
0xf76916bdc9c57fa1254328da56fe4c219d639c53bf3e6dd2e98cb2f2d7a4309784933472021-06-21 15:25:0714 hrs 11 mins agoHotbit 2 IN  Keep3rb Network: KP3RB Token0 BNB0.000253925
0x55da30278c557c2f690542a2cae2fe7db779dec15bb8016d10c8709eb3acbbd884930302021-06-21 15:09:1614 hrs 26 mins ago0xcfb5822894587a2e00b71cc0e2e6351115479b2d IN  Keep3rb Network: KP3RB Token0 BNB0.005023242
0xd8fcad9993491c3d161a892a2112cec2c4d51d2fd561e6fa26b0393b3d9407b284921192021-06-21 14:23:2515 hrs 12 mins ago0xcfb5822894587a2e00b71cc0e2e6351115479b2d IN  Keep3rb Network: KP3RB Token0 BNB0.002558698
0x22f9a775ed124ac5d8f7a456738ee9fe3dc000d5e06a76216a43364a1c24659a84892622021-06-21 12:00:2917 hrs 35 mins agoHotbit 2 IN  Keep3rb Network: KP3RB Token0 BNB0.000358925
0x6f1bbc671310a09464e97b898a97b7fb54ab7da81c4a0162144b6b23bd846a8684890422021-06-21 11:49:2917 hrs 46 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  Keep3rb Network: KP3RB Token0 BNB0.000106375
0x627e2e0cec21897ececc315fad7ec2f192f3eeaa793e43a9df4ba187a5219e3384875632021-06-21 10:35:0119 hrs 1 min ago0x813113f5e32fe018194e9a0448fe68946bc2af32 IN  Keep3rb Network: KP3RB Token0 BNB0.000181495
0x7ce30bb395a182735e40d6e15402de30324c3ccb4e0089b663fbe5aac9edfd9084862662021-06-21 9:29:5720 hrs 6 mins ago0x2c17747f82a68dfd49ca5740778514369c59e122 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xe9cd8d3abaf41e2e4d928cc2ad3c4c82bdf6562007609b19050289d0e35f56e684844532021-06-21 7:59:1821 hrs 36 mins ago0x7f12dd48041649eca487a0e1c16d26e601a27f99 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x5fbae5643755190ee4eed4d9c52050e9c197ec54bab6e95c4c0cc0c18932452384842842021-06-21 7:50:5121 hrs 45 mins ago0xef4a8567b1bf2bc935dfd1b6ecac160076e20091 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xed5f66fad23fbb74f0c0f55e0746e3c36ffa70cf62e54fe7242450229dcd4fb584828602021-06-21 6:39:2222 hrs 56 mins ago0x089f4260cf77322d2c57a0f5bed3d5a123986013 IN  Keep3rb Network: KP3RB Token0 BNB0.000181315
0xcd88e56baf46e78469ba6688546ca70ece6ee460b250092dd7852c723df785ff84769232021-06-21 1:42:141 day 3 hrs ago0x8bca19f7dd0da98391944d051e35287bbaa3c065 IN  Keep3rb Network: KP3RB Token0 BNB0.000148925
0x0e8f16edc0e85fbb730d7ad2fa260ceb6e0d5734136c5d69a20ba6aff9d1935884738212021-06-20 23:07:081 day 6 hrs ago0xe37c0280d776b1e74c7f6feecc6a18293771bd7b IN  Keep3rb Network: KP3RB Token0 BNB0.000253925
0xbc7deca4d1b23ba828f2a1b0d35b42e7e694b4fae6a09a12c45ed64c1740f50184732182021-06-20 22:36:591 day 6 hrs ago0x8c128dba2cb66399341aa877315be1054be75da8 IN  Keep3rb Network: KP3RB Token0 BNB0.00051263
0x724f5b3e12904eac7888a0bf50bdc3f1e5a88abb339dff36643790c12b1db80684722152021-06-20 21:46:501 day 7 hrs ago0x2630c1f62cd9b70f1e60acecdcc8e031b52d58fe IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xe2ae189894a880c8fae3d39905bf074b34dda2366c2ead4da092a79cb77d80a184721392021-06-20 21:43:021 day 7 hrs ago0x2630c1f62cd9b70f1e60acecdcc8e031b52d58fe IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x3ca2ba522b7c5eb46785bc83708740b01d7902e58bb5c3646232748c96a8f58684642842021-06-20 15:10:171 day 14 hrs ago0x77a8c6ddbfbadbd83aa632642f5bc9ceb9a1e9ac IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
[ Download CSV Export 

OVERVIEW

KP3RB token is a Keep3r fork project on Binance Smart Chain.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:00106 days 17 hrs ago CheeseSwap: KP3RB-BUSD Keep3rb Network: KP3RB Token0 BNB
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:00106 days 17 hrs ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:00106 days 17 hrs ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x52bec892a349af4f5fb9724e635b409845e59539a976692a3af73312234d9dab54712992021-03-07 11:57:54106 days 17 hrs ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0x52bec892a349af4f5fb9724e635b409845e59539a976692a3af73312234d9dab54712992021-03-07 11:57:54106 days 17 hrs ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Pancake Sliding Oracle Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:39106 days 17 hrs ago Keep3rb Network: Pancake Sliding Oracle Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:54106 days 18 hrs ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:18106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:18106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:18106 days 18 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:18106 days 18 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Keep3rb

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-12-05
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.6.12;


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

        return c;
    }
   function add(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, errorMessage);

        return c;
    }
   function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "sub: -");
    }
   function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
  function mul(uint a, uint b) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, "mul: *");

        return c;
    }
  function mul(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, errorMessage);
        return c;
    }
  function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "div: /");
    }
  function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b > 0, errorMessage);
        uint c = a / b;
        return c;
    }
   function mod(uint a, uint b) internal pure returns (uint) {
        return mod(a, b, "mod: %");
    }
  function mod(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


contract ReentrancyGuard {
   uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
       require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
       _status = _ENTERED;
       _;
       _status = _NOT_ENTERED;
    }
}


interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);
    }

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
   function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value:amount}("");
        require(success, "Address: reverted");
    }
}
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: < 0");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function callOptionalReturn(IERC20 token, bytes memory data) private {
           // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: !contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");
     if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: !succeed");
        }
    }
}

library Keep3rbLibrary {
    function getReserve(address pair, address reserve) external view returns (uint) {
        (uint _r0, uint _r1,) = ICheeseSwapPair(pair).getReserves();
        if (ICheeseSwapPair(pair).token0() == reserve) {
            return _r0;
        } else if (ICheeseSwapPair(pair).token1() == reserve) {
            return _r1;
        } else {
            return 0;
        }
    }
}

interface ICheeseSwapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IGovernance {
    function proposeJob(address job) external;
}

interface IKeep3rbHelper {
    function getQuoteLimit(uint gasUsed) external view returns (uint);
}

contract Keep3rb is ReentrancyGuard {
    using SafeMath for uint;
    using SafeERC20 for IERC20;

    /// @notice Keep3r Helper to set max prices for the ecosystem
    IKeep3rbHelper public KPRH;

    /// @notice EIP-20 token name for this token
    string public constant name = "Keep3r BSC Network";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "KP3RB";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // Initial 0

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    mapping (address => mapping (address => uint)) internal allowances;
    mapping (address => uint) internal balances;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)");
    bytes32 public immutable DOMAINSEPARATOR;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint nonce,uint expiry)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");


    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint votes;
    }

    function delegate(address delegatee) public {
        _delegate(msg.sender, delegatee);
    }

    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "delegateBySig: sig");
        require(nonce == nonces[signatory]++, "delegateBySig: nonce");
        require(now <= expiry, "delegateBySig: expired");
        _delegate(signatory, delegatee);
    }

  
    function getCurrentVotes(address account) external view returns (uint) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function getPriorVotes(address account, uint blockNumber) public view returns (uint) {
        require(blockNumber < block.number, "getPriorVotes:");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint delegatorBalance = votes[delegator].add(bonds[delegator][address(this)]);
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint srcRepNew = srcRepOld.sub(amount, "_moveVotes: underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint oldVotes, uint newVotes) internal {
      uint32 blockNumber = safe32(block.number, "_writeCheckpoint: 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint amount);

    /// @notice Submit a job
    event SubmitJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Apply credit to a job
    event ApplyCredit(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Remove credit for a job
    event RemoveJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Unbond credit for a job
    event UnbondJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Added a Job
    event JobAdded(address indexed job, uint block, address governance);

    /// @notice Removed a job
    event JobRemoved(address indexed job, uint block, address governance);

    /// @notice Worked a job
    event KeeperWorked(address indexed credit, address indexed job, address indexed keeper, uint block, uint amount);

    /// @notice Keeper bonding
    event KeeperBonding(address indexed keeper, uint block, uint active, uint bond);

    /// @notice Keeper bonded
    event KeeperBonded(address indexed keeper, uint block, uint activated, uint bond);

    /// @notice Keeper unbonding
    event KeeperUnbonding(address indexed keeper, uint block, uint deactive, uint bond);

    /// @notice Keeper unbound
    event KeeperUnbound(address indexed keeper, uint block, uint deactivated, uint bond);

    /// @notice Keeper slashed
    event KeeperSlashed(address indexed keeper, address indexed slasher, uint block, uint slash);

    /// @notice Keeper disputed
    event KeeperDispute(address indexed keeper, uint block);

    /// @notice Keeper resolved
    event KeeperResolved(address indexed keeper, uint block);

    event AddCredit(address indexed credit, address indexed job, address indexed creditor, uint block, uint amount);

    /// @notice 1 day to bond to become a keeper
    uint constant public BOND = 1 days;
    /// @notice 14 days to unbond to remove funds from being a keeper
    uint constant public UNBOND = 14 days;
    /// @notice 3 days till liquidity can be bound
    uint constant public LIQUIDITYBOND = 3 days;

    /// @notice direct liquidity fee 0.5%
    uint constant public FEE = 50;
    uint constant public BASE = 10000;

    /// @notice address used for ETH transfers
    address constant public ETH = address(0xE);

    /// @notice tracks all current bondings (time)
    mapping(address => mapping(address => uint)) public bondings;
    /// @notice tracks all current unbondings (time)
    mapping(address => mapping(address => uint)) public unbondings;
    /// @notice allows for partial unbonding
    mapping(address => mapping(address => uint)) public partialUnbonding;
    /// @notice tracks all current pending bonds (amount)
    mapping(address => mapping(address => uint)) public pendingbonds;
    /// @notice tracks how much a keeper has bonded
    mapping(address => mapping(address => uint)) public bonds;
    /// @notice tracks underlying votes (that don't have bond)
    mapping(address => uint) public votes;

    /// @notice total bonded (totalSupply for bonds)
    uint public totalBonded = 0;
    /// @notice tracks when a keeper was first registered
    mapping(address => uint) public firstSeen;

    /// @notice tracks if a keeper has a pending dispute
    mapping(address => bool) public disputes;

    /// @notice tracks last job performed for a keeper
    mapping(address => uint) public lastJob;
    /// @notice tracks the total job executions for a keeper
    mapping(address => uint) public workCompleted;
    /// @notice list of all jobs registered for the keeper system
    mapping(address => bool) public jobs;
    /// @notice the current credit available for a job
    mapping(address => mapping(address => uint)) public credits;
    /// @notice the balances for the liquidity providers
    mapping(address => mapping(address => mapping(address => uint))) public liquidityProvided;
    /// @notice liquidity unbonding days
    mapping(address => mapping(address => mapping(address => uint))) public liquidityUnbonding;
    /// @notice liquidity unbonding amounts
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmountsUnbonding;
    /// @notice job proposal delay
    mapping(address => uint) public jobProposalDelay;
    /// @notice liquidity apply date
    mapping(address => mapping(address => mapping(address => uint))) public liquidityApplied;
    /// @notice liquidity amount to apply
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmount;

    /// @notice list of all current keepers
    mapping(address => bool) public keepers;
    /// @notice blacklist of keepers not allowed to participate
    mapping(address => bool) public blacklist;

    /// @notice traversable array of keepers to make external management easier
    address[] public keeperList;
    /// @notice traversable array of jobs to make external management easier
    address[] public jobList;

    /// @notice governance address for the governance contract
    address public governance;
    address public pendingGovernance;

    /// @notice the liquidity token supplied by users paying for jobs
    mapping(address => bool) public liquidityAccepted;

    address[] public liquidityPairs;

    uint internal _gasUsed;

    constructor(address _kph) public {
        // Set governance for this token
        governance = msg.sender;
        DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this)));
        KPRH = IKeep3rbHelper(_kph);
    }

    /**
     * @notice Add ETH credit to a job to be paid out for work
     * @param job the job being credited
     */
    function addCreditETH(address job) external payable {
        require(jobs[job], "addCreditETH: !job");
        uint _fee = msg.value.mul(FEE).div(BASE);
        credits[job][ETH] = credits[job][ETH].add(msg.value.sub(_fee));
        payable(governance).transfer(_fee);

        emit AddCredit(ETH, job, msg.sender, block.number, msg.value);
    }

    function addCredit(address credit, address job, uint amount) external nonReentrant {
        require(jobs[job], "addCreditETH: !job");
        uint _before = IERC20(credit).balanceOf(address(this));
        IERC20(credit).safeTransferFrom(msg.sender, address(this), amount);
        uint _received = IERC20(credit).balanceOf(address(this)).sub(_before);
        uint _fee = _received.mul(FEE).div(BASE);
        credits[job][credit] = credits[job][credit].add(_received.sub(_fee));
        IERC20(credit).safeTransfer(governance, _fee);

        emit AddCredit(credit, job, msg.sender, block.number, _received);
    }

    function addVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        _activate(voter, address(this));
        votes[voter] = votes[voter].add(amount);
        totalBonded = totalBonded.add(amount);
        _moveDelegates(address(0), delegates[voter], amount);
    }

 
    function removeVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        votes[voter] = votes[voter].sub(amount);
        totalBonded = totalBonded.sub(amount);
        _moveDelegates(delegates[voter], address(0), amount);
    }

    function addKPRCredit(address job, uint amount) external {
        require(msg.sender == governance, "addKPRCredit: !gov");
        require(jobs[job], "addKPRCredit: !job");
        credits[job][address(this)] = credits[job][address(this)].add(amount);
        _mint(address(this), amount);
        emit AddCredit(address(this), job, msg.sender, block.number, amount);
    }

 
    function approveLiquidity(address liquidity) external {
        require(msg.sender == governance, "approveLiquidity: !gov");
        require(!liquidityAccepted[liquidity], "approveLiquidity: !pair");
        liquidityAccepted[liquidity] = true;
        liquidityPairs.push(liquidity);
    }

    function revokeLiquidity(address liquidity) external {
        require(msg.sender == governance, "revokeLiquidity: !gov");
        liquidityAccepted[liquidity] = false;
    }

    function pairs() external view returns (address[] memory) {
        return liquidityPairs;
    }

  
    function addLiquidityToJob(address liquidity, address job, uint amount) external nonReentrant {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        IERC20(liquidity).safeTransferFrom(msg.sender, address(this), amount);
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].add(amount);

        liquidityApplied[msg.sender][liquidity][job] = now.add(LIQUIDITYBOND);
        liquidityAmount[msg.sender][liquidity][job] = liquidityAmount[msg.sender][liquidity][job].add(amount);

        if (!jobs[job] && jobProposalDelay[job] < now) {
            IGovernance(governance).proposeJob(job);
            jobProposalDelay[job] = now.add(UNBOND);
        }
        emit SubmitJob(job, liquidity, msg.sender, block.number, amount);
    }

    function applyCreditToJob(address provider, address liquidity, address job) external {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        require(liquidityApplied[provider][liquidity][job] != 0, "credit: no bond");
        require(liquidityApplied[provider][liquidity][job] < now, "credit: bonding");
        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(liquidityAmount[provider][liquidity][job]).div(IERC20(liquidity).totalSupply());
        _mint(address(this), _credit);
        credits[job][address(this)] = credits[job][address(this)].add(_credit);
        liquidityAmount[provider][liquidity][job] = 0;

        emit ApplyCredit(job, liquidity, provider, block.number, _credit);
    }

    function unbondLiquidityFromJob(address liquidity, address job, uint amount) external {
        require(liquidityAmount[msg.sender][liquidity][job] == 0, "credit: pending credit");
        liquidityUnbonding[msg.sender][liquidity][job] = now.add(UNBOND);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = liquidityAmountsUnbonding[msg.sender][liquidity][job].add(amount);
        require(liquidityAmountsUnbonding[msg.sender][liquidity][job] <= liquidityProvided[msg.sender][liquidity][job], "unbondLiquidityFromJob: insufficient funds");

        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(amount).div(IERC20(liquidity).totalSupply());
        if (_credit > credits[job][address(this)]) {
            _burn(address(this), credits[job][address(this)]);
            credits[job][address(this)] = 0;
        } else {
            _burn(address(this), _credit);
            credits[job][address(this)] = credits[job][address(this)].sub(_credit);
        }

        emit UnbondJob(job, liquidity, msg.sender, block.number, amount);
    }

    function removeLiquidityFromJob(address liquidity, address job) external {
        require(liquidityUnbonding[msg.sender][liquidity][job] != 0, "removeJob: unbond");
        require(liquidityUnbonding[msg.sender][liquidity][job] < now, "removeJob: unbonding");
        uint _amount = liquidityAmountsUnbonding[msg.sender][liquidity][job];
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].sub(_amount);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = 0;
        IERC20(liquidity).safeTransfer(msg.sender, _amount);

        emit RemoveJob(job, liquidity, msg.sender, block.number, _amount);
    }

    function mint(uint amount) external {
        require(msg.sender == governance, "mint: !gov");
        _mint(governance, amount);
    }

  
    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    function _mint(address dst, uint amount) internal {
        totalSupply = totalSupply.add(amount);
        balances[dst] = balances[dst].add(amount);
        emit Transfer(address(0), dst, amount);
    }

    function _burn(address dst, uint amount) internal {
        require(dst != address(0), "_burn: zero address");
        balances[dst] = balances[dst].sub(amount, "_burn: exceeds balance");
        totalSupply = totalSupply.sub(amount);
        emit Transfer(dst, address(0), amount);
    }

    function worked(address keeper) external {
        workReceipt(keeper, KPRH.getQuoteLimit(_gasUsed.sub(gasleft())));
    }

    function workReceipt(address keeper, uint amount) public {
        require(jobs[msg.sender], "workReceipt: !job");
        require(amount <= KPRH.getQuoteLimit(_gasUsed.sub(gasleft())), "workReceipt: max limit");
        credits[msg.sender][address(this)] = credits[msg.sender][address(this)].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        _reward(keeper, amount);
        workCompleted[keeper] = workCompleted[keeper].add(amount);
        emit KeeperWorked(address(this), msg.sender, keeper, block.number, amount);
    }

  
    function receipt(address credit, address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][credit] = credits[msg.sender][credit].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        IERC20(credit).safeTransfer(keeper, amount);
        emit KeeperWorked(credit, msg.sender, keeper, block.number, amount);
    }

  
    function receiptETH(address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][ETH] = credits[msg.sender][ETH].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        payable(keeper).transfer(amount);
        emit KeeperWorked(ETH, msg.sender, keeper, block.number, amount);
    }

    function _reward(address _from, uint _amount) internal {
        bonds[_from][address(this)] = bonds[_from][address(this)].add(_amount);
        totalBonded = totalBonded.add(_amount);
        _moveDelegates(address(0), delegates[_from], _amount);
        emit Transfer(msg.sender, _from, _amount);
    }

    function _bond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].add(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.add(_amount);
            _moveDelegates(address(0), delegates[_from], _amount);
        }
    }

    function _unbond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].sub(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.sub(_amount);
            _moveDelegates(delegates[_from], address(0), _amount);
        }

    }

    function addJob(address job) external {
        require(msg.sender == governance, "addJob: !gov");
        require(!jobs[job], "addJob: job known");
        jobs[job] = true;
        jobList.push(job);
        emit JobAdded(job, block.number, msg.sender);
    }

  
    function getJobs() external view returns (address[] memory) {
        return jobList;
    }

 
    function removeJob(address job) external {
        require(msg.sender == governance, "removeJob: !gov");
        jobs[job] = false;
        emit JobRemoved(job, block.number, msg.sender);
    }

    function setKeep3rHelper(IKeep3rbHelper _kprh) external {
        require(msg.sender == governance, "setKeep3rHelper: !gov");
        KPRH = _kprh;
    }

  
    function setGovernance(address _governance) external {
        require(msg.sender == governance, "setGovernance: !gov");
        pendingGovernance = _governance;
    }

    /**
     * @notice Allows pendingGovernance to accept their role as governance (protection pattern)
     */
    function acceptGovernance() external {
        require(msg.sender == pendingGovernance, "acceptGovernance: !pendingGov");
        governance = pendingGovernance;
    }

    function isKeeper(address keeper) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper];
    }

    function isMinKeeper(address keeper, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][address(this)].add(votes[keeper]) >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

  
    function isBondedKeeper(address keeper, address bond, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][bond] >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

 
    function bond(address bonding, uint amount) external nonReentrant {
        require(!blacklist[msg.sender], "bond: blacklisted");
        bondings[msg.sender][bonding] = now.add(BOND);
        if (bonding == address(this)) {
            _transferTokens(msg.sender, address(this), amount);
        } else {
            uint _before = IERC20(bonding).balanceOf(address(this));
            IERC20(bonding).safeTransferFrom(msg.sender, address(this), amount);
            amount = IERC20(bonding).balanceOf(address(this)).sub(_before);
        }
        pendingbonds[msg.sender][bonding] = pendingbonds[msg.sender][bonding].add(amount);
        emit KeeperBonding(msg.sender, block.number, bondings[msg.sender][bonding], amount);
    }

   
    function getKeepers() external view returns (address[] memory) {
        return keeperList;
    }

  
    function activate(address bonding) external {
        require(!blacklist[msg.sender], "activate: blacklisted");
        require(bondings[msg.sender][bonding] != 0 && bondings[msg.sender][bonding] < now, "activate: bonding");
        _activate(msg.sender, bonding);
    }
    
    function _activate(address keeper, address bonding) internal {
        if (firstSeen[keeper] == 0) {
          firstSeen[keeper] = now;
          keeperList.push(keeper);
          lastJob[keeper] = now;
        }
        keepers[keeper] = true;
        _bond(bonding, keeper, pendingbonds[keeper][bonding]);
        pendingbonds[keeper][bonding] = 0;
        emit KeeperBonded(keeper, block.number, block.timestamp, bonds[keeper][bonding]);
    }

  
    function unbond(address bonding, uint amount) external {
        unbondings[msg.sender][bonding] = now.add(UNBOND);
        _unbond(bonding, msg.sender, amount);
        partialUnbonding[msg.sender][bonding] = partialUnbonding[msg.sender][bonding].add(amount);
        emit KeeperUnbonding(msg.sender, block.number, unbondings[msg.sender][bonding], amount);
    }

  
    function withdraw(address bonding) external nonReentrant {
        require(unbondings[msg.sender][bonding] != 0 && unbondings[msg.sender][bonding] < now, "withdraw: unbonding");
        require(!disputes[msg.sender], "withdraw: disputes");

        if (bonding == address(this)) {
            _transferTokens(address(this), msg.sender, partialUnbonding[msg.sender][bonding]);
        } else {
            IERC20(bonding).safeTransfer(msg.sender, partialUnbonding[msg.sender][bonding]);
        }
        emit KeeperUnbound(msg.sender, block.number, block.timestamp, partialUnbonding[msg.sender][bonding]);
        partialUnbonding[msg.sender][bonding] = 0;
    }

   
    function dispute(address keeper) external {
        require(msg.sender == governance, "dispute: !gov");
        disputes[keeper] = true;
        emit KeeperDispute(keeper, block.number);
    }

  
    function slash(address bonded, address keeper, uint amount) public nonReentrant {
        require(msg.sender == governance, "slash: !gov");
        if (bonded == address(this)) {
            _transferTokens(address(this), governance, amount);
        } else {
            IERC20(bonded).safeTransfer(governance, amount);
        }
        _unbond(bonded, keeper, amount);
        disputes[keeper] = false;
        emit KeeperSlashed(keeper, msg.sender, block.number, amount);
    }

    function revoke(address keeper) external {
        require(msg.sender == governance, "slash: !gov");
        keepers[keeper] = false;
        blacklist[keeper] = true;
        slash(address(this), keeper, bonds[keeper][address(this)]);
    }

  
    function resolve(address keeper) external {
        require(msg.sender == governance, "resolve: !gov");
        disputes[keeper] = false;
        emit KeeperResolved(keeper, block.number);
    }

   
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

  
    function approve(address spender, uint amount) public returns (bool) {
        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

   
    function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "permit: signature");
        require(signatory == owner, "permit: unauthorized");
        require(now <= deadline, "permit: expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    
    function transfer(address dst, uint amount) public returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

  
    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowances[src][spender];

        if (spender != src && spenderAllowance != uint(-1)) {
            uint newAllowance = spenderAllowance.sub(amount, "transferFrom: exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        require(src != address(0), "_transferTokens: zero address");
        require(dst != address(0), "_transferTokens: zero address");

        balances[src] = balances[src].sub(amount, "_transferTokens: exceeds balance");
        balances[dst] = balances[dst].add(amount, "_transferTokens: overflows");
        emit Transfer(src, dst, amount);
    }

    function _getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_kph","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"ApplyCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"activated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"active","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperDispute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slash","type":"uint256"}],"name":"KeeperSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactivated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"KeeperWorked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"RemoveJob","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"SubmitJob","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"UnbondJob","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAINSEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KPRH","outputs":[{"internalType":"contract IKeep3rbHelper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITYBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addCreditETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addKPRCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addLiquidityToJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"applyCreditToJob","outputs":[],"stateMutability":"nonpayable","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":"liquidity","type":"address"}],"name":"approveLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"dispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disputes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstSeen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getJobs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getKeepers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"address","name":"bond","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isBondedKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"isKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isMinKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jobList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobProposalDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keeperList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"keepers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastJob","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmountsUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityApplied","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityProvided","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"partialUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pendingbonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receiptETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"removeJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"removeLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"resolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"}],"name":"revokeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IKeep3rbHelper","name":"_kprh","type":"address"}],"name":"setKeep3rHelper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonded","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBonded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbondLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"unbondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"workCompleted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"workReceipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"worked","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405260006002556000600f553480156200001b57600080fd5b506040516200615338038062006153833981810160405260208110156200004157600080fd5b50516001600055602080546001600160a01b031916331781556040805180820190915260128152714b656570337220425343204e6574776f726b60701b9101527f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f357f78c16a89c47192c864faba091fac8a0ef455312cc27e7c97824c2cf9bdd1298a620000cd62000133565b604080516020808201959095528082019390935260608301919091523060808084019190915281518084038201815260a0909301909152815191909201209052600180546001600160a01b0319166001600160a01b039290921691909117905562000137565b4690565b608051615ff76200015c60003980611c4a528061427752806147115250615ff76000f3fe6080604052600436106104f75760003560e01c8063782d6fe11161028c578063c57981b51161015a578063e74f8239116100cc578063f39c38a011610085578063f39c38a014611684578063f75f9f7b14611699578063f9d46cf2146116cc578063f9f92be41461171b578063fede70081461174e578063ffb0a4a014611793576104f7565b8063e74f82391461155b578063e7a324dc1461159e578063eb421f3b146115b3578063ec342ad0146115e6578063ec4515dd146115fb578063f1127ed814611625576104f7565b8063d8bff5a51161011e578063d8bff5a514611401578063dd62ed3e14611434578063de63298d1461146f578063deac3541146114a8578063def70844146114e3578063e326ac4314611528576104f7565b8063c57981b5146112e9578063ce6a0880146112fe578063d454019d14611337578063d505accf1461136a578063d8ae6faf146113c8576104f7565b8063a515366a116101fe578063b4b5ea57116101b7578063b4b5ea57146111a2578063b600702a146111d5578063bb49096d14611208578063c1c1d2181461124d578063c3cda52014611262578063c5198abc146112b6576104f7565b8063a515366a1461107c578063a5d059ca146110b5578063a9059cbb146110ee578063ab033ea914611127578063b0103b1a1461115a578063b105e39f1461118d576104f7565b806388b4ac831161025057806388b4ac8314610f415780638d9acd2e14610f8457806395d89b4114610fc75780639af7728414610fdc578063a0712d6814611017578063a39744b514611041576104f7565b8063782d6fe114610e485780637ecebe0014610e815780638071198914610eb45780638322fff214610ee757806383baa69314610efc576104f7565b80634395d8ba116103c9578063603c68601161033b5780636dab5dcf116102f45780636dab5dcf14610d0a5780636fcfff4514610d3057806370a0823114610d7c57806372da828a14610daf57806374a8f10314610de25780637724ff6814610e15576104f7565b8063603c686014610b8e578063637cd7f014610bc957806364bb43ee14610c0457806367da318414610c3757806368581ebd14610c725780636ba42aaa14610cd7576104f7565b806355ea6c471161038d57806355ea6c4714610a98578063587cde1e14610acb5780635aa6e67514610afe5780635c19a95c14610b135780635feeb79414610b46578063603b4d1414610b79576104f7565b80634395d8ba1461098f57806344d96e95146109d45780634b3fde21146109e957806351cff8d914610a2257806352a4de2914610a55576104f7565b80631df0de131161046d57806330adf81f1161042657806330adf81f14610884578063313ce5671461089957806337feca84146108c45780633bbd64bc146108ff5780633d1f0bb91461093257806342966c6814610965576104f7565b80631df0de13146107845780631ff5f3da1461079957806320606b70146107de5780632119a62a146107f3578063238efcbc1461082c57806323b872dd14610841576104f7565b80631778e29c116104bf5780631778e29c1461067357806318160ddd1461069a5780631992d206146106af5780631b44555e146106f45780631b7a1fb2146107275780631c5a9d9c14610751576104f7565b806306fdde03146104fc578063095ea7b31461058657806309aff02b146105d35780630c33c522146106045780631101eb411461062e575b600080fd5b34801561050857600080fd5b506105116117a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b506105bf600480360360408110156105a957600080fd5b506001600160a01b0381351690602001356117d6565b604080519115158252519081900360200190f35b3480156105df57600080fd5b506105e861183d565b604080516001600160a01b039092168252519081900360200190f35b34801561061057600080fd5b506105e86004803603602081101561062757600080fd5b503561184c565b34801561063a57600080fd5b506106716004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611873565b005b34801561067f57600080fd5b50610688611c48565b60408051918252519081900360200190f35b3480156106a657600080fd5b50610688611c6c565b3480156106bb57600080fd5b50610688600480360360608110156106d257600080fd5b506001600160a01b038135811691602081013582169160409091013516611c72565b34801561070057600080fd5b506106886004803603602081101561071757600080fd5b50356001600160a01b0316611c95565b34801561073357600080fd5b506105e86004803603602081101561074a57600080fd5b5035611ca7565b34801561075d57600080fd5b506106716004803603602081101561077457600080fd5b50356001600160a01b0316611cb4565b34801561079057600080fd5b50610688611db7565b3480156107a557600080fd5b506105bf600480360360808110156107bc57600080fd5b506001600160a01b038135169060208101359060408101359060600135611dbe565b3480156107ea57600080fd5b50610688611e80565b3480156107ff57600080fd5b506106716004803603604081101561081657600080fd5b506001600160a01b038135169060200135611ea4565b34801561083857600080fd5b50610671612003565b34801561084d57600080fd5b506105bf6004803603606081101561086457600080fd5b506001600160a01b03813581169160208101359091169060400135612086565b34801561089057600080fd5b50610688612168565b3480156108a557600080fd5b506108ae61218c565b6040805160ff9092168252519081900360200190f35b3480156108d057600080fd5b50610688600480360360408110156108e757600080fd5b506001600160a01b0381358116916020013516612191565b34801561090b57600080fd5b506105bf6004803603602081101561092257600080fd5b50356001600160a01b03166121ae565b34801561093e57600080fd5b506105bf6004803603602081101561095557600080fd5b50356001600160a01b03166121c3565b34801561097157600080fd5b506106716004803603602081101561098857600080fd5b50356121d8565b34801561099b57600080fd5b50610671600480360360608110156109b257600080fd5b506001600160a01b0381358116916020810135821691604090910135166121e2565b3480156109e057600080fd5b5061068861253a565b3480156109f557600080fd5b5061067160048036036040811015610a0c57600080fd5b506001600160a01b038135169060200135612540565b348015610a2e57600080fd5b5061067160048036036020811015610a4557600080fd5b50356001600160a01b031661277b565b348015610a6157600080fd5b5061067160048036036060811015610a7857600080fd5b506001600160a01b038135811691602081013590911690604001356129bf565b348015610aa457600080fd5b5061067160048036036020811015610abb57600080fd5b50356001600160a01b0316612cbc565b348015610ad757600080fd5b506105e860048036036020811015610aee57600080fd5b50356001600160a01b0316612d63565b348015610b0a57600080fd5b506105e8612d7e565b348015610b1f57600080fd5b5061067160048036036020811015610b3657600080fd5b50356001600160a01b0316612d8d565b348015610b5257600080fd5b5061067160048036036020811015610b6957600080fd5b50356001600160a01b0316612d97565b348015610b8557600080fd5b50610688612e20565b348015610b9a57600080fd5b5061067160048036036040811015610bb157600080fd5b506001600160a01b0381358116916020013516612e27565b348015610bd557600080fd5b5061068860048036036040811015610bec57600080fd5b506001600160a01b038135811691602001351661302e565b348015610c1057600080fd5b5061067160048036036020811015610c2757600080fd5b50356001600160a01b031661304b565b348015610c4357600080fd5b5061068860048036036040811015610c5a57600080fd5b506001600160a01b03813581169160200135166130c3565b348015610c7e57600080fd5b50610c876130e0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610cc3578181015183820152602001610cab565b505050509050019250505060405180910390f35b348015610ce357600080fd5b506105bf60048036036020811015610cfa57600080fd5b50356001600160a01b0316613142565b61067160048036036020811015610d2057600080fd5b50356001600160a01b0316613167565b348015610d3c57600080fd5b50610d6360048036036020811015610d5357600080fd5b50356001600160a01b03166132bd565b6040805163ffffffff9092168252519081900360200190f35b348015610d8857600080fd5b5061068860048036036020811015610d9f57600080fd5b50356001600160a01b03166132d5565b348015610dbb57600080fd5b5061067160048036036020811015610dd257600080fd5b50356001600160a01b03166132f0565b348015610dee57600080fd5b5061067160048036036020811015610e0557600080fd5b50356001600160a01b0316613369565b348015610e2157600080fd5b5061068860048036036020811015610e3857600080fd5b50356001600160a01b031661340a565b348015610e5457600080fd5b5061068860048036036040811015610e6b57600080fd5b506001600160a01b03813516906020013561341c565b348015610e8d57600080fd5b5061068860048036036020811015610ea457600080fd5b50356001600160a01b031661362b565b348015610ec057600080fd5b5061067160048036036020811015610ed757600080fd5b50356001600160a01b031661363d565b348015610ef357600080fd5b506105e86136ef565b348015610f0857600080fd5b5061068860048036036060811015610f1f57600080fd5b506001600160a01b0381358116916020810135821691604090910135166136f4565b348015610f4d57600080fd5b5061067160048036036060811015610f6457600080fd5b506001600160a01b03813581169160208101359091169060400135613717565b348015610f9057600080fd5b5061067160048036036060811015610fa757600080fd5b506001600160a01b038135811691602081013590911690604001356139cd565b348015610fd357600080fd5b50610511613b19565b348015610fe857600080fd5b5061068860048036036040811015610fff57600080fd5b506001600160a01b0381358116916020013516613b3a565b34801561102357600080fd5b506106716004803603602081101561103a57600080fd5b5035613b57565b34801561104d57600080fd5b506106886004803603604081101561106457600080fd5b506001600160a01b0381358116916020013516613bb9565b34801561108857600080fd5b506106716004803603604081101561109f57600080fd5b506001600160a01b038135169060200135613bd6565b3480156110c157600080fd5b50610671600480360360408110156110d857600080fd5b506001600160a01b038135169060200135613e5f565b3480156110fa57600080fd5b506105bf6004803603604081101561111157600080fd5b506001600160a01b038135169060200135613f4d565b34801561113357600080fd5b506106716004803603602081101561114a57600080fd5b50356001600160a01b0316613f63565b34801561116657600080fd5b506105bf6004803603602081101561117d57600080fd5b50356001600160a01b0316613fda565b34801561119957600080fd5b50610c87613fef565b3480156111ae57600080fd5b50610688600480360360208110156111c557600080fd5b50356001600160a01b031661404f565b3480156111e157600080fd5b50610671600480360360208110156111f857600080fd5b50356001600160a01b03166140b3565b34801561121457600080fd5b506106886004803603606081101561122b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166141df565b34801561125957600080fd5b50610688614202565b34801561126e57600080fd5b50610671600480360360c081101561128557600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135614209565b3480156112c257600080fd5b50610671600480360360208110156112d957600080fd5b50356001600160a01b0316614447565b3480156112f557600080fd5b5061068861459d565b34801561130a57600080fd5b506106716004803603604081101561132157600080fd5b506001600160a01b0381351690602001356145a2565b34801561134357600080fd5b506106886004803603602081101561135a57600080fd5b50356001600160a01b0316614668565b34801561137657600080fd5b50610671600480360360e081101561138d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561467a565b3480156113d457600080fd5b50610671600480360360408110156113eb57600080fd5b506001600160a01b03813516906020013561491e565b34801561140d57600080fd5b506106886004803603602081101561142457600080fd5b50356001600160a01b0316614a82565b34801561144057600080fd5b506106886004803603604081101561145757600080fd5b506001600160a01b0381358116916020013516614a94565b34801561147b57600080fd5b506106716004803603604081101561149257600080fd5b506001600160a01b038135169060200135614abf565b3480156114b457600080fd5b50610688600480360360408110156114cb57600080fd5b506001600160a01b0381358116916020013516614b8a565b3480156114ef57600080fd5b506106886004803603606081101561150657600080fd5b506001600160a01b038135811691602081013582169160409091013516614ba7565b34801561153457600080fd5b506106886004803603602081101561154b57600080fd5b50356001600160a01b0316614bca565b34801561156757600080fd5b506106716004803603606081101561157e57600080fd5b506001600160a01b03813581169160208101359091169060400135614bdc565b3480156115aa57600080fd5b50610688614d2d565b3480156115bf57600080fd5b506105bf600480360360208110156115d657600080fd5b50356001600160a01b0316614d51565b3480156115f257600080fd5b50610688614d66565b34801561160757600080fd5b506105e86004803603602081101561161e57600080fd5b5035614d6c565b34801561163157600080fd5b506116646004803603604081101561164857600080fd5b5080356001600160a01b0316906020013563ffffffff16614d79565b6040805163ffffffff909316835260208301919091528051918290030190f35b34801561169057600080fd5b506105e8614da6565b3480156116a557600080fd5b50610671600480360360208110156116bc57600080fd5b50356001600160a01b0316614db5565b3480156116d857600080fd5b506105bf600480360360a08110156116ef57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135614e5f565b34801561172757600080fd5b506105bf6004803603602081101561173e57600080fd5b50356001600160a01b0316614f10565b34801561175a57600080fd5b506106886004803603606081101561177157600080fd5b506001600160a01b038135811691602081013582169160409091013516614f25565b34801561179f57600080fd5b50610c87614f48565b604051806040016040528060128152602001714b656570337220425343204e6574776f726b60701b81525081565b3360008181526006602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001546001600160a01b031681565b601f818154811061185957fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601b602090815260408083206001600160a01b0387811685529083528184209086168452909152902054156118ee576040805162461bcd60e51b815260206004820152601660248201527518dc99591a5d0e881c195b991a5b99c818dc99591a5d60521b604482015290519081900360640190fd5b6118fb4262127500614fa8565b3360008181526017602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965593835260188252808320938352928152828220938252929092529020546119589082614fa8565b3360008181526018602090815260408083206001600160a01b03898116808652918452828520908916808652818552838620889055958552601684528285209185529083528184209484529382529091205491905210156119ea5760405162461bcd60e51b815260040180806020018281038252602a815260200180615f51602a913960400191505060405180910390fd5b6040805163cbc3ab5360e01b81526001600160a01b03851660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b158015611a4e57600080fd5b505af4158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b5051604080516318160ddd60e01b81529051919250600091611b01916001600160a01b038816916318160ddd91600480820192602092909190829003018186803b158015611ac557600080fd5b505afa158015611ad9573d6000803e3d6000fd5b505050506040513d6020811015611aef57600080fd5b5051611afb8486614feb565b90615043565b6001600160a01b0385166000908152601560209081526040808320308452909152902054909150811115611b87576001600160a01b038416600090815260156020908152604080832030808552925290912054611b5e919061506e565b6001600160a01b0384166000908152601560209081526040808320308452909152812055611be4565b611b91308261506e565b6001600160a01b0384166000908152601560209081526040808320308452909152902054611bbf908261516f565b6001600160a01b03851660009081526015602090815260408083203084529091529020555b336001600160a01b0316856001600160a01b0316856001600160a01b03167f6d962fe34dd0cf9a9df3e12a7b8ddfe5f790b3f11668553455d7b52db70a07be4387604051808381526020018281526020019250505060405180910390a45050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b601b60209081526000938452604080852082529284528284209052825290205481565b60136020526000908152604090205481565b6023818154811061185957fe5b336000908152601d602052604090205460ff1615611d11576040805162461bcd60e51b81526020600482015260156024820152741858dd1a5d985d194e88189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b3360009081526009602090815260408083206001600160a01b038516845290915290205415801590611d6557503360009081526009602090815260408083206001600160a01b038516845290915290205442115b611daa576040805162461bcd60e51b815260206004820152601160248201527061637469766174653a20626f6e64696e6760781b604482015290519081900360640190fd5b611db4338261519a565b50565b6203f48081565b60005a6024556001600160a01b0385166000908152601c602052604090205460ff168015611e2357506001600160a01b0385166000908152600e6020908152604080832054600d8352818420308552909252909120548591611e209190614fa8565b10155b8015611e4757506001600160a01b0385166000908152601360205260409020548311155b8015611e7757506001600160a01b0385166000908152601060205260409020548290611e7490429061516f565b10155b95945050505050565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b3360009081526014602052604090205460ff16611ef8576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e647300000060208083019190915233600090815260158252838120600e82529091529190912054611f539183906152e8565b336000908152601560209081526040808320600e84528252808320939093556001600160a01b0385168083526012909152828220429055915183156108fc0291849190818181858888f19350505050158015611fb3573d6000803e3d6000fd5b50604080514381526020810183905281516001600160a01b038516923392600e927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8929181900390910190a45050565b6021546001600160a01b03163314612062576040805162461bcd60e51b815260206004820152601d60248201527f616363657074476f7665726e616e63653a202170656e64696e67476f76000000604482015290519081900360640190fd5b602154602080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0383166000818152600660209081526040808320338085529252822054919290919082148015906120c057506000198114155b156121515760006120ec85604051806060016040528060278152602001615f9b602791398491906152e8565b6001600160a01b0380891660008181526006602090815260408083209489168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b61215c86868661537f565b50600195945050505050565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b601281565b600960209081526000928352604080842090915290825290205481565b601c6020526000908152604090205460ff1681565b60146020526000908152604090205460ff1681565b611db4338261506e565b6001600160a01b03821660009081526022602052604090205460ff1661224a576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220546122bd576040805162461bcd60e51b815260206004820152600f60248201526e18dc99591a5d0e881b9bc8189bdb99608a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220544211612332576040805162461bcd60e51b815260206004820152600f60248201526e6372656469743a20626f6e64696e6760881b604482015290519081900360640190fd5b6040805163cbc3ab5360e01b81526001600160a01b03841660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b15801561239657600080fd5b505af41580156123aa573d6000803e3d6000fd5b505050506040513d60208110156123c057600080fd5b5051604080516318160ddd60e01b81529051919250600091612474916001600160a01b038716916318160ddd91600480820192602092909190829003018186803b15801561240d57600080fd5b505afa158015612421573d6000803e3d6000fd5b505050506040513d602081101561243757600080fd5b50516001600160a01b038088166000908152601b602090815260408083208a85168452825280832093891683529290522054611afb908590614feb565b9050612480308261553c565b6001600160a01b03831660009081526015602090815260408083203084529091529020546124ae9082614fa8565b6001600160a01b038085166000818152601560209081526040808320308452825280832095909555898416808352601b8252858320948a168084529482528583208484528252858320929092558451438152908101869052845191947fa90666688fb32254f45a367c38fbcd5f2664432b061a4354d9d3c9a7abcbec5b92918290030190a45050505050565b600f5481565b3360009081526014602052604090205460ff16612598576040805162461bcd60e51b81526020600482015260116024820152703bb7b935a932b1b2b4b83a1d1010b537b160791b604482015290519081900360640190fd5b6001546001600160a01b031663525ea6316125b65a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b5051811115612663576040805162461bcd60e51b81526020600482015260166024820152751ddbdc9ad49958d95a5c1d0e881b585e081b1a5b5a5d60521b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e64730000006020808301919091523360009081526015825283812030825290915291909120546126bd9183906152e8565b3360009081526015602090815260408083203084528252808320939093556001600160a01b038516825260129052204290556126f982826155b5565b6001600160a01b03821660009081526013602052604090205461271c9082614fa8565b6001600160a01b03831660008181526013602090815260409182902093909355805143815292830184905280519192339230927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8928290030190a45050565b600260005414156127c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152600a602090815260408083206001600160a01b0385168452909152902054158015906128195750336000908152600a602090815260408083206001600160a01b038516845290915290205442115b612860576040805162461bcd60e51b815260206004820152601360248201527277697468647261773a20756e626f6e64696e6760681b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16156128ba576040805162461bcd60e51b815260206004820152601260248201527177697468647261773a20646973707574657360701b604482015290519081900360640190fd5b6001600160a01b0381163014156128ff57336000818152600b602090815260408083206001600160a01b03861684529091529020546128fa91309161537f565b61292e565b336000818152600b602090815260408083206001600160a01b03861680855292529091205461292e929061566e565b336000818152600b602090815260408083206001600160a01b038616845282529182902054825143815242928101929092528183015290517f095ae150bb74a0755c30809eb8d4aa810b63b66b9ca96a1945bbb03d809df2e99181900360600190a2336000908152600b602090815260408083206001600160a01b0394909416835292905290812081905560019055565b60026000541415612a05576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03841681526022602052604090205460ff16612a71576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b612a866001600160a01b0384163330846156c5565b3360009081526016602090815260408083206001600160a01b0387811685529083528184209086168452909152902054612ac09082614fa8565b3360009081526016602090815260408083206001600160a01b0388811685529083528184209087168452909152902055612afd426203f480614fa8565b336000818152601a602090815260408083206001600160a01b0389811680865291845282852090891680865290845282852096909655938352601b825280832093835292815282822093825292909252902054612b5a9082614fa8565b336000908152601b602090815260408083206001600160a01b038881168552908352818420908716845282528083209390935560149052205460ff16158015612bba57506001600160a01b03821660009081526019602052604090205442115b15612c55576020546040805163dc380cbb60e01b81526001600160a01b0385811660048301529151919092169163dc380cbb91602480830192600092919082900301818387803b158015612c0d57600080fd5b505af1158015612c21573d6000803e3d6000fd5b50505050612c3b6212750042614fa890919063ffffffff16565b6001600160a01b0383166000908152601960205260409020555b336001600160a01b0316836001600160a01b0316836001600160a01b03167fe1cb44a16adbd63a44f65c279b23b8f447b2c6e120a2bc7f004758b446e05ed14385604051808381526020018281526020019250505060405180910390a45050600160005550565b6020546001600160a01b03163314612d0b576040805162461bcd60e51b815260206004820152600d60248201526c3932b9b7b63b329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19169055815143815291517f7574a4a2c81b3099d59aaf15526ea966e1e2886afd21bf4a350af7af22db3a709281900390910190a250565b6003602052600090815260409020546001600160a01b031681565b6020546001600160a01b031681565b611db43382615725565b600154611db49082906001600160a01b031663525ea631612dbb5a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612def57600080fd5b505afa158015612e03573d6000803e3d6000fd5b505050506040513d6020811015612e1957600080fd5b5051612540565b6212750081565b3360009081526017602090815260408083206001600160a01b0386811685529083528184209085168452909152902054612e9c576040805162461bcd60e51b81526020600482015260116024820152701c995b5bdd99529bd88e881d5b989bdb99607a1b604482015290519081900360640190fd5b3360009081526017602090815260408083206001600160a01b03868116855290835281842090851684529091529020544211612f16576040805162461bcd60e51b815260206004820152601460248201527372656d6f76654a6f623a20756e626f6e64696e6760601b604482015290519081900360640190fd5b3360008181526018602090815260408083206001600160a01b038781168086529184528285209087168086529084528285205495855260168452828520918552908352818420908452909152902054612f6f908261516f565b3360008181526016602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965584845260188352818420818552835281842095845294909152812055612fcc91908361566e565b336001600160a01b0316836001600160a01b0316836001600160a01b03167fb69fc9f6d19ed402461251491f86c736bfcbe966e9584d3fb8a0057b313b69204385604051808381526020018281526020019250505060405180910390a4505050565b601560209081526000928352604080842090915290825290205481565b6020546001600160a01b031633146130a2576040805162461bcd60e51b81526020600482015260156024820152743932bb37b5b2a634b8bab4b234ba3c9d1010b3b7bb60591b604482015290519081900360640190fd5b6001600160a01b03166000908152602260205260409020805460ff19169055565b600b60209081526000928352604080842090915290825290205481565b6060601f80548060200260200160405190810160405280929190818152602001828054801561313857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161311a575b5050505050905090565b60005a602455506001600160a01b03166000908152601c602052604090205460ff1690565b6001600160a01b03811660009081526014602052604090205460ff166131c9576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b60006131dc612710611afb346032614feb565b90506132166131eb348361516f565b6001600160a01b0384166000908152601560209081526040808320600e845290915290205490614fa8565b6001600160a01b038084166000908152601560209081526040808320600e8452825280832094909455549251929091169183156108fc0291849190818181858888f1935050505015801561326e573d6000803e3d6000fd5b5060408051438152346020820152815133926001600160a01b03861692600e927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b60056020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526007602052604090205490565b6020546001600160a01b03163314613347576040805162461bcd60e51b815260206004820152601560248201527439b2ba25b2b2b819b92432b63832b91d1010b3b7bb60591b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6020546001600160a01b031633146133b6576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b0381166000908152601c60209081526040808320805460ff19908116909155601d835281842080549091166001179055600d825280832030808552925290912054611db491908390614bdc565b60196020526000908152604090205481565b6000438210613463576040805162461bcd60e51b815260206004820152600e60248201526d33b2ba283934b7b92b37ba32b99d60911b604482015290519081900360640190fd5b6001600160a01b03831660009081526005602052604090205463ffffffff1680613491576000915050611837565b6001600160a01b038416600090815260046020908152604080832063ffffffff600019860181168552925290912054168310613500576001600160a01b03841660009081526004602090815260408083206000199490940163ffffffff16835292905220600101549050611837565b6001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683101561353b576000915050611837565b600060001982015b8163ffffffff168163ffffffff1611156135f457600282820363ffffffff1604810361356d615f19565b506001600160a01b038716600090815260046020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156135cf576020015194506118379350505050565b805163ffffffff168711156135e6578193506135ed565b6001820392505b5050613543565b506001600160a01b038516600090815260046020908152604080832063ffffffff9094168352929052206001015491505092915050565b60086020526000908152604090205481565b6020546001600160a01b0316331461368e576040805162461bcd60e51b815260206004820152600f60248201526e3932b6b7bb32a537b11d1010b3b7bb60891b604482015290519081900360640190fd5b6001600160a01b038116600081815260146020908152604091829020805460ff191690558151438152339181019190915281517f2ca18fdfae50f1042480d285d21f6706aa6abbd567d60a044b5bec07ccfee648929181900390910190a250565b600e81565b601860209081526000938452604080852082529284528284209052825290205481565b6002600054141561375d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03831681526014602052604090205460ff166137c3576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561381257600080fd5b505afa158015613826573d6000803e3d6000fd5b505050506040513d602081101561383c57600080fd5b505190506138556001600160a01b0385163330856156c5565b60006138da82866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b505afa1580156138bc573d6000803e3d6000fd5b505050506040513d60208110156138d257600080fd5b50519061516f565b905060006138ef612710611afb846032614feb565b905061392a6138fe838361516f565b6001600160a01b038088166000908152601560209081526040808320938c168352929052205490614fa8565b6001600160a01b0380871660009081526015602090815260408083208b851680855290835292209390935591546139639291168361566e565b336001600160a01b0316856001600160a01b0316876001600160a01b03167fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a4386604051808381526020018281526020019250505060405180910390a45050600160005550505050565b3360009081526014602052604090205460ff16613a21576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e6473000000602080830191909152336000908152601582528381206001600160a01b03881682529091529190912054613a849183906152e8565b3360009081526015602090815260408083206001600160a01b0388811680865291845282852095909555938616835260129091529020429055613ac890838361566e565b604080514381526020810183905281516001600160a01b03808616933393918816927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e89281900390910190a4505050565b6040518060400160405280600581526020016425a819a92160d91b81525081565b600a60209081526000928352604080842090915290825290205481565b6020546001600160a01b03163314613ba3576040805162461bcd60e51b815260206004820152600a60248201526936b4b73a1d1010b3b7bb60b11b604482015290519081900360640190fd5b602054611db4906001600160a01b03168261553c565b600d60209081526000928352604080842090915290825290205481565b60026000541415613c1c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152601d602052604090205460ff1615613c79576040805162461bcd60e51b8152602060048201526011602482015270189bdb990e88189b1858dadb1a5cdd1959607a1b604482015290519081900360640190fd5b613c864262015180614fa8565b3360009081526009602090815260408083206001600160a01b038716808552925290912091909155301415613cc557613cc033308361537f565b613dac565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613d1457600080fd5b505afa158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b50519050613d576001600160a01b0384163330856156c5565b613da881846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b9150505b336000908152600c602090815260408083206001600160a01b0386168452909152902054613dda9082614fa8565b336000818152600c602090815260408083206001600160a01b03881680855290835281842095909555838352600982528083209483529381529083902054835143815291820152808301849052915190917fa150b7ad789014c0171a2873708daadbdbf87457d90d3896eaf0907e5b225ae4919081900360600190a250506001600055565b613e6c4262127500614fa8565b336000818152600a602090815260408083206001600160a01b0388168452909152902091909155613e9f908390836157d4565b336000908152600b602090815260408083206001600160a01b0386168452909152902054613ecd9082614fa8565b336000818152600b602090815260408083206001600160a01b03881680855290835281842095909555838352600a82528083209483529381529083902054835143815291820152808301849052915190917f50eca01e7e4362bc0279a45c4fbe68f263771dd3418b0a29c93008759f433b2e919081900360600190a25050565b6000613f5a33848461537f565b50600192915050565b6020546001600160a01b03163314613fb8576040805162461bcd60e51b815260206004820152601360248201527239b2ba23b7bb32b93730b731b29d1010b3b7bb60691b604482015290519081900360640190fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6060601e805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6001600160a01b03811660009081526005602052604081205463ffffffff168061407a5760006140ac565b6001600160a01b038316600090815260046020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b6020546001600160a01b0316331461410b576040805162461bcd60e51b815260206004820152601660248201527530b8383937bb32a634b8bab4b234ba3c9d1010b3b7bb60511b604482015290519081900360640190fd5b6001600160a01b03811660009081526022602052604090205460ff1615614179576040805162461bcd60e51b815260206004820152601760248201527f617070726f76654c69717569646974793a202170616972000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000818152602260205260408120805460ff191660019081179091556023805491820181559091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b0319169091179055565b601760209081526000938452604080852082529284528284209052825290205481565b6201518081565b604080517f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc6020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a08301845280519082012061190160f01b60c08401527f000000000000000000000000000000000000000000000000000000000000000060c284015260e2808401829052845180850390910181526101028401808652815191840191909120600091829052610122850180875281905260ff891661014286015261016285018890526101828501879052945191949390926001926101a280840193601f198301929081900390910190855afa15801561431c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614379576040805162461bcd60e51b815260206004820152601260248201527164656c656761746542795369673a2073696760701b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020526040902080546001810190915588146143e4576040805162461bcd60e51b815260206004820152601460248201527364656c656761746542795369673a206e6f6e636560601b604482015290519081900360640190fd5b86421115614432576040805162461bcd60e51b815260206004820152601660248201527519195b1959d85d19509e54da59ce88195e1c1a5c995960521b604482015290519081900360640190fd5b61443c818a615725565b505050505050505050565b6020546001600160a01b03163314614495576040805162461bcd60e51b815260206004820152600c60248201526b30b2322537b11d1010b3b7bb60a11b604482015290519081900360640190fd5b6001600160a01b03811660009081526014602052604090205460ff16156144f7576040805162461bcd60e51b815260206004820152601160248201527030b2322537b11d103537b11035b737bbb760791b604482015290519081900360640190fd5b6001600160a01b0381166000818152601460209081526040808320805460ff19166001908117909155601f805491820181559093527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790920180546001600160a01b031916841790558151438152339181019190915281517f3d9884fbd11fce9188657c4bcfda7491d3316ce97bd234d981b7be1f012a852f929181900390910190a250565b603281565b6020546001600160a01b031633146145f2576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b6001600160a01b0382166000908152600e6020526040902054614615908261516f565b6001600160a01b0383166000908152600e6020526040902055600f5461463b908261516f565b600f556001600160a01b0380831660009081526003602052604081205461466492169083615869565b5050565b60126020526000908152604090205481565b6001600160a01b0380881660008181526008602090815260408083208054600180820190925582517f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e08501825280519083012061190160f01b6101008601527f000000000000000000000000000000000000000000000000000000000000000061010286015261012280860182905282518087039091018152610142860180845281519185019190912090859052610162860180845281905260ff8a166101828701526101a286018990526101c2860188905291519095919491926101e2808401939192601f1981019281900390910190855afa1580156147b5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614811576040805162461bcd60e51b81526020600482015260116024820152707065726d69743a207369676e617475726560781b604482015290519081900360640190fd5b896001600160a01b0316816001600160a01b03161461486e576040805162461bcd60e51b81526020600482015260146024820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604482015290519081900360640190fd5b864211156148b5576040805162461bcd60e51b815260206004820152600f60248201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604482015290519081900360640190fd5b6001600160a01b03808b166000818152600660209081526040808320948e16808452948252918290208c905581518c815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350505050505050505050565b6020546001600160a01b03163314614972576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b3b7bb60711b604482015290519081900360640190fd5b6001600160a01b03821660009081526014602052604090205460ff166149d4576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b537b160711b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560209081526040808320308452909152902054614a029082614fa8565b6001600160a01b038316600090815260156020908152604080832030808552925290912091909155614a34908261553c565b6040805143815260208101839052815133926001600160a01b0386169230927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b600e6020526000908152604090205481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6020546001600160a01b03163314614b0f576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b614b19823061519a565b6001600160a01b0382166000908152600e6020526040902054614b3c9082614fa8565b6001600160a01b0383166000908152600e6020526040902055600f54614b629082614fa8565b600f556001600160a01b03808316600090815260036020526040812054614664921683615869565b600c60209081526000928352604080842090915290825290205481565b601660209081526000938452604080852082529284528284209052825290205481565b60106020526000908152604090205481565b60026000541415614c22576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000556020546001600160a01b03163314614c74576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b038316301415614ca257602054614c9d9030906001600160a01b03168361537f565b614cbc565b602054614cbc906001600160a01b0385811691168361566e565b614cc78383836157d4565b6001600160a01b038216600081815260116020908152604091829020805460ff19169055815143815290810184905281513393927ff7e41ea76f0e7b22ba17dc4cc01fa75cff34ea24f5efe2874f5e175296259050928290030190a35050600160005550565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60226020526000908152604090205460ff1681565b61271081565b601e818154811061185957fe5b60046020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6021546001600160a01b031681565b6020546001600160a01b03163314614e04576040805162461bcd60e51b815260206004820152600d60248201526c3234b9b83aba329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19166001179055815143815291517ffb2bdfce35c242f34d4f9633225d3c34a5892d5eae9ce102de6aac188dd25ba09281900390910190a250565b60005a6024556001600160a01b0386166000908152601c602052604090205460ff168015614eb257506001600160a01b038087166000908152600d60209081526040808320938916835292905220548411155b8015614ed657506001600160a01b0386166000908152601360205260409020548311155b8015614f0657506001600160a01b0386166000908152601060205260409020548290614f0390429061516f565b10155b9695505050505050565b601d6020526000908152604090205460ff1681565b601a60209081526000938452604080852082529284528284209052825290205481565b60606023805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6000828201838110156140ac576040805162461bcd60e51b81526020600482015260066024820152656164643a202b60d01b604482015290519081900360640190fd5b600082614ffa57506000611837565b8282028284828161500757fe5b04146140ac576040805162461bcd60e51b815260206004820152600660248201526536bab61d101560d11b604482015290519081900360640190fd5b60006140ac8383604051806040016040528060068152602001656469763a202f60d01b8152506159e7565b6001600160a01b0382166150bf576040805162461bcd60e51b81526020600482015260136024820152725f6275726e3a207a65726f206164647265737360681b604482015290519081900360640190fd5b60408051808201825260168152755f6275726e3a20657863656564732062616c616e636560501b6020808301919091526001600160a01b0385166000908152600790915291909120546151139183906152e8565b6001600160a01b038316600090815260076020526040902055600254615139908261516f565b6002556040805182815290516000916001600160a01b03851691600080516020615f7b8339815191529181900360200190a35050565b60006140ac8383604051806040016040528060068152602001657375623a202d60d01b8152506152e8565b6001600160a01b03821660009081526010602052604090205461521f576001600160a01b03821660008181526010602090815260408083204290819055601e8054600181019091557f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690951790945560129091529020555b6001600160a01b038083166000908152601c60209081526040808320805460ff19166001179055600c8252808320938516835292905220546152649082908490615a4c565b6001600160a01b038083166000818152600c60209081526040808320948616808452948252808320839055838352600d825280832094835293815290839020548351438152429281019290925281840152915190917f3d80dd4660c08288217e88c2d45230220fcd3debf16898013243026e6a2aad05919081900360600190a25050565b600081848411156153775760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561533c578181015183820152602001615324565b50505050905090810190601f1680156153695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166153da576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b038216615435576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b60408051808201825260208082527f5f7472616e73666572546f6b656e733a20657863656564732062616c616e6365818301526001600160a01b03861660009081526007909152919091205461548c9183906152e8565b6001600160a01b0380851660009081526007602081815260408084209590955584518086018652601a81527f5f7472616e73666572546f6b656e733a206f766572666c6f77730000000000008183015293871683525291909120546154f2918390615ae4565b6001600160a01b038084166000818152600760209081526040918290209490945580518581529051919392871692600080516020615f7b83398151915292918290030190a3505050565b6002546155499082614fa8565b6002556001600160a01b03821660009081526007602052604090205461556f9082614fa8565b6001600160a01b0383166000818152600760209081526040808320949094558351858152935192939192600080516020615f7b8339815191529281900390910190a35050565b6001600160a01b0382166000908152600d602090815260408083203084529091529020546155e39082614fa8565b6001600160a01b0383166000908152600d60209081526040808320308452909152902055600f546156149082614fa8565b600f556001600160a01b0380831660009081526003602052604081205461563c921683615869565b6040805182815290516001600160a01b038416913391600080516020615f7b8339815191529181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526156c0908490615b42565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261571f908590615b42565b50505050565b6001600160a01b03808316600081815260036020908152604080832054600d8352818420308552835281842054948452600e909252822054931692909161576c9190614fa8565b6001600160a01b0385811660008181526003602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461571f828483615869565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615804908261516f565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615844908261516f565b600f556001600160a01b038083166000908152600360205260408120546156c0921690835b816001600160a01b0316836001600160a01b03161415801561588b5750600081115b156156c0576001600160a01b03831615615956576001600160a01b03831660009081526005602052604081205463ffffffff1690816158cb5760006158fd565b6001600160a01b038516600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b9050600061594484604051806040016040528060168152602001755f6d6f7665566f7465733a20756e646572666c6f777360501b815250846152e89092919063ffffffff16565b905061595286848484615cfd565b5050505b6001600160a01b038216156156c0576001600160a01b03821660009081526005602052604081205463ffffffff1690816159915760006159c3565b6001600160a01b038416600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b905060006159d18285614fa8565b90506159df85848484615cfd565b505050505050565b60008183615a365760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b506000838581615a4257fe5b0495945050505050565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615a7c9082614fa8565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615abc9082614fa8565b600f556001600160a01b038083166000908152600360205260408120546156c0921683615869565b60008383018285821015615b395760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b50949350505050565b615b54826001600160a01b0316615e7f565b615b9c576040805162461bcd60e51b815260206004820152601460248201527314d85999515490cc8c0e880858dbdb9d1c9858dd60621b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310615bda5780518252601f199092019160209182019101615bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615c3c576040519150601f19603f3d011682016040523d82523d6000602084013e615c41565b606091505b509150915081615c98576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561571f57808060200190516020811015615cb457600080fd5b505161571f576040805162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88085cdd58d8d95959606a1b604482015290519081900360640190fd5b6000615d3e436040518060400160405280601981526020017f5f7772697465436865636b706f696e743a203332206269747300000000000000815250615ebb565b905060008463ffffffff16118015615d8757506001600160a01b038516600090815260046020908152604080832063ffffffff6000198901811685529252909120548282169116145b15615dc4576001600160a01b038516600090815260046020908152604080832063ffffffff60001989011684529091529020600101829055615e35565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600484528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260059092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590615eb357508115155b949350505050565b6000816401000000008410615f115760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b509192915050565b60408051808201909152600080825260208201529056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00756e626f6e644c697175696469747946726f6d4a6f623a20696e73756666696369656e742066756e6473ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7472616e7366657246726f6d3a2065786365656473207370656e64657220616c6c6f77616e6365a2646970667358221220ccf99a096fb94a211e54a616aae056d15fe9255d96d45d31c2779c77ca9ab26164736f6c634300060c0033000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

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

000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6


Library Used

Keep3rbLibrary : 0x3ef349d4cfff5d4e802a1f64e8e61311699132c2

Deployed ByteCode Sourcemap

8871:30613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9131:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37143:205;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37143:205:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9046:26;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;9046:26:0;;;;;;;;;;;;;;20944:24;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20944:24:0;;:::i;25979:1129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25979:1129:0;;;;;;;;;;;;;;;;;:::i;:::-;;10184:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9443:27;;;;;;;;;;;;;:::i;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20449:87:0;;;;;;;;;;;;;;;;;;;:::i;19456:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19456:45:0;-1:-1:-1;;;;;19456:45:0;;:::i;21243:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21243:31:0;;:::i;33998:274::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33998:274:0;-1:-1:-1;;;;;33998:274:0;;:::i;17996:43::-;;;;;;;;;;;;;:::i;32409:355::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32409:355:0;;;;;;;;;;;;;;;;;;:::i;10058:119::-;;;;;;;;;;;;;:::i;29683:376::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29683:376:0;;;;;;;;:::i;32093:170::-;;;;;;;;;;;;;:::i;38326:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38326:553:0;;;;;;;;;;;;;;;;;:::i;10519:128::-;;;;;;;;;;;;;:::i;9344:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18320:60;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18320:60:0;;;;;;;;;;:::i;20590:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20590:39:0;-1:-1:-1;;;;;20590:39:0;;:::i;19575:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19575:36:0;-1:-1:-1;;;;;19575:36:0;;:::i;27947:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27947:80:0;;:::i;25174:797::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25174:797:0;;;;;;;;;;;;;;;;;;;:::i;19042:27::-;;;;;;;;;;;;;:::i;28683:567::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28683:567:0;;;;;;;;:::i;35133:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35133:673:0;-1:-1:-1;;;;;35133:673:0;;:::i;24344:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24344:822:0;;;;;;;;;;;;;;;;;:::i;36784:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36784:198:0;-1:-1:-1;;;;;36784:198:0;;:::i;9544:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9544:45:0;-1:-1:-1;;;;;9544:45:0;;:::i;21041:25::-;;;;;;;;;;;;;:::i;11316:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11316:95:0;-1:-1:-1;;;;;11316:95:0;;:::i;28551:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28551:124:0;-1:-1:-1;;;;;28551:124:0;;:::i;17900:37::-;;;;;;;;;;;;;:::i;27116:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27116:673:0;;;;;;;;;;:::i;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19674:59:0;;;;;;;;;;:::i;24049:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24049:177:0;-1:-1:-1;;;;;24049:177:0;;:::i;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18556:68:0;;;;;;;;;;:::i;31323:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32271:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32271:130:0;-1:-1:-1;;;;;32271:130:0;;:::i;21722:354::-;;;;;;;;;;;;;;;;-1:-1:-1;21722:354:0;-1:-1:-1;;;;;21722:354:0;;:::i;9811:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9811:49:0;-1:-1:-1;;;;;9811:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;38045:108;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38045:108:0;-1:-1:-1;;;;;38045:108:0;;:::i;31632:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31632:156:0;-1:-1:-1;;;;;31632:156:0;;:::i;36526:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36526:246:0;-1:-1:-1;;;;;36526:246:0;;:::i;20218:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20218:48:0;-1:-1:-1;;;;;20218:48:0;;:::i;12263:1191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12263:1191:0;;;;;;;;:::i;10730:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10730:39:0;-1:-1:-1;;;;;10730:39:0;;:::i;31427:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31427:197:0;-1:-1:-1;;;;;31427:197:0;;:::i;18217:42::-;;;;;;;;;;;;;:::i;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20078:97:0;;;;;;;;;;;;;;;;;;;:::i;22084:627::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22084:627:0;;;;;;;;;;;;;;;;;:::i;29262:409::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29262:409:0;;;;;;;;;;;;;;;;;:::i;9242:39::-;;;;;;;;;;;;;:::i;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18441:62:0;;;;;;;;;;:::i;27797:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27797:138:0;;:::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18814:57:0;;;;;;;;;;:::i;33131:743::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33131:743:0;;;;;;;;:::i;34753:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34753:368:0;;;;;;;;:::i;38167:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38167:147:0;;;;;;;;:::i;31800:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31800:170:0;-1:-1:-1;;;;;31800:170:0;;:::i;19243:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19243:40:0;-1:-1:-1;;;;;19243:40:0;;:::i;33887:99::-;;;;;;;;;;;;;:::i;12035:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12035:220:0;-1:-1:-1;;;;;12035:220:0;;:::i;23746:295::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23746:295:0;-1:-1:-1;;;;;23746:295:0;;:::i;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19936:90:0;;;;;;;;;;;;;;;;;;;:::i;17788:34::-;;;;;;;;;;;;;:::i;11419:604::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11419:604:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31044:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31044:267:0;-1:-1:-1;;;;;31044:267:0;;:::i;18091:29::-;;;;;;;;;;;;;:::i;23058:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23058:289:0;;;;;;;;:::i;19348:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19348:39:0;-1:-1:-1;;;;;19348:39:0;;:::i;37361:676::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37361:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23355:380::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23355:380:0;;;;;;;;:::i;18942:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18942:37:0;-1:-1:-1;;;;;18942:37:0;;:::i;36995:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36995:136:0;;;;;;;;;;:::i;22719:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22719:328:0;;;;;;;;:::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18690:64:0;;;;;;;;;;:::i;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19798:89:0;;;;;;;;;;;;;;;;;;;:::i;19135:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19135:41:0;-1:-1:-1;;;;;19135:41:0;;:::i;36027:491::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36027:491:0;;;;;;;;;;;;;;;;;:::i;10318:111::-;;;;;;;;;;;;;:::i;21185:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21185:49:0;-1:-1:-1;;;;;21185:49:0;;:::i;18127:33::-;;;;;;;;;;;;;:::i;20832:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20832:27:0;;:::i;9672:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9672:70:0;;-1:-1:-1;;;;;9672:70:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21073:32;;;;;;;;;;;;;:::i;35819:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35819:196:0;-1:-1:-1;;;;;35819:196:0;;:::i;32776:344::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32776:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20701:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20701:41:0;-1:-1:-1;;;;;20701:41:0;;:::i;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20311:88:0;;;;;;;;;;;;;;;;;;;:::i;24234:98::-;;;;;;;;;;;;;:::i;9131:50::-;;;;;;;;;;;;;;-1:-1:-1;;;9131:50:0;;;;:::o;37143:205::-;37234:10;37206:4;37223:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;37223:31:0;;;;;;;;;;;:40;;;37281:37;;;;;;;37206:4;;37223:31;;37234:10;;37281:37;;;;;;;;-1:-1:-1;37336:4:0;37143:205;;;;;:::o;9046:26::-;;;-1:-1:-1;;;;;9046:26:0;;:::o;20944:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20944:24:0;;-1:-1:-1;20944:24:0;:::o;25979:1129::-;26100:10;26084:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;26084:38:0;;;;;;;;;;;:43;;;;;;;;;;;:48;26076:83;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;;;;26219:15;:3;17930:7;26219;:15::i;:::-;26189:10;26170:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;26170:41:0;;;;;;;;;;;;:46;;;;;;;;;;;;:64;;;;26301:37;;;:25;:37;;;;;:48;;;;;;;;;:53;;;;;;;;;;:65;;26359:6;26301:57;:65::i;:::-;26271:10;26245:37;;;;:25;:37;;;;;;;;-1:-1:-1;;;;;26245:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;:121;;;26442:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;;26385:53;;;-1:-1:-1;26385:102:0;26377:157;;;;-1:-1:-1;;;26377:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26565:51;;;-1:-1:-1;;;26565:51:0;;-1:-1:-1;;;;;26565:51:0;;;;;;26610:4;26565:51;;;;;;26547:15;;26565:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26565:51:0;26669:31;;;-1:-1:-1;;;26669:31:0;;;;26565:51;;-1:-1:-1;26627:12:0;;26642:59;;-1:-1:-1;;;;;26669:29:0;;;;;:31;;;;;26565:51;;26669:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26669:31:0;26642:22;:10;26657:6;26642:14;:22::i;:::-;:26;;:59::i;:::-;-1:-1:-1;;;;;26726:12:0;;;;;;:7;:12;;;;;;;;26747:4;26726:27;;;;;;;;26627:74;;-1:-1:-1;26716:37:0;;26712:312;;;-1:-1:-1;;;;;26791:12:0;;;;;;:7;:12;;;;;;;;26784:4;26791:27;;;;;;;;;26770:49;;26784:4;26770:5;:49::i;:::-;-1:-1:-1;;;;;26834:12:0;;26864:1;26834:12;;;:7;:12;;;;;;;;26855:4;26834:27;;;;;;;:31;26712:312;;;26898:29;26912:4;26919:7;26898:5;:29::i;:::-;-1:-1:-1;;;;;26972:12:0;;;;;;:7;:12;;;;;;;;26993:4;26972:27;;;;;;;;:40;;27004:7;26972:31;:40::i;:::-;-1:-1:-1;;;;;26942:12:0;;;;;;:7;:12;;;;;;;;26963:4;26942:27;;;;;;;:70;26712:312;27067:10;-1:-1:-1;;;;;27041:59:0;27056:9;-1:-1:-1;;;;;27041:59:0;27051:3;-1:-1:-1;;;;;27041:59:0;;27079:12;27093:6;27041:59;;;;;;;;;;;;;;;;;;;;;;;;25979:1129;;;;;:::o;10184:40::-;;;:::o;9443:27::-;;;;:::o;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19456:45::-;;;;;;;;;;;;;:::o;21243:31::-;;;;;;;;;;33998:274;34072:10;34062:21;;;;:9;:21;;;;;;;;34061:22;34053:56;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;;;;34137:10;34128:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34128:29:0;;;;;;;;;;:34;;;;:73;;-1:-1:-1;34175:10:0;34166:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34166:29:0;;;;;;;;;;34198:3;-1:-1:-1;34128:73:0;34120:103;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;;;;34234:30;34244:10;34256:7;34234:9;:30::i;:::-;33998:274;:::o;17996:43::-;18033:6;17996:43;:::o;32409:355::-;32501:4;32529:9;32518:8;:20;-1:-1:-1;;;;;32556:15:0;;;;;;:7;:15;;;;;;;;:94;;;;-1:-1:-1;;;;;;32625:13:0;;;;;;:5;:13;;;;;;;;;32592:5;:13;;;;;32614:4;32592:28;;;;;;;;;32643:7;;32592:47;;:28;:32;:47::i;:::-;:58;;32556:94;:146;;;;-1:-1:-1;;;;;;32671:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;32671:31:0;32556:146;:200;;;;-1:-1:-1;;;;;;32731:17:0;;;;;;:9;:17;;;;;;32753:3;;32723:26;;:3;;:7;:26::i;:::-;:33;;32556:200;32549:207;32409:355;-1:-1:-1;;;;;32409:355:0:o;10058:119::-;10100:77;10058:119;:::o;29683:376::-;29765:10;29760:16;;;;:4;:16;;;;;;;;29752:42;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;;;;29832:69;;;;;;;;;;;;;;;;;;;;29840:10;-1:-1:-1;29832:19:0;;;:7;:19;;;;;18255:3;29832:24;;;;;;;;;;:69;;29861:6;;29832:28;:69::i;:::-;29813:10;29805:19;;;;:7;:19;;;;;;;;18255:3;29805:24;;;;;;;:96;;;;-1:-1:-1;;;;;29912:15:0;;;;;:7;:15;;;;;;29930:3;29912:21;;29944:32;;;;;;;29969:6;;29944:32;;29805:19;29944:32;29969:6;29912:15;29944:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29992:59:0;;;30030:12;29992:59;;;;;;;;;;-1:-1:-1;;;;;29992:59:0;;;30010:10;;18255:3;;29992:59;;;;;;;;;;;29683:376;;:::o;32093:170::-;32163:17;;-1:-1:-1;;;;;32163:17:0;32149:10;:31;32141:73;;;;;-1:-1:-1;;;32141:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32238:17;;32225:10;:30;;-1:-1:-1;;;;;;32225:30:0;-1:-1:-1;;;;;32238:17:0;;;32225:30;;;;;;32093:170::o;38326:553::-;-1:-1:-1;;;;;38485:15:0;;38405:4;38485:15;;;:10;:15;;;;;;;;38440:10;38485:24;;;;;;;;38405:4;;38440:10;;38485:24;38526:14;;;;;:46;;;-1:-1:-1;;38544:16:0;:28;;38526:46;38522:282;;;38589:17;38609:71;38630:6;38609:71;;;;;;;;;;;;;;;;;:16;;:71;:20;:71::i;:::-;-1:-1:-1;;;;;38695:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;38756:36;;;;;;;38589:91;;-1:-1:-1;38695:24:0;;:15;;38756:36;;;;;;;;;38522:282;;38816:33;38832:3;38837;38842:6;38816:15;:33::i;:::-;-1:-1:-1;38867:4:0;;38326:553;-1:-1:-1;;;;;38326:553:0:o;10519:128::-;10561:86;10519:128;:::o;9344:35::-;9377:2;9344:35;:::o;18320:60::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20590:39::-;;;;;;;;;;;;;;;:::o;19575:36::-;;;;;;;;;;;;;;;:::o;27947:80::-;27994:25;28000:10;28012:6;27994:5;:25::i;25174:797::-;-1:-1:-1;;;;;25278:28:0;;;;;;:17;:28;;;;;;;;25270:65;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25354:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25346:75;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25440:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25485:3;-1:-1:-1;25432:76:0;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;;;;25537:51;;;-1:-1:-1;;;25537:51:0;;-1:-1:-1;;;;;25537:51:0;;;;;;25582:4;25537:51;;;;;;25519:15;;25537:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25537:51:0;25676:31;;;-1:-1:-1;;;25676:31:0;;;;25537:51;;-1:-1:-1;25599:12:0;;25614:94;;-1:-1:-1;;;;;25676:29:0;;;;;:31;;;;;25537:51;;25676:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25676:31:0;-1:-1:-1;;;;;25629:25:0;;;;;;;:15;25676:31;25629:25;;;;;;;:36;;;;;;;;;;:41;;;;;;;;;;25614:57;;:10;;:14;:57::i;:94::-;25599:109;;25719:29;25733:4;25740:7;25719:5;:29::i;:::-;-1:-1:-1;;;;;25789:12:0;;;;;;:7;:12;;;;;;;;25810:4;25789:27;;;;;;;;:40;;25821:7;25789:31;:40::i;:::-;-1:-1:-1;;;;;25759:12:0;;;;;;;:7;:12;;;;;;;;25780:4;25759:27;;;;;;;:70;;;;25840:25;;;;;;:15;:25;;;;;:36;;;;;;;;;;;;:41;;;;;;;;:45;;;;25903:60;;25941:12;25903:60;;;;;;;;;;25840:25;;25903:60;;;;;;;;;25174:797;;;;;:::o;19042:27::-;;;;:::o;28683:567::-;28764:10;28759:16;;;;:4;:16;;;;;;;;28751:46;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;;;;28826:4;;-1:-1:-1;;;;;28826:4:0;:18;28845:23;28858:9;28845:8;;;:12;:23::i;:::-;28826:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28826:43:0;28816:53;;;28808:88;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;;;;28944:79;;;;;;;;;;;;;;;;;;;;28952:10;-1:-1:-1;28944:19:0;;;:7;:19;;;;;28972:4;28944:34;;;;;;;;;;:79;;28983:6;;28944:38;:79::i;:::-;28915:10;28907:19;;;;:7;:19;;;;;;;;28935:4;28907:34;;;;;;;:116;;;;-1:-1:-1;;;;;29034:15:0;;;;:7;:15;;;29052:3;29034:21;;29066:23;29042:6;29082;29066:7;:23::i;:::-;-1:-1:-1;;;;;29124:21:0;;;;;;:13;:21;;;;;;:33;;29150:6;29124:25;:33::i;:::-;-1:-1:-1;;;;;29100:21:0;;;;;;:13;:21;;;;;;;;;:57;;;;29173:69;;29221:12;29173:69;;;;;;;;;;29100:21;;29201:10;;29194:4;;29173:69;;;;;;;;28683:567;;:::o;35133:673::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;35220:10:::1;35209:22:::0;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35209:31:0;::::1;::::0;;;;;;;;:36;;::::1;::::0;:77:::1;;-1:-1:-1::0;35260:10:0::1;35249:22;::::0;;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35249:31:0;::::1;::::0;;;;;;;;35283:3:::1;-1:-1:-1::0;35209:77:0::1;35201:109;;;::::0;;-1:-1:-1;;;35201:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35201:109:0;;;;;;;;;;;;;::::1;;35339:10;35330:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;35329:21;35321:52;;;::::0;;-1:-1:-1;;;35321:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35321:52:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35390:24:0;::::1;35409:4;35390:24;35386:250;;;35462:10;35474:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35474:37:0;::::1;::::0;;;;;;;;35431:81:::1;::::0;35455:4:::1;::::0;35431:15:::1;:81::i;:::-;35386:250;;;35574:10;35586:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35586:37:0;::::1;::::0;;;;;;;;;35545:79:::1;::::0;35574:10;35545:28:::1;:79::i;:::-;35665:10;35708:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35708:37:0;::::1;::::0;;;;;;;;;35651:95;;35677:12:::1;35651:95:::0;;35691:15:::1;35651:95:::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;;;;::::1;35774:10;35797:1;35757:28:::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35757:37:0;;;::::1;::::0;;;;;;;;:41;;;1808:1;2113:22;;35133:673::o;24344:822::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;24457:28:0;::::1;::::0;;:17:::1;:28;::::0;;;;;::::1;;24449:65;;;::::0;;-1:-1:-1;;;24449:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24449:65:0;;;;;;;;;;;;;::::1;;24525:69;-1:-1:-1::0;;;;;24525:34:0;::::1;24560:10;24580:4;24587:6:::0;24525:34:::1;:69::i;:::-;24671:10;24653:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24653:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;;:57:::1;::::0;24703:6;24653:49:::1;:57::i;:::-;24623:10;24605:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24605:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;:105;24770:22:::1;:3;18033:6;24770:7;:22::i;:::-;24740:10;24723:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;24723:39:0;;::::1;::::0;;;;;;;;;:44;;::::1;::::0;;;;;;;;;:69;;;;24849:27;;;:15:::1;:27:::0;;;;;:38;;;;;;;;;:43;;;;;;;;;;:55:::1;::::0;24897:6;24849:47:::1;:55::i;:::-;24819:10;24803:27;::::0;;;:15:::1;:27;::::0;;;;;;;-1:-1:-1;;;;;24803:38:0;;::::1;::::0;;;;;;;;:43;;::::1;::::0;;;;;;;:101;;;;24922:4:::1;:9:::0;;;;::::1;;24921:10;:41:::0;::::1;;;-1:-1:-1::0;;;;;;24935:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;;24959:3:::1;-1:-1:-1::0;24921:41:0::1;24917:167;;;24991:10;::::0;24979:39:::1;::::0;;-1:-1:-1;;;24979:39:0;;-1:-1:-1;;;;;24979:39:0;;::::1;;::::0;::::1;::::0;;;24991:10;;;::::1;::::0;24979:34:::1;::::0;:39;;;;;24991:10:::1;::::0;24979:39;;;;;;;24991:10;;24979:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25057:15;17930:7;25057:3;:7;;:15;;;;:::i;:::-;-1:-1:-1::0;;;;;25033:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;:39;24917:167:::1;25125:10;-1:-1:-1::0;;;;;25099:59:0::1;25114:9;-1:-1:-1::0;;;;;25099:59:0::1;25109:3;-1:-1:-1::0;;;;;25099:59:0::1;;25137:12;25151:6;25099:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;24344:822:0:o;36784:198::-;36859:10;;-1:-1:-1;;;;;36859:10:0;36845;:24;36837:50;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36898:16:0;;36917:5;36898:16;;;:8;:16;;;;;;;;;:24;;-1:-1:-1;;36898:24:0;;;36938:36;;36961:12;36938:36;;;;;;;;;;;;;;36784:198;:::o;9544:45::-;;;;;;;;;;;;-1:-1:-1;;;;;9544:45:0;;:::o;21041:25::-;;;-1:-1:-1;;;;;21041:25:0;;:::o;11316:95::-;11371:32;11381:10;11393:9;11371;:32::i;28551:124::-;28623:4;;28603:64;;28615:6;;-1:-1:-1;;;;;28623:4:0;:18;28642:23;28655:9;28642:8;;;:12;:23::i;:::-;28623:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28623:43:0;28603:11;:64::i;17900:37::-;17930:7;17900:37;:::o;27116:673::-;27227:10;27208:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27208:41:0;;;;;;;;;;;:46;;;;;;;;;;;27200:81;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;;;;27319:10;27300:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27300:41:0;;;;;;;;;;;:46;;;;;;;;;;;27349:3;-1:-1:-1;27292:85:0;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;;;;27429:10;27388:12;27403:37;;;:25;:37;;;;;;;;-1:-1:-1;;;;;27403:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;;27515:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;:58;;27403:53;27515:49;:58::i;:::-;27485:10;27467:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27467:40:0;;;;;;;;;;;;:45;;;;;;;;;;;;:106;;;;27584:37;;;:25;:37;;;;;:48;;;;;;;;:53;;;;;;;;;:57;27652:51;;27467:40;27695:7;27652:30;:51::i;:::-;27747:10;-1:-1:-1;;;;;27721:60:0;27736:9;-1:-1:-1;;;;;27721:60:0;27731:3;-1:-1:-1;;;;;27721:60:0;;27759:12;27773:7;27721:60;;;;;;;;;;;;;;;;;;;;;;;;27116:673;;;:::o;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24049:177::-;24135:10;;-1:-1:-1;;;;;24135:10:0;24121;:24;24113:58;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24182:28:0;24213:5;24182:28;;;:17;:28;;;;;:36;;-1:-1:-1;;24182:36:0;;;24049:177::o;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;31323:93::-;31365:16;31401:7;31394:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31394:14:0;;;;;;;;;;;;;;;;;;;;;;;31323:93;:::o;32271:130::-;32323:4;32351:9;32340:8;:20;-1:-1:-1;;;;;;32378:15:0;;;;;:7;:15;;;;;;;;;32271:130::o;21722:354::-;-1:-1:-1;;;;;21793:9:0;;;;;;:4;:9;;;;;;;;21785:40;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;;;;21836:9;21848:28;18155:5;21848:18;:9;18118:2;21848:13;:18::i;:28::-;21836:40;-1:-1:-1;21907:42:0;21929:19;:9;21836:40;21929:13;:19::i;:::-;-1:-1:-1;;;;;21907:12:0;;;;;;:7;:12;;;;;;;;18255:3;21907:17;;;;;;;;;:21;:42::i;:::-;-1:-1:-1;;;;;21887:12:0;;;;;;;:7;:12;;;;;;;;18255:3;21887:17;;;;;;;:62;;;;21968:10;21960:34;;21968:10;;;;;21960:34;;;;;21989:4;;21960:34;;21887:12;21960:34;21989:4;21968:10;21960:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22012:56:0;;;22044:12;22012:56;;22058:9;22012:56;;;;;;22032:10;;-1:-1:-1;;;;;22012:56:0;;;18255:3;;22012:56;;;;;;;;;;;21722:354;;:::o;9811:49::-;;;;;;;;;;;;;;;:::o;38045:108::-;-1:-1:-1;;;;;38128:17:0;38104:4;38128:17;;;:8;:17;;;;;;;38045:108::o;31632:156::-;31721:10;;-1:-1:-1;;;;;31721:10:0;31707;:24;31699:58;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;;;;31768:4;:12;;-1:-1:-1;;;;;;31768:12:0;-1:-1:-1;;;;;31768:12:0;;;;;;;;;;31632:156::o;36526:246::-;36600:10;;-1:-1:-1;;;;;36600:10:0;36586;:24;36578:48;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36637:15:0;;36655:5;36637:15;;;:7;:15;;;;;;;;:23;;-1:-1:-1;;36637:23:0;;;;;;36671:9;:17;;;;;:24;;;;;36637:23;36671:24;;;36735:5;:13;;;;;36720:4;36735:28;;;;;;;;;36706:58;;36720:4;36645:6;;36706:5;:58::i;20218:48::-;;;;;;;;;;;;;:::o;12263:1191::-;12342:4;12381:12;12367:11;:26;12359:53;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12447:23:0;;12425:19;12447:23;;;:14;:23;;;;;;;;12485:17;12481:58;;12526:1;12519:8;;;;;12481:58;-1:-1:-1;;;;;12599:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12620:16:0;;12599:38;;;;;;;;;:48;;:63;-1:-1:-1;12595:147:0;;-1:-1:-1;;;;;12686:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;12707:16:0;;;;12686:38;;;;;;;;12722:1;12686:44;;;-1:-1:-1;12679:51:0;;12595:147;-1:-1:-1;;;;;12803:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;12799:88:0;;;12874:1;12867:8;;;;;12799:88;12899:12;-1:-1:-1;;12941:16:0;;12968:428;12983:5;12975:13;;:5;:13;;;12968:428;;;13047:1;13030:13;;;13029:19;;;13021:27;;13090:20;;:::i;:::-;-1:-1:-1;;;;;;13113:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;13090:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:27;;13156:229;;;13215:8;;;;-1:-1:-1;13208:15:0;;-1:-1:-1;;;;13208:15:0;13156:229;13249:12;;:26;;;-1:-1:-1;13245:140:0;;;13304:6;13296:14;;13245:140;;;13368:1;13359:6;:10;13351:18;;13245:140;12968:428;;;;;-1:-1:-1;;;;;;13413:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;12263:1191:0;;;;:::o;10730:39::-;;;;;;;;;;;;;:::o;31427:197::-;31501:10;;-1:-1:-1;;;;;31501:10:0;31487;:24;31479:52;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31542:9:0;;31554:5;31542:9;;;:4;:9;;;;;;;;;:17;;-1:-1:-1;;31542:17:0;;;31575:41;;31591:12;31575:41;;31605:10;31575:41;;;;;;;;;;;;;;;;;;;;31427:197;:::o;18217:42::-;18255:3;18217:42;:::o;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22084:627::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;22186:9:0;::::1;::::0;;:4:::1;:9;::::0;;;;;::::1;;22178:40;;;::::0;;-1:-1:-1;;;22178:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22178:40:0;;;;;;;;;;;;;::::1;;22229:12;22251:6;-1:-1:-1::0;;;;;22244:24:0::1;;22277:4;22244:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22244:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22244:39:0;;-1:-1:-1;22294:66:0::1;-1:-1:-1::0;;;;;22294:31:0;::::1;22326:10;22346:4;22353:6:::0;22294:31:::1;:66::i;:::-;22371:14;22388:52;22432:7;22395:6;-1:-1:-1::0;;;;;22388:24:0::1;;22421:4;22388:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22388:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22388:39:0;;:43:::1;:52::i;:::-;22371:69:::0;-1:-1:-1;22451:9:0::1;22463:28;18155:5;22463:18;22371:69:::0;18118:2:::1;22463:13;:18::i;:28::-;22451:40:::0;-1:-1:-1;22525:45:0::1;22550:19;:9:::0;22451:40;22550:13:::1;:19::i;:::-;-1:-1:-1::0;;;;;22525:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:24:::1;:45::i;:::-;-1:-1:-1::0;;;;;22502:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:68;;;;22609:10;;22581:45:::1;::::0;22502:20;22609:10:::1;22621:4:::0;22581:27:::1;:45::i;:::-;22667:10;-1:-1:-1::0;;;;;22644:59:0::1;22662:3;-1:-1:-1::0;;;;;22644:59:0::1;22654:6;-1:-1:-1::0;;;;;22644:59:0::1;;22679:12;22693:9;22644:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;;;;22084:627:0:o;29262:409::-;29357:10;29352:16;;;;:4;:16;;;;;;;;29344:42;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;;;;29427:72;;;;;;;;;;;;;;;;;;;;29435:10;-1:-1:-1;29427:19:0;;;:7;:19;;;;;-1:-1:-1;;;;;29427:27:0;;;;;;;;;;;;:72;;29459:6;;29427:31;:72::i;:::-;29405:10;29397:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;29397:27:0;;;;;;;;;;;;:102;;;;29510:15;;;;;:7;:15;;;;;29528:3;29510:21;;29542:43;;29518:6;29578;29542:27;:43::i;:::-;29601:62;;;29642:12;29601:62;;;;;;;;;;-1:-1:-1;;;;;29601:62:0;;;;29622:10;;29601:62;;;;;;;;;;;;;;29262:409;;;:::o;9242:39::-;;;;;;;;;;;;;;-1:-1:-1;;;9242:39:0;;;;:::o;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;27797:138::-;27866:10;;-1:-1:-1;;;;;27866:10:0;27852;:24;27844:47;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;;;;27908:10;;27902:25;;-1:-1:-1;;;;;27908:10:0;27920:6;27902:5;:25::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;33131:743::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;33227:10:::1;33217:21:::0;;:9:::1;:21;::::0;;;;;::::1;;33216:22;33208:52;;;::::0;;-1:-1:-1;;;33208:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33208:52:0;;;;;;;;;;;;;::::1;;33303:13;:3;17816:6;33303:7;:13::i;:::-;33280:10;33271:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;33271:29:0;::::1;::::0;;;;;;;;:45;;;;33350:4:::1;33331:24;33327:354;;;33372:50;33388:10;33408:4;33415:6;33372:15;:50::i;:::-;33327:354;;;33455:12;33477:7;-1:-1:-1::0;;;;;33470:25:0::1;;33504:4;33470:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33470:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33470:40:0;;-1:-1:-1;33525:67:0::1;-1:-1:-1::0;;;;;33525:32:0;::::1;33558:10;33578:4;33585:6:::0;33525:32:::1;:67::i;:::-;33616:53;33661:7;33623;-1:-1:-1::0;;;;;33616:25:0::1;;33650:4;33616:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33616:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:53;33607:62;;33327:354;;33740:10;33727:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33727:33:0;::::1;::::0;;;;;;;;:45:::1;::::0;33765:6;33727:37:::1;:45::i;:::-;33704:10;33691:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33691:33:0;::::1;::::0;;;;;;;;;:81;;;;33828:20;;;:8:::1;:20:::0;;;;;:29;;;;;;;;;;;33788:78;;33814:12:::1;33788:78:::0;;;;::::1;::::0;;;;;;;;;33704:10;;33788:78:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;33131:743::o;34753:368::-;34853:15;:3;17930:7;34853;:15::i;:::-;34830:10;34819:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;34819:31:0;;;;;;;;;:49;;;;34879:36;;34842:7;;34908:6;34879:7;:36::i;:::-;34983:10;34966:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34966:37:0;;;;;;;;;;:49;;35008:6;34966:41;:49::i;:::-;34943:10;34926:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34926:37:0;;;;;;;;;;;:89;;;;35073:22;;;:10;:22;;;;;:31;;;;;;;;;;;35031:82;;35059:12;35031:82;;;;;;;;;;;;;;34943:10;;35031:82;;;;;;;;;;34753:368;;:::o;38167:147::-;38227:4;38244:40;38260:10;38272:3;38277:6;38244:15;:40::i;:::-;-1:-1:-1;38302:4:0;38167:147;;;;:::o;31800:170::-;31886:10;;-1:-1:-1;;;;;31886:10:0;31872;:24;31864:56;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;;;;31931:17;:31;;-1:-1:-1;;;;;;31931:31:0;-1:-1:-1;;;;;31931:31:0;;;;;;;;;;31800:170::o;19243:40::-;;;;;;;;;;;;;;;:::o;33887:99::-;33932:16;33968:10;33961:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33961:17:0;;;;;;;;;;;;;;;;;;;;;;33887:99;:::o;12035:220::-;-1:-1:-1;;;;;12139:23:0;;12100:4;12139:23;;;:14;:23;;;;;;;;12180:16;:67;;12246:1;12180:67;;;-1:-1:-1;;;;;12199:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12220:16:0;;12199:38;;;;;;;;12235:1;12199:44;;12180:67;12173:74;12035:220;-1:-1:-1;;;12035:220:0:o;23746:295::-;23833:10;;-1:-1:-1;;;;;23833:10:0;23819;:24;23811:59;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23890:28:0;;;;;;:17;:28;;;;;;;;23889:29;23881:65;;;;;-1:-1:-1;;;23881:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23957:28:0;;;;;:17;:28;;;;;:35;;-1:-1:-1;;23957:35:0;23988:4;23957:35;;;;;;24003:14;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;24003:30:0;;;;;;23746:295::o;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17788:34::-;17816:6;17788:34;:::o;11419:604::-;11566:57;;;10364:65;11566:57;;;;;;;;-1:-1:-1;;;;;11566:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;;;;;-1:-1:-1;;;11662:57:0;;;;11691:15;11662:57;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:68;;;;;;;;;11535:18;11751:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;11652;11535:18;;11751:26;;;;;;;-1:-1:-1;;11751:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11751:26:0;;-1:-1:-1;;11751:26:0;;;-1:-1:-1;;;;;;;11796:23:0;;11788:54;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11870:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;11861:28;;11853:61;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;;;;11940:6;11933:3;:13;;11925:48;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;;;;11984:31;11994:9;12005;11984;:31::i;:::-;11419:604;;;;;;;;;:::o;31044:267::-;31115:10;;-1:-1:-1;;;;;31115:10:0;31101;:24;31093:49;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31162:9:0;;;;;;:4;:9;;;;;;;;31161:10;31153:40;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31204:9:0;;;;;;:4;:9;;;;;;;;:16;;-1:-1:-1;;31204:16:0;31216:4;31204:16;;;;;;31231:7;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31231:17:0;;;;;31264:39;;31278:12;31264:39;;31292:10;31264:39;;;;;;;;;;;;;;;;;;;;31044:267;:::o;18091:29::-;18118:2;18091:29;:::o;23058:289::-;23149:10;;-1:-1:-1;;;;;23149:10:0;23135;:24;23127:51;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23204:12:0;;;;;;:5;:12;;;;;;:24;;23221:6;23204:16;:24::i;:::-;-1:-1:-1;;;;;23189:12:0;;;;;;:5;:12;;;;;:39;23253:11;;:23;;23269:6;23253:15;:23::i;:::-;23239:11;:37;-1:-1:-1;;;;;23302:16:0;;;;;;;:9;:16;;;;;;23287:52;;23302:16;;23332:6;23287:14;:52::i;:::-;23058:289;;:::o;19348:39::-;;;;;;;;;;;;;:::o;37361:676::-;-1:-1:-1;;;;;37571:13:0;;;37488:18;37571:13;;;:6;:13;;;;;;;;:15;;;;;;;;;37519:78;;10561:86;37519:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;;;;;-1:-1:-1;;;37636:57:0;;;;37665:15;37636:57;;;;;;;;;;;;;;;;;;;;;;;;;;;37626:68;;;;;;;;;37725:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;37626:68;;37571:15;;37725:26;;;;;37571:13;;-1:-1:-1;;37725:26:0;;;;;;;;;;37571:15;37725:26;;;;;;;;;;;;;;;-1:-1:-1;;37725:26:0;;-1:-1:-1;;37725:26:0;;;-1:-1:-1;;;;;;;37770:23:0;;37762:53;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;;;;37847:5;-1:-1:-1;;;;;37834:18:0;:9;-1:-1:-1;;;;;37834:18:0;;37826:51;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;;;;37903:8;37896:3;:15;;37888:43;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37944:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;37997:32;;;;;;;;;;;;;;;;;37361:676;;;;;;;;;;:::o;23355:380::-;23445:10;;-1:-1:-1;;;;;23445:10:0;23431;:24;23423:55;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23497:9:0;;;;;;:4;:9;;;;;;;;23489:40;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23570:12:0;;;;;;:7;:12;;;;;;;;23591:4;23570:27;;;;;;;;:39;;23602:6;23570:31;:39::i;:::-;-1:-1:-1;;;;;23540:12:0;;;;;;:7;:12;;;;;;;;23561:4;23540:27;;;;;;;;:69;;;;23620:28;;23641:6;23620:5;:28::i;:::-;23664:63;;;23706:12;23664:63;;;;;;;;;;23694:10;;-1:-1:-1;;;;;23664:63:0;;;23682:4;;23664:63;;;;;;;;;;;23355:380;;:::o;18942:37::-;;;;;;;;;;;;;:::o;36995:136::-;-1:-1:-1;;;;;37095:19:0;;;37071:4;37095:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;36995:136::o;22719:328::-;22807:10;;-1:-1:-1;;;;;22807:10:0;22793;:24;22785:51;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;;;;22847:31;22857:5;22872:4;22847:9;:31::i;:::-;-1:-1:-1;;;;;22904:12:0;;;;;;:5;:12;;;;;;:24;;22921:6;22904:16;:24::i;:::-;-1:-1:-1;;;;;22889:12:0;;;;;;:5;:12;;;;;:39;22953:11;;:23;;22969:6;22953:15;:23::i;:::-;22939:11;:37;-1:-1:-1;;;;;23014:16:0;;;23010:1;23014:16;;;:9;:16;;;;;;22987:52;;23014:16;23032:6;22987:14;:52::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19135:41::-;;;;;;;;;;;;;:::o;36027:491::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;36140:10:::1;::::0;-1:-1:-1;;;;;36140:10:0::1;36126;:24;36118:48;;;::::0;;-1:-1:-1;;;36118:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36118:48:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;36181:23:0;::::1;36199:4;36181:23;36177:186;;;36252:10;::::0;36221:50:::1;::::0;36245:4:::1;::::0;-1:-1:-1;;;;;36252:10:0::1;36264:6:::0;36221:15:::1;:50::i;:::-;36177:186;;;36332:10;::::0;36304:47:::1;::::0;-1:-1:-1;;;;;36304:27:0;;::::1;::::0;36332:10:::1;36344:6:::0;36304:27:::1;:47::i;:::-;36373:31;36381:6;36389;36397;36373:7;:31::i;:::-;-1:-1:-1::0;;;;;36415:16:0;::::1;36434:5;36415:16:::0;;;:8:::1;:16;::::0;;;;;;;;:24;;-1:-1:-1;;36415:24:0::1;::::0;;36455:55;;36489:12:::1;36455:55:::0;;;;::::1;::::0;;;;;36477:10:::1;::::0;36415:16;36455:55:::1;::::0;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;36027:491:0:o;10318:111::-;10364:65;10318:111;:::o;21185:49::-;;;;;;;;;;;;;;;:::o;18127:33::-;18155:5;18127:33;:::o;20832:27::-;;;;;;;;;;9672:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21073:32::-;;;-1:-1:-1;;;;;21073:32:0;;:::o;35819:196::-;35894:10;;-1:-1:-1;;;;;35894:10:0;35880;:24;35872:50;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35933:16:0;;;;;;:8;:16;;;;;;;;;:23;;-1:-1:-1;;35933:23:0;35952:4;35933:23;;;35972:35;;35994:12;35972:35;;;;;;;;;;;;;;35819:196;:::o;32776:344::-;32885:4;32913:9;32902:8;:20;-1:-1:-1;;;;;32940:15:0;;;;;;:7;:15;;;;;;;;:66;;;;-1:-1:-1;;;;;;32976:13:0;;;;;;;:5;:13;;;;;;;;:19;;;;;;;;;;:30;-1:-1:-1;32976:30:0;32940:66;:118;;;;-1:-1:-1;;;;;;33027:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;33027:31:0;32940:118;:172;;;;-1:-1:-1;;;;;;33087:17:0;;;;;;:9;:17;;;;;;33109:3;;33079:26;;:3;;:7;:26::i;:::-;:33;;32940:172;32933:179;32776:344;-1:-1:-1;;;;;;32776:344:0:o;20701:41::-;;;;;;;;;;;;;;;:::o;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24234:98::-;24274:16;24310:14;24303:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24303:21:0;;;;;;;;;;;;;;;;;;;;;;24234:98;:::o;91:148::-;143:4;169:5;;;193:6;;;;185:25;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;;;721:208;773:4;793:6;789:47;;-1:-1:-1;823:1:0;816:8;;789:47;855:5;;;859:1;855;:5;:1;879:5;;;;;:10;871:29;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;;;1175:103;1227:4;1251:19;1255:1;1258;1251:19;;;;;;;;;;;;;-1:-1:-1;;;1251:19:0;;;:3;:19::i;28250:293::-;-1:-1:-1;;;;;28319:17:0;;28311:49;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;;;;28387:51;;;;;;;;;;;-1:-1:-1;;;28387:51:0;;;;;;;;-1:-1:-1;;;;;28387:13:0;;-1:-1:-1;28387:13:0;;;:8;:13;;;;;;;;:51;;28405:6;;28387:17;:51::i;:::-;-1:-1:-1;;;;;28371:13:0;;;;;;:8;:13;;;;;:67;28463:11;;:23;;28479:6;28463:15;:23::i;:::-;28449:11;:37;28502:33;;;;;;;;28524:1;;-1:-1:-1;;;;;28502:33:0;;;-1:-1:-1;;;;;;;;;;;28502:33:0;;;;;;;;28250:293;;:::o;429:103::-;481:4;505:19;509:1;512;505:19;;;;;;;;;;;;;-1:-1:-1;;;505:19:0;;;:3;:19::i;34284:457::-;-1:-1:-1;;;;;34360:17:0;;;;;;:9;:17;;;;;;34356:146;;-1:-1:-1;;;;;34397:17:0;;;;;;:9;:17;;;;;;;;34417:3;34397:23;;;;34433:10;:23;;;;;;;;;;;;-1:-1:-1;;;;;;34433:23:0;;;;;;;34469:7;:15;;;;;:21;34356:146;-1:-1:-1;;;;;34512:15:0;;;;;;;:7;:15;;;;;;;;:22;;-1:-1:-1;;34512:22:0;34530:4;34512:22;;;34568:12;:20;;;;;:29;;;;;;;;;;34545:53;;34551:7;;34520:6;;34545:5;:53::i;:::-;-1:-1:-1;;;;;34609:20:0;;;34641:1;34609:20;;;:12;:20;;;;;;;;:29;;;;;;;;;;;;:33;;;34710:13;;;:5;:13;;;;;:22;;;;;;;;;;;34658:75;;34679:12;34658:75;;34693:15;34658:75;;;;;;;;;;;;;34609:20;;34658:75;;;;;;;;;;34284:457;;:::o;537:180::-;617:4;650:12;642:6;;;;634:29;;;;-1:-1:-1;;;634:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;683:5:0;;;537:180::o;38887:435::-;-1:-1:-1;;;;;38979:17:0;;38971:59;;;;;-1:-1:-1;;;38971:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39049:17:0;;39041:59;;;;;-1:-1:-1;;;39041:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39129:61;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39129:13:0;;-1:-1:-1;39129:13:0;;;:8;:13;;;;;;;;:61;;39147:6;;39129:17;:61::i;:::-;-1:-1:-1;;;;;39113:13:0;;;;;;;:8;:13;;;;;;;;:77;;;;39217:55;;;;;;;;;;;;;;;:13;;;;;;;;;;;:55;;39235:6;;39217:17;:55::i;:::-;-1:-1:-1;;;;;39201:13:0;;;;;;;:8;:13;;;;;;;;;:71;;;;39288:26;;;;;;;39201:13;;39288:26;;;;-1:-1:-1;;;;;;;;;;;39288:26:0;;;;;;;;38887:435;;;:::o;28035:207::-;28110:11;;:23;;28126:6;28110:15;:23::i;:::-;28096:11;:37;-1:-1:-1;;;;;28160:13:0;;;;;;:8;:13;;;;;;:25;;28178:6;28160:17;:25::i;:::-;-1:-1:-1;;;;;28144:13:0;;;;;;:8;:13;;;;;;;;:41;;;;28201:33;;;;;;;28144:13;;;;-1:-1:-1;;;;;;;;;;;28201:33:0;;;;;;;;;28035:207;;:::o;30067:309::-;-1:-1:-1;;;;;30163:12:0;;;;;;:5;:12;;;;;;;;30184:4;30163:27;;;;;;;;:40;;30195:7;30163:31;:40::i;:::-;-1:-1:-1;;;;;30133:12:0;;;;;;:5;:12;;;;;;;;30154:4;30133:27;;;;;;;:70;30228:11;;:24;;30244:7;30228:15;:24::i;:::-;30214:11;:38;-1:-1:-1;;;;;30290:16:0;;;30286:1;30290:16;;;:9;:16;;;;;;30263:53;;30290:16;30308:7;30263:14;:53::i;:::-;30332:36;;;;;;;;-1:-1:-1;;;;;30332:36:0;;;30341:10;;-1:-1:-1;;;;;;;;;;;30332:36:0;;;;;;;;30067:309;;:::o;3787:176::-;3896:58;;;-1:-1:-1;;;;;3896:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3896:58:0;-1:-1:-1;;;3896:58:0;;;3870:85;;3889:5;;3870:18;:85::i;:::-;3787:176;;;:::o;3971:204::-;4098:68;;;-1:-1:-1;;;;;4098:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4098:68:0;-1:-1:-1;;;4098:68:0;;;4072:95;;4091:5;;4072:18;:95::i;:::-;3971:204;;;;:::o;13462:407::-;-1:-1:-1;;;;;13565:20:0;;;13539:23;13565:20;;;:9;:20;;;;;;;;;13641:5;:16;;;;;13666:4;13641:31;;;;;;;;13620:16;;;:5;:16;;;;;;13565:20;;;13539:23;;13620:53;;:16;:20;:53::i;:::-;-1:-1:-1;;;;;13684:20:0;;;;;;;:9;:20;;;;;;:32;;-1:-1:-1;;;;;;13684:32:0;;;;;;;;;;13734:54;;13596:77;;-1:-1:-1;13684:32:0;13734:54;;;;;;13684:20;13734:54;13801:60;13816:15;13833:9;13844:16;13801:14;:60::i;30712:324::-;-1:-1:-1;;;;;30819:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30845:7;30819:25;:34::i;:::-;-1:-1:-1;;;;;30795:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30887:4;30868:24;30864:163;;;30923:11;;:24;;30939:7;30923:15;:24::i;:::-;30909:11;:38;-1:-1:-1;;;;;30977:16:0;;;;;;;:9;:16;;;;;;30962:53;;30977:16;;31007:7;13877:862;13980:6;-1:-1:-1;;;;;13970:16:0;:6;-1:-1:-1;;;;;13970:16:0;;;:30;;;;;13999:1;13990:6;:10;13970:30;13966:766;;;-1:-1:-1;;;;;14021:20:0;;;14017:357;;-1:-1:-1;;;;;14081:22:0;;14062:16;14081:22;;;:14;:22;;;;;;;;;14139:13;:60;;14198:1;14139:60;;;-1:-1:-1;;;;;14155:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14175:13:0;;14155:34;;;;;;;;14187:1;14155:40;;14139:60;14122:77;;14218:14;14235:47;14249:6;14235:47;;;;;;;;;;;;;-1:-1:-1;;;14235:47:0;;;:9;:13;;:47;;;;;:::i;:::-;14218:64;;14301:57;14318:6;14326:9;14337;14348;14301:16;:57::i;:::-;14017:357;;;;-1:-1:-1;;;;;14394:20:0;;;14390:331;;-1:-1:-1;;;;;14454:22:0;;14435:16;14454:22;;;:14;:22;;;;;;;;;14512:13;:60;;14571:1;14512:60;;;-1:-1:-1;;;;;14528:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14548:13:0;;14528:34;;;;;;;;14560:1;14528:40;;14512:60;14495:77;-1:-1:-1;14591:14:0;14608:21;14495:77;14622:6;14608:13;:21::i;:::-;14591:38;;14648:57;14665:6;14673:9;14684;14695;14648:16;:57::i;:::-;14390:331;;;13877:862;;;:::o;1282:177::-;1362:4;1394:12;1387:5;1379:28;;;;-1:-1:-1;;;1379:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:6;1431:1;1427;:5;;;;;;;1282:177;-1:-1:-1;;;;;1282:177:0:o;30384:320::-;-1:-1:-1;;;;;30489:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30515:7;30489:25;:34::i;:::-;-1:-1:-1;;;;;30465:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30557:4;30538:24;30534:163;;;30593:11;;:24;;30609:7;30593:15;:24::i;:::-;30579:11;:38;-1:-1:-1;;;;;30659:16:0;;;30655:1;30659:16;;;:9;:16;;;;;;30632:53;;30659:16;30677:7;30632:14;:53::i;244:180::-;324:4;350:5;;;382:12;374:6;;;;366:29;;;;-1:-1:-1;;;366:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;415:1:0;244:180;-1:-1:-1;;;;244:180:0:o;5196:614::-;5341:27;5349:5;-1:-1:-1;;;;;5341:25:0;;:27::i;:::-;5333:60;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;;;;5465:12;5479:23;5514:5;-1:-1:-1;;;;;5506:19:0;5526:4;5506:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5506:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5464:67;;;;5550:7;5542:52;;;;;-1:-1:-1;;;5542:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5606:17;;:21;5602:201;;5748:10;5737:30;;;;;;;;;;;;;;;-1:-1:-1;5737:30:0;5729:62;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;;;14747:598;14861:18;14882:49;14889:12;14882:49;;;;;;;;;;;;;;;;;:6;:49::i;:::-;14861:70;;14961:1;14946:12;:16;;;:85;;;;-1:-1:-1;;;;;;14966:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;14989:16:0;;14966:40;;;;;;;;;:50;:65;;;:50;;:65;14946:85;14942:329;;;-1:-1:-1;;;;;15046:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;15069:16:0;;15046:40;;;;;;;;15084:1;15046:46;:57;;;14942:329;;;15171:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15132:22:0;;-1:-1:-1;15132:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;15132:72:0;;;;;;;;;;;;;15217:25;;;:14;:25;;;;;;:44;;15245:16;;;15217:44;;;;;;;;;;14942:329;15286:51;;;;;;;;;;;;;;-1:-1:-1;;;;;15286:51:0;;;;;;;;;;;14747:598;;;;;:::o;2856:374::-;2916:4;3139:20;;2982:66;3179:23;;;;;;:42;;-1:-1:-1;3206:15:0;;;3179:42;3171:51;2856:374;-1:-1:-1;;;;2856:374:0:o;15353:161::-;15428:6;15466:12;15459:5;15455:9;;15447:32;;;;-1:-1:-1;;;15447:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15504:1:0;;15353:161;-1:-1:-1;;15353:161:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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