Contract 0x73a052500105205d34daf004eab301916da8190f

 
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0xbe7e95363b7383a7b772dc5a17786f10b7be1e26797acf86fe40bf30b1c308f4Withdraw(pending)2021-06-22 7:15:3512 hrs 35 mins ago0x86df0b47e5fbef03a978a2d3b61a100d9543a094 IN yearn: yTUSD Token0 Ether(Pending)(Pending)
0xea675c26ea6f96662ae89615a60a3d22ae631107f5cde5b1c552e6438296a9c7Withdraw126854842021-06-22 17:56:261 hr 55 mins ago0xb3e214f4f6b5bffd44281d308d9a570f48d75dc9 IN  yearn: yTUSD Token0 Ether0.00926956844
0xabf76e542790897b0087d3fb597a67e222597a5932851d19f8e1622b9d649c6fApprove126848672021-06-22 15:40:364 hrs 10 mins ago0xf4c4e6c3391cb815baaf78aedebcb36b2b32f0d5 IN  yearn: yTUSD Token0 Ether0.005268592112
0xa1f42a9367ee9c4b92e03e7b430e8cadde8362ddd570ca58cb19e1296b52a1adWithdraw126836832021-06-22 11:14:268 hrs 37 mins ago0xf94050017ee36bbe4207bc98c3667597f412c2e2 IN  yearn: yTUSD Token0 Ether0.00610948829
0xda42bce158b3f8df300ad72cda94ae19ca32db7a60e8e4bc11a11f64864fd833Transfer126823212021-06-22 6:01:0513 hrs 50 mins ago0x141fef8cd8397a390afe94846c8bd6f4ab981c48 IN  yearn: yTUSD Token0 Ether0.000304254768.11
0xc36fefec28d8683eb0351a03ab51f9dd29c97eaa7d2d955f10cb36a498ed6facTransfer126817432021-06-22 3:56:5815 hrs 54 mins ago0xe6c460df5ec66647cab693697f1bc100ae0a9911 IN  yearn: yTUSD Token0 Ether0.00078808821
0x29a129b6e820e375ebb6a1c9bd5fb5cd89daddc71bae763ad995904f5f31f98bTransfer126808962021-06-22 0:49:4819 hrs 1 min ago0xb3e214f4f6b5bffd44281d308d9a570f48d75dc9 IN  yearn: yTUSD Token0 Ether0.00116726442
0x31bd2ca56c84e53f7b59d32a28d8324c177f2029185ce45fc65e336d237da96fWithdraw126805592021-06-21 23:31:0020 hrs 20 mins ago0xc26d1e61f6eddec969111e9958a303951733359c IN  yearn: yTUSD Token0 Ether0.01361740864
0x6d8284e504b1a52e9e12b24f4d4c9a5c4c9df8e81b39df28e85114f4345323c2Withdraw126795272021-06-21 19:30:071 day 21 mins ago0xb85624d75405bddd598d06b6cbebbacd56af64e0 IN  yearn: yTUSD Token0 Ether0.00702147633
0x86bd42b7bb571643b485b08c012572fa6d8b1c62eea917ee10059552c226c0e2Withdraw126790682021-06-21 17:45:321 day 2 hrs ago0x5344a1d5afe4e4841b4ad90af0fdbe285d4e4eb3 IN  yearn: yTUSD Token0 Ether0.00446821221
0xa8078d542dfbaf24a9c76452c09730d71b414fdfab480be46f636c5d4ae70915Transfer126781022021-06-21 14:16:221 day 5 hrs ago0xcb2e660bf8f62c33784321da261f9b018aafd30c IN  yearn: yTUSD Token0 Ether0.00165070444
0xa6b7870c3ff61414bc94f41ca254a657567c0cfbe9abdf934283a8070d57b3faWithdraw126776562021-06-21 12:37:551 day 7 hrs ago0xb3e214f4f6b5bffd44281d308d9a570f48d75dc9 IN  yearn: yTUSD Token0 Ether0.0107436651
0x1ab921e4bd93a8e565ff0f18ac269568297f60a5cb9c6d0e95cb890cdd2a764dWithdraw126771982021-06-21 10:53:231 day 8 hrs ago0x03ea877e98c04d85f2c6b496c20a6e1c7a6af498 IN  yearn: yTUSD Token0 Ether0.0074474435
0x6f1f9d78c1b68d59f92dd532bfafa278a7e52522abd73c2d6c792f03a3b3b411Withdraw126769992021-06-21 10:06:241 day 9 hrs ago0xb80ac5fa15cc3d3af515033c0489f094cec0bb7f IN  yearn: yTUSD Token0 Ether0.00383011218
0x8f5a44a49369edfafb13039d4bb46f3f060aac8920f3c6065895af105392ab16Withdraw126769892021-06-21 10:04:031 day 9 hrs ago0xb3e214f4f6b5bffd44281d308d9a570f48d75dc9 IN  yearn: yTUSD Token0 Ether0.00660538829
0x7ae3e3e245c6f5e4c1e74a68b692083f80b7d1ded14b4a95d39ef0f4c4072ed6Withdraw126760282021-06-21 6:26:091 day 13 hrs ago0xd5a6e27ba02928e2ea60a5b1350b8be777204355 IN  yearn: yTUSD Token0 Ether0.00234049211
0xd7af71c8669cd56db3a9543a3744d704fffeb3550de19e6afa1b7e607cc961e7Withdraw126757092021-06-21 5:15:091 day 14 hrs ago0x8c96196e5ec2c9aa56599434a050eacaea34c873 IN  yearn: yTUSD Token0 Ether0.00914971243
0xe571ff0c6d1e5efa6f5ea2e2e385444656e68524b8be5d9d4735fb4a6145f904Deposit126742842021-06-20 23:44:311 day 20 hrs ago0x3f1b4e8678be9a106ba9364eed348ef5da2857f8 IN  yearn: yTUSD Token0 Ether0.001006035
0x0ee6bbd2dd25b711d97cd0a4e7a68a08da20b036e2247f8fc41147f33e278688Deposit126742092021-06-20 23:32:191 day 20 hrs ago0x645a1eb6f011155e24b23a0d26a65c636a2a2ce3 IN  yearn: yTUSD Token0 Ether0.000921156
0xdb513111cdb7d7312edab27b67e620626f4bfdc133316475359e94df6210bab7Deposit126742092021-06-20 23:32:191 day 20 hrs ago0x645a1eb6f011155e24b23a0d26a65c636a2a2ce3 IN  yearn: yTUSD Token0 Ether0.001091415
0xbbbcb1b5c66f6158d0d6d569c0cdb27696f1f428312827fe55677744bf87149bWithdraw126731272021-06-20 19:34:412 days 16 mins ago0x8bb7c7016219b180adfd58845fda00ca9cb246d1 IN  yearn: yTUSD Token0 Ether0.00829810839
0x90d0dde4710ceb5a04bec0c269f0fcc2a8213ce01dad4b08ef4450a3c3678fd6Deposit126725072021-06-20 17:23:332 days 2 hrs ago0x63dd752be0065646c9b4869b068aa8a565a691d5 IN  yearn: yTUSD Token0 Ether0.0013096926
0x37f913fa25015242f5202decbc98590f2d9a31718eb093eb1ca768f84f54283eDeposit126719162021-06-20 15:14:102 days 4 hrs ago0xb3e214f4f6b5bffd44281d308d9a570f48d75dc9 IN  yearn: yTUSD Token0 Ether0.00241432812
0x96d50840a2c0caf1e89b37d6e79befec3c1bf6bc860bfff3f46cc2d2ee0ea1d1Withdraw126717222021-06-20 14:26:312 days 5 hrs ago0xe87e18f64e150eb4a1baa5bf7af152b46fe75f03 IN  yearn: yTUSD Token0 Ether0.00255340812
0x84c5227b3a9a8f58eea86690020e22f4b078199cbc13bcb879bdff31911c4d0eDeposit126710992021-06-20 11:58:332 days 7 hrs ago0x7e9720525085d2b06035fac7406eca88ee0726f3 IN  yearn: yTUSD Token0 Ether0.00321891216
[ Download CSV Export 

OVERVIEW

iearn.finance yield bearing tokens

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
yTUSD

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-12
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

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

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) _balances;

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

    uint256 _totalSupply;
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

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

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

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 != 0x0 && codehash != accountHash);
    }
    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 balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have 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 {
        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: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-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: ERC20 operation did not succeed");
        }
    }
}

interface Compound {
    function mint ( uint256 mintAmount ) external returns ( uint256 );
    function redeem(uint256 redeemTokens) external returns (uint256);
    function exchangeRateStored() external view returns (uint);
}

interface Fulcrum {
    function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
    function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
    function assetBalanceOf(address _owner) external view returns (uint256 balance);
}

interface ILendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
}

interface Aave {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
}

interface AToken {
    function redeem(uint256 amount) external;
}

interface IIEarnManager {
    function recommend(address _token) external view returns (
      string memory choice,
      uint256 capr,
      uint256 iapr,
      uint256 aapr,
      uint256 dapr
    );
}

contract Structs {
    struct Val {
        uint256 value;
    }

    enum ActionType {
        Deposit,   // supply tokens
        Withdraw  // borrow tokens
    }

    enum AssetDenomination {
        Wei // the amount is denominated in wei
    }

    enum AssetReference {
        Delta // the amount is given as a delta from the current value
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

contract DyDx is Structs {
    function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory);
    function operate(Info[] memory, ActionArgs[] memory) public;
}

interface LendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
}

contract yTUSD is ERC20, ERC20Detailed, ReentrancyGuard, Ownable, Structs {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;

  uint256 public pool;
  address public token;
  address public compound;
  address public fulcrum;
  address public aave;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;

  enum Lender {
      NONE,
      DYDX,
      COMPOUND,
      AAVE,
      FULCRUM
  }

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("iearn TUSD", "yTUSD", 18) {
    token = address(0x0000000000085d4780B73119b644AE5ecd22b376);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    fulcrum = address(0x49f4592E641820e928F9919Ef4aBd92a719B4b49);
    aaveToken = address(0x4DA9b813057D04BAef4e5800E36083717b4a0341);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 0;
    approveToken();
  }

  // Ownable setters incase of support in future for these systems
  function set_new_APR(address _new_APR) public onlyOwner {
      apr = _new_APR;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }

  // Quick swap low gas method for pool swaps
  function deposit(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = _calcPoolValueInToken();

      IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);

      // Calculate pool shares
      uint256 shares = 0;
      if (pool == 0) {
        shares = _amount;
        pool = _amount;
      } else {
        shares = (_amount.mul(_totalSupply)).div(pool);
      }
      pool = _calcPoolValueInToken();
      _mint(msg.sender, shares);
  }

  // No rebalance implementation for lower fees and faster swaps
  function withdraw(uint256 _shares)
      external
      nonReentrant
  {
      require(_shares > 0, "withdraw must be greater than 0");

      uint256 ibalance = balanceOf(msg.sender);
      require(_shares <= ibalance, "insufficient balance");

      // Could have over value from cTokens
      pool = _calcPoolValueInToken();
      // Calc to redeem before updating balances
      uint256 r = (pool.mul(_shares)).div(_totalSupply);


      _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
      _totalSupply = _totalSupply.sub(_shares);

      emit Transfer(msg.sender, address(0), _shares);

      // Check balance
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < r) {
        _withdrawSome(r.sub(b));
      }

      IERC20(token).safeTransfer(msg.sender, r);
      pool = _calcPoolValueInToken();
  }

  function() external payable {

  }

  function recommend() public view returns (Lender) {
    (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token);
    uint256 max = 0;
    if (capr > max) {
      max = capr;
    }
    if (iapr > max) {
      max = iapr;
    }
    if (aapr > max) {
      max = aapr;
    }
    if (dapr > max) {
      max = dapr;
    }

    Lender newProvider = Lender.NONE;
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    } else if (max == iapr) {
      newProvider = Lender.FULCRUM;
    } else if (max == aapr) {
      newProvider = Lender.AAVE;
    } else if (max == dapr) {
      newProvider = Lender.DYDX;
    }
    return newProvider;
  }

  function supplyDydx(uint256 amount) public returns(uint) {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Deposit;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function _withdrawDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Withdraw;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function getAave() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPool();
  }
  function getAaveCore() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPoolCore();
  }

  function approveToken() public {
      IERC20(token).safeApprove(compound, uint(-1)); //also add to constructor
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(-1));
  }

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function balanceDydx() public view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function balanceCompound() public view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function balanceCompoundInToken() public view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function balanceFulcrumInToken() public view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function balanceFulcrum() public view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _balance() internal view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function _balanceDydx() internal view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function _balanceCompound() internal view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function _balanceCompoundInToken() internal view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function _balanceFulcrumInToken() internal view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function _balanceFulcrum() internal view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function _balanceAave() internal view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _withdrawAll() internal {
    uint256 amount = _balanceCompound();
    if (amount > 0) {
      _withdrawCompound(amount);
    }
    amount = _balanceDydx();
    if (amount > 0) {
      _withdrawDydx(amount);
    }
    amount = _balanceFulcrum();
    if (amount > 0) {
      _withdrawFulcrum(amount);
    }
    amount = _balanceAave();
    if (amount > 0) {
      _withdrawAave(amount);
    }
  }

  function _withdrawSomeCompound(uint256 _amount) internal {
    uint256 b = balanceCompound();
    uint256 bT = balanceCompoundInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawCompound(amount);
  }

  // 1999999614570950845
  function _withdrawSomeFulcrum(uint256 _amount) internal {
    // Balance of fulcrum tokens, 1 iDAI = 1.00x DAI
    uint256 b = balanceFulcrum(); // 1970469086655766652
    // Balance of token in fulcrum
    uint256 bT = balanceFulcrumInToken(); // 2000000803224344406
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }

  function _withdrawSome(uint256 _amount) internal {
    if (provider == Lender.COMPOUND) {
      _withdrawSomeCompound(_amount);
    }
    if (provider == Lender.AAVE) {
      require(balanceAave() >= _amount, "insufficient funds");
      _withdrawAave(_amount);
    }
    if (provider == Lender.DYDX) {
      require(balanceDydx() >= _amount, "insufficient funds");
      _withdrawDydx(_amount);
    }
    if (provider == Lender.FULCRUM) {
      _withdrawSomeFulcrum(_amount);
    }
  }

  function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  // Internal only rebalance for better gas in redeem
  function _rebalance(Lender newProvider) internal {
    if (_balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(_balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(_balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(_balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(_balance());
      }
    }
    provider = newProvider;
  }

  function supplyAave(uint amount) public {
      Aave(getAave()).deposit(token, amount, 0);
  }
  function supplyFulcrum(uint amount) public {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function supplyCompound(uint amount) public {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _calcPoolValueInToken() internal view returns (uint) {
    return _balanceCompoundInToken()
      .add(_balanceFulcrumInToken())
      .add(_balanceDydx())
      .add(_balanceAave())
      .add(_balance());
  }

  function calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

  function getPricePerFullShare() public view returns (uint) {
    uint _pool = calcPoolValueInToken();
    return _pool.mul(1e18).div(_totalSupply);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yTUSD.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yTUSD.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000601060146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600a81526020017f696561726e2054555344000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f795455534400000000000000000000000000000000000000000000000000000081525060128260039080519060200190620000bd92919062000a96565b508160049080519060200190620000d692919062000a96565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d6200043660201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36e085d4780b73119b644ae5ecd22b376600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd6d648c991f7d47454354f4ef326b04025a48a8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507349f4592e641820e928f9919ef4abd92a719b4b49600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734da9b813057d04baef4e5800e36083717b4a0341600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f81905550620004306200043e60201b60201c565b62000fab565b600033905090565b620004d4600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068560201b6200334c179092919060201c565b6200056a600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068560201b6200334c179092919060201c565b620005ed6200057e6200081060201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068560201b6200334c179092919060201c565b62000683600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068560201b6200334c179092919060201c565b565b600081148062000725575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620006cf92919062000dd4565b60206040518083038186803b158015620006e857600080fd5b505afa158015620006fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000723919081019062000be2565b145b62000767576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075e9062000e72565b60405180910390fd5b6200080b838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401620007a292919062000e01565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050620008bb60201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200087b57600080fd5b505afa15801562000890573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620008b6919081019062000b8a565b905090565b620008e78273ffffffffffffffffffffffffffffffffffffffff1662000a4a60201b6200455b1760201c565b62000929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009209062000e94565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000954919062000dbb565b6000604051808303816000865af19150503d806000811462000993576040519150601f19603f3d011682016040523d82523d6000602084013e62000998565b606091505b509150915081620009e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d79062000e2e565b60405180910390fd5b60008151111562000a44578080602001905162000a01919081019062000bb6565b62000a43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3a9062000e50565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000a8d5750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ad957805160ff191683800117855562000b0a565b8280016001018555821562000b0a579182015b8281111562000b0957825182559160200191906001019062000aec565b5b50905062000b19919062000b1d565b5090565b62000b4291905b8082111562000b3e57600081600090555060010162000b24565b5090565b90565b60008151905062000b568162000f5d565b92915050565b60008151905062000b6d8162000f77565b92915050565b60008151905062000b848162000f91565b92915050565b60006020828403121562000b9d57600080fd5b600062000bad8482850162000b45565b91505092915050565b60006020828403121562000bc957600080fd5b600062000bd98482850162000b5c565b91505092915050565b60006020828403121562000bf557600080fd5b600062000c058482850162000b73565b91505092915050565b62000c198162000edd565b82525050565b600062000c2c8262000eb6565b62000c38818562000ec1565b935062000c4a81856020860162000f27565b80840191505092915050565b600062000c6560208362000ecc565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000ca7602a8362000ecc565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000d0f60368362000ecc565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000d77601f8362000ecc565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000db58162000f1d565b82525050565b600062000dc9828462000c1f565b915081905092915050565b600060408201905062000deb600083018562000c0e565b62000dfa602083018462000c0e565b9392505050565b600060408201905062000e18600083018562000c0e565b62000e27602083018462000daa565b9392505050565b6000602082019050818103600083015262000e498162000c56565b9050919050565b6000602082019050818103600083015262000e6b8162000c98565b9050919050565b6000602082019050818103600083015262000e8d8162000d00565b9050919050565b6000602082019050818103600083015262000eaf8162000d68565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600062000eea8262000efd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f4757808201518184015260208101905062000f2a565b8381111562000f57576000848401525b50505050565b62000f688162000edd565b811462000f7457600080fd5b50565b62000f828162000ef1565b811462000f8e57600080fd5b50565b62000f9c8162000f1d565b811462000fa857600080fd5b50565b615dc58062000fbb6000396000f3fe6080604052600436106102935760003560e01c8063819faf7b1161015a578063b6b55f25116100c1578063f5a41dea1161007a578063f5a41dea146109e7578063f5ff191614610a12578063f69e204614610a3b578063f7c1ec7714610a66578063f82ce27d14610a91578063fc0c546a14610abc57610293565b8063b6b55f25146108d9578063cf8ca42614610902578063d9d7858a1461092d578063dd62ed3e14610958578063e849d65914610995578063f2fde38b146109be57610293565b80639ff011b9116101135780639ff011b9146107b5578063a160176d146107de578063a457c2d714610809578063a728797114610846578063a9059cbb14610871578063b69ef8a8146108ae57610293565b8063819faf7b146106c75780638da5cb5b146106f25780638e4ec6ef1461071d5780638f32d59b1461074857806395d89b411461077357806399b71d5c1461079e57610293565b806339c0a7e1116101fe57806370a08231116101b757806370a08231146105dd5780637137ef991461061a578063715018a61461064557806377c7b8fc1461065c5780637d7c2a1c146106875780638124955c1461069e57610293565b806339c0a7e1146104df578063463574731461050a57806357ded9c91461053357806358782c211461055e57806361c1ec551461058957806365aab749146105b457610293565b806316f0115b1161025057806316f0115b146103bb57806318160ddd146103e657806323b872dd146104115780632e1a7d4d1461044e578063313ce5671461047757806339509351146104a257610293565b806306636c1c1461029557806306a3fe59146102d257806306fdde03146102fd578063085d488314610328578063095ea7b3146103535780630eb2a26714610390575b005b3480156102a157600080fd5b506102bc60048036036102b79190810190614a49565b610ae7565b6040516102c991906159c4565b60405180910390f35b3480156102de57600080fd5b506102e7610d25565b6040516102f4919061552d565b60405180910390f35b34801561030957600080fd5b50610312610d4b565b60405161031f91906156b9565b60405180910390f35b34801561033457600080fd5b5061033d610ded565b60405161034a919061569e565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603610375919081019061492c565b610e00565b6040516103879190615683565b60405180910390f35b34801561039c57600080fd5b506103a5610e1e565b6040516103b291906159c4565b60405180910390f35b3480156103c757600080fd5b506103d0610ed0565b6040516103dd91906159c4565b60405180910390f35b3480156103f257600080fd5b506103fb610ed6565b60405161040891906159c4565b60405180910390f35b34801561041d57600080fd5b50610438600480360361043391908101906148dd565b610ee0565b6040516104459190615683565b60405180910390f35b34801561045a57600080fd5b5061047560048036036104709190810190614a49565b610fb9565b005b34801561048357600080fd5b5061048c611363565b60405161049991906159df565b60405180910390f35b3480156104ae57600080fd5b506104c960048036036104c4919081019061492c565b61137a565b6040516104d69190615683565b60405180910390f35b3480156104eb57600080fd5b506104f461142d565b60405161050191906159c4565b60405180910390f35b34801561051657600080fd5b50610531600480360361052c919081019061484f565b61151d565b005b34801561053f57600080fd5b506105486115a8565b604051610555919061552d565b60405180910390f35b34801561056a57600080fd5b506105736115ce565b604051610580919061552d565b60405180910390f35b34801561059557600080fd5b5061059e6115f4565b6040516105ab91906159c4565b60405180910390f35b3480156105c057600080fd5b506105db60048036036105d69190810190614a49565b6116a6565b005b3480156105e957600080fd5b5061060460048036036105ff919081019061484f565b611742565b60405161061191906159c4565b60405180910390f35b34801561062657600080fd5b5061062f61178a565b60405161063c91906159c4565b60405180910390f35b34801561065157600080fd5b5061065a6117fd565b005b34801561066857600080fd5b50610671611905565b60405161067e91906159c4565b60405180910390f35b34801561069357600080fd5b5061069c611947565b005b3480156106aa57600080fd5b506106c560048036036106c09190810190614a49565b611a8e565b005b3480156106d357600080fd5b506106dc611b82565b6040516106e9919061552d565b60405180910390f35b3480156106fe57600080fd5b50610707611ba8565b604051610714919061552d565b60405180910390f35b34801561072957600080fd5b50610732611bd2565b60405161073f919061552d565b60405180910390f35b34801561075457600080fd5b5061075d611bf8565b60405161076a9190615683565b60405180910390f35b34801561077f57600080fd5b50610788611c57565b60405161079591906156b9565b60405180910390f35b3480156107aa57600080fd5b506107b3611cf9565b005b3480156107c157600080fd5b506107dc60048036036107d79190810190614a49565b611f1c565b005b3480156107ea57600080fd5b506107f3611f6d565b604051610800919061569e565b60405180910390f35b34801561081557600080fd5b50610830600480360361082b919081019061492c565b6120d9565b60405161083d9190615683565b60405180910390f35b34801561085257600080fd5b5061085b6121a6565b60405161086891906159c4565b60405180910390f35b34801561087d57600080fd5b506108986004803603610893919081019061492c565b612292565b6040516108a59190615683565b60405180910390f35b3480156108ba57600080fd5b506108c36122b0565b6040516108d091906159c4565b60405180910390f35b3480156108e557600080fd5b5061090060048036036108fb9190810190614a49565b612362565b005b34801561090e57600080fd5b506109176124c6565b60405161092491906159c4565b60405180910390f35b34801561093957600080fd5b50610942612578565b60405161094f91906159c4565b60405180910390f35b34801561096457600080fd5b5061097f600480360361097a91908101906148a1565b61257e565b60405161098c91906159c4565b60405180910390f35b3480156109a157600080fd5b506109bc60048036036109b79190810190614a49565b612605565b005b3480156109ca57600080fd5b506109e560048036036109e0919081019061484f565b6126f7565b005b3480156109f357600080fd5b506109fc61274a565b604051610a0991906159c4565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603610a34919081019061484f565b612815565b005b348015610a4757600080fd5b50610a506128a0565b604051610a5d919061552d565b60405180910390f35b348015610a7257600080fd5b50610a7b6128c6565b604051610a88919061552d565b60405180910390f35b348015610a9d57600080fd5b50610aa661296d565b604051610ab3919061552d565b60405180910390f35b348015610ac857600080fd5b50610ad1612a14565b604051610ade919061552d565b60405180910390f35b600060606001604051908082528060200260200182016040528015610b2657816020015b610b136145a6565b815260200190600190039081610b0b5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110610b6257fe5b6020026020010181905250610b756145d6565b6040518060800160405280600115158152602001600080811115610b9557fe5b8152602001600080811115610ba657fe5b8152602001858152509050610bb9614614565b600081600001906001811115610bcb57fe5b90816001811115610bd857fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015610c7157816020015b610c5e614680565b815260200190600190039081610c565790505b5090508181600081518110610c8257fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401610cea92919061564c565b600060405180830381600087803b158015610d0457600080fd5b505af1158015610d18573d6000803e3d6000fd5b5050505050505050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b6000610e14610e0d612a3a565b8484612a42565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e7b9190615548565b60206040518083038186803b158015610e9357600080fd5b505afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ecb9190810190614a72565b905090565b60085481565b6000600254905090565b6000610eed848484612c0d565b610fae84610ef9612a3a565b610fa985604051806060016040528060288152602001615d3660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5f612a3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b612a42565b600190509392505050565b60016006600082825401925050819055506000600654905060008211611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b9061583b565b60405180910390fd5b600061101f33611742565b905080831115611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b9061581b565b60405180910390fd5b61106c612ef2565b600881905550600061109d60025461108f86600854612f6590919063ffffffff16565b612fd590919063ffffffff16565b9050611127846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061117e8460025461301f90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516111e291906159c4565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112479190615548565b60206040518083038186803b15801561125f57600080fd5b505afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112979190810190614a72565b9050818110156112bd576112bc6112b7828461301f90919063ffffffff16565b613069565b5b61130a3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131df9092919063ffffffff16565b611312612ef2565b600881905550505050600654811461135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061591b565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b6000611423611387612a3a565b8461141e8560016000611398612a3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327e90919063ffffffff16565b612a42565b6001905092915050565b60006114376146ec565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b81526004016114c192919061599b565b604080518083038186803b1580156114d857600080fd5b505afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115109190810190614a20565b9050806020015191505090565b611525611bf8565b611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b906157fb565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116519190615548565b60206040518083038186803b15801561166957600080fd5b505afa15801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116a19190810190614a72565b905090565b6116ae6128c6565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b815260040161170d93929190615615565b600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006117f86117976122b0565b6117ea6117a26124c6565b6117dc6117ad61142d565b6117ce6117b861274a565b6117c06121a6565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b905090565b611805611bf8565b611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b906157fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061191061178a565b9050611941600254611933670de0b6b3a764000084612f6590919063ffffffff16565b612fd590919063ffffffff16565b91505090565b6000611951611f6d565b9050601060149054906101000a900460ff16600481111561196e57fe5b81600481111561197a57fe5b14611988576119876132d3565b5b60006119926122b0565b1115611a6857600160048111156119a557fe5b8160048111156119b157fe5b14156119cd576119c76119c26122b0565b610ae7565b50611a67565b6004808111156119d957fe5b8160048111156119e557fe5b1415611a00576119fb6119f66122b0565b611a8e565b611a66565b60026004811115611a0d57fe5b816004811115611a1957fe5b1415611a3457611a2f611a2a6122b0565b612605565b611a65565b60036004811115611a4157fe5b816004811115611a4d57fe5b1415611a6457611a63611a5e6122b0565b6116a6565b5b5b5b5b5b80601060146101000a81548160ff02191690836004811115611a8657fe5b021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401611aed929190615563565b602060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b3f9190810190614a72565b11611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906158db565b60405180910390fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c3b612a3a565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cef5780601f10611cc457610100808354040283529160200191611cef565b820191906000526020600020905b815481529060010190602001808311611cd257829003601f168201915b5050505050905090565b611d88600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661334c9092919063ffffffff16565b611e17600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661334c9092919063ffffffff16565b611e8b611e2261296d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661334c9092919063ffffffff16565b611f1a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661334c9092919063ffffffff16565b565b611f24611bf8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a906157fb565b60405180910390fd5b80600f8190555050565b6000806000806000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611ff2919061552d565b60006040518083038186803b15801561200a57600080fd5b505afa15801561201e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506120479190810190614991565b945094509450945050600080905080851115612061578490505b8084111561206d578390505b80831115612079578290505b80821115612085578190505b60008090508582141561209b57600290506120cd565b848214156120ac57600490506120cc565b838214156120bd57600390506120cb565b828214156120ca57600190505b5b5b5b80965050505050505090565b600061219c6120e6612a3a565b8461219785604051806060016040528060258152602001615d5e6025913960016000612110612a3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b612a42565b6001905092915050565b6000806121b16115f4565b9050600081111561228b57612288670de0b6b3a764000061227a600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561223357600080fd5b505afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226b9190810190614a72565b84612f6590919063ffffffff16565b612fd590919063ffffffff16565b90505b8091505090565b60006122a661229f612a3a565b8484612c0d565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161230d9190615548565b60206040518083038186803b15801561232557600080fd5b505afa158015612339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061235d9190810190614a72565b905090565b600160066000828254019250508190555060006006549050600082116123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b4906158bb565b60405180910390fd5b6123c5612ef2565b60088190555061241a333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134c3909392919063ffffffff16565b6000809050600060085414156124395782905082600881905550612465565b61246260085461245460025486612f6590919063ffffffff16565b612fd590919063ffffffff16565b90505b61246d612ef2565b60088190555061247d3382613565565b5060065481146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b99061591b565b60405180910390fd5b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125239190615548565b60206040518083038186803b15801561253b57600080fd5b505afa15801561254f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125739190810190614a72565b905090565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040161266291906159c4565b602060405180830381600087803b15801561267c57600080fd5b505af1158015612690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126b49190810190614a72565b146126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb9061575b565b60405180910390fd5b50565b6126ff611bf8565b61273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906157fb565b60405180910390fd5b612747816136ed565b50565b600080612755610e1e565b9050600081111561280e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b81526004016127bb9190615548565b60206040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061280b9190810190614a72565b90505b8091505090565b61281d611bf8565b61285c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612853906157fb565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561293057600080fd5b505afa158015612944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129689190810190614878565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156129d757600080fd5b505afa1580156129eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a0f9190810190614878565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa99061589b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b199061573b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c0091906159c4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c749061585b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce4906156db565b60405180910390fd5b612d5881604051806060016040528060268152602001615d10602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612deb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e8a91906159c4565b60405180910390a3505050565b6000838311158290612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed691906156b9565b60405180910390fd5b5060008385039050809150509392505050565b6000612f60612eff61381d565b612f52612f0a6138cf565b612f44612f15613981565b612f36612f20613a71565b612f28613b3c565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b61327e90919063ffffffff16565b905090565b600080831415612f785760009050612fcf565b6000828402905082848281612f8957fe5b0414612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc1906157bb565b60405180910390fd5b809150505b92915050565b600061301783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c28565b905092915050565b600061306183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e97565b905092915050565b6002600481111561307657fe5b601060149054906101000a900460ff16600481111561309157fe5b14156130a1576130a081613c89565b5b600360048111156130ae57fe5b601060149054906101000a900460ff1660048111156130c957fe5b141561312357806130d86124c6565b1015613119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131109061587b565b60405180910390fd5b61312281613d2f565b5b6001600481111561313057fe5b601060149054906101000a900460ff16600481111561314b57fe5b14156131a5578061315a61142d565b101561319b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131929061587b565b60405180910390fd5b6131a481613dbf565b5b6004808111156131b157fe5b601060149054906101000a900460ff1660048111156131cc57fe5b14156131dc576131db81613ff9565b5b50565b613279838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b84846040516024016132179291906155ec565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061409f565b505050565b6000808284019050838110156132c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c09061577b565b60405180910390fd5b8091505092915050565b60006132dd614211565b905060008111156132f2576132f1816142c3565b5b6132fa613981565b9050600081111561330f5761330e81613dbf565b5b6133176143b5565b9050600081111561332c5761332b81614467565b5b6133346138cf565b905060008111156133495761334881613d2f565b5b50565b60008114806133e5575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161339392919061558c565b60206040518083038186803b1580156133ab57600080fd5b505afa1580156133bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133e39190810190614a72565b145b613424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341b9061593b565b60405180910390fd5b6134be838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b848460405160240161345c9291906155ec565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061409f565b505050565b61355f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b8585856040516024016134fd939291906155b5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061409f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cc9061597b565b60405180910390fd5b6135ea8160025461327e90919063ffffffff16565b600281905550613641816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e191906159c4565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561375d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137549061571b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161387a9190615548565b60206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138ca9190810190614a72565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161392c9190615548565b60206040518083038186803b15801561394457600080fd5b505afa158015613958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061397c9190810190614a72565b905090565b600061398b6146ec565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b8152600401613a1592919061599b565b604080518083038186803b158015613a2c57600080fd5b505afa158015613a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a649190810190614a20565b9050806020015191505090565b600080613a7c610e1e565b90506000811115613b3557600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401613ae29190615548565b60206040518083038186803b158015613afa57600080fd5b505afa158015613b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b329190810190614a72565b90505b8091505090565b600080613b476115f4565b90506000811115613c2157613c1e670de0b6b3a7640000613c10600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015613bc957600080fd5b505afa158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613c019190810190614a72565b84612f6590919063ffffffff16565b612fd590919063ffffffff16565b90505b8091505090565b60008083118290613c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6691906156b9565b60405180910390fd5b506000838581613c7b57fe5b049050809150509392505050565b6000613c936115f4565b90506000613c9f6121a6565b905082811015613ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cdb9061587b565b60405180910390fd5b6000613d1e6001613d1084613d028888612f6590919063ffffffff16565b612fd590919063ffffffff16565b61327e90919063ffffffff16565b9050613d29816142c3565b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613d8a91906159c4565b600060405180830381600087803b158015613da457600080fd5b505af1158015613db8573d6000803e3d6000fd5b5050505050565b60606001604051908082528060200260200182016040528015613dfc57816020015b613de96145a6565b815260200190600190039081613de15790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110613e3857fe5b6020026020010181905250613e4b6145d6565b6040518060800160405280600015158152602001600080811115613e6b57fe5b8152602001600080811115613e7c57fe5b8152602001848152509050613e8f614614565b600181600001906001811115613ea157fe5b90816001811115613eae57fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015613f4757816020015b613f34614680565b815260200190600190039081613f2c5790505b5090508181600081518110613f5857fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613fc092919061564c565b600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b505050505050505050565b6000614003610e1e565b9050600061400f61274a565b905082811015614054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161404b9061587b565b60405180910390fd5b600061408e6001614080846140728888612f6590919063ffffffff16565b612fd590919063ffffffff16565b61327e90919063ffffffff16565b905061409981614467565b50505050565b6140be8273ffffffffffffffffffffffffffffffffffffffff1661455b565b6140fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140f49061595b565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516141269190615516565b6000604051808303816000865af19150503d8060008114614163576040519150601f19603f3d011682016040523d82523d6000602084013e614168565b606091505b5091509150816141ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a49061579b565b60405180910390fd5b60008151111561420b57808060200190516141cb9190810190614968565b61420a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614201906158fb565b60405180910390fd5b5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161426e9190615548565b60206040518083038186803b15801561428657600080fd5b505afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506142be9190810190614a72565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b815260040161432091906159c4565b602060405180830381600087803b15801561433a57600080fd5b505af115801561434e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506143729190810190614a72565b146143b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143a9906156fb565b60405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016144129190615548565b60206040518083038186803b15801561442a57600080fd5b505afa15801561443e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506144629190810190614a72565b905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b81526004016144c6929190615563565b602060405180830381600087803b1580156144e057600080fd5b505af11580156144f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145189190810190614a72565b11614558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454f906157db565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561459d5750808214155b92505050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156145f657fe5b815260200160008081111561460757fe5b8152602001600081525090565b6040518061010001604052806000600181111561462d57fe5b815260200160008152602001614641614708565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561469957fe5b8152602001600081526020016146ad614708565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600015158152602001600081525090565b604051806080016040528060001515815260200160008081111561472857fe5b815260200160008081111561473957fe5b8152602001600081525090565b60008135905061475581615cca565b92915050565b60008151905061476a81615cca565b92915050565b60008151905061477f81615ce1565b92915050565b600082601f83011261479657600080fd5b81516147a96147a482615a27565b6159fa565b915080825260208301602083018583830111156147c557600080fd5b6147d0838284615c52565b50505092915050565b6000604082840312156147eb57600080fd5b6147f560406159fa565b9050600061480584828501614770565b60008301525060206148198482850161483a565b60208301525092915050565b60008135905061483481615cf8565b92915050565b60008151905061484981615cf8565b92915050565b60006020828403121561486157600080fd5b600061486f84828501614746565b91505092915050565b60006020828403121561488a57600080fd5b60006148988482850161475b565b91505092915050565b600080604083850312156148b457600080fd5b60006148c285828601614746565b92505060206148d385828601614746565b9150509250929050565b6000806000606084860312156148f257600080fd5b600061490086828701614746565b935050602061491186828701614746565b925050604061492286828701614825565b9150509250925092565b6000806040838503121561493f57600080fd5b600061494d85828601614746565b925050602061495e85828601614825565b9150509250929050565b60006020828403121561497a57600080fd5b600061498884828501614770565b91505092915050565b600080600080600060a086880312156149a957600080fd5b600086015167ffffffffffffffff8111156149c357600080fd5b6149cf88828901614785565b95505060206149e08882890161483a565b94505060406149f18882890161483a565b9350506060614a028882890161483a565b9250506080614a138882890161483a565b9150509295509295909350565b600060408284031215614a3257600080fd5b6000614a40848285016147d9565b91505092915050565b600060208284031215614a5b57600080fd5b6000614a6984828501614825565b91505092915050565b600060208284031215614a8457600080fd5b6000614a928482850161483a565b91505092915050565b6000614aa78383615383565b905092915050565b6000614abb838361548b565b60408301905092915050565b614ad081615bc2565b82525050565b614adf81615b13565b82525050565b614aee81615b13565b82525050565b6000614aff82615a73565b614b098185615ac4565b935083602082028501614b1b85615a53565b8060005b85811015614b575784840389528151614b388582614a9b565b9450614b4383615aaa565b925060208a01995050600181019050614b1f565b50829750879550505050505092915050565b6000614b7482615a7e565b614b7e8185615ad5565b9350614b8983615a63565b8060005b83811015614bba578151614ba18882614aaf565b9750614bac83615ab7565b925050600181019050614b8d565b5085935050505092915050565b614bd081615b25565b82525050565b614bdf81615b25565b82525050565b6000614bf082615a94565b614bfa8185615af7565b9350614c0a818560208601615c52565b80840191505092915050565b6000614c2182615a89565b614c2b8185615ae6565b9350614c3b818560208601615c52565b614c4481615c85565b840191505092915050565b614c5881615bd4565b82525050565b614c6781615be6565b82525050565b614c7681615bf8565b82525050565b614c8581615c0a565b82525050565b614c9481615c1c565b82525050565b6000614ca582615a9f565b614caf8185615b02565b9350614cbf818560208601615c52565b614cc881615c85565b840191505092915050565b6000614ce0602383615b02565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d46601983615b02565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000614d86602683615b02565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dec602283615b02565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e52601783615b02565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614e92601b83615b02565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614ed2602083615b02565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000614f12602183615b02565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f78601883615b02565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000614fb8602083615b02565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614ff8601483615b02565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000615038601f83615b02565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615078602583615b02565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150de601283615b02565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b600061511e602483615b02565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615184601e83615b02565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b60006151c4601683615b02565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b6000615204602a83615b02565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061526a601f83615b02565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006152aa603683615b02565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000615310601f83615b02565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b6000615350601f83615b02565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006101608301600083015161539c6000860182614c4f565b5060208301516153af60208601826154e9565b5060408301516153c26040860182615436565b5060608301516153d560c08601826154e9565b5060808301516153e860e08601826154e9565b5060a08301516153fc610100860182614ad6565b5060c08301516154106101208601826154e9565b5060e08301518482036101408601526154298282614c16565b9150508091505092915050565b60808201600082015161544c6000850182614bc7565b50602082015161545f6020850182614c5e565b5060408201516154726040850182614c6d565b50606082015161548560608501826154e9565b50505050565b6040820160008201516154a16000850182614ad6565b5060208201516154b460208501826154e9565b50505050565b6040820160008201516154d06000850182614ad6565b5060208201516154e360208501826154e9565b50505050565b6154f281615bab565b82525050565b61550181615bab565b82525050565b61551081615bb5565b82525050565b60006155228284614be5565b915081905092915050565b60006020820190506155426000830184614ae5565b92915050565b600060208201905061555d6000830184614ac7565b92915050565b60006040820190506155786000830185614ac7565b61558560208301846154f8565b9392505050565b60006040820190506155a16000830185614ae5565b6155ae6020830184614ae5565b9392505050565b60006060820190506155ca6000830186614ae5565b6155d76020830185614ae5565b6155e460408301846154f8565b949350505050565b60006040820190506156016000830185614ae5565b61560e60208301846154f8565b9392505050565b600060608201905061562a6000830186614ae5565b61563760208301856154f8565b6156446040830184614c8b565b949350505050565b600060408201905081810360008301526156668185614b69565b9050818103602083015261567a8184614af4565b90509392505050565b60006020820190506156986000830184614bd6565b92915050565b60006020820190506156b36000830184614c7c565b92915050565b600060208201905081810360008301526156d38184614c9a565b905092915050565b600060208201905081810360008301526156f481614cd3565b9050919050565b6000602082019050818103600083015261571481614d39565b9050919050565b6000602082019050818103600083015261573481614d79565b9050919050565b6000602082019050818103600083015261575481614ddf565b9050919050565b6000602082019050818103600083015261577481614e45565b9050919050565b6000602082019050818103600083015261579481614e85565b9050919050565b600060208201905081810360008301526157b481614ec5565b9050919050565b600060208201905081810360008301526157d481614f05565b9050919050565b600060208201905081810360008301526157f481614f6b565b9050919050565b6000602082019050818103600083015261581481614fab565b9050919050565b6000602082019050818103600083015261583481614feb565b9050919050565b600060208201905081810360008301526158548161502b565b9050919050565b600060208201905081810360008301526158748161506b565b9050919050565b60006020820190508181036000830152615894816150d1565b9050919050565b600060208201905081810360008301526158b481615111565b9050919050565b600060208201905081810360008301526158d481615177565b9050919050565b600060208201905081810360008301526158f4816151b7565b9050919050565b60006020820190508181036000830152615914816151f7565b9050919050565b600060208201905081810360008301526159348161525d565b9050919050565b600060208201905081810360008301526159548161529d565b9050919050565b6000602082019050818103600083015261597481615303565b9050919050565b6000602082019050818103600083015261599481615343565b9050919050565b60006060820190506159b060008301856154ba565b6159bd60408301846154f8565b9392505050565b60006020820190506159d960008301846154f8565b92915050565b60006020820190506159f46000830184615507565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615a1d57600080fd5b8060405250919050565b600067ffffffffffffffff821115615a3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615b1e82615b8b565b9050919050565b60008115159050919050565b6000819050615b3f82615c96565b919050565b6000819050615b5282615ca3565b919050565b6000819050615b6582615cb0565b919050565b6000819050615b7882615cbd565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615bcd82615c2e565b9050919050565b6000615bdf82615b31565b9050919050565b6000615bf182615b44565b9050919050565b6000615c0382615b57565b9050919050565b6000615c1582615b6a565b9050919050565b6000615c2782615b7d565b9050919050565b6000615c3982615c40565b9050919050565b6000615c4b82615b8b565b9050919050565b60005b83811015615c70578082015181840152602081019050615c55565b83811115615c7f576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615ca057fe5b50565b60018110615cad57fe5b50565b60018110615cba57fe5b50565b60058110615cc757fe5b50565b615cd381615b13565b8114615cde57600080fd5b50565b615cea81615b25565b8114615cf557600080fd5b50565b615d0181615bab565b8114615d0c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820207f3cea5e1ea0bfe1746d6bc6b4077de0a5848dc5ba4c61b4c0858cc0aa45806c6578706572696d656e74616cf564736f6c634300050c0040

Deployed ByteCode Sourcemap

13652:11974:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17472:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17472:579:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13953:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13953:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;5991:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5991:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;14152:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14152:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;3011:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3011:152:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20044:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20044:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;13825:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13825:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;2494:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2494:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;3169:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3169:304:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15813:899;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15813:899:0;;;;;;;;;;;;;;;;:::i;:::-;;6173:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6173:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;3479:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3479:210:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19291:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19291:166:0;;;:::i;:::-;;;;;;;;;;;;;;;;14843:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14843:85:0;;;;;;;;;;;;;;;;:::i;:::-;;14032:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14032:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;13902:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13902:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;19461:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19461:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;24241:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24241:96:0;;;;;;;;;;;;;;;;:::i;:::-;;2591:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2591:110:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25246:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25246:217:0;;;:::i;:::-;;;;;;;;;;;;;;;;1769:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1769:140:0;;;:::i;:::-;;25469:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25469:154:0;;;:::i;:::-;;;;;;;;;;;;;;;;23173:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23173:543:0;;;:::i;:::-;;24341:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24341:141:0;;;;;;;;;;;;;;;;:::i;:::-;;13929:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13929:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;1472:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1472:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;13982:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13982:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;1669:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1669:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;6080:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6080:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;18893:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18893:279:0;;;:::i;:::-;;15041:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15041:97:0;;;;;;;;;;;;;;;;:::i;:::-;;16760:706;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16760:706:0;;;:::i;:::-;;;;;;;;;;;;;;;;3695:261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3695:261:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19585:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19585:248:0;;;:::i;:::-;;;;;;;;;;;;;;;;2707:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2707:158:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19178:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19178:107:0;;;:::i;:::-;;;;;;;;;;;;;;;;15191:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15191:550:0;;;;;;;;;;;;;;;;:::i;:::-;;20164:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20164:115:0;;;:::i;:::-;;;;;;;;;;;;;;;;14006:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14006:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;2871:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2871:134:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24486:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24486:131:0;;;;;;;;;;;;;;;;:::i;:::-;;1915:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1915:109:0;;;;;;;;;;;;;;;;:::i;:::-;;19837:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19837:203:0;;;:::i;:::-;;;;;;;;;;;;;;;;14932:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14932:105:0;;;;;;;;;;;;;;;;:::i;:::-;;13874:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13874:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;18635:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18635:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;18759:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18759:128:0;;;:::i;:::-;;;;;;;;;;;;;;;;13849:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13849:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;17472:579;17523:4;17538:19;17571:1;17560:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17538:35;;17593:22;;;;;;;;17606:4;17593:22;;;;;;17613:1;17593:22;;;17582:5;17588:1;17582:8;;;;;;;;;;;;;:33;;;;17626:22;;:::i;:::-;17651:70;;;;;;;;17663:4;17651:70;;;;;;17669:21;17651:70;;;;;;;;;;;;17692:20;17651:70;;;;;;;;;;;;17714:6;17651:70;;;17626:95;;17730:21;;:::i;:::-;17777:18;17760:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;17820:1;17804:3;:13;;:17;;;;;17843:3;17830;:10;;:16;;;;17877:6;;17855:3;:19;;:28;;;;;17919:4;17892:3;:16;;:32;;;;;;;;;;;17935:24;17979:1;17962:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17935:46;;18000:3;17990:4;17995:1;17990:7;;;;;;;;;;;;;:13;;;;18019:4;;;;;;;;;;;18014:18;;;18033:5;18040:4;18014:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18014:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18014:31:0;;;;17472:579;;;;;;;:::o;13953:24::-;;;;;;;;;;;;;:::o;5991:83::-;6028:13;6061:5;6054:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;:::o;14152:36::-;;;;;;;;;;;;;:::o;3011:152::-;3077:4;3094:39;3103:12;:10;:12::i;:::-;3117:7;3126:6;3094:8;:39::i;:::-;3151:4;3144:11;;3011:152;;;;:::o;20044:116::-;20091:7;20121;;;;;;;;;;;20114:25;;;20148:4;20114:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20114:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20114:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20114:40:0;;;;;;;;;20107:47;;20044:116;:::o;13825:19::-;;;;:::o;2494:91::-;2538:7;2565:12;;2558:19;;2494:91;:::o;3169:304::-;3258:4;3275:36;3285:6;3293:9;3304:6;3275:9;:36::i;:::-;3322:121;3331:6;3339:12;:10;:12::i;:::-;3353:89;3391:6;3353:89;;;;;;;;;;;;;;;;;:11;:19;3365:6;3353:19;;;;;;;;;;;;;;;:33;3373:12;:10;:12::i;:::-;3353:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3322:8;:121::i;:::-;3461:4;3454:11;;3169:304;;;;;:::o;15813:899::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15914:1;15904:7;:11;15896:55;;;;;;;;;;;;;;;;;;;;;;15962:16;15981:21;15991:10;15981:9;:21::i;:::-;15962:40;;16030:8;16019:7;:19;;16011:52;;;;;;;;;;;;;;;;;;;;;;16126:23;:21;:23::i;:::-;16119:4;:30;;;;16208:9;16220:37;16244:12;;16221:17;16230:7;16221:4;;:8;;:17;;;;:::i;:::-;16220:23;;:37;;;;:::i;:::-;16208:49;;16294:67;16320:7;16294:67;;;;;;;;;;;;;;;;;:9;:21;16304:10;16294:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;16270:9;:21;16280:10;16270:21;;;;;;;;;;;;;;;:91;;;;16385:25;16402:7;16385:12;;:16;;:25;;;;:::i;:::-;16370:12;:40;;;;16455:1;16426:41;;16435:10;16426:41;;;16459:7;16426:41;;;;;;;;;;;;;;;16502:9;16521:5;;;;;;;;;;;16514:23;;;16546:4;16514:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16514:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16514:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16514:38:0;;;;;;;;;16502:50;;16569:1;16565;:5;16561:55;;;16583:23;16597:8;16603:1;16597;:5;;:8;;;;:::i;:::-;16583:13;:23::i;:::-;16561:55;16626:41;16653:10;16665:1;16633:5;;;;;;;;;;;16626:26;;;;:41;;;;;:::i;:::-;16683:23;:21;:23::i;:::-;16676:4;:30;;;;6512:1;;;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15813:899;;:::o;6173:83::-;6214:5;6239:9;;;;;;;;;;;6232:16;;6173:83;:::o;3479:210::-;3559:4;3576:83;3585:12;:10;:12::i;:::-;3599:7;3608:50;3647:10;3608:11;:25;3620:12;:10;:12::i;:::-;3608:25;;;;;;;;;;;;;;;:34;3634:7;3608:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3576:8;:83::i;:::-;3677:4;3670:11;;3479:210;;;;:::o;19291:166::-;19335:7;19353:14;;:::i;:::-;19375:4;;;;;;;;;;;19370:24;;;19395:22;;;;;;;;19408:4;19395:22;;;;;;19415:1;19395:22;;;19419:6;;19370:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19370:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19370:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19370:56:0;;;;;;;;;19353:73;;19442:3;:9;;;19435:16;;;19291:166;:::o;14843:85::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14914:8;14908:3;;:14;;;;;;;;;;;;;;;;;;14843:85;:::o;14032:18::-;;;;;;;;;;;;;:::o;13902:22::-;;;;;;;;;;;;;:::o;19461:120::-;19509:7;19541:8;;;;;;;;;;;19534:26;;;19569:4;19534:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19534:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19534:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19534:41:0;;;;;;;;;19527:48;;19461:120;:::o;24241:96::-;24295:9;:7;:9::i;:::-;24290:23;;;24314:5;;;;;;;;;;;24321:6;24329:1;24290:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24290:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24290:41:0;;;;24241:96;:::o;2591:110::-;2648:7;2675:9;:18;2685:7;2675:18;;;;;;;;;;;;;;;;2668:25;;2591:110;;;:::o;25246:217::-;25299:4;25319:138;25447:9;:7;:9::i;:::-;25319:115;25420:13;:11;:13::i;:::-;25319:88;25393:13;:11;:13::i;:::-;25319:61;25356:23;:21;:23::i;:::-;25319:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;25312:145;;25246:217;:::o;1769:140::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1868:1;1831:40;;1852:6;;;;;;;;;;;1831:40;;;;;;;;;;;;1899:1;1882:6;;:19;;;;;;;;;;;;;;;;;;1769:140::o;25469:154::-;25522:4;25535:10;25548:22;:20;:22::i;:::-;25535:35;;25584:33;25604:12;;25584:15;25594:4;25584:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25577:40;;;25469:154;:::o;23173:543::-;23208:18;23229:11;:9;:11::i;:::-;23208:32;;23268:8;;;;;;;;;;;23253:23;;;;;;;;:11;:23;;;;;;;;;23249:60;;23287:14;:12;:14::i;:::-;23249:60;23333:1;23321:9;:7;:9::i;:::-;:13;23317:363;;;23364:11;23349:26;;;;;;;;:11;:26;;;;;;;;;23345:328;;;23388:21;23399:9;:7;:9::i;:::-;23388:10;:21::i;:::-;;23345:328;;;23444:14;23429:29;;;;;;;;:11;:29;;;;;;;;;23425:248;;;23471:24;23485:9;:7;:9::i;:::-;23471:13;:24::i;:::-;23425:248;;;23530:15;23515:30;;;;;;;;:11;:30;;;;;;;;;23511:162;;;23558:25;23573:9;:7;:9::i;:::-;23558:14;:25::i;:::-;23511:162;;;23618:11;23603:26;;;;;;;;:11;:26;;;;;;;;;23599:74;;;23642:21;23653:9;:7;:9::i;:::-;23642:10;:21::i;:::-;23599:74;23511:162;23425:248;23345:328;23317:363;23699:11;23688:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;23173:543;:::o;24341:141::-;24448:1;24409:7;;;;;;;;;;;24401:21;;;24431:4;24438:6;24401:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24401:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24401:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24401:44:0;;;;;;;;;:48;24393:83;;;;;;;;;;;;;;;;;;;;;;24341:141;:::o;13929:19::-;;;;;;;;;;;;;:::o;1472:79::-;1510:7;1537:6;;;;;;;;;;;1530:13;;1472:79;:::o;13982:19::-;;;;;;;;;;;;;:::o;1669:94::-;1709:4;1749:6;;;;;;;;;;;1733:22;;:12;:10;:12::i;:::-;:22;;;1726:29;;1669:94;:::o;6080:87::-;6119:13;6152:7;6145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:87;:::o;18893:279::-;18933:45;18959:8;;;;;;;;;;;18974:2;18940:5;;;;;;;;;;;18933:25;;;;:45;;;;;:::i;:::-;19013:41;19039:4;;;;;;;;;;;19050:2;19020:5;;;;;;;;;;;19013:25;;;;:41;;;;;:::i;:::-;19063:50;19089:13;:11;:13::i;:::-;19109:2;19070:5;;;;;;;;;;;19063:25;;;;:50;;;;;:::i;:::-;19122:44;19148:7;;;;;;;;;;;19162:2;19129:5;;;;;;;;;;;19122:25;;;;:44;;;;;:::i;:::-;18893:279::o;15041:97::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15121:11;15112:6;:20;;;;15041:97;:::o;16760:706::-;16802:6;16819:12;16832;16845;16858;16888:3;;;;;;;;;;;16874:28;;;16903:5;;;;;;;;;;;16874:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16874:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16874:35:0;;;;;;39:16:-1;36:1;17:17;2:54;16874:35:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16874:35:0;;;;;;;;;16817:92;;;;;;;;;16916:11;16930:1;16916:15;;16949:3;16942:4;:10;16938:43;;;16969:4;16963:10;;16938:43;16998:3;16991:4;:10;16987:43;;;17018:4;17012:10;;16987:43;17047:3;17040:4;:10;17036:43;;;17067:4;17061:10;;17036:43;17096:3;17089:4;:10;17085:43;;;17116:4;17110:10;;17085:43;17136:18;17157:11;17136:32;;17186:4;17179:3;:11;17175:261;;;17215:15;17201:29;;17175:261;;;17255:4;17248:3;:11;17244:192;;;17284:14;17270:28;;17244:192;;;17323:4;17316:3;:11;17312:124;;;17352:11;17338:25;;17312:124;;;17388:4;17381:3;:11;17377:59;;;17417:11;17403:25;;17377:59;17312:124;17244:192;17175:261;17449:11;17442:18;;;;;;;;16760:706;:::o;3695:261::-;3780:4;3797:129;3806:12;:10;:12::i;:::-;3820:7;3829:96;3868:15;3829:96;;;;;;;;;;;;;;;;;:11;:25;3841:12;:10;:12::i;:::-;3829:25;;;;;;;;;;;;;;;:34;3855:7;3829:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3797:8;:129::i;:::-;3944:4;3937:11;;3695:261;;;;:::o;19585:248::-;19640:7;19689:9;19701:17;:15;:17::i;:::-;19689:29;;19733:1;19729;:5;19725:88;;;19749:56;19800:4;19749:46;19764:8;;;;;;;;;;;19755:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19755:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19755:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19755:39:0;;;;;;;;;19749:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;19745:60;;19725:88;19826:1;19819:8;;;19585:248;:::o;2707:158::-;2776:4;2793:42;2803:12;:10;:12::i;:::-;2817:9;2828:6;2793:9;:42::i;:::-;2853:4;2846:11;;2707:158;;;;:::o;19178:107::-;19218:7;19248:5;;;;;;;;;;;19241:23;;;19273:4;19241:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19241:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19241:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19241:38:0;;;;;;;;;19234:45;;19178:107;:::o;15191:550::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15291:1;15281:7;:11;15273:54;;;;;;;;;;;;;;;;;;;;;;15343:23;:21;:23::i;:::-;15336:4;:30;;;;15377:66;15408:10;15428:4;15435:7;15384:5;;;;;;;;;;;15377:30;;;;:66;;;;;;:::i;:::-;15486:14;15503:1;15486:18;;15525:1;15517:4;;:9;15513:150;;;15548:7;15539:16;;15573:7;15566:4;:14;;;;15513:150;;;15616:37;15648:4;;15617:25;15629:12;;15617:7;:11;;:25;;;;:::i;:::-;15616:31;;:37;;;;:::i;:::-;15607:46;;15513:150;15678:23;:21;:23::i;:::-;15671:4;:30;;;;15710:25;15716:10;15728:6;15710:5;:25::i;:::-;6512:1;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15191:550;;:::o;20164:115::-;20208:7;20238:9;;;;;;;;;;;20231:27;;;20267:4;20231:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20231:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20231:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20231:42:0;;;;;;;;;20224:49;;20164:115;:::o;14006:21::-;;;;:::o;2871:134::-;2943:7;2970:11;:18;2982:5;2970:18;;;;;;;;;;;;;;;:27;2989:7;2970:27;;;;;;;;;;;;;;;;2963:34;;2871:134;;;;:::o;24486:131::-;24582:1;24556:8;;;;;;;;;;;24547:23;;;24571:6;24547:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24547:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24547:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24547:31:0;;;;;;;;;:36;24539:72;;;;;;;;;;;;;;;;;;;;;;24486:131;:::o;1915:109::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1988:28;2007:8;1988:18;:28::i;:::-;1915:109;:::o;19837:203::-;19891:7;19907:9;19919:16;:14;:16::i;:::-;19907:28;;19950:1;19946;:5;19942:78;;;19974:7;;;;;;;;;;;19966:31;;;20006:4;19966:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19966:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19966:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19966:46:0;;;;;;;;;19962:50;;19942:78;20033:1;20026:8;;;19837:203;:::o;14932:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15018:13;15007:8;;:24;;;;;;;;;;;;;;;;;;14932:105;:::o;13874:23::-;;;;;;;;;;;;;:::o;18635:120::-;18675:7;18727:4;;;;;;;;;;;18698:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18698:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18698:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18698:51:0;;;;;;;;;18691:58;;18635:120;:::o;18759:128::-;18803:7;18855:4;;;;;;;;;;;18826:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18826:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18826:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18826:55:0;;;;;;;;;18819:62;;18759:128;:::o;13849:20::-;;;;;;;;;;;;;:::o;852:98::-;897:15;932:10;925:17;;852:98;:::o;5107:338::-;5218:1;5201:19;;:5;:19;;;;5193:68;;;;;;;;;;;;;;;;;;;;;;5299:1;5280:21;;:7;:21;;;;5272:68;;;;;;;;;;;;;;;;;;;;;;5383:6;5353:11;:18;5365:5;5353:18;;;;;;;;;;;;;;;:27;5372:7;5353:27;;;;;;;;;;;;;;;:36;;;;5421:7;5405:32;;5414:5;5405:32;;;5430:6;5405:32;;;;;;;;;;;;;;;5107:338;;;:::o;3962:471::-;4078:1;4060:20;;:6;:20;;;;4052:70;;;;;;;;;;;;;;;;;;;;;;4162:1;4141:23;;:9;:23;;;;4133:71;;;;;;;;;;;;;;;;;;;;;;4237;4259:6;4237:71;;;;;;;;;;;;;;;;;:9;:17;4247:6;4237:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4217:9;:17;4227:6;4217:17;;;;;;;;;;;;;;;:91;;;;4342:32;4367:6;4342:9;:20;4352:9;4342:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4319:9;:20;4329:9;4319:20;;;;;;;;;;;;;;;:55;;;;4407:9;4390:35;;4399:6;4390:35;;;4418:6;4390:35;;;;;;;;;;;;;;;3962:471;;;:::o;6965:192::-;7051:7;7084:1;7079;:6;;7087:12;7071:29;;;;;;;;;;;;;;;;;;;;;;;;;7111:9;7127:1;7123;:5;7111:17;;7148:1;7141:8;;;6965:192;;;;;:::o;25015:225::-;25071:4;25091:143;25223:10;:8;:10::i;:::-;25091:119;25195:14;:12;:14::i;:::-;25091:91;25167:14;:12;:14::i;:::-;25091:63;25129:24;:22;:24::i;:::-;25091:25;:23;:25::i;:::-;:37;;:63;;;;:::i;:::-;:75;;:91;;;;:::i;:::-;:103;;:119;;;;:::i;:::-;:131;;:143;;;;:::i;:::-;25084:150;;25015:225;:::o;7163:250::-;7221:7;7250:1;7245;:6;7241:47;;;7275:1;7268:8;;;;7241:47;7300:9;7316:1;7312;:5;7300:17;;7345:1;7340;7336;:5;;;;;;:10;7328:56;;;;;;;;;;;;;;;;;;;;;;7404:1;7397:8;;;7163:250;;;;;:::o;7419:132::-;7477:7;7504:39;7508:1;7511;7504:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7497:46;;7419:132;;;;:::o;6823:136::-;6881:7;6908:43;6912:1;6915;6908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6901:50;;6823:136;;;;:::o;22666:501::-;22738:15;22726:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;22722:80;;;22764:30;22786:7;22764:21;:30::i;:::-;22722:80;22824:11;22812:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;22808:132;;;22871:7;22854:13;:11;:13::i;:::-;:24;;22846:55;;;;;;;;;;;;;;;;;;;;;;22910:22;22924:7;22910:13;:22::i;:::-;22808:132;22962:11;22950:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;22946:132;;;23009:7;22992:13;:11;:13::i;:::-;:24;;22984:55;;;;;;;;;;;;;;;;;;;;;;23048:22;23062:7;23048:13;:22::i;:::-;22946:132;23100:14;23088:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;23084:78;;;23125:29;23146:7;23125:20;:29::i;:::-;23084:78;22666:501;:::o;9136:176::-;9219:85;9238:5;9268;:14;;;:23;;;;9293:2;9297:5;9245:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9245:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9245:58:0;9219:18;:85::i;:::-;9136:176;;;:::o;6636:181::-;6694:7;6714:9;6730:1;6726;:5;6714:17;;6755:1;6750;:6;;6742:46;;;;;;;;;;;;;;;;;;;;;;6808:1;6801:8;;;6636:181;;;;:::o;21413:421::-;21453:14;21470:18;:16;:18::i;:::-;21453:35;;21508:1;21499:6;:10;21495:58;;;21520:25;21538:6;21520:17;:25::i;:::-;21495:58;21568:14;:12;:14::i;:::-;21559:23;;21602:1;21593:6;:10;21589:54;;;21614:21;21628:6;21614:13;:21::i;:::-;21589:54;21658:17;:15;:17::i;:::-;21649:26;;21695:1;21686:6;:10;21682:57;;;21707:24;21724:6;21707:16;:24::i;:::-;21682:57;21754:14;:12;:14::i;:::-;21745:23;;21788:1;21779:6;:10;21775:54;;;21800:21;21814:6;21800:13;:21::i;:::-;21775:54;21413:421;:::o;9532:347::-;9637:1;9628:5;:10;9627:62;;;;9687:1;9644:5;:15;;;9668:4;9675:7;9644:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9644:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9644:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9644:39:0;;;;;;;;;:44;9627:62;9619:152;;;;;;;;;;;;;;;;;;;;;;9782:89;9801:5;9831;:13;;;:22;;;;9855:7;9864:5;9808:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9808:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9808:62:0;9782:18;:89::i;:::-;9532:347;;;:::o;9320:204::-;9421:95;9440:5;9470;:18;;;:27;;;;9499:4;9505:2;9509:5;9447:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9447:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9447:68:0;9421:18;:95::i;:::-;9320:204;;;;:::o;4439:308::-;4534:1;4515:21;;:7;:21;;;;4507:65;;;;;;;;;;;;;;;;;;;;;;4600:24;4617:6;4600:12;;:16;;:24;;;;:::i;:::-;4585:12;:39;;;;4656:30;4679:6;4656:9;:18;4666:7;4656:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;4635:9;:18;4645:7;4635:18;;;;;;;;;;;;;;;:51;;;;4723:7;4702:37;;4719:1;4702:37;;;4732:6;4702:37;;;;;;;;;;;;;;;4439:308;;:::o;2030:229::-;2124:1;2104:22;;:8;:22;;;;2096:73;;;;;;;;;;;;;;;;;;;;;;2214:8;2185:38;;2206:6;;;;;;;;;;;2185:38;;;;;;;;;;;;2243:8;2234:6;;:17;;;;;;;;;;;;;;;;;;2030:229;:::o;20285:110::-;20328:7;20358:5;;;;;;;;;;;20351:23;;;20383:4;20351:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20351:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20351:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20351:38:0;;;;;;;;;20344:45;;20285:110;:::o;21289:118::-;21336:7;21366:9;;;;;;;;;;;21359:27;;;21395:4;21359:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21359:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21359:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21359:42:0;;;;;;;;;21352:49;;21289:118;:::o;20401:169::-;20448:7;20466:14;;:::i;:::-;20488:4;;;;;;;;;;;20483:24;;;20508:22;;;;;;;;20521:4;20508:22;;;;;;20528:1;20508:22;;;20532:6;;20483:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20483:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20483:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20483:56:0;;;;;;;;;20466:73;;20555:3;:9;;;20548:16;;;20401:169;:::o;20956:206::-;21013:7;21029:9;21041:16;:14;:16::i;:::-;21029:28;;21072:1;21068;:5;21064:78;;;21096:7;;;;;;;;;;;21088:31;;;21128:4;21088:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21088:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21088:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21088:46:0;;;;;;;;;21084:50;;21064:78;21155:1;21148:8;;;20956:206;:::o;20701:251::-;20759:7;20808:9;20820:17;:15;:17::i;:::-;20808:29;;20852:1;20848;:5;20844:88;;;20868:56;20919:4;20868:46;20883:8;;;;;;;;;;;20874:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20874:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20874:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20874:39:0;;;;;;;;;20868:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;20864:60;;20844:88;20945:1;20938:8;;;20701:251;:::o;7557:258::-;7643:7;7742:1;7738;:5;7745:12;7730:28;;;;;;;;;;;;;;;;;;;;;;;;;7769:9;7785:1;7781;:5;;;;;;7769:17;;7806:1;7799:8;;;7557:258;;;;;:::o;21840:328::-;21904:9;21916:17;:15;:17::i;:::-;21904:29;;21940:10;21953:24;:22;:24::i;:::-;21940:37;;21998:7;21992:2;:13;;21984:44;;;;;;;;;;;;;;;;;;;;;;22082:14;22099:31;22128:1;22099:24;22120:2;22100:14;22106:7;22100:1;:5;;:14;;;;:::i;:::-;22099:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;22082:48;;22137:25;22155:6;22137:17;:25::i;:::-;21840:328;;;;:::o;24621:92::-;24682:9;;;;;;;;;;;24675:24;;;24700:6;24675:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24675:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24675:32:0;;;;24621:92;:::o;18057:572::-;18114:19;18147:1;18136:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18114:35;;18169:22;;;;;;;;18182:4;18169:22;;;;;;18189:1;18169:22;;;18158:5;18164:1;18158:8;;;;;;;;;;;;;:33;;;;18202:22;;:::i;:::-;18227:71;;;;;;;;18239:5;18227:71;;;;;;18246:21;18227:71;;;;;;;;;;;;18269:20;18227:71;;;;;;;;;;;;18291:6;18227:71;;;18202:96;;18307:21;;:::i;:::-;18354:19;18337:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;18398:1;18382:3;:13;;:17;;;;;18421:3;18408;:10;;:16;;;;18455:6;;18433:3;:19;;:28;;;;;18497:4;18470:3;:16;;:32;;;;;;;;;;;18513:24;18557:1;18540:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18513:46;;18578:3;18568:4;18573:1;18568:7;;;;;;;;;;;;;:13;;;;18597:4;;;;;;;;;;;18592:18;;;18611:5;18618:4;18592:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18592:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18592:31:0;;;;18057:572;;;;;:::o;22200:460::-;22317:9;22329:16;:14;:16::i;:::-;22317:28;;22411:10;22424:23;:21;:23::i;:::-;22411:36;;22491:7;22485:2;:13;;22477:44;;;;;;;;;;;;;;;;;;;;;;22575:14;22592:31;22621:1;22592:24;22613:2;22593:14;22599:7;22593:1;:5;;:14;;;;:::i;:::-;22592:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;22575:48;;22630:24;22647:6;22630:16;:24::i;:::-;22200:460;;;;:::o;10516:598::-;10604:27;10612:5;10604:25;;;:27::i;:::-;10596:71;;;;;;;;;;;;;;;;;;;;;;10741:12;10755:23;10790:5;10782:19;;10802:4;10782:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10740:67:0;;;;10826:7;10818:52;;;;;;;;;;;;;;;;;;;;;;10907:1;10887:10;:17;:21;10883:224;;;11029:10;11018:30;;;;;;;;;;;;;;11010:85;;;;;;;;;;;;;;;;;;;;;;10883:224;10516:598;;;;:::o;20574:123::-;20625:7;20657:8;;;;;;;;;;;20650:26;;;20685:4;20650:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20650:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20650:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20650:41:0;;;;;;;;;20643:48;;20574:123;:::o;24869:140::-;24972:1;24944:8;;;;;;;;;;;24935:25;;;24961:6;24935:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24935:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24935:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24935:33:0;;;;;;;;;:38;24927:76;;;;;;;;;;;;;;;;;;;;;;24869:140;:::o;21166:119::-;21216:7;21246;;;;;;;;;;;21239:25;;;21273:4;21239:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21239:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21239:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21239:40:0;;;;;;;;;21232:47;;21166:119;:::o;24717:148::-;24829:1;24790:7;;;;;;;;;;;24782:21;;;24812:4;24819:6;24782:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24782:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24782:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24782:44:0;;;;;;;;;:48;24774:85;;;;;;;;;;;;;;;;;;;;;;24717:148;:::o;8153:374::-;8213:4;8230:16;8257:19;8279:66;8257:88;;;;8448:7;8436:20;8424:32;;8488:3;8476:15;;:8;:15;;:42;;;;;8507:11;8495:8;:23;;8476:42;8468:51;;;;8153:374;;;:::o;13652:11974::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;419:444;;532:3;525:4;517:6;513:17;509:27;499:2;;550:1;547;540:12;499:2;580:6;574:13;602:65;617:49;659:6;617:49;;;602:65;;;593:74;;687:6;680:5;673:21;723:4;715:6;711:17;756:4;749:5;745:16;791:3;782:6;777:3;773:16;770:25;767:2;;;808:1;805;798:12;767:2;818:39;850:6;845:3;840;818:39;;;492:371;;;;;;;;896:493;;1017:4;1005:9;1000:3;996:19;992:30;989:2;;;1035:1;1032;1025:12;989:2;1053:20;1068:4;1053:20;;;1044:29;;1123:1;1154:57;1207:3;1198:6;1187:9;1183:22;1154:57;;;1148:3;1141:5;1137:15;1130:82;1083:140;1274:2;1307:60;1363:3;1354:6;1343:9;1339:22;1307:60;;;1300:4;1293:5;1289:16;1282:86;1233:146;983:406;;;;;1396:130;;1476:6;1463:20;1454:29;;1488:33;1515:5;1488:33;;;1448:78;;;;;1533:134;;1617:6;1611:13;1602:22;;1629:33;1656:5;1629:33;;;1596:71;;;;;1674:241;;1778:2;1766:9;1757:7;1753:23;1749:32;1746:2;;;1794:1;1791;1784:12;1746:2;1829:1;1846:53;1891:7;1882:6;1871:9;1867:22;1846:53;;;1836:63;;1808:97;1740:175;;;;;1922:263;;2037:2;2025:9;2016:7;2012:23;2008:32;2005:2;;;2053:1;2050;2043:12;2005:2;2088:1;2105:64;2161:7;2152:6;2141:9;2137:22;2105:64;;;2095:74;;2067:108;1999:186;;;;;2192:366;;;2313:2;2301:9;2292:7;2288:23;2284:32;2281:2;;;2329:1;2326;2319:12;2281:2;2364:1;2381:53;2426:7;2417:6;2406:9;2402:22;2381:53;;;2371:63;;2343:97;2471:2;2489:53;2534:7;2525:6;2514:9;2510:22;2489:53;;;2479:63;;2450:98;2275:283;;;;;;2565:491;;;;2703:2;2691:9;2682:7;2678:23;2674:32;2671:2;;;2719:1;2716;2709:12;2671:2;2754:1;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;;;2761:63;;2733:97;2861:2;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;;;2869:63;;2840:98;2969:2;2987:53;3032:7;3023:6;3012:9;3008:22;2987:53;;;2977:63;;2948:98;2665:391;;;;;;3063:366;;;3184:2;3172:9;3163:7;3159:23;3155:32;3152:2;;;3200:1;3197;3190:12;3152:2;3235:1;3252:53;3297:7;3288:6;3277:9;3273:22;3252:53;;;3242:63;;3214:97;3342:2;3360:53;3405:7;3396:6;3385:9;3381:22;3360:53;;;3350:63;;3321:98;3146:283;;;;;;3436:257;;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3564:1;3561;3554:12;3516:2;3599:1;3616:61;3669:7;3660:6;3649:9;3645:22;3616:61;;;3606:71;;3578:105;3510:183;;;;;3700:908;;;;;;3893:3;3881:9;3872:7;3868:23;3864:33;3861:2;;;3910:1;3907;3900:12;3861:2;3966:1;3955:9;3951:17;3945:24;3989:18;3981:6;3978:30;3975:2;;;4021:1;4018;4011:12;3975:2;4041:74;4107:7;4098:6;4087:9;4083:22;4041:74;;;4031:84;;3924:197;4152:2;4170:64;4226:7;4217:6;4206:9;4202:22;4170:64;;;4160:74;;4131:109;4271:2;4289:64;4345:7;4336:6;4325:9;4321:22;4289:64;;;4279:74;;4250:109;4390:2;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;;;4398:74;;4369:109;4509:3;4528:64;4584:7;4575:6;4564:9;4560:22;4528:64;;;4518:74;;4488:110;3855:753;;;;;;;;;4615:305;;4751:2;4739:9;4730:7;4726:23;4722:32;4719:2;;;4767:1;4764;4757:12;4719:2;4802:1;4819:85;4896:7;4887:6;4876:9;4872:22;4819:85;;;4809:95;;4781:129;4713:207;;;;;4927:241;;5031:2;5019:9;5010:7;5006:23;5002:32;4999:2;;;5047:1;5044;5037:12;4999:2;5082:1;5099:53;5144:7;5135:6;5124:9;5120:22;5099:53;;;5089:63;;5061:97;4993:175;;;;;5175:263;;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5341:1;5358:64;5414:7;5405:6;5394:9;5390:22;5358:64;;;5348:74;;5320:108;5252:186;;;;;5446:253;;5595:98;5689:3;5681:6;5595:98;;;5581:112;;5574:125;;;;;5708:249;;5831:86;5913:3;5905:6;5831:86;;;5946:4;5941:3;5937:14;5923:28;;5824:133;;;;;5965:142;6056:45;6095:5;6056:45;;;6051:3;6044:58;6038:69;;;6114:103;6187:24;6205:5;6187:24;;;6182:3;6175:37;6169:48;;;6224:113;6307:24;6325:5;6307:24;;;6302:3;6295:37;6289:48;;;6411:1040;;6604:78;6676:5;6604:78;;;6695:110;6798:6;6793:3;6695:110;;;6688:117;;6828:3;6870:4;6862:6;6858:17;6853:3;6849:27;6897:80;6971:5;6897:80;;;6997:7;7025:1;7010:402;7035:6;7032:1;7029:13;7010:402;;;7097:9;7091:4;7087:20;7082:3;7075:33;7142:6;7136:13;7164:112;7271:4;7256:13;7164:112;;;7156:120;;7293:84;7370:6;7293:84;;;7283:94;;7400:4;7395:3;7391:14;7384:21;;7067:345;7057:1;7054;7050:9;7045:14;;7010:402;;;7014:14;7425:4;7418:11;;7442:3;7435:10;;6583:868;;;;;;;;;;7514:834;;7695:72;7761:5;7695:72;;;7780:104;7877:6;7872:3;7780:104;;;7773:111;;7905:74;7973:5;7905:74;;;7999:7;8027:1;8012:314;8037:6;8034:1;8031:13;8012:314;;;8104:6;8098:13;8125:99;8220:3;8205:13;8125:99;;;8118:106;;8241:78;8312:6;8241:78;;;8231:88;;8069:257;8059:1;8056;8052:9;8047:14;;8012:314;;;8016:14;8339:3;8332:10;;7674:674;;;;;;;;8356:94;8423:21;8438:5;8423:21;;;8418:3;8411:34;8405:45;;;8457:104;8534:21;8549:5;8534:21;;;8529:3;8522:34;8516:45;;;8568:356;;8696:38;8728:5;8696:38;;;8746:88;8827:6;8822:3;8746:88;;;8739:95;;8839:52;8884:6;8879:3;8872:4;8865:5;8861:16;8839:52;;;8912:6;8907:3;8903:16;8896:23;;8676:248;;;;;;8931:315;;9027:34;9055:5;9027:34;;;9073:60;9126:6;9121:3;9073:60;;;9066:67;;9138:52;9183:6;9178:3;9171:4;9164:5;9160:16;9138:52;;;9211:29;9233:6;9211:29;;;9206:3;9202:39;9195:46;;9007:239;;;;;;9253:142;9339:50;9383:5;9339:50;;;9334:3;9327:63;9321:74;;;9402:156;9495:57;9546:5;9495:57;;;9490:3;9483:70;9477:81;;;9565:150;9655:54;9703:5;9655:54;;;9650:3;9643:67;9637:78;;;9722:144;9814:46;9854:5;9814:46;;;9809:3;9802:59;9796:70;;;9873:140;9963:44;10001:5;9963:44;;;9958:3;9951:57;9945:68;;;10020:347;;10132:39;10165:5;10132:39;;;10183:71;10247:6;10242:3;10183:71;;;10176:78;;10259:52;10304:6;10299:3;10292:4;10285:5;10281:16;10259:52;;;10332:29;10354:6;10332:29;;;10327:3;10323:39;10316:46;;10112:255;;;;;;10375:465;;10535:67;10599:2;10594:3;10535:67;;;10528:74;;10635:66;10631:1;10626:3;10622:11;10615:87;10736:66;10731:2;10726:3;10722:12;10715:88;10831:2;10826:3;10822:12;10815:19;;10521:319;;;;10849:364;;11009:67;11073:2;11068:3;11009:67;;;11002:74;;11109:66;11105:1;11100:3;11096:11;11089:87;11204:2;11199:3;11195:12;11188:19;;10995:218;;;;11222:465;;11382:67;11446:2;11441:3;11382:67;;;11375:74;;11482:66;11478:1;11473:3;11469:11;11462:87;11583:66;11578:2;11573:3;11569:12;11562:88;11678:2;11673:3;11669:12;11662:19;;11368:319;;;;11696:465;;11856:67;11920:2;11915:3;11856:67;;;11849:74;;11956:66;11952:1;11947:3;11943:11;11936:87;12057:66;12052:2;12047:3;12043:12;12036:88;12152:2;12147:3;12143:12;12136:19;;11842:319;;;;12170:364;;12330:67;12394:2;12389:3;12330:67;;;12323:74;;12430:66;12426:1;12421:3;12417:11;12410:87;12525:2;12520:3;12516:12;12509:19;;12316:218;;;;12543:364;;12703:67;12767:2;12762:3;12703:67;;;12696:74;;12803:66;12799:1;12794:3;12790:11;12783:87;12898:2;12893:3;12889:12;12882:19;;12689:218;;;;12916:364;;13076:67;13140:2;13135:3;13076:67;;;13069:74;;13176:66;13172:1;13167:3;13163:11;13156:87;13271:2;13266:3;13262:12;13255:19;;13062:218;;;;13289:465;;13449:67;13513:2;13508:3;13449:67;;;13442:74;;13549:66;13545:1;13540:3;13536:11;13529:87;13650:66;13645:2;13640:3;13636:12;13629:88;13745:2;13740:3;13736:12;13729:19;;13435:319;;;;13763:364;;13923:67;13987:2;13982:3;13923:67;;;13916:74;;14023:66;14019:1;14014:3;14010:11;14003:87;14118:2;14113:3;14109:12;14102:19;;13909:218;;;;14136:364;;14296:67;14360:2;14355:3;14296:67;;;14289:74;;14396:66;14392:1;14387:3;14383:11;14376:87;14491:2;14486:3;14482:12;14475:19;;14282:218;;;;14509:364;;14669:67;14733:2;14728:3;14669:67;;;14662:74;;14769:66;14765:1;14760:3;14756:11;14749:87;14864:2;14859:3;14855:12;14848:19;;14655:218;;;;14882:364;;15042:67;15106:2;15101:3;15042:67;;;15035:74;;15142:66;15138:1;15133:3;15129:11;15122:87;15237:2;15232:3;15228:12;15221:19;;15028:218;;;;15255:465;;15415:67;15479:2;15474:3;15415:67;;;15408:74;;15515:66;15511:1;15506:3;15502:11;15495:87;15616:66;15611:2;15606:3;15602:12;15595:88;15711:2;15706:3;15702:12;15695:19;;15401:319;;;;15729:364;;15889:67;15953:2;15948:3;15889:67;;;15882:74;;15989:66;15985:1;15980:3;15976:11;15969:87;16084:2;16079:3;16075:12;16068:19;;15875:218;;;;16102:465;;16262:67;16326:2;16321:3;16262:67;;;16255:74;;16362:66;16358:1;16353:3;16349:11;16342:87;16463:66;16458:2;16453:3;16449:12;16442:88;16558:2;16553:3;16549:12;16542:19;;16248:319;;;;16576:364;;16736:67;16800:2;16795:3;16736:67;;;16729:74;;16836:66;16832:1;16827:3;16823:11;16816:87;16931:2;16926:3;16922:12;16915:19;;16722:218;;;;16949:364;;17109:67;17173:2;17168:3;17109:67;;;17102:74;;17209:66;17205:1;17200:3;17196:11;17189:87;17304:2;17299:3;17295:12;17288:19;;17095:218;;;;17322:465;;17482:67;17546:2;17541:3;17482:67;;;17475:74;;17582:66;17578:1;17573:3;17569:11;17562:87;17683:66;17678:2;17673:3;17669:12;17662:88;17778:2;17773:3;17769:12;17762:19;;17468:319;;;;17796:364;;17956:67;18020:2;18015:3;17956:67;;;17949:74;;18056:66;18052:1;18047:3;18043:11;18036:87;18151:2;18146:3;18142:12;18135:19;;17942:218;;;;18169:465;;18329:67;18393:2;18388:3;18329:67;;;18322:74;;18429:66;18425:1;18420:3;18416:11;18409:87;18530:66;18525:2;18520:3;18516:12;18509:88;18625:2;18620:3;18616:12;18609:19;;18315:319;;;;18643:364;;18803:67;18867:2;18862:3;18803:67;;;18796:74;;18903:66;18899:1;18894:3;18890:11;18883:87;18998:2;18993:3;18989:12;18982:19;;18789:218;;;;19016:364;;19176:67;19240:2;19235:3;19176:67;;;19169:74;;19276:66;19272:1;19267:3;19263:11;19256:87;19371:2;19366:3;19362:12;19355:19;;19162:218;;;;19449:1605;;19592:5;19587:3;19583:15;19682:3;19675:5;19671:15;19665:22;19693:75;19763:3;19758;19754:13;19740:12;19693:75;;;19613:161;19852:4;19845:5;19841:16;19835:23;19864:63;19921:4;19916:3;19912:14;19898:12;19864:63;;;19784:149;20008:4;20001:5;19997:16;19991:23;20020:117;20131:4;20126:3;20122:14;20108:12;20020:117;;;19943:200;20227:4;20220:5;20216:16;20210:23;20239:63;20296:4;20291:3;20287:14;20273:12;20239:63;;;20153:155;20394:4;20387:5;20383:16;20377:23;20406:63;20463:4;20458:3;20454:14;20440:12;20406:63;;;20318:157;20556:4;20549:5;20545:16;20539:23;20568:64;20625:5;20620:3;20616:15;20602:12;20568:64;;;20485:153;20721:4;20714:5;20710:16;20704:23;20733:64;20790:5;20785:3;20781:15;20767:12;20733:64;;;20648:155;20876:4;20869:5;20865:16;20859:23;20929:3;20923:4;20919:14;20911:5;20906:3;20902:15;20895:39;20949:67;21011:4;20997:12;20949:67;;;20941:75;;20813:215;21045:4;21038:11;;19565:1489;;;;;;21124:815;21261:4;21256:3;21252:14;21344:3;21337:5;21333:15;21327:22;21355:56;21406:3;21401;21397:13;21383:12;21355:56;;;21281:136;21498:4;21491:5;21487:16;21481:23;21510:83;21587:4;21582:3;21578:14;21564:12;21510:83;;;21427:172;21671:4;21664:5;21660:16;21654:23;21683:80;21757:4;21752:3;21748:14;21734:12;21683:80;;;21609:160;21843:4;21836:5;21832:16;21826:23;21855:63;21912:4;21907:3;21903:14;21889:12;21855:63;;;21779:145;21234:705;;;;21995:457;22118:4;22113:3;22109:14;22202:3;22195:5;22191:15;22185:22;22213:62;22270:3;22265;22261:13;22247:12;22213:62;;;22138:143;22356:4;22349:5;22345:16;22339:23;22368:63;22425:4;22420:3;22416:14;22402:12;22368:63;;;22291:146;22091:361;;;;22508:467;22641:4;22636:3;22632:14;22725:3;22718:5;22714:15;22708:22;22736:62;22793:3;22788;22784:13;22770:12;22736:62;;;22661:143;22879:4;22872:5;22868:16;22862:23;22891:63;22948:4;22943:3;22939:14;22925:12;22891:63;;;22814:146;22614:361;;;;22982:103;23055:24;23073:5;23055:24;;;23050:3;23043:37;23037:48;;;23092:113;23175:24;23193:5;23175:24;;;23170:3;23163:37;23157:48;;;23212:107;23291:22;23307:5;23291:22;;;23286:3;23279:35;23273:46;;;23326:262;;23470:93;23559:3;23550:6;23470:93;;;23463:100;;23580:3;23573:10;;23451:137;;;;;23595:213;;23713:2;23702:9;23698:18;23690:26;;23727:71;23795:1;23784:9;23780:17;23771:6;23727:71;;;23684:124;;;;;23815:229;;23941:2;23930:9;23926:18;23918:26;;23955:79;24031:1;24020:9;24016:17;24007:6;23955:79;;;23912:132;;;;;24051:340;;24205:2;24194:9;24190:18;24182:26;;24219:79;24295:1;24284:9;24280:17;24271:6;24219:79;;;24309:72;24377:2;24366:9;24362:18;24353:6;24309:72;;;24176:215;;;;;;24398:324;;24544:2;24533:9;24529:18;24521:26;;24558:71;24626:1;24615:9;24611:17;24602:6;24558:71;;;24640:72;24708:2;24697:9;24693:18;24684:6;24640:72;;;24515:207;;;;;;24729:435;;24903:2;24892:9;24888:18;24880:26;;24917:71;24985:1;24974:9;24970:17;24961:6;24917:71;;;24999:72;25067:2;25056:9;25052:18;25043:6;24999:72;;;25082;25150:2;25139:9;25135:18;25126:6;25082:72;;;24874:290;;;;;;;25171:324;;25317:2;25306:9;25302:18;25294:26;;25331:71;25399:1;25388:9;25384:17;25375:6;25331:71;;;25413:72;25481:2;25470:9;25466:18;25457:6;25413:72;;;25288:207;;;;;;25502:449;;25683:2;25672:9;25668:18;25660:26;;25697:71;25765:1;25754:9;25750:17;25741:6;25697:71;;;25779:72;25847:2;25836:9;25832:18;25823:6;25779:72;;;25862:79;25937:2;25926:9;25922:18;25913:6;25862:79;;;25654:297;;;;;;;25958:788;;26288:2;26277:9;26273:18;26265:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26363:144;26502:4;26493:6;26363:144;;;26355:152;;26555:9;26549:4;26545:20;26540:2;26529:9;26525:18;26518:48;26580:156;26731:4;26722:6;26580:156;;;26572:164;;26259:487;;;;;;26753:201;;26865:2;26854:9;26850:18;26842:26;;26879:65;26941:1;26930:9;26926:17;26917:6;26879:65;;;26836:118;;;;;26961:231;;27088:2;27077:9;27073:18;27065:26;;27102:80;27179:1;27168:9;27164:17;27155:6;27102:80;;;27059:133;;;;;27199:301;;27337:2;27326:9;27322:18;27314:26;;27387:9;27381:4;27377:20;27373:1;27362:9;27358:17;27351:47;27412:78;27485:4;27476:6;27412:78;;;27404:86;;27308:192;;;;;27507:407;;27698:2;27687:9;27683:18;27675:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27773:131;27899:4;27773:131;;;27765:139;;27669:245;;;;27921:407;;28112:2;28101:9;28097:18;28089:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28187:131;28313:4;28187:131;;;28179:139;;28083:245;;;;28335:407;;28526:2;28515:9;28511:18;28503:26;;28576:9;28570:4;28566:20;28562:1;28551:9;28547:17;28540:47;28601:131;28727:4;28601:131;;;28593:139;;28497:245;;;;28749:407;;28940:2;28929:9;28925:18;28917:26;;28990:9;28984:4;28980:20;28976:1;28965:9;28961:17;28954:47;29015:131;29141:4;29015:131;;;29007:139;;28911:245;;;;29163:407;;29354:2;29343:9;29339:18;29331:26;;29404:9;29398:4;29394:20;29390:1;29379:9;29375:17;29368:47;29429:131;29555:4;29429:131;;;29421:139;;29325:245;;;;29577:407;;29768:2;29757:9;29753:18;29745:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29843:131;29969:4;29843:131;;;29835:139;;29739:245;;;;29991:407;;30182:2;30171:9;30167:18;30159:26;;30232:9;30226:4;30222:20;30218:1;30207:9;30203:17;30196:47;30257:131;30383:4;30257:131;;;30249:139;;30153:245;;;;30405:407;;30596:2;30585:9;30581:18;30573:26;;30646:9;30640:4;30636:20;30632:1;30621:9;30617:17;30610:47;30671:131;30797:4;30671:131;;;30663:139;;30567:245;;;;30819:407;;31010:2;30999:9;30995:18;30987:26;;31060:9;31054:4;31050:20;31046:1;31035:9;31031:17;31024:47;31085:131;31211:4;31085:131;;;31077:139;;30981:245;;;;31233:407;;31424:2;31413:9;31409:18;31401:26;;31474:9;31468:4;31464:20;31460:1;31449:9;31445:17;31438:47;31499:131;31625:4;31499:131;;;31491:139;;31395:245;;;;31647:407;;31838:2;31827:9;31823:18;31815:26;;31888:9;31882:4;31878:20;31874:1;31863:9;31859:17;31852:47;31913:131;32039:4;31913:131;;;31905:139;;31809:245;;;;32061:407;;32252:2;32241:9;32237:18;32229:26;;32302:9;32296:4;32292:20;32288:1;32277:9;32273:17;32266:47;32327:131;32453:4;32327:131;;;32319:139;;32223:245;;;;32475:407;;32666:2;32655:9;32651:18;32643:26;;32716:9;32710:4;32706:20;32702:1;32691:9;32687:17;32680:47;32741:131;32867:4;32741:131;;;32733:139;;32637:245;;;;32889:407;;33080:2;33069:9;33065:18;33057:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33155:131;33281:4;33155:131;;;33147:139;;33051:245;;;;33303:407;;33494:2;33483:9;33479:18;33471:26;;33544:9;33538:4;33534:20;33530:1;33519:9;33515:17;33508:47;33569:131;33695:4;33569:131;;;33561:139;;33465:245;;;;33717:407;;33908:2;33897:9;33893:18;33885:26;;33958:9;33952:4;33948:20;33944:1;33933:9;33929:17;33922:47;33983:131;34109:4;33983:131;;;33975:139;;33879:245;;;;34131:407;;34322:2;34311:9;34307:18;34299:26;;34372:9;34366:4;34362:20;34358:1;34347:9;34343:17;34336:47;34397:131;34523:4;34397:131;;;34389:139;;34293:245;;;;34545:407;;34736:2;34725:9;34721:18;34713:26;;34786:9;34780:4;34776:20;34772:1;34761:9;34757:17;34750:47;34811:131;34937:4;34811:131;;;34803:139;;34707:245;;;;34959:407;;35150:2;35139:9;35135:18;35127:26;;35200:9;35194:4;35190:20;35186:1;35175:9;35171:17;35164:47;35225:131;35351:4;35225:131;;;35217:139;;35121:245;;;;35373:407;;35564:2;35553:9;35549:18;35541:26;;35614:9;35608:4;35604:20;35600:1;35589:9;35585:17;35578:47;35639:131;35765:4;35639:131;;;35631:139;;35535:245;;;;35787:407;;35978:2;35967:9;35963:18;35955:26;;36028:9;36022:4;36018:20;36014:1;36003:9;35999:17;35992:47;36053:131;36179:4;36053:131;;;36045:139;;35949:245;;;;36201:407;;36392:2;36381:9;36377:18;36369:26;;36442:9;36436:4;36432:20;36428:1;36417:9;36413:17;36406:47;36467:131;36593:4;36467:131;;;36459:139;;36363:245;;;;36615:404;;36801:2;36790:9;36786:18;36778:26;;36815:111;36923:1;36912:9;36908:17;36899:6;36815:111;;;36937:72;37005:2;36994:9;36990:18;36981:6;36937:72;;;36772:247;;;;;;37026:213;;37144:2;37133:9;37129:18;37121:26;;37158:71;37226:1;37215:9;37211:17;37202:6;37158:71;;;37115:124;;;;;37246:205;;37360:2;37349:9;37345:18;37337:26;;37374:67;37438:1;37427:9;37423:17;37414:6;37374:67;;;37331:120;;;;;37458:256;;37520:2;37514:9;37504:19;;37558:4;37550:6;37546:17;37657:6;37645:10;37642:22;37621:18;37609:10;37606:34;37603:62;37600:2;;;37678:1;37675;37668:12;37600:2;37698:10;37694:2;37687:22;37498:216;;;;;37721:322;;37865:18;37857:6;37854:30;37851:2;;;37897:1;37894;37887:12;37851:2;37964:4;37960:9;37953:4;37945:6;37941:17;37937:33;37929:41;;38028:4;38022;38018:15;38010:23;;37788:255;;;;38050:175;;38160:3;38152:11;;38198:4;38193:3;38189:14;38181:22;;38146:79;;;;38232:169;;38336:3;38328:11;;38374:4;38369:3;38365:14;38357:22;;38322:79;;;;38408:161;;38541:5;38535:12;38525:22;;38506:63;;;;38576:155;;38703:5;38697:12;38687:22;;38668:63;;;;38738:117;;38827:5;38821:12;38811:22;;38792:63;;;;38862:121;;38955:5;38949:12;38939:22;;38920:63;;;;38990:122;;39084:5;39078:12;39068:22;;39049:63;;;;39119:132;;39241:4;39236:3;39232:14;39224:22;;39218:33;;;;39258:126;;39374:4;39369:3;39365:14;39357:22;;39351:33;;;;39392:202;;39546:6;39541:3;39534:19;39583:4;39578:3;39574:14;39559:29;;39527:67;;;;;39603:196;;39751:6;39746:3;39739:19;39788:4;39783:3;39779:14;39764:29;;39732:67;;;;;39808:152;;39912:6;39907:3;39900:19;39949:4;39944:3;39940:14;39925:29;;39893:67;;;;;39969:144;;40104:3;40089:18;;40082:31;;;;;40122:163;;40237:6;40232:3;40225:19;40274:4;40269:3;40265:14;40250:29;;40218:67;;;;;40293:91;;40355:24;40373:5;40355:24;;;40344:35;;40338:46;;;;40391:85;;40464:5;40457:13;40450:21;40439:32;;40433:43;;;;40483:136;;40560:5;40549:16;;40566:48;40608:5;40566:48;;;40543:76;;;;40626:150;;40710:5;40699:16;;40716:55;40765:5;40716:55;;;40693:83;;;;40783:144;;40864:5;40853:16;;40870:52;40916:5;40870:52;;;40847:80;;;;40934:128;;41007:5;40996:16;;41013:44;41051:5;41013:44;;;40990:72;;;;41069:84;;41141:6;41134:5;41130:18;41119:29;;41113:40;;;;41160:121;;41233:42;41226:5;41222:54;41211:65;;41205:76;;;;41288:72;;41350:5;41339:16;;41333:27;;;;41367:81;;41438:4;41431:5;41427:16;41416:27;;41410:38;;;;41455:129;;41542:37;41573:5;41542:37;;;41529:50;;41523:61;;;;41591:136;;41683:39;41716:5;41683:39;;;41670:52;;41664:63;;;;41734:150;;41833:46;41873:5;41833:46;;;41820:59;;41814:70;;;;41891:144;;41987:43;42024:5;41987:43;;;41974:56;;41968:67;;;;42042:128;;42130:35;42159:5;42130:35;;;42117:48;;42111:59;;;;42177:114;;42263:23;42280:5;42263:23;;;42250:36;;42244:47;;;;42298:121;;42377:37;42408:5;42377:37;;;42364:50;;42358:61;;;;42426:108;;42505:24;42523:5;42505:24;;;42492:37;;42486:48;;;;42542:268;42607:1;42614:101;42628:6;42625:1;42622:13;42614:101;;;42704:1;42699:3;42695:11;42689:18;42685:1;42680:3;42676:11;42669:39;42650:2;42647:1;42643:10;42638:15;;42614:101;;;42730:6;42727:1;42724:13;42721:2;;;42795:1;42786:6;42781:3;42777:16;42770:27;42721:2;42591:219;;;;;42818:97;;42906:2;42902:7;42897:2;42890:5;42886:14;42882:28;42872:38;;42866:49;;;;42923:106;43007:1;43000:5;42997:12;42987:2;;43013:9;42987:2;42981:48;;43036:113;43127:1;43120:5;43117:12;43107:2;;43133:9;43107:2;43101:48;;43156:110;43244:1;43237:5;43234:12;43224:2;;43250:9;43224:2;43218:48;;43273:102;43353:1;43346:5;43343:12;43333:2;;43359:9;43333:2;43327:48;;43382:117;43451:24;43469:5;43451:24;;;43444:5;43441:35;43431:2;;43490:1;43487;43480:12;43431:2;43425:74;;43506:111;43572:21;43587:5;43572:21;;;43565:5;43562:32;43552:2;;43608:1;43605;43598:12;43552:2;43546:71;;43624:117;43693:24;43711:5;43693:24;;;43686:5;43683:35;43673:2;;43732:1;43729;43722:12;43673:2;43667:74;

Swarm Source

bzzr://207f3cea5e1ea0bfe1746d6bc6b4077de0a5848dc5ba4c61b4c0858cc0aa4580
Block Transaction Difficulty Gas Used Reward
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.