FTM Price: $0.99 (-3.69%)
Gas: 33 GWei

Contract

0x50855F85c0A1B6a35aDC1700A74eF98B3243B5D5
 

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw566804802023-02-28 17:11:05394 days ago1677604265IN
0x50855F85...B3243B5D5
0 FTM0.0531300333.82297323
Deposit566680692023-02-28 12:37:47395 days ago1677587867IN
0x50855F85...B3243B5D5
0 FTM0.0585947331.82452121
Withdraw559499392023-02-16 23:18:59406 days ago1676589539IN
0x50855F85...B3243B5D5
0 FTM0.28753347150.96893961
Deposit554500632023-02-10 0:48:46413 days ago1675990126IN
0x50855F85...B3243B5D5
0 FTM0.26689024146.63428965
Withdraw546478832023-01-29 8:42:02425 days ago1674981722IN
0x50855F85...B3243B5D5
0 FTM0.1143200585.79263125
Do Hard Work546478672023-01-29 8:41:45425 days ago1674981705IN
0x50855F85...B3243B5D5
0 FTM0.1207899585.93168391
Do Hard Work543670962023-01-24 21:13:21429 days ago1674594801IN
0x50855F85...B3243B5D5
0 FTM0.0463867637.2898665
Deposit543670522023-01-24 21:12:28429 days ago1674594748IN
0x50855F85...B3243B5D5
0 FTM0.054643737.26636528
Withdraw503062462022-10-31 11:11:40515 days ago1667214700IN
0x50855F85...B3243B5D5
0 FTM0.0530730637.96847842
Deposit502899942022-10-31 2:53:36515 days ago1667184816IN
0x50855F85...B3243B5D5
0 FTM0.010228176.4999
Withdraw502498462022-10-30 3:38:34516 days ago1667101114IN
0x50855F85...B3243B5D5
0 FTM0.0247847517.61798929
Deposit502247412022-10-29 14:02:00516 days ago1667052120IN
0x50855F85...B3243B5D5
0 FTM0.003478642.5
Withdraw492096292022-10-15 6:50:55531 days ago1665816655IN
0x50855F85...B3243B5D5
0 FTM0.003756382.65198295
Withdraw491825812022-10-14 22:25:33531 days ago1665786333IN
0x50855F85...B3243B5D5
0 FTM0.002143051.48440213
Do Hard Work491825782022-10-14 22:25:30531 days ago1665786330IN
0x50855F85...B3243B5D5
0 FTM0.002067751.48440213
Withdraw486121012022-10-07 7:12:55539 days ago1665126775IN
0x50855F85...B3243B5D5
0 FTM0.003748492.54445935
Deposit485909402022-10-07 0:39:58539 days ago1665103198IN
0x50855F85...B3243B5D5
0 FTM0.003673412.5
Do Hard Work481173882022-09-30 21:33:17545 days ago1664573597IN
0x50855F85...B3243B5D5
0 FTM0.001462051.11373571
Do Hard Work480385562022-09-29 20:55:10546 days ago1664484910IN
0x50855F85...B3243B5D5
0 FTM0.0150434710.92783059
Withdraw476492332022-09-24 16:41:33551 days ago1664037693IN
0x50855F85...B3243B5D5
0 FTM0.001480172.55108856
Deposit476194412022-09-24 7:29:22552 days ago1664004562IN
0x50855F85...B3243B5D5
0 FTM0.001598612.5
Withdraw474901802022-09-22 15:02:09553 days ago1663858929IN
0x50855F85...B3243B5D5
0 FTM0.001487452.5
Deposit474652652022-09-22 7:07:59554 days ago1663830479IN
0x50855F85...B3243B5D5
0 FTM0.001565452.5
Withdraw474647462022-09-22 6:58:48554 days ago1663829928IN
0x50855F85...B3243B5D5
0 FTM0.001452542.5
Deposit474645882022-09-22 6:56:04554 days ago1663829764IN
0x50855F85...B3243B5D5
0 FTM0.003765242.5
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
342023832022-03-23 15:15:27736 days ago1648048527  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Granary

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-03-23
*/

/*


FFFFF  TTTTTTT  M   M         GGGGG  U    U  RRRRR     U    U
FF       TTT   M M M M       G       U    U  RR   R    U    U
FFFFF    TTT   M  M  M      G  GGG   U    U  RRRRR     U    U
FF       TTT   M  M  M   O  G    G   U    U  RR R      U    U
FF       TTT   M     M       GGGGG    UUUU   RR  RRR    UUUU


FFFFF    M   M    CCCCC       GGGGG  U    U  RRRRR     U    U
FF      M M M M  CC          G       U    U  RR   R    U    U
FFFFF   M  M  M  CC         G  GGG   U    U  RRRRR     U    U
FF      M  M  M  CC      O  G    G   U    U  RR R      U    U
FF      M     M  CCCCCC      GGGGG    UUUU   RR  RRR    UUUU


KK   KK   CCCCC   CCCCC       GGGGG  U    U  RRRRR     U    U
KK KKK   CC      CC          G       U    U  RR   R    U    U
KKKK     CC      CC         G  GGG   U    U  RRRRR     U    U
KK KK    CC      CC      O  G    G   U    U  RR R      U    U
KK  KKK  CCCCCC  CCCCCC      GGGGG    UUUU   RR  RRR    UUUU


 M   M  TTTTTTT  V     V      GGGGG  U    U  RRRRR     U    U
M M M M   TTT    V     V     G       U    U  RR   R    U    U
M  M  M   TTT     V   V     G  GGG   U    U  RRRRR     U    U
M     M   TTT      V V   O  G    G   U    U  RR R      U    U
M     M   TTT       V        GGGGG    UUUU   RR  RRR    UUUU




					*************************
					**                     **
					**  GRANARY & WORKERS  **
					**                     **
					**    ftm.guru/GRAIN   **
					**                     **
					**                     **
					**  Compounding Vault  **
					**  for Solidex Farms  **
					**                     **
					** Lowest Fee: Just 1% **
					**                     **
					**Highest Worker Payout**
					**     Earn Full 1%    **
					**   on each Harvest!  **
					**                     **
					*************************


Create a farm & vault for your own projects for free with ftm.guru

            			Contact us at:
			https://discord.com/invite/QpyfMarNrV
        			https://t.me/FTM1337

*/
/*
	- KOMPOUND PROTOCOL -
    https://kcc.guru/kompound
    - GRANARY & WORKERS -
    https://ftm.guru/GRAIN

    Yield Compounding Service
    Created by Guru Network

    Community Mediums:
        https://discord.com/invite/QpyfMarNrV
        https://medium.com/@ftm1337
        https://twitter.com/ftm1337
        https://twitter.com/kucino
        https://t.me/ftm1337
        https://t.me/kccguru
    Other Products:
        KUCINO CASINO - The First and Most used Casino of KCC
        fmc.guru - FantomMarketCap : On-Chain Data Aggregator
        ELITE - ftm.guru is an indie growth-hacker for Fantom
*/
/*

		FREQUENTLY ASKED QUESTIONS


	Q.1	WHY USE THIS VAULT?
	Ans	Most of the popular vaults' owners can switch "strategy" and steal (a.k.a. hard-rug) your valuable assets.
		Granaries or Kompound Protocol cannot change its own behaviour or strategy once its deployed on-chain.
		Our code uses unchangeable constants for tokens and external contracts. All fees & incentives are capped.
			Unlike the other (you-know-who) famous vaults.


	Q.2 WHAT IS ELITENESS?
	Ans	Simply holding ELITE (ftm.guru) token in your wallet ascribes you Eliteness.
		It is required to earn worker incentives from this Granary.
		Deposits incur nil fee if the user posseses adequate eliteness.
		 	ELITE has a fixed supply of 250.


*/
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

//ftm.guru's Universal On-chain TVL Calculator
//Source: https://ftm.guru/rawdata/tvl
interface ITVL {
	//Using Version = 6
	function p_lpt_coin_usd(address lp) external view returns(uint256);
	function p_lpt_usd(address u,address lp) external view returns(uint256);
}

interface ILpDepositor {
    struct Amounts {
        uint256 solid;
        uint256 sex;
    }
    function pendingRewards(address account, address[] calldata pools) external view returns (Amounts[] memory pending);
    function deposit(address pool, uint256 amount) external;
    function withdraw(address pool, uint256 amount) external;
    function getReward(address[] calldata pools) external;
	function userBalances(address owner, address pool) external view returns (uint256);
}

interface IERC20 {
	/**
	 * @dev Returns the number of token's Decimals.
	 */

	function decimals() external view returns (uint256);
	/**
	 * @dev Returns the amount of tokens in existence.
	 */

	function totalSupply() external view returns (uint256);
	/**
	 * @dev Returns the amount of tokens owned by `account`.
	 */

	function balanceOf(address account) external view returns (uint256);
	/**
	 * @dev Moves `amount` tokens from the caller's account to `recipient`.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * Emits a {Transfer} event.
	 */

	function transfer(address recipient, uint256 amount) external returns (bool);
	/**
	 * @dev Returns the remaining number of tokens that `spender` will be
	 * allowed to spend on behalf of `owner` through {transferFrom}. This is
	 * zero by default.
	 *
	 * This value changes when {approve} or {transferFrom} are called.
	 */

	function allowance(address owner, address spender) external view returns (uint256);
	/**
	 * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * IMPORTANT: Beware that changing an allowance with this method brings the risk
	 * that someone may use both the old and the new allowance by unfortunate
	 * transaction ordering. One possible solution to mitigate this race
	 * condition is to first reduce the spender's allowance to 0 and set the
	 * desired value afterwards:
	 * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
	 *
	 * Emits an {Approval} event.
	 */

	function approve(address spender, uint256 amount) external returns (bool);
	/**
	 * @dev Moves `amount` tokens from `sender` to `recipient` using the
	 * allowance mechanism. `amount` is then deducted from the caller's
	 * allowance.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * Emits a {Transfer} event.
	 */

	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
	/**
	 * @dev Emitted when `value` tokens are moved from one account (`from`) to
	 * another (`to`).
	 *
	 * Note that `value` may be zero.
	 */
	event Transfer(address indexed from, address indexed to, uint256 value);
	/**
	 * @dev Emitted when the allowance of a `spender` for an `owner` is set by
	 * a call to {approve}. `value` is the new allowance.
	 */
	event Approval(address indexed owner, address indexed spender, uint256 value);
	//Uniswap-style Pair (LPT)

	function getReserves() external view returns (uint112, uint112, uint32);
}
interface IRouter {

    struct route {
        address from;
        address to;
        bool stable;
    }

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

	function addLiquidity(
		address tokenA,
        address tokenB,
        bool stable,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
	) external returns (uint amountA, uint amountB, uint liquidity);
}
library SafeMath {
	/**
	 * @dev Returns the addition of two unsigned integers, reverting on
	 * overflow.
	 *
	 * Counterpart to Solidity's `+` operator.
	 *
	 * Requirements:
	 * - Addition cannot overflow.
	 */

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");
		return c;
	}
	/**
	 * @dev Returns the subtraction of two unsigned integers, reverting on
	 * overflow (when the result is negative).
	 *
	 * Counterpart to Solidity's `-` operator.
	 *
	 * Requirements:
	 * - Subtraction cannot overflow.
	 */

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}
	/**
	 * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
	 * overflow (when the result is negative).
	 *
	 * Counterpart to Solidity's `-` operator.
	 *
	 * Requirements:
	 * - Subtraction cannot overflow.
	 */

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;
		return c;
	}
	/**
	 * @dev Returns the multiplication of two unsigned integers, reverting on
	 * overflow.
	 *
	 * Counterpart to Solidity's `*` operator.
	 *
	 * Requirements:
	 * - Multiplication cannot overflow.
	 */

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}
		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");
		return c;
	}
	/**
	 * @dev Returns the integer division of two unsigned integers. Reverts on
	 * division by zero. The result is rounded towards zero.
	 *
	 * Counterpart to Solidity's `/` operator. Note: this function uses a
	 * `revert` opcode (which leaves remaining gas untouched) while Solidity
	 * uses an invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 * - The divisor cannot be zero.
	 */

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}
	/**
	 * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
	 * division by zero. The result is rounded towards zero.
	 *
	 * Counterpart to Solidity's `/` operator. Note: this function uses a
	 * `revert` opcode (which leaves remaining gas untouched) while Solidity
	 * uses an invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 * - The divisor cannot be zero.
	 */

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		// Solidity only automatically asserts when dividing by 0
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold
		return c;
	}
	/**
	 * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
	 * Reverts when dividing by zero.
	 *
	 * Counterpart to Solidity's `%` operator. This function uses a `revert`
	 * opcode (which leaves remaining gas untouched) while Solidity uses an
	 * invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 * - The divisor cannot be zero.
	 */

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}
	/**
	 * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
	 * Reverts with custom message when dividing by zero.
	 *
	 * Counterpart to Solidity's `%` operator. This function uses a `revert`
	 * opcode (which leaves remaining gas untouched) while Solidity uses an
	 * invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 * - The divisor cannot be zero.
	 */

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


contract Granary
{
	using SafeMath for uint256;

	constructor (address _w, string memory _i,
        address[] memory _rd0f, address[] memory _rd0t, bool[] memory _rd0s,
        uint[4] memory _si
    ) public
	{
		want=IERC20(_w);
		id=_i;//GRAIN#ID

        for(uint i=0;i<_si[0];i++)
        {
            RD0.push(IRouter.route(
                {
                    from:   _rd0f[i],
                    to:     _rd0t[i],
                    stable: _rd0s[i]
                }
            ));
        }

        for(uint i=_si[0];i<(_si[0]+_si[1]);i++)
        {
            RD1.push(IRouter.route(
                {
                    from:   _rd0f[i],
                    to:     _rd0t[i],
                    stable: _rd0s[i]
                }
            ));
        }

        for(uint i=(_si[0]+_si[1]);i<(_si[0]+_si[1]+_si[2]);i++)
        {
            RX0.push(IRouter.route(
                {
                    from:   _rd0f[i],
                    to:     _rd0t[i],
                    stable: _rd0s[i]
                }
            ));
        }

        for(uint i=(_si[0]+_si[1]+_si[2]);i<(_si[0]+_si[1]+_si[2]+_si[3]);i++)
        {
            RX1.push(IRouter.route(
                {
                    from:   _rd0f[i],
                    to:     _rd0t[i],
                    stable: _rd0s[i]
                }
            ));
        }




		//Approvals
		//Solidex.MC to take what it may want
		want.approve(address(mc),uint256(-1));
		//Routers.FoT to sell SOLID we earn
		IERC20(SOLID).approve(router,uint256(-1));
		//Routers.FoT to sell SEX we earn
		IERC20(SEX).approve(router,uint256(-1));
		//Routers.FoT to add RX0[RX0.length-1].to
		IERC20(RX0[RX0.length-1].to).approve(router,uint256(-1));
		//Routers.FoT to add RX1[RX1.length-1].to
		IERC20(RX1[RX1.length-1].to).approve(router,uint256(-1));
	}

	modifier DAO {require(msg.sender==dao,"Only E.L.I.T.E. D.A.O., please!");_;}
	struct Elites {
		address ELITE;
		uint256 ELITES;
	}

	Elites[] public Eliteness;

	function pushElite(address elite, uint256 elites) public DAO {
        Eliteness.push(Elites({ELITE:elite,ELITES:elites}));
    }

	function pullElite(uint256 n) public DAO {
        Eliteness[n]=Eliteness[Eliteness.length-1];Eliteness.pop();
    }
	//@xref takeFee=eliteness(msg.sender)?false:true;

	function eliteness(address u) public view returns(bool)
	{
		if(Eliteness.length==0){return(true);}//When nobody is an Elite, everyone is an Elite.
		for(uint i;i<Eliteness.length;i++){
			if(IERC20(Eliteness[i].ELITE).balanceOf(u)>=Eliteness[i].ELITES)
			{
				return(true);
			}
		}
		return(false);
	}

	function config(//address _w,
		uint256 _mw, uint256 _wi, uint256 _pf, address _t, uint256 _df) public DAO
	{
		allnums[4] = _mw;
		treasury = _t;
		//Max 10%, 1e6 = 100%
		require(_wi<1e5,"!wi: high");allnums[3] = _wi;
		require(_pf<1e5,"!pf: high");allnums[2] = _pf;
		require(_df<1e5,"!df: high");allnums[1] = _df;
	}
	uint8 RG = 0;
	modifier rg {
		require(RG == 0,"!RG");
		RG = 1;
		_;
		RG = 0;
	}

    IRouter.route[] public RD0;
    IRouter.route[] public RD1;
    IRouter.route[] public RX0;
    IRouter.route[] public RX1;

	function isContract(address account) internal view returns (bool)
	{
		bytes32 codehash;
		bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
		assembly { codehash := extcodehash(account) }
		return (codehash != accountHash && codehash != 0x0);
	}
	//Using getter functions instead of variables to circumvent "Stack too deep!" errors
	string public id;
	function name() public view returns(string memory){return(string(abi.encodePacked("ftm.guru/GRAIN/", id)));}
	function symbol() public view returns(string memory){return(string(abi.encodePacked("GRAIN#", id)));}
	function decimals() public pure returns(uint256){return(18);}
	uint256 public totalSupply;

	ILpDepositor public mc=ILpDepositor(0x26E1A0d851CF28E697870e1b7F053B605C8b060F);
	address public router=0xDf69daa5340072Ded600c566019dcb61d29332F2;
	address public SOLID=0x888EF71766ca594DED1F0FA3AE64eD2941740A20;
	address public WFTM=0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;
	address public SEX=0xD31Fcd1f7Ba190dBc75354046F6024A9b86014d7;

	//earn & want need to be kept independently readable for our Binary Options platform (ftm.guru/bo).
	function earn() public view returns(address,address){return(SOLID,SEX);}
	IERC20 public want;		//returns(address), setup in constructor

	bool public emergency = false;
	address public dao = 0x167D87A906dA361A10061fe42bbe89451c2EE584;
	address public treasury = dao;
	address public utvl = 0x0786c3a78f5133F08C1c70953B8B10376bC6dCad;
	//This GRAIN#51XX uses tvlGuru <= v5, which was the latest version at the time of deployment of this GRAIN.
	//address public utvl;
	/*
	uint256 public df = 1e3;//deposit fee = 0.1%, 1e6=100%
	uint256 public pf = 1e4;//performance fee to treasury, paid from profits = 1%, 1e6=100%
	uint256 public wi = 1e4;//worker incentive, paid from profits = 1%, 1e6=100%
	uint256 public mw;//Minimum earnings to reinvest
	uint64[3] ct;//Timestamp of first-ever & 2 latest Kompounds
	*/
	//generic GRAIN variables, common to all Granaries
	uint256[7] public allnums = [
		42,		//pid		0       constant
		1e3,	//df		1       config, <= 10% (1e5), default 0.1%
		1e4,	//pf		2       config, <= 10% (1e5), default 1%
		1e4,	//wi		3       config, <= 10% (1e5), default 1%
		1e13,	//mw		4       config, default 1 (near zero)
		0,		//ct[0]		5       nonce, then constant (first work)
		0		//ct[1]		6       time, up only (last work)
		//0		//ct[2]		7       time, up only (2nd-last work)
	];
	event  Approval(address indexed src, address indexed guy, uint wad);
	event  Transfer(address indexed src, address indexed dst, uint wad);
	mapping (address => uint) public  balanceOf;
	mapping (address => mapping (address => uint)) public  allowance;

	function approve(address guy) public returns (bool) {
		return approve(guy, uint(-1));
	}

	function approve(address guy, uint wad) public returns (bool) {
		allowance[msg.sender][guy] = wad;
		emit Approval(msg.sender, guy, wad);
		return true;
	}

	function transfer(address dst, uint wad) public returns (bool) {
		return transferFrom(msg.sender, dst, wad);
	}

	function transferFrom(address src, address dst, uint wad) public returns (bool)
	{
		require(balanceOf[src] >= wad,"Insufficient Balance");
		if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
			require(allowance[src][msg.sender] >= wad);
			allowance[src][msg.sender] -= wad;
		}
		balanceOf[src] -= wad;
		balanceOf[dst] += wad;
		emit Transfer(src, dst, wad);
		return true;
	}

	function deposit(uint256 _amt) public rg
	{
		require(!emergency,"Its an emergency. Please don't deposit.");
		//This could've been done at the end but done here since there's no auto-harvest.
		//Doing here could also help with kinky APR that could otherwise be deposit bonus.
		salvage();
		if(shouldWork()) {work(address(this));}

		//Some fancy math to take care of Fee-on-Transfer tokens
		uint256 vbb = want.balanceOf(address(this));
		uint256 mcbb = mc.userBalances(address(this),address(want));
		require(want.transferFrom(msg.sender,address(this),_amt), "Unable to onboard");
		uint256 vba = want.balanceOf(address(this));
		uint256 D = vba.sub(vbb,"Dirty deposit");
		mc.deposit(address(want),D);
		//Some more fancy math to take care of Deposit Fee
		uint256 mcba = mc.userBalances(address(this),address(want));
		uint256 M = mcba.sub(mcbb,"Dirty stake");
		//require(M>mindep,"Deposit Too Low");
		uint256 _mint = 0;
		(totalSupply > 0)
			// k: SharePerDeposit should be constant before & after
			// Mint = SharesPerDeposit * IncreaseInDeposit
			// bal += (totalSupply / oldDeposits) * thisDeposit
			?	_mint = ( M.mul(totalSupply) ).div(mcbb)
			:	_mint = M;
		totalSupply += _mint;
		uint256 _fee;
		//allnums[1]===df, deposit fee
		if(allnums[1]>0){_fee = eliteness(msg.sender)? 0 : (_mint.mul(allnums[1])).div(1e6);}//gas savings
		if(_fee>0)//gas savings
		{
			balanceOf[treasury] += _fee;
			emit Transfer(address(0), treasury, _fee);
		}
		balanceOf[msg.sender] += _mint.sub(_fee);
		emit Transfer(address(0), msg.sender, _mint.sub(_fee));
	}

	function withdraw(uint256 _amt) public rg
	{
		require(!emergency,"Its an emergency. Use emergencyWithdraw() please.");
		require(balanceOf[msg.sender] >= _amt,"Insufficient Balance");
		//This shouldve been done at the end but done here since there's no auto-harvest.
		//It also saves gas, and does not forfeit user's interim rewards (no exit penalty).
	   	salvage();
		if(shouldWork()) {work(address(this));}
		//Burn _amt of Vault Tokens
		balanceOf[msg.sender] -= _amt;
		uint256 ts = totalSupply;
		totalSupply -= _amt;
		emit Transfer(msg.sender, address(0), _amt);
		uint256 vbb = want.balanceOf(address(this));
		uint256 mcbb = mc.userBalances(address(this),address(want));
		// W  = DepositsPerShare * SharesBurnt
		uint256 W = ( _amt.mul(mcbb) ).div(ts);
		mc.withdraw(address(want),W);
		uint256 vba = want.balanceOf(address(this));
		uint256 D = vba.sub(vbb,"Dirty withdrawal");
	   	require(want.transfer(msg.sender,D), "Unable to deboard");
	}

	function doHardWork() public rg
	{
		require(eliteness(msg.sender),"Elites only!");
		salvage();
		//require(earn.balanceOf(address(this)) > allnums[4], "Not much work to do!");
		work(msg.sender);
	}

	function salvage() public
	{
		//harvest
        address[] memory p = new address[](2);
        p[0] = address(want);
        mc.getReward(p);
	}

	function shouldWork() public view returns (bool could)
	{
		could = (
			(IERC20(SOLID).balanceOf(address(this)) > allnums[4])
			|| (IERC20(SEX).balanceOf(address(this)) > allnums[4])
		);
	}

	function work(address ben) internal
	{
		require(!emergency,"Its an emergency. Use emergencyWithdraw() please.");
		//has inputs from salvage() if this work is done via doHardWork()

		require(shouldWork(), "Not much work to do!");
		//breaks only doHardWork(), as deposit() & withdraw() cannot reach work() unless we shouldWork()

        uint256 solidEarned = IERC20(SOLID).balanceOf(address(this));
		uint256 sexEarned = IERC20(SEX).balanceOf(address(this));


        if(solidEarned > allnums[4])
        {
			//Sell 50% SOLID for R0[R0.length-1].to
			IRouter(router).swapExactTokensForTokensSupportingFeeOnTransferTokens(
				solidEarned.div(2),
				1,
        		RD0,
				address(this),
				block.timestamp
			);
			//Sell 50% SOLID for R1[R1.length-1].to
			IRouter(router).swapExactTokensForTokensSupportingFeeOnTransferTokens(
				solidEarned.div(2),
				1,
        		RD1,
				address(this),
				block.timestamp
			);

		}


		if(sexEarned > allnums[4])
		{

			//Sell 50% SEX for R0[R0.length-1].to
			IRouter(router).swapExactTokensForTokensSupportingFeeOnTransferTokens(
				sexEarned.div(2),
				1,
        		RX0,
				address(this),
				block.timestamp
			);
			//Sell 50% SEX for R1[R1.length-1].to
			IRouter(router).swapExactTokensForTokensSupportingFeeOnTransferTokens(
				sexEarned.div(2),
				1,
        		RX1,
				address(this),
				block.timestamp
			);

		}


		//AddLiquidity
		IRouter(router).addLiquidity(
			RX0[RX0.length-1].to,
        	RX1[RX1.length-1].to,
        	false,
        	IERC20(RX0[RX0.length-1].to).balanceOf(address(this)),
        	IERC20(RX1[RX1.length-1].to).balanceOf(address(this)),
        	1,
        	1,
        	address(this),
        	block.timestamp
		);


		//executes the generic sub-routine of a Kompound Protocol worker, common across all Granaries
		uint256 D = want.balanceOf(address(this));
		uint256 mcbb = mc.userBalances(address(this),address(want));
		mc.deposit(address(want),D);
		uint256 mcba = mc.userBalances(address(this),address(want));
		uint256 M = mcba.sub(mcbb,"Dirty stake");
		//Performance Fee Mint, conserves TVL
		uint256 _mint = 0;
		//allnums[5] & allnums[6] are First & Latest Compound's timestamps. Used in info() for APY of AUM.
		if(allnums[5]==0){allnums[5]=uint64(block.timestamp);}//only on the first run
		allnums[6]=uint64(block.timestamp);
		(totalSupply > 0)
			// k: SharePerDeposit should be constant before & after
			// Mint = SharesPerDeposit * IncreaseInDeposit
			// bal += (totalSupply / oldDeposits) * thisDeposit
			?	_mint = ( M.mul(totalSupply) ).div(mcbb)
			:	_mint = M;
		//allnums[2] === pf, Performance Fee
		balanceOf[treasury] += (_mint.mul(allnums[2])).div(1e6);
		//Worker Incentive Mint, conserves TVL
		address worker = ben == address(this) ? treasury : ben;
		//allnums[3] === wi, Worker Incentive
		balanceOf[worker] += (_mint.mul(allnums[3])).div(1e6);
		totalSupply += ((_mint.mul(allnums[2])).div(1e6)).add( (_mint.mul(allnums[3])).div(1e6) );
		emit Transfer(address(0), treasury, (_mint.mul(allnums[2])).div(1e6));
		emit Transfer(address(0), worker, (_mint.mul(allnums[3])).div(1e6));
	}




	function declareEmergency() public DAO
	{
		require(!emergency,"Emergency already declared.");
		mc.withdraw(address(want),mc.userBalances(address(this),address(want)));
		emergency=true;
	}

	function revokeEmergency() public DAO
	{
		require(emergency,"Emergency not declared.");
		uint256 D = want.balanceOf(address(this));
		mc.deposit(address(want),D);
		emergency=false;
	}

	function emergencyWithdraw(uint256 _amt) public rg
	{
		require(emergency,"Its not an emergency. Use withdraw() instead.");
		require(balanceOf[msg.sender] >= _amt,"Insufficient Balance");
		uint256 ts = totalSupply;
		//Burn _amt of Vault Tokens
		balanceOf[msg.sender] -= _amt;
		totalSupply -= _amt;
		emit Transfer(msg.sender, address(0), _amt);
		uint256 vbb = want.balanceOf(address(this));
		uint256 W = ( _amt.mul(vbb) ).div(ts);
	   	require(want.transfer(msg.sender,W), "Unable to deboard");
	}




	function rescue(address tokenAddress, uint256 tokens) public DAO returns (bool success)
	{
		//Generally, there are not supposed to be any tokens in this contract itself:
		//Upon Deposits, the assets go from User to the MasterChef of Strategy,
		//Upon Withdrawals, the assets go from MasterChef of Strategy to the User, and
		//Upon HardWork, the harvest is reconverted to want and sent to MasterChef of Strategy.
		//Never allow draining main "want" token from the Granary:
		//Main token can only be withdrawn using the EmergencyWithdraw
		require(tokenAddress != address(want), "Funds are Safu in emergency!");
		if(tokenAddress==address(0)) {(success, ) = dao.call{value:tokens}("");return success;}
		else if(tokenAddress!=address(0)) {return IERC20(tokenAddress).transfer(dao, tokens);}
		else return false;
	}

	//Read-Only Functions
	//Useful for performance analysis
	function info() public view returns (uint256, uint256, uint256, uint256, uint256, uint256)
	{
		uint256 aum = mc.userBalances(address(this),address(want)) + IERC20(want).balanceOf(address(this));
		uint256 roi = aum*1e18/totalSupply;//ROI: 1e18 === 1x
		uint256 apy = ((roi-1e18)*(365*86400)*100)/(allnums[6]-allnums[5]);//APY: 1e18 === 1%
        address[] memory pool = new address[](1);
        pool[0] = address(want);
        ILpDepositor.Amounts[] memory amt;
        amt = mc.pendingRewards(address(this),pool);
		return(
			aum,
			roi,
			apy,
			mc.userBalances(address(this),address(want)),
			amt[0].solid,
			amt[0].sex
		);
	}

	//TVL in USD, 1e18===$1.
	//Source code Derived from ftm.guru's Universal On-chain TVL Calculator: https://ftm.guru/rawdata/tvl
	function tvl() public view returns(uint256)
	{
		ITVL tc = ITVL(utvl);
		uint256 aum = mc.userBalances(address(this),address(want)) + IERC20(want).balanceOf(address(this));
		//return ((tc.p_lpt_usd(RD1[RD1.length-1].to,address(want))).mul(aum)).div(1e18);
		return ((tc.p_lpt_coin_usd(address(want))).mul(aum)).div(1e18);
	}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_w","type":"address"},{"internalType":"string","name":"_i","type":"string"},{"internalType":"address[]","name":"_rd0f","type":"address[]"},{"internalType":"address[]","name":"_rd0t","type":"address[]"},{"internalType":"bool[]","name":"_rd0s","type":"bool[]"},{"internalType":"uint256[4]","name":"_si","type":"uint256[4]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Eliteness","outputs":[{"internalType":"address","name":"ELITE","type":"address"},{"internalType":"uint256","name":"ELITES","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RD0","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RD1","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RX0","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RX1","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SOLID","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WFTM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allnums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mw","type":"uint256"},{"internalType":"uint256","name":"_wi","type":"uint256"},{"internalType":"uint256","name":"_pf","type":"uint256"},{"internalType":"address","name":"_t","type":"address"},{"internalType":"uint256","name":"_df","type":"uint256"}],"name":"config","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dao","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"declareEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doHardWork","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"u","type":"address"}],"name":"eliteness","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"info","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mc","outputs":[{"internalType":"contract ILpDepositor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"pullElite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"elite","type":"address"},{"internalType":"uint256","name":"elites","type":"uint256"}],"name":"pushElite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescue","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salvage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldWork","outputs":[{"internalType":"bool","name":"could","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utvl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6001805460ff19169055600880546001600160a01b03199081167326e1a0d851cf28e697870e1b7f053b605c8b060f1790915560098054821673df69daa5340072ded600c566019dcb61d29332f2179055600a8054821673888ef71766ca594ded1f0fa3ae64ed2941740a20179055600b805482167321be370d5312f44cb42ce377bc9b8a0cef1a4c83179055600c8054821673d31fcd1f7ba190dbc75354046f6024a9b86014d7179055600d805460ff60a01b19169055600e8054821673167d87a906da361a10061fe42bbe89451c2ee5841790819055600f805483166001600160a01b039290921691909117905560108054909116730786c3a78f5133f08c1c70953b8b10376bc6dcad179055610160604052602a60809081526103e860a05261271060c081905260e0526509184e72a0006101005260006101208190526101405262000153906011906007620008c0565b503480156200016157600080fd5b50604051620044d0380380620044d0833981016040819052620001849162000b9f565b600d80546001600160a01b0319166001600160a01b0388161790558451620001b49060069060208801906200090d565b5060005b81518110156200029f5760026040518060600160405280878481518110620001dc57fe5b60200260200101516001600160a01b03168152602001868481518110620001ff57fe5b60200260200101516001600160a01b031681526020018584815181106200022257fe5b6020908102919091018101511515909152825460018082018555600094855293829020835160029092020180546001600160a01b03199081166001600160a01b039384161782559284015190850180546040909501519490931691161760ff60a01b1916600160a01b9215159290920291909117905501620001b8565b5080515b6020820151825101811015620003905760036040518060600160405280878481518110620002cd57fe5b60200260200101516001600160a01b03168152602001868481518110620002f057fe5b60200260200101516001600160a01b031681526020018584815181106200031357fe5b6020908102919091018101511515909152825460018082018555600094855293829020835160029092020180546001600160a01b03199081166001600160a01b039384161782559284015190850180546040909501519490931691161760ff60a01b1916600160a01b9215159290920291909117905501620002a3565b5060208101518151015b60408201516020830151835101018110156200048d5760046040518060600160405280878481518110620003ca57fe5b60200260200101516001600160a01b03168152602001868481518110620003ed57fe5b60200260200101516001600160a01b031681526020018584815181106200041057fe5b6020908102919091018101511515909152825460018082018555600094855293829020835160029092020180546001600160a01b03199081166001600160a01b039384161782559284015190850180546040909501519490931691161760ff60a01b1916600160a01b92151592909202919091179055016200039a565b5060408101516020820151825101015b6060820151604083015160208401518451010101811015620005965760056040518060600160405280878481518110620004d357fe5b60200260200101516001600160a01b03168152602001868481518110620004f657fe5b60200260200101516001600160a01b031681526020018584815181106200051957fe5b6020908102919091018101511515909152825460018082018555600094855293829020835160029092020180546001600160a01b03199081166001600160a01b039384161782559284015190850180546040909501519490931691161760ff60a01b1916600160a01b92151592909202919091179055016200049d565b50600d5460085460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620005d1929116906000199060040162000ca4565b602060405180830381600087803b158015620005ec57600080fd5b505af115801562000601573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000627919062000c7b565b50600a5460095460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39262000662929116906000199060040162000ca4565b602060405180830381600087803b1580156200067d57600080fd5b505af115801562000692573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b8919062000c7b565b50600c5460095460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620006f3929116906000199060040162000ca4565b602060405180830381600087803b1580156200070e57600080fd5b505af115801562000723573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000749919062000c7b565b506004805460001981019081106200075d57fe5b600091825260209091206001600290920201015460095460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620007a8929116906000199060040162000ca4565b602060405180830381600087803b158015620007c357600080fd5b505af1158015620007d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fe919062000c7b565b506005805460001981019081106200081257fe5b600091825260209091206001600290920201015460095460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926200085d929116906000199060040162000ca4565b602060405180830381600087803b1580156200087857600080fd5b505af11580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062000c7b565b5050505050505062000d04565b8260078101928215620008fb579160200282015b82811115620008fb578251829065ffffffffffff16905591602001919060010190620008d4565b506200090992915062000980565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200095057805160ff1916838001178555620008fb565b82800160010185558215620008fb579182015b82811115620008fb57825182559160200191906001019062000963565b5b8082111562000909576000815560010162000981565b80516001600160a01b0381168114620009af57600080fd5b92915050565b600082601f830112620009c6578081fd5b8151620009dd620009d78262000ce4565b62000cbd565b818152915060208083019084810181840286018201871015620009ff57600080fd5b60005b8481101562000a2a5762000a17888362000997565b8452928201929082019060010162000a02565b505050505092915050565b600082601f83011262000a46578081fd5b815162000a57620009d78262000ce4565b81815291506020808301908481018184028601820187101562000a7957600080fd5b6000805b8581101562000aa9578251801515811462000a96578283fd5b8552938301939183019160010162000a7d565b50505050505092915050565b600082601f83011262000ac6578081fd5b62000ad2608062000cbd565b905080828460808501111562000ae757600080fd5b60005b600481101562000b0b57815183526020928301929091019060010162000aea565b50505092915050565b600082601f83011262000b25578081fd5b81516001600160401b0381111562000b3b578182fd5b602062000b51601f8301601f1916820162000cbd565b9250818352848183860101111562000b6857600080fd5b60005b8281101562000b8857848101820151848201830152810162000b6b565b8281111562000b0b57506000918301015292915050565b600080600080600080610120878903121562000bb9578182fd5b62000bc5888862000997565b60208801519096506001600160401b038082111562000be2578384fd5b62000bf08a838b0162000b14565b9650604089015191508082111562000c06578384fd5b62000c148a838b01620009b5565b9550606089015191508082111562000c2a578384fd5b62000c388a838b01620009b5565b9450608089015191508082111562000c4e578384fd5b5062000c5d89828a0162000a35565b92505062000c6f8860a0890162000ab5565b90509295509295509295565b60006020828403121562000c8d578081fd5b8151801515811462000c9d578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b038111828210171562000cdc57600080fd5b604052919050565b60006001600160401b0382111562000cfa578081fd5b5060209081020190565b6137bc8062000d146000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806361d027b311610151578063caa6fea4116100c3578063dd62ed3e11610087578063dd62ed3e146104c2578063e05e26b2146104d5578063e5328e06146104e8578063ef1b8140146104f0578063f84e902114610503578063f887ea401461051657610269565b8063caa6fea414610481578063cb7956b014610489578063cf57606014610491578063d389800f14610499578063daea85c5146104af57610269565b80638a662b59116101155780638a662b59146104305780638ed5f3731461043857806395d89b411461044b578063a9059cbb14610453578063af640d0f14610466578063b6b55f251461046e57610269565b806361d027b3146103e7578063685c8ca5146103ef57806370a08231146104025780637a4e4ecf1461041557806383ed1b0d1461042857610269565b806323e1d0e8116101ea57806331e244e5116101ae57806331e244e51461038f578063370158ea146103975780634162169f146103b15780634b292cae146103b95780634fa5d854146103cc5780635312ea8e146103d457610269565b806323e1d0e81461035157806324aa95ec1461036457806327d9cf441461036c5780632e1a7d4d14610374578063313ce5671461038757610269565b80631e534906116102315780631e534906146103045780631f1fcd511461030e5780631f4af83f1461032357806321dbe8761461033657806323b872dd1461033e57610269565b806306fdde031461026e578063095ea7b31461028c57806318160ddd146102ac5780631b5f9c42146102c15780631ce75106146102e2575b600080fd5b61027661051e565b604051610283919061324e565b60405180910390f35b61029f61029a366004612e80565b610546565b6040516102839190613243565b6102b46105b1565b6040516102839190613638565b6102d46102cf366004612f7a565b6105b7565b60405161028392919061315e565b6102f56102f0366004612f7a565b6105ec565b60405161028393929190613191565b61030c61062f565b005b6103166106db565b6040516102839190613126565b6102f5610331366004612f7a565b6106ea565b6103166106f7565b61029f61034c366004612e40565b610706565b6102b461035f366004612f7a565b610845565b61030c610859565b6103166109a7565b61030c610382366004612f7a565b6109b6565b6102b4610dad565b61030c610db2565b61039f610ef9565b604051610283969594939291906136f3565b610316611207565b61030c6103c7366004612fd7565b611216565b61030c6112db565b61030c6103e2366004612f7a565b61134c565b610316611562565b61030c6103fd366004612e80565b611571565b6102b4610410366004612df1565b61162d565b61029f610423366004612e80565b61163f565b61029f6117b6565b6103166118cc565b61029f610446366004612df1565b6118db565b6102766119d4565b61029f610461366004612e80565b6119e8565b6102766119fc565b61030c61047c366004612f7a565b611a8a565b61029f611fd2565b610316611fe2565b610316611ff1565b6104a1612000565b604051610283929190613177565b61029f6104bd366004612df1565b612017565b6102b46104d0366004612e0c565b612025565b6102f56104e3366004612f7a565b612042565b6102b461204f565b61030c6104fe366004612f7a565b612208565b6102f5610511366004612f7a565b6122ce565b6103166122db565b6060600660405160200161053291906130ff565b604051602081830303815290604052905090565b3360008181526019602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061059f908690613638565b60405180910390a35060015b92915050565b60075481565b600081815481106105c457fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b600581815481106105f957fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900460ff1683565b60408051600280825260608083018452926020830190803683375050600d5482519293506001600160a01b03169183915060009061066957fe5b6001600160a01b039283166020918202929092010152600854604051633febe83160e11b8152911690637fd7d062906106a6908490600401613230565b600060405180830381600087803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b5050505050565b600d546001600160a01b031681565b600481815481106105f957fe5b600b546001600160a01b031681565b6001600160a01b0383166000908152601860205260408120548211156107475760405162461bcd60e51b815260040161073e90613582565b60405180910390fd5b6001600160a01b038416331480159061078557506001600160a01b038416600090815260196020908152604080832033845290915290205460001914155b156107e5576001600160a01b03841660009081526019602090815260408083203384529091529020548211156107ba57600080fd5b6001600160a01b03841660009081526019602090815260408083203384529091529020805483900390555b6001600160a01b038085166000818152601860205260408082208054879003905592861680825290839020805486019055915160008051602061376783398151915290610833908690613638565b60405180910390a35060019392505050565b6011816007811061085257fe5b0154905081565b600e546001600160a01b031633146108835760405162461bcd60e51b815260040161073e906134fe565b600d54600160a01b900460ff166108ac5760405162461bcd60e51b815260040161073e906134c7565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a08231906108dd903090600401613126565b60206040518083038186803b1580156108f557600080fd5b505afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190612f92565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef2492610965921690859060040161315e565b600060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b5050600d805460ff60a01b19169055505050565b6010546001600160a01b031681565b60015460ff16156109d95760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff1615610a0f5760405162461bcd60e51b815260040161073e90613412565b33600090815260186020526040902054811115610a3e5760405162461bcd60e51b815260040161073e90613582565b610a4661062f565b610a4e6117b6565b15610a5c57610a5c306122ea565b336000818152601860205260408082208054859003905560078054858103909155905190929060008051602061376783398151915290610a9d908690613638565b60405180910390a3600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ad6903090600401613126565b60206040518083038186803b158015610aee57600080fd5b505afa158015610b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb5198092610b6392309290911690600401613177565b60206040518083038186803b158015610b7b57600080fd5b505afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb39190612f92565b90506000610bcb84610bc58785612c63565b90612c9d565b600854600d5460405163f3fef3a360e01b81529293506001600160a01b039182169263f3fef3a392610c03921690859060040161315e565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610c68903090600401613126565b60206040518083038186803b158015610c8057600080fd5b505afa158015610c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb89190612f92565b90506000610cf9856040518060400160405280601081526020016f111a5c9d1e481dda5d1a191c985dd85b60821b81525084612cdf9092919063ffffffff16565b600d5460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90610d2c903390859060040161315e565b602060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190612f5a565b610d9a5760405162461bcd60e51b815260040161073e906135e7565b50506001805460ff191690555050505050565b601290565b600e546001600160a01b03163314610ddc5760405162461bcd60e51b815260040161073e906134fe565b600d54600160a01b900460ff1615610e065760405162461bcd60e51b815260040161073e90613395565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263f3fef3a3921690839063adb5198090610e459030908590600401613177565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190612f92565b6040518363ffffffff1660e01b8152600401610eb292919061315e565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b5050600d805460ff60a01b1916600160a01b1790555050565b600d546040516370a0823160e01b81526000918291829182918291829182916001600160a01b0316906370a0823190610f36903090600401613126565b60206040518083038186803b158015610f4e57600080fd5b505afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190612f92565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263adb5198092610fbd92309290911690600401613177565b60206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190612f92565b019050600060075482670de0b6b3a7640000028161102757fe5b04905060006011600501546011600601540363bbf81e00670de0b6b3a763ffff198401028161105257fe5b60408051600180825281830190925292909104925060609190602080830190803683375050600d5482519293506001600160a01b03169183915060009061109557fe5b6001600160a01b039283166020918202929092010152600854604051630f7e058760e21b81526060929190911690633df8161c906110d99030908690600401613204565b60006040518083038186803b1580156110f157600080fd5b505afa158015611105573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112d9190810190612eaa565b600854600d5460405163015b6a3360e71b81529293508792879287926001600160a01b039182169263adb519809261116c923092911690600401613177565b60206040518083038186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190612f92565b846000815181106111c957fe5b602002602001015160000151856000815181106111e257fe5b6020026020010151602001519a509a509a509a509a509a505050505050909192939495565b600e546001600160a01b031681565b600e546001600160a01b031633146112405760405162461bcd60e51b815260040161073e906134fe565b84601160040155600f80546001600160a01b0319166001600160a01b038416179055620186a084106112845760405162461bcd60e51b815260040161073e906133cc565b6014849055620186a083106112ab5760405162461bcd60e51b815260040161073e906134a4565b6013839055620186a081106112d25760405162461bcd60e51b815260040161073e906133ef565b60125550505050565b60015460ff16156112fe5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055611313336118db565b61132f5760405162461bcd60e51b815260040161073e90613612565b61133761062f565b611340336122ea565b6001805460ff19169055565b60015460ff161561136f5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff166113a45760405162461bcd60e51b815260040161073e90613535565b336000908152601860205260409020548111156113d35760405162461bcd60e51b815260040161073e90613582565b6007805433600081815260186020526040808220805487900390558454869003909455925191929160008051602061376783398151915290611416908690613638565b60405180910390a3600d546040516370a0823160e01b81526000916001600160a01b0316906370a082319061144f903090600401613126565b60206040518083038186803b15801561146757600080fd5b505afa15801561147b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149f9190612f92565b905060006114b183610bc58685612c63565b600d5460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906114e4903390859060040161315e565b602060405180830381600087803b1580156114fe57600080fd5b505af1158015611512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115369190612f5a565b6115525760405162461bcd60e51b815260040161073e906135e7565b50506001805460ff191690555050565b600f546001600160a01b031681565b600e546001600160a01b0316331461159b5760405162461bcd60e51b815260040161073e906134fe565b604080518082019091526001600160a01b039283168152602081019182526000805460018101825590805290517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b0319169190941617909255517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56490910155565b60186020526000908152604090205481565b600e546000906001600160a01b0316331461166c5760405162461bcd60e51b815260040161073e906134fe565b600d546001600160a01b038481169116141561169a5760405162461bcd60e51b815260040161073e906135b0565b6001600160a01b03831661171257600e546040516001600160a01b039091169083906116c590613123565b60006040518083038185875af1925050503d8060008114611702576040519150601f19603f3d011682016040523d82523d6000602084013e611707565b606091505b5050809150506105ab565b6001600160a01b038316156117ae57600e5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb926117559290911690869060040161315e565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612f5a565b90506105ab565b5060006105ab565b601554600a546040516370a0823160e01b8152600092916001600160a01b0316906370a08231906117eb903090600401613126565b60206040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190612f92565b11806118c75750601554600c546040516370a0823160e01b81526001600160a01b03909116906370a0823190611875903090600401613126565b60206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c59190612f92565b115b905090565b600a546001600160a01b031681565b600080546118eb575060016119cf565b60005b6000548110156119c9576000818154811061190557fe5b9060005260206000209060020201600101546000828154811061192457fe5b60009182526020909120600290910201546040516370a0823160e01b81526001600160a01b03909116906370a0823190611962908790600401613126565b60206040518083038186803b15801561197a57600080fd5b505afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190612f92565b106119c15760019150506119cf565b6001016118ee565b50600090505b919050565b6060600660405160200161053291906130e4565b60006119f5338484610706565b9392505050565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611a825780601f10611a5757610100808354040283529160200191611a82565b820191906000526020600020905b815481529060010190602001808311611a6557829003601f168201915b505050505081565b60015460ff1615611aad5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff1615611ae35760405162461bcd60e51b815260040161073e90613323565b611aeb61062f565b611af36117b6565b15611b0157611b01306122ea565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611b32903090600401613126565b60206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb5198092611bbf92309290911690600401613177565b60206040518083038186803b158015611bd757600080fd5b505afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190612f92565b600d546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd90611c449033903090889060040161313a565b602060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190612f5a565b611cb25760405162461bcd60e51b815260040161073e9061336a565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611ce3903090600401613126565b60206040518083038186803b158015611cfb57600080fd5b505afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d339190612f92565b90506000611d71846040518060400160405280600d81526020016c111a5c9d1e4819195c1bdcda5d609a1b81525084612cdf9092919063ffffffff16565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef2492611da9921690859060040161315e565b600060405180830381600087803b158015611dc357600080fd5b505af1158015611dd7573d6000803e3d6000fd5b5050600854600d5460405163015b6a3360e71b8152600094506001600160a01b03928316935063adb5198092611e14923092911690600401613177565b60206040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190612f92565b90506000611ea0856040518060400160405280600b81526020016a4469727479207374616b6560a81b81525084612cdf9092919063ffffffff16565b905060008060075411611eb557508080611ed2565b611ece86610bc560075485612c6390919063ffffffff16565b9050805b50600780548201905560125460009015611f1657611eef336118db565b611f1057611f0b620f4240610bc5601160015b01548590612c63565b611f13565b60005b90505b8015611f6d57600f80546001600160a01b0390811660009081526018602052604080822080548601905592549251929091169160008051602061376783398151915290611f64908590613638565b60405180910390a35b611f778282612d0b565b336000818152601860205260408120805490930190925590600080516020613767833981519152611fa88585612d0b565b604051611fb59190613638565b60405180910390a350506001805460ff1916905550505050505050565b600d54600160a01b900460ff1681565b6008546001600160a01b031681565b600c546001600160a01b031681565b600a54600c546001600160a01b0391821691169091565b60006105ab82600019610546565b601960209081526000928352604080842090915290825290205481565b600281815481106105f957fe5b601054600d546040516370a0823160e01b81526000926001600160a01b039081169284929116906370a082319061208a903090600401613126565b60206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190612f92565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263adb519809261211192309290911690600401613177565b60206040518083038186803b15801561212957600080fd5b505afa15801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121619190612f92565b600d54604051633328130560e01b815292909101925061220191670de0b6b3a764000091610bc59185916001600160a01b03808916926333281305926121ab921690600401613126565b60206040518083038186803b1580156121c357600080fd5b505afa1580156121d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fb9190612f92565b90612c63565b9250505090565b600e546001600160a01b031633146122325760405162461bcd60e51b815260040161073e906134fe565b60008054600019810190811061224457fe5b90600052602060002090600202016000828154811061225f57fe5b600091825260208220835460029092020180546001600160a01b0319166001600160a01b039092169190911781556001928301549201919091558054806122a257fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560010155905550565b600381815481106105f957fe5b6009546001600160a01b031681565b600d54600160a01b900460ff16156123145760405162461bcd60e51b815260040161073e90613412565b61231c6117b6565b6123385760405162461bcd60e51b815260040161073e906132a1565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612369903090600401613126565b60206040518083038186803b15801561238157600080fd5b505afa158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190612f92565b600c546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906123ef903090600401613126565b60206040518083038186803b15801561240757600080fd5b505afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f9190612f92565b601554909150821115612537576009546001600160a01b0316636cc1ae13612468846002612c9d565b6001600230426040518663ffffffff1660e01b815260040161248e959493929190613641565b600060405180830381600087803b1580156124a857600080fd5b505af11580156124bc573d6000803e3d6000fd5b50506009546001600160a01b03169150636cc1ae1390506124de846002612c9d565b6001600330426040518663ffffffff1660e01b8152600401612504959493929190613641565b600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b505050505b60155481111561262c576009546001600160a01b0316636cc1ae1361255d836002612c9d565b6001600430426040518663ffffffff1660e01b8152600401612583959493929190613641565b600060405180830381600087803b15801561259d57600080fd5b505af11580156125b1573d6000803e3d6000fd5b50506009546001600160a01b03169150636cc1ae1390506125d3836002612c9d565b6001600530426040518663ffffffff1660e01b81526004016125f9959493929190613641565b600060405180830381600087803b15801561261357600080fd5b505af1158015612627573d6000803e3d6000fd5b505050505b600954600480546001600160a01b0390921691635a47ddc39190600019810190811061265457fe5b6000918252602090912060016002909202010154600580546001600160a01b0390921691600019810190811061268657fe5b60009182526020822060016002909202010154600480546001600160a01b03909216929160001981019081106126b857fe5b60009182526020909120600160029092020101546040516370a0823160e01b81526001600160a01b03909116906370a08231906126f9903090600401613126565b60206040518083038186803b15801561271157600080fd5b505afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612f92565b60058054600019810190811061275b57fe5b60009182526020909120600160029092020101546040516370a0823160e01b81526001600160a01b03909116906370a082319061279c903090600401613126565b60206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ec9190612f92565b60018030426040518a63ffffffff1660e01b8152600401612815999897969594939291906131b5565b606060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128679190612faa565b5050600d546040516370a0823160e01b8152600092506001600160a01b03909116906370a082319061289d903090600401613126565b60206040518083038186803b1580156128b557600080fd5b505afa1580156128c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ed9190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb519809261292a92309290911690600401613177565b60206040518083038186803b15801561294257600080fd5b505afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a9190612f92565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef24926129b2921690869060040161315e565b600060405180830381600087803b1580156129cc57600080fd5b505af11580156129e0573d6000803e3d6000fd5b5050600854600d5460405163015b6a3360e71b8152600094506001600160a01b03928316935063adb5198092612a1d923092911690600401613177565b60206040518083038186803b158015612a3557600080fd5b505afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190612f92565b90506000612aa9836040518060400160405280600b81526020016a4469727479207374616b6560a81b81525084612cdf9092919063ffffffff16565b90506000601160050154612ac6574267ffffffffffffffff166016555b4267ffffffffffffffff16601755600754612ae357508080612b00565b612afc84610bc560075485612c6390919063ffffffff16565b9050805b50612b18620f4240610bc56011600201548490612c63565b600f546001600160a01b039081166000908152601860205260408120805490930190925589163014612b4a5788612b57565b600f546001600160a01b03165b9050612b6c620f4240610bc560116003611f02565b6001600160a01b038216600090815260186020526040902080549091019055612bc2612ba5620f4240610bc56011600301548690612c63565b612bbc620f4240610bc56011600201548790612c63565b90612d4d565b600780549091019055600f546001600160a01b03166000600080516020613767833981519152612c00620f4240610bc5601160025b01548890612c63565b604051612c0d9190613638565b60405180910390a36001600160a01b0381166000600080516020613767833981519152612c43620f4240610bc560116003612bf7565b604051612c509190613638565b60405180910390a3505050505050505050565b600082612c72575060006105ab565b82820282848281612c7f57fe5b04146119f55760405162461bcd60e51b815260040161073e90613463565b60006119f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d72565b60008184841115612d035760405162461bcd60e51b815260040161073e919061324e565b505050900390565b60006119f583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cdf565b6000828201838110156119f55760405162461bcd60e51b815260040161073e906132ec565b60008183612d935760405162461bcd60e51b815260040161073e919061324e565b506000838581612d9f57fe5b0495945050505050565b80356001600160a01b03811681146105ab57600080fd5b600060408284031215612dd1578081fd5b612ddb604061371b565b9050815181526020820151602082015292915050565b600060208284031215612e02578081fd5b6119f58383612da9565b60008060408385031215612e1e578081fd5b612e288484612da9565b9150612e378460208501612da9565b90509250929050565b600080600060608486031215612e54578081fd5b8335612e5f8161374e565b92506020840135612e6f8161374e565b929592945050506040919091013590565b60008060408385031215612e92578182fd5b612e9c8484612da9565b946020939093013593505050565b60006020808385031215612ebc578182fd5b825167ffffffffffffffff80821115612ed3578384fd5b818501915085601f830112612ee6578384fd5b815181811115612ef4578485fd5b612f01848583020161371b565b81815284810192508385016040808402860187018a1015612f20578788fd5b8795505b83861015612f4c57612f368a83612dc0565b8552600195909501949386019390810190612f24565b509098975050505050505050565b600060208284031215612f6b578081fd5b815180151581146119f5578182fd5b600060208284031215612f8b578081fd5b5035919050565b600060208284031215612fa3578081fd5b5051919050565b600080600060608486031215612fbe578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612fee578081fd5b85359450602086013593506040860135925061300d8760608801612da9565b949793965091946080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156130635781516001600160a01b03168752958201959082019060010161303e565b509495945050505050565b15159052565b6000815460018082166000811461309257600181146130a9576130db565b60ff198316865260028304607f16860193506130db565b600283048560005260208060002060005b838110156130d35781548a8201529085019082016130ba565b505050860193505b50505092915050565b600065475241494e2360d01b82526119f56006830184613074565b60006e66746d2e677572752f475241494e2f60881b82526119f5600f830184613074565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b03998a168152978916602089015295151560408801526060870194909452608086019290925260a085015260c084015290921660e08201526101008101919091526101200190565b6001600160a01b03831681526040602082018190526000906132289083018461302b565b949350505050565b6000602082526119f5602083018461302b565b901515815260200190565b6000602080835283518082850152825b8181101561327a5785810183015185820160400152820161325e565b8181111561328b5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601490820152734e6f74206d75636820776f726b20746f20646f2160601b604082015260600190565b60208082526003908201526221524760e81b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526027908201527f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460408201526632b837b9b4ba1760c91b606082015260800190565b602080825260119082015270155b98589b19481d1bc81bdb989bd85c99607a1b604082015260600190565b6020808252601b908201527f456d657267656e637920616c7265616479206465636c617265642e0000000000604082015260600190565b602080825260099082015268042eed27440d0d2ced60bb1b604082015260600190565b602080825260099082015268042c8cc7440d0d2ced60bb1b604082015260600190565b60208082526031908201527f49747320616e20656d657267656e63792e2055736520656d657267656e63795760408201527034ba34323930bb941490383632b0b9b29760791b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260099082015268042e0cc7440d0d2ced60bb1b604082015260600190565b60208082526017908201527f456d657267656e6379206e6f74206465636c617265642e000000000000000000604082015260600190565b6020808252601f908201527f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2c20706c656173652100604082015260600190565b6020808252602d908201527f497473206e6f7420616e20656d657267656e63792e205573652077697468647260408201526c30bb94149034b739ba32b0b21760991b606082015260800190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b6020808252601c908201527f46756e647320617265205361667520696e20656d657267656e63792100000000604082015260600190565b602080825260119082015270155b98589b19481d1bc81919589bd85c99607a1b604082015260600190565b6020808252600c908201526b456c69746573206f6e6c792160a01b604082015260600190565b90815260200190565b600060a0808301888452602088818601526040838187015282895480855260c0880191508a87528387209450865b818110156136cc5761368a836136858854613742565b61301e565b60018601546136a48487016001600160a01b03831661301e565b6136b585850160ff838b1c1661306e565b50600295909501946060929092019160010161366f565b505080955050505050506136e3606083018561301e565b8260808301529695505050505050565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405181810167ffffffffffffffff8111828210171561373a57600080fd5b604052919050565b6001600160a01b031690565b6001600160a01b038116811461376357600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c55278ae9a4ff74872847ae6b17cf6b98420be4f7a932da651b42269865b59ed64736f6c634300060c0033000000000000000000000000b0d9b878edece2019d4c57bd34c6f8c169c860f200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000435323032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a2000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a20000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d700000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a188200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a188200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102695760003560e01c806361d027b311610151578063caa6fea4116100c3578063dd62ed3e11610087578063dd62ed3e146104c2578063e05e26b2146104d5578063e5328e06146104e8578063ef1b8140146104f0578063f84e902114610503578063f887ea401461051657610269565b8063caa6fea414610481578063cb7956b014610489578063cf57606014610491578063d389800f14610499578063daea85c5146104af57610269565b80638a662b59116101155780638a662b59146104305780638ed5f3731461043857806395d89b411461044b578063a9059cbb14610453578063af640d0f14610466578063b6b55f251461046e57610269565b806361d027b3146103e7578063685c8ca5146103ef57806370a08231146104025780637a4e4ecf1461041557806383ed1b0d1461042857610269565b806323e1d0e8116101ea57806331e244e5116101ae57806331e244e51461038f578063370158ea146103975780634162169f146103b15780634b292cae146103b95780634fa5d854146103cc5780635312ea8e146103d457610269565b806323e1d0e81461035157806324aa95ec1461036457806327d9cf441461036c5780632e1a7d4d14610374578063313ce5671461038757610269565b80631e534906116102315780631e534906146103045780631f1fcd511461030e5780631f4af83f1461032357806321dbe8761461033657806323b872dd1461033e57610269565b806306fdde031461026e578063095ea7b31461028c57806318160ddd146102ac5780631b5f9c42146102c15780631ce75106146102e2575b600080fd5b61027661051e565b604051610283919061324e565b60405180910390f35b61029f61029a366004612e80565b610546565b6040516102839190613243565b6102b46105b1565b6040516102839190613638565b6102d46102cf366004612f7a565b6105b7565b60405161028392919061315e565b6102f56102f0366004612f7a565b6105ec565b60405161028393929190613191565b61030c61062f565b005b6103166106db565b6040516102839190613126565b6102f5610331366004612f7a565b6106ea565b6103166106f7565b61029f61034c366004612e40565b610706565b6102b461035f366004612f7a565b610845565b61030c610859565b6103166109a7565b61030c610382366004612f7a565b6109b6565b6102b4610dad565b61030c610db2565b61039f610ef9565b604051610283969594939291906136f3565b610316611207565b61030c6103c7366004612fd7565b611216565b61030c6112db565b61030c6103e2366004612f7a565b61134c565b610316611562565b61030c6103fd366004612e80565b611571565b6102b4610410366004612df1565b61162d565b61029f610423366004612e80565b61163f565b61029f6117b6565b6103166118cc565b61029f610446366004612df1565b6118db565b6102766119d4565b61029f610461366004612e80565b6119e8565b6102766119fc565b61030c61047c366004612f7a565b611a8a565b61029f611fd2565b610316611fe2565b610316611ff1565b6104a1612000565b604051610283929190613177565b61029f6104bd366004612df1565b612017565b6102b46104d0366004612e0c565b612025565b6102f56104e3366004612f7a565b612042565b6102b461204f565b61030c6104fe366004612f7a565b612208565b6102f5610511366004612f7a565b6122ce565b6103166122db565b6060600660405160200161053291906130ff565b604051602081830303815290604052905090565b3360008181526019602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061059f908690613638565b60405180910390a35060015b92915050565b60075481565b600081815481106105c457fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b600581815481106105f957fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900460ff1683565b60408051600280825260608083018452926020830190803683375050600d5482519293506001600160a01b03169183915060009061066957fe5b6001600160a01b039283166020918202929092010152600854604051633febe83160e11b8152911690637fd7d062906106a6908490600401613230565b600060405180830381600087803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b5050505050565b600d546001600160a01b031681565b600481815481106105f957fe5b600b546001600160a01b031681565b6001600160a01b0383166000908152601860205260408120548211156107475760405162461bcd60e51b815260040161073e90613582565b60405180910390fd5b6001600160a01b038416331480159061078557506001600160a01b038416600090815260196020908152604080832033845290915290205460001914155b156107e5576001600160a01b03841660009081526019602090815260408083203384529091529020548211156107ba57600080fd5b6001600160a01b03841660009081526019602090815260408083203384529091529020805483900390555b6001600160a01b038085166000818152601860205260408082208054879003905592861680825290839020805486019055915160008051602061376783398151915290610833908690613638565b60405180910390a35060019392505050565b6011816007811061085257fe5b0154905081565b600e546001600160a01b031633146108835760405162461bcd60e51b815260040161073e906134fe565b600d54600160a01b900460ff166108ac5760405162461bcd60e51b815260040161073e906134c7565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a08231906108dd903090600401613126565b60206040518083038186803b1580156108f557600080fd5b505afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190612f92565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef2492610965921690859060040161315e565b600060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b5050600d805460ff60a01b19169055505050565b6010546001600160a01b031681565b60015460ff16156109d95760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff1615610a0f5760405162461bcd60e51b815260040161073e90613412565b33600090815260186020526040902054811115610a3e5760405162461bcd60e51b815260040161073e90613582565b610a4661062f565b610a4e6117b6565b15610a5c57610a5c306122ea565b336000818152601860205260408082208054859003905560078054858103909155905190929060008051602061376783398151915290610a9d908690613638565b60405180910390a3600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ad6903090600401613126565b60206040518083038186803b158015610aee57600080fd5b505afa158015610b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb5198092610b6392309290911690600401613177565b60206040518083038186803b158015610b7b57600080fd5b505afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb39190612f92565b90506000610bcb84610bc58785612c63565b90612c9d565b600854600d5460405163f3fef3a360e01b81529293506001600160a01b039182169263f3fef3a392610c03921690859060040161315e565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610c68903090600401613126565b60206040518083038186803b158015610c8057600080fd5b505afa158015610c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb89190612f92565b90506000610cf9856040518060400160405280601081526020016f111a5c9d1e481dda5d1a191c985dd85b60821b81525084612cdf9092919063ffffffff16565b600d5460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90610d2c903390859060040161315e565b602060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190612f5a565b610d9a5760405162461bcd60e51b815260040161073e906135e7565b50506001805460ff191690555050505050565b601290565b600e546001600160a01b03163314610ddc5760405162461bcd60e51b815260040161073e906134fe565b600d54600160a01b900460ff1615610e065760405162461bcd60e51b815260040161073e90613395565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263f3fef3a3921690839063adb5198090610e459030908590600401613177565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190612f92565b6040518363ffffffff1660e01b8152600401610eb292919061315e565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b5050600d805460ff60a01b1916600160a01b1790555050565b600d546040516370a0823160e01b81526000918291829182918291829182916001600160a01b0316906370a0823190610f36903090600401613126565b60206040518083038186803b158015610f4e57600080fd5b505afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190612f92565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263adb5198092610fbd92309290911690600401613177565b60206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190612f92565b019050600060075482670de0b6b3a7640000028161102757fe5b04905060006011600501546011600601540363bbf81e00670de0b6b3a763ffff198401028161105257fe5b60408051600180825281830190925292909104925060609190602080830190803683375050600d5482519293506001600160a01b03169183915060009061109557fe5b6001600160a01b039283166020918202929092010152600854604051630f7e058760e21b81526060929190911690633df8161c906110d99030908690600401613204565b60006040518083038186803b1580156110f157600080fd5b505afa158015611105573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112d9190810190612eaa565b600854600d5460405163015b6a3360e71b81529293508792879287926001600160a01b039182169263adb519809261116c923092911690600401613177565b60206040518083038186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190612f92565b846000815181106111c957fe5b602002602001015160000151856000815181106111e257fe5b6020026020010151602001519a509a509a509a509a509a505050505050909192939495565b600e546001600160a01b031681565b600e546001600160a01b031633146112405760405162461bcd60e51b815260040161073e906134fe565b84601160040155600f80546001600160a01b0319166001600160a01b038416179055620186a084106112845760405162461bcd60e51b815260040161073e906133cc565b6014849055620186a083106112ab5760405162461bcd60e51b815260040161073e906134a4565b6013839055620186a081106112d25760405162461bcd60e51b815260040161073e906133ef565b60125550505050565b60015460ff16156112fe5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055611313336118db565b61132f5760405162461bcd60e51b815260040161073e90613612565b61133761062f565b611340336122ea565b6001805460ff19169055565b60015460ff161561136f5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff166113a45760405162461bcd60e51b815260040161073e90613535565b336000908152601860205260409020548111156113d35760405162461bcd60e51b815260040161073e90613582565b6007805433600081815260186020526040808220805487900390558454869003909455925191929160008051602061376783398151915290611416908690613638565b60405180910390a3600d546040516370a0823160e01b81526000916001600160a01b0316906370a082319061144f903090600401613126565b60206040518083038186803b15801561146757600080fd5b505afa15801561147b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149f9190612f92565b905060006114b183610bc58685612c63565b600d5460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906114e4903390859060040161315e565b602060405180830381600087803b1580156114fe57600080fd5b505af1158015611512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115369190612f5a565b6115525760405162461bcd60e51b815260040161073e906135e7565b50506001805460ff191690555050565b600f546001600160a01b031681565b600e546001600160a01b0316331461159b5760405162461bcd60e51b815260040161073e906134fe565b604080518082019091526001600160a01b039283168152602081019182526000805460018101825590805290517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b0319169190941617909255517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56490910155565b60186020526000908152604090205481565b600e546000906001600160a01b0316331461166c5760405162461bcd60e51b815260040161073e906134fe565b600d546001600160a01b038481169116141561169a5760405162461bcd60e51b815260040161073e906135b0565b6001600160a01b03831661171257600e546040516001600160a01b039091169083906116c590613123565b60006040518083038185875af1925050503d8060008114611702576040519150601f19603f3d011682016040523d82523d6000602084013e611707565b606091505b5050809150506105ab565b6001600160a01b038316156117ae57600e5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb926117559290911690869060040161315e565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612f5a565b90506105ab565b5060006105ab565b601554600a546040516370a0823160e01b8152600092916001600160a01b0316906370a08231906117eb903090600401613126565b60206040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190612f92565b11806118c75750601554600c546040516370a0823160e01b81526001600160a01b03909116906370a0823190611875903090600401613126565b60206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c59190612f92565b115b905090565b600a546001600160a01b031681565b600080546118eb575060016119cf565b60005b6000548110156119c9576000818154811061190557fe5b9060005260206000209060020201600101546000828154811061192457fe5b60009182526020909120600290910201546040516370a0823160e01b81526001600160a01b03909116906370a0823190611962908790600401613126565b60206040518083038186803b15801561197a57600080fd5b505afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190612f92565b106119c15760019150506119cf565b6001016118ee565b50600090505b919050565b6060600660405160200161053291906130e4565b60006119f5338484610706565b9392505050565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611a825780601f10611a5757610100808354040283529160200191611a82565b820191906000526020600020905b815481529060010190602001808311611a6557829003601f168201915b505050505081565b60015460ff1615611aad5760405162461bcd60e51b815260040161073e906132cf565b6001805460ff191681179055600d54600160a01b900460ff1615611ae35760405162461bcd60e51b815260040161073e90613323565b611aeb61062f565b611af36117b6565b15611b0157611b01306122ea565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611b32903090600401613126565b60206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb5198092611bbf92309290911690600401613177565b60206040518083038186803b158015611bd757600080fd5b505afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190612f92565b600d546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd90611c449033903090889060040161313a565b602060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190612f5a565b611cb25760405162461bcd60e51b815260040161073e9061336a565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611ce3903090600401613126565b60206040518083038186803b158015611cfb57600080fd5b505afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d339190612f92565b90506000611d71846040518060400160405280600d81526020016c111a5c9d1e4819195c1bdcda5d609a1b81525084612cdf9092919063ffffffff16565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef2492611da9921690859060040161315e565b600060405180830381600087803b158015611dc357600080fd5b505af1158015611dd7573d6000803e3d6000fd5b5050600854600d5460405163015b6a3360e71b8152600094506001600160a01b03928316935063adb5198092611e14923092911690600401613177565b60206040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190612f92565b90506000611ea0856040518060400160405280600b81526020016a4469727479207374616b6560a81b81525084612cdf9092919063ffffffff16565b905060008060075411611eb557508080611ed2565b611ece86610bc560075485612c6390919063ffffffff16565b9050805b50600780548201905560125460009015611f1657611eef336118db565b611f1057611f0b620f4240610bc5601160015b01548590612c63565b611f13565b60005b90505b8015611f6d57600f80546001600160a01b0390811660009081526018602052604080822080548601905592549251929091169160008051602061376783398151915290611f64908590613638565b60405180910390a35b611f778282612d0b565b336000818152601860205260408120805490930190925590600080516020613767833981519152611fa88585612d0b565b604051611fb59190613638565b60405180910390a350506001805460ff1916905550505050505050565b600d54600160a01b900460ff1681565b6008546001600160a01b031681565b600c546001600160a01b031681565b600a54600c546001600160a01b0391821691169091565b60006105ab82600019610546565b601960209081526000928352604080842090915290825290205481565b600281815481106105f957fe5b601054600d546040516370a0823160e01b81526000926001600160a01b039081169284929116906370a082319061208a903090600401613126565b60206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190612f92565b600854600d5460405163015b6a3360e71b81526001600160a01b039283169263adb519809261211192309290911690600401613177565b60206040518083038186803b15801561212957600080fd5b505afa15801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121619190612f92565b600d54604051633328130560e01b815292909101925061220191670de0b6b3a764000091610bc59185916001600160a01b03808916926333281305926121ab921690600401613126565b60206040518083038186803b1580156121c357600080fd5b505afa1580156121d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fb9190612f92565b90612c63565b9250505090565b600e546001600160a01b031633146122325760405162461bcd60e51b815260040161073e906134fe565b60008054600019810190811061224457fe5b90600052602060002090600202016000828154811061225f57fe5b600091825260208220835460029092020180546001600160a01b0319166001600160a01b039092169190911781556001928301549201919091558054806122a257fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560010155905550565b600381815481106105f957fe5b6009546001600160a01b031681565b600d54600160a01b900460ff16156123145760405162461bcd60e51b815260040161073e90613412565b61231c6117b6565b6123385760405162461bcd60e51b815260040161073e906132a1565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612369903090600401613126565b60206040518083038186803b15801561238157600080fd5b505afa158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190612f92565b600c546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906123ef903090600401613126565b60206040518083038186803b15801561240757600080fd5b505afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f9190612f92565b601554909150821115612537576009546001600160a01b0316636cc1ae13612468846002612c9d565b6001600230426040518663ffffffff1660e01b815260040161248e959493929190613641565b600060405180830381600087803b1580156124a857600080fd5b505af11580156124bc573d6000803e3d6000fd5b50506009546001600160a01b03169150636cc1ae1390506124de846002612c9d565b6001600330426040518663ffffffff1660e01b8152600401612504959493929190613641565b600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b505050505b60155481111561262c576009546001600160a01b0316636cc1ae1361255d836002612c9d565b6001600430426040518663ffffffff1660e01b8152600401612583959493929190613641565b600060405180830381600087803b15801561259d57600080fd5b505af11580156125b1573d6000803e3d6000fd5b50506009546001600160a01b03169150636cc1ae1390506125d3836002612c9d565b6001600530426040518663ffffffff1660e01b81526004016125f9959493929190613641565b600060405180830381600087803b15801561261357600080fd5b505af1158015612627573d6000803e3d6000fd5b505050505b600954600480546001600160a01b0390921691635a47ddc39190600019810190811061265457fe5b6000918252602090912060016002909202010154600580546001600160a01b0390921691600019810190811061268657fe5b60009182526020822060016002909202010154600480546001600160a01b03909216929160001981019081106126b857fe5b60009182526020909120600160029092020101546040516370a0823160e01b81526001600160a01b03909116906370a08231906126f9903090600401613126565b60206040518083038186803b15801561271157600080fd5b505afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612f92565b60058054600019810190811061275b57fe5b60009182526020909120600160029092020101546040516370a0823160e01b81526001600160a01b03909116906370a082319061279c903090600401613126565b60206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ec9190612f92565b60018030426040518a63ffffffff1660e01b8152600401612815999897969594939291906131b5565b606060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128679190612faa565b5050600d546040516370a0823160e01b8152600092506001600160a01b03909116906370a082319061289d903090600401613126565b60206040518083038186803b1580156128b557600080fd5b505afa1580156128c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ed9190612f92565b600854600d5460405163015b6a3360e71b81529293506000926001600160a01b039283169263adb519809261292a92309290911690600401613177565b60206040518083038186803b15801561294257600080fd5b505afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a9190612f92565b600854600d546040516311f9fbc960e21b81529293506001600160a01b03918216926347e7ef24926129b2921690869060040161315e565b600060405180830381600087803b1580156129cc57600080fd5b505af11580156129e0573d6000803e3d6000fd5b5050600854600d5460405163015b6a3360e71b8152600094506001600160a01b03928316935063adb5198092612a1d923092911690600401613177565b60206040518083038186803b158015612a3557600080fd5b505afa158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190612f92565b90506000612aa9836040518060400160405280600b81526020016a4469727479207374616b6560a81b81525084612cdf9092919063ffffffff16565b90506000601160050154612ac6574267ffffffffffffffff166016555b4267ffffffffffffffff16601755600754612ae357508080612b00565b612afc84610bc560075485612c6390919063ffffffff16565b9050805b50612b18620f4240610bc56011600201548490612c63565b600f546001600160a01b039081166000908152601860205260408120805490930190925589163014612b4a5788612b57565b600f546001600160a01b03165b9050612b6c620f4240610bc560116003611f02565b6001600160a01b038216600090815260186020526040902080549091019055612bc2612ba5620f4240610bc56011600301548690612c63565b612bbc620f4240610bc56011600201548790612c63565b90612d4d565b600780549091019055600f546001600160a01b03166000600080516020613767833981519152612c00620f4240610bc5601160025b01548890612c63565b604051612c0d9190613638565b60405180910390a36001600160a01b0381166000600080516020613767833981519152612c43620f4240610bc560116003612bf7565b604051612c509190613638565b60405180910390a3505050505050505050565b600082612c72575060006105ab565b82820282848281612c7f57fe5b04146119f55760405162461bcd60e51b815260040161073e90613463565b60006119f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d72565b60008184841115612d035760405162461bcd60e51b815260040161073e919061324e565b505050900390565b60006119f583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cdf565b6000828201838110156119f55760405162461bcd60e51b815260040161073e906132ec565b60008183612d935760405162461bcd60e51b815260040161073e919061324e565b506000838581612d9f57fe5b0495945050505050565b80356001600160a01b03811681146105ab57600080fd5b600060408284031215612dd1578081fd5b612ddb604061371b565b9050815181526020820151602082015292915050565b600060208284031215612e02578081fd5b6119f58383612da9565b60008060408385031215612e1e578081fd5b612e288484612da9565b9150612e378460208501612da9565b90509250929050565b600080600060608486031215612e54578081fd5b8335612e5f8161374e565b92506020840135612e6f8161374e565b929592945050506040919091013590565b60008060408385031215612e92578182fd5b612e9c8484612da9565b946020939093013593505050565b60006020808385031215612ebc578182fd5b825167ffffffffffffffff80821115612ed3578384fd5b818501915085601f830112612ee6578384fd5b815181811115612ef4578485fd5b612f01848583020161371b565b81815284810192508385016040808402860187018a1015612f20578788fd5b8795505b83861015612f4c57612f368a83612dc0565b8552600195909501949386019390810190612f24565b509098975050505050505050565b600060208284031215612f6b578081fd5b815180151581146119f5578182fd5b600060208284031215612f8b578081fd5b5035919050565b600060208284031215612fa3578081fd5b5051919050565b600080600060608486031215612fbe578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612fee578081fd5b85359450602086013593506040860135925061300d8760608801612da9565b949793965091946080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156130635781516001600160a01b03168752958201959082019060010161303e565b509495945050505050565b15159052565b6000815460018082166000811461309257600181146130a9576130db565b60ff198316865260028304607f16860193506130db565b600283048560005260208060002060005b838110156130d35781548a8201529085019082016130ba565b505050860193505b50505092915050565b600065475241494e2360d01b82526119f56006830184613074565b60006e66746d2e677572752f475241494e2f60881b82526119f5600f830184613074565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b03998a168152978916602089015295151560408801526060870194909452608086019290925260a085015260c084015290921660e08201526101008101919091526101200190565b6001600160a01b03831681526040602082018190526000906132289083018461302b565b949350505050565b6000602082526119f5602083018461302b565b901515815260200190565b6000602080835283518082850152825b8181101561327a5785810183015185820160400152820161325e565b8181111561328b5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601490820152734e6f74206d75636820776f726b20746f20646f2160601b604082015260600190565b60208082526003908201526221524760e81b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526027908201527f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460408201526632b837b9b4ba1760c91b606082015260800190565b602080825260119082015270155b98589b19481d1bc81bdb989bd85c99607a1b604082015260600190565b6020808252601b908201527f456d657267656e637920616c7265616479206465636c617265642e0000000000604082015260600190565b602080825260099082015268042eed27440d0d2ced60bb1b604082015260600190565b602080825260099082015268042c8cc7440d0d2ced60bb1b604082015260600190565b60208082526031908201527f49747320616e20656d657267656e63792e2055736520656d657267656e63795760408201527034ba34323930bb941490383632b0b9b29760791b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260099082015268042e0cc7440d0d2ced60bb1b604082015260600190565b60208082526017908201527f456d657267656e6379206e6f74206465636c617265642e000000000000000000604082015260600190565b6020808252601f908201527f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2c20706c656173652100604082015260600190565b6020808252602d908201527f497473206e6f7420616e20656d657267656e63792e205573652077697468647260408201526c30bb94149034b739ba32b0b21760991b606082015260800190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b6020808252601c908201527f46756e647320617265205361667520696e20656d657267656e63792100000000604082015260600190565b602080825260119082015270155b98589b19481d1bc81919589bd85c99607a1b604082015260600190565b6020808252600c908201526b456c69746573206f6e6c792160a01b604082015260600190565b90815260200190565b600060a0808301888452602088818601526040838187015282895480855260c0880191508a87528387209450865b818110156136cc5761368a836136858854613742565b61301e565b60018601546136a48487016001600160a01b03831661301e565b6136b585850160ff838b1c1661306e565b50600295909501946060929092019160010161366f565b505080955050505050506136e3606083018561301e565b8260808301529695505050505050565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405181810167ffffffffffffffff8111828210171561373a57600080fd5b604052919050565b6001600160a01b031690565b6001600160a01b038116811461376357600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c55278ae9a4ff74872847ae6b17cf6b98420be4f7a932da651b42269865b59ed64736f6c634300060c0033

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

000000000000000000000000b0d9b878edece2019d4c57bd34c6f8c169c860f200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000435323032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a2000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a20000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d700000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a188200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a188200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _w (address): 0xb0D9B878edEce2019D4c57bD34c6f8c169c860F2
Arg [1] : _i (string): 5202
Arg [2] : _rd0f (address[]): 0x888EF71766ca594DED1F0FA3AE64eD2941740A20,0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,0x888EF71766ca594DED1F0FA3AE64eD2941740A20,0xD31Fcd1f7Ba190dBc75354046F6024A9b86014d7,0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,0xD31Fcd1f7Ba190dBc75354046F6024A9b86014d7
Arg [3] : _rd0t (address[]): 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,0xf43Cc235E686d7BC513F53Fbffb61F760c3a1882,0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,0xf43Cc235E686d7BC513F53Fbffb61F760c3a1882,0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83
Arg [4] : _rd0s (bool[]): False,False,False,False,False,False
Arg [5] : _si (uint256[4]): 2,1,2,1

-----Encoded View---------------
32 Constructor Arguments found :
Arg [0] : 000000000000000000000000b0d9b878edece2019d4c57bd34c6f8c169c860f2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 3532303200000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [12] : 000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a20
Arg [13] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [14] : 000000000000000000000000888ef71766ca594ded1f0fa3ae64ed2941740a20
Arg [15] : 000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d7
Arg [16] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [17] : 000000000000000000000000d31fcd1f7ba190dbc75354046f6024a9b86014d7
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [19] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [20] : 000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a1882
Arg [21] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [22] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [23] : 000000000000000000000000f43cc235e686d7bc513f53fbffb61f760c3a1882
Arg [24] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

11838:16153:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15514:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17963:160;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15793:26::-;;;:::i;:::-;;;;;;;:::i;13891:25::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;15080:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;21463:151::-;;;:::i;:::-;;16353:18;;;:::i;:::-;;;;;;;:::i;15047:26::-;;;;;;:::i;:::-;;:::i;16043:62::-;;;:::i;18247:408::-;;;;;;:::i;:::-;;:::i;17157:447::-;;;;;;:::i;:::-;;:::i;25243:192::-;;;:::i;16552:64::-;;;:::i;20267:980::-;;;;;;:::i;:::-;;:::i;15729:61::-;;;:::i;25043:195::-;;;:::i;26862:657::-;;;:::i;:::-;;;;;;;;;;;;:::i;16452:63::-;;;:::i;14553:329::-;;;;;;:::i;:::-;;:::i;21252:206::-;;;:::i;25440:516::-;;;;;;:::i;:::-;;:::i;16519:29::-;;;:::i;13922:131::-;;;;;;:::i;:::-;;:::i;17750:43::-;;;;;;:::i;:::-;;:::i;25967:830::-;;;;;;:::i;:::-;;:::i;21619:198::-;;;:::i;15976:63::-;;;:::i;14233:315::-;;;;;;:::i;:::-;;:::i;15625:101::-;;;:::i;18128:114::-;;;;;;:::i;:::-;;:::i;15494:16::-;;;:::i;18660:1602::-;;;;;;:::i;:::-;;:::i;16419:29::-;;;:::i;15825:79::-;;;:::i;16109:61::-;;;:::i;16278:72::-;;;:::i;:::-;;;;;;;;:::i;17867:91::-;;;;;;:::i;:::-;;:::i;17797:64::-;;;;;;:::i;:::-;;:::i;14981:26::-;;;;;;:::i;:::-;;:::i;27655:331::-;;;:::i;14058:118::-;;;;;;:::i;:::-;;:::i;15014:26::-;;;;;;:::i;:::-;;:::i;15908:64::-;;;:::i;15514:108::-;15550:13;15615:2;15579:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;15565:55;;15514:108;:::o;17963:160::-;18040:10;18019:4;18030:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;18030:26:0;;;;;;;;;;:32;;;18072:30;18019:4;;18030:26;;18072:30;;;;18059:3;;18072:30;:::i;:::-;;;;;;;;-1:-1:-1;18114:4:0;17963:160;;;;;:::o;15793:26::-;;;;:::o;13891:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13891:25:0;;;;-1:-1:-1;13891:25:0;:::o;15080:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15080:26:0;;;;-1:-1:-1;15080:26:0;;;;-1:-1:-1;;;15080:26:0;;;;;:::o;21463:151::-;21536:16;;;21550:1;21536:16;;;21515:18;21536:16;;;;;21515:18;21536:16;;;;;;;;-1:-1:-1;;21578:4:0;;21563;;;;-1:-1:-1;;;;;;21578:4:0;;21563;;-1:-1:-1;21578:4:0;;21563;;;;-1:-1:-1;;;;;21563:20:0;;;:4;;;;;;;;;:20;21594:2;;:15;;-1:-1:-1;;;21594:15:0;;:2;;;:12;;:15;;21607:1;;21594:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21463:151;:::o;16353:18::-;;;-1:-1:-1;;;;;16353:18:0;;:::o;15047:26::-;;;;;;;;;;16043:62;;;-1:-1:-1;;;;;16043:62:0;;:::o;18247:408::-;-1:-1:-1;;;;;18342:14:0;;18321:4;18342:14;;;:9;:14;;;;;;:21;-1:-1:-1;18342:21:0;18334:53;;;;-1:-1:-1;;;18334:53:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;18396:17:0;;18403:10;18396:17;;;;:59;;-1:-1:-1;;;;;;18417:14:0;;;;;;:9;:14;;;;;;;;18432:10;18417:26;;;;;;;;-1:-1:-1;;18417:38:0;;18396:59;18392:158;;;-1:-1:-1;;;;;18471:14:0;;;;;;:9;:14;;;;;;;;18486:10;18471:26;;;;;;;;:33;-1:-1:-1;18471:33:0;18463:42;;;;;;-1:-1:-1;;;;;18511:14:0;;;;;;:9;:14;;;;;;;;18526:10;18511:26;;;;;;;:33;;;;;;;18392:158;-1:-1:-1;;;;;18554:14:0;;;;;;;:9;:14;;;;;;:21;;;;;;;18580:14;;;;;;;;;;:21;;;;;;18611:23;;-1:-1:-1;;;;;;;;;;;18611:23:0;;;18572:3;;18611:23;:::i;:::-;;;;;;;;-1:-1:-1;18646:4:0;18247:408;;;;;:::o;17157:447::-;;;;;;;;;;;;;-1:-1:-1;17157:447:0;:::o;25243:192::-;13785:3;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;25296:9:::1;::::0;-1:-1:-1;;;25296:9:0;::::1;;;25288:44;;;;-1:-1:-1::0;;;25288:44:0::1;;;;;;;:::i;:::-;25349:4;::::0;:29:::1;::::0;-1:-1:-1;;;25349:29:0;;25337:9:::1;::::0;-1:-1:-1;;;;;25349:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;25372:4:::1;::::0;25349:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25383:2;::::0;25402:4:::1;::::0;25383:27:::1;::::0;-1:-1:-1;;;25383:27:0;;25337:41;;-1:-1:-1;;;;;;25383:2:0;;::::1;::::0;:10:::1;::::0;:27:::1;::::0;25402:4:::1;::::0;25337:41;;25383:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25415:9:0::1;:15:::0;;-1:-1:-1;;;;25415:15:0::1;::::0;;-1:-1:-1;;;25243:192:0:o;16552:64::-;;;-1:-1:-1;;;;;16552:64:0;;:::o;20267:980::-;14926:2;;;;:7;14918:22;;;;-1:-1:-1;;;14918:22:0;;;;;;;:::i;:::-;14950:1;14945:6;;-1:-1:-1;;14945:6:0;;;;;20325:9:::1;::::0;-1:-1:-1;;;20325:9:0;::::1;14945:6:::0;20325:9:::1;20324:10;20316:71;;;;-1:-1:-1::0;;;20316:71:0::1;;;;;;;:::i;:::-;20410:10;20400:21;::::0;;;:9:::1;:21;::::0;;;;;:29;-1:-1:-1;20400:29:0::1;20392:61;;;;-1:-1:-1::0;;;20392:61:0::1;;;;;;;:::i;:::-;20633:9;:7;:9::i;:::-;20650:12;:10;:12::i;:::-;20647:39;;;20665:19;20678:4;20665;:19::i;:::-;20731:10;20721:21;::::0;;;:9:::1;:21;::::0;;;;;:29;;;;::::1;::::0;;20768:11:::1;::::0;;20784:19;;::::1;::::0;;;20813:38;;20768:11;;20731:10;-1:-1:-1;;;;;;;;;;;20813:38:0;::::1;::::0;20746:4;;20813:38:::1;:::i;:::-;;;;;;;;20870:4;::::0;:29:::1;::::0;-1:-1:-1;;;20870:29:0;;20856:11:::1;::::0;-1:-1:-1;;;;;20870:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;20893:4:::1;::::0;20870:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20919:2;::::0;20957:4:::1;::::0;20919:44:::1;::::0;-1:-1:-1;;;20919:44:0;;20856:43;;-1:-1:-1;20904:12:0::1;::::0;-1:-1:-1;;;;;20919:2:0;;::::1;::::0;:15:::1;::::0;:44:::1;::::0;20943:4:::1;::::0;20957;;::::1;::::0;20919:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20904:59:::0;-1:-1:-1;21010:9:0::1;21022:26;21045:2:::0;21024:14:::1;:4:::0;20904:59;21024:8:::1;:14::i;:::-;21022:22:::0;::::1;:26::i;:::-;21053:2;::::0;21073:4:::1;::::0;21053:28:::1;::::0;-1:-1:-1;;;21053:28:0;;21010:38;;-1:-1:-1;;;;;;21053:2:0;;::::1;::::0;:11:::1;::::0;:28:::1;::::0;21073:4:::1;::::0;21010:38;;21053:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21100:4:0::1;::::0;:29:::1;::::0;-1:-1:-1;;;21100:29:0;;21086:11:::1;::::0;-1:-1:-1;;;;;;21100:4:0;;::::1;::::0;-1:-1:-1;21100:14:0::1;::::0;:29:::1;::::0;21123:4:::1;::::0;21100:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21086:43;;21134:9;21146:31;21154:3;21146:31;;;;;;;;;;;;;-1:-1:-1::0;;;21146:31:0::1;;::::0;:3:::1;:7;;:31;;;;;:::i;:::-;21193:4;::::0;:27:::1;::::0;-1:-1:-1;;;21193:27:0;;21134:43;;-1:-1:-1;;;;;;21193:4:0::1;::::0;:13:::1;::::0;:27:::1;::::0;21207:10:::1;::::0;21134:43;;21193:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21185:57;;;;-1:-1:-1::0;;;21185:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;14962:2:0;:6;;-1:-1:-1;;14962:6:0;;;-1:-1:-1;;;;;20267:980:0:o;15729:61::-;15785:2;15729:61;:::o;25043:195::-;13785:3;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;25098:9:::1;::::0;-1:-1:-1;;;25098:9:0;::::1;;;25097:10;25089:49;;;;-1:-1:-1::0;;;25089:49:0::1;;;;;;;:::i;:::-;25143:2;::::0;25163:4:::1;::::0;25169:44:::1;::::0;-1:-1:-1;;;25169:44:0;;-1:-1:-1;;;;;25143:2:0;;::::1;::::0;:11:::1;::::0;25163:4:::1;::::0;25143:2;;25169:15:::1;::::0;:44:::1;::::0;25193:4:::1;::::0;25163;;25169:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25143:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25219:9:0::1;:14:::0;;-1:-1:-1;;;;25219:14:0::1;-1:-1:-1::0;;;25219:14:0::1;::::0;;-1:-1:-1;;25043:195:0:o;26862:657::-;27028:4;;27021:37;;-1:-1:-1;;;27021:37:0;;26899:7;;;;;;;;;;;;;;-1:-1:-1;;;;;27028:4:0;;27021:22;;:37;;27052:4;;27021:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26974:2;;27012:4;;26974:44;;-1:-1:-1;;;26974:44:0;;-1:-1:-1;;;;;26974:2:0;;;;:15;;:44;;26998:4;;27012;;;;26974:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:84;26960:98;;27063:11;27086;;27077:3;27081:4;27077:8;:20;;;;;;;-1:-1:-1;27120:11:0;27175:7;27183:1;27175:10;;27164:7;27172:1;27164:10;;:21;27135:26;-1:-1:-1;;27136:8:0;;27135:26;27164:21;27134:52;;;;27239:16;;;27253:1;27239:16;;;;;;;;;27134:52;;;;;-1:-1:-1;27215:21:0;;27239:16;;;;;;;;;;-1:-1:-1;;27284:4:0;;27266:7;;;;-1:-1:-1;;;;;;27284:4:0;;27266:7;;-1:-1:-1;27284:4:0;;27266:7;;;;-1:-1:-1;;;;;27266:23:0;;;:7;;;;;;;;;:23;27350:2;;:37;;-1:-1:-1;;;27350:37:0;;27300:33;;27350:2;;;;;:17;;:37;;27376:4;;27382;;27350:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27350:37:0;;;;;;;;;;;;:::i;:::-;27431:2;;27469:4;;27431:44;;-1:-1:-1;;;27431:44:0;;27344:43;;-1:-1:-1;27404:3:0;;27413;;27422;;-1:-1:-1;;;;;27431:2:0;;;;:15;;:44;;27455:4;;27469;;;27431:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27481:3;27485:1;27481:6;;;;;;;;;;;;;;:12;;;27499:3;27503:1;27499:6;;;;;;;;;;;;;;:10;;;27392:122;;;;;;;;;;;;;;;;;26862:657;;;;;;:::o;16452:63::-;;;-1:-1:-1;;;;;16452:63:0;;:::o;14553:329::-;13785:3;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;14681:3;14668:7:::1;14676:1;14668:10;:16:::0;14689:8:::1;:13:::0;;-1:-1:-1;;;;;;14689:13:0::1;-1:-1:-1::0;;;;;14689:13:0;::::1;;::::0;;14744:3:::1;14740:7:::0;::::1;14732:28;;;;-1:-1:-1::0;;;14732:28:0::1;;;;;;;:::i;:::-;14761:10:::0;:16;;;14794:3:::1;14790:7:::0;::::1;14782:28;;;;-1:-1:-1::0;;;14782:28:0::1;;;;;;;:::i;:::-;14811:10:::0;:16;;;14844:3:::1;14840:7:::0;::::1;14832:28;;;;-1:-1:-1::0;;;14832:28:0::1;;;;;;;:::i;:::-;14861:10:::0;:16;-1:-1:-1;;;;14553:329:0:o;21252:206::-;14926:2;;;;:7;14918:22;;;;-1:-1:-1;;;14918:22:0;;;;;;;:::i;:::-;14950:1;14945:6;;-1:-1:-1;;14945:6:0;;;;;21299:21:::1;21309:10;21299:9;:21::i;:::-;21291:45;;;;-1:-1:-1::0;;;21291:45:0::1;;;;;;;:::i;:::-;21341:9;:7;:9::i;:::-;21437:16;21442:10;21437:4;:16::i;:::-;14962:2:::0;:6;;-1:-1:-1;;14962:6:0;;;21252:206::o;25440:516::-;14926:2;;;;:7;14918:22;;;;-1:-1:-1;;;14918:22:0;;;;;;;:::i;:::-;14950:1;14945:6;;-1:-1:-1;;14945:6:0;;;;;25506:9:::1;::::0;-1:-1:-1;;;25506:9:0;::::1;14945:6:::0;25506:9:::1;25498:66;;;;-1:-1:-1::0;;;25498:66:0::1;;;;;;;:::i;:::-;25587:10;25577:21;::::0;;;:9:::1;:21;::::0;;;;;:29;-1:-1:-1;25577:29:0::1;25569:61;;;;-1:-1:-1::0;;;25569:61:0::1;;;;;;;:::i;:::-;25648:11;::::0;;25705:10:::1;25635;25695:21:::0;;;:9:::1;:21;::::0;;;;;:29;;;;::::1;::::0;;25729:19;;;;::::1;::::0;;;25758:38;;25648:11;;25635:10;-1:-1:-1;;;;;;;;;;;25758:38:0;::::1;::::0;25720:4;;25758:38:::1;:::i;:::-;;;;;;;;25815:4;::::0;:29:::1;::::0;-1:-1:-1;;;25815:29:0;;25801:11:::1;::::0;-1:-1:-1;;;;;25815:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;25838:4:::1;::::0;25815:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25801:43:::0;-1:-1:-1;25849:9:0::1;25861:25;25883:2:::0;25863:13:::1;:4:::0;25801:43;25863:8:::1;:13::i;25861:25::-;25902:4;::::0;:27:::1;::::0;-1:-1:-1;;;25902:27:0;;25849:37;;-1:-1:-1;;;;;;25902:4:0::1;::::0;:13:::1;::::0;:27:::1;::::0;25916:10:::1;::::0;25849:37;;25902:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25894:57;;;;-1:-1:-1::0;;;25894:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;14962:2:0;:6;;-1:-1:-1;;14962:6:0;;;-1:-1:-1;;25440:516:0:o;16519:29::-;;;-1:-1:-1;;;;;16519:29:0;;:::o;13922:131::-;13785:3;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;14009:35:::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;14009:35:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;13994:51:0;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;13994:51:0::1;::::0;;;::::1;;::::0;;;;;;;;;13922:131::o;17750:43::-;;;;;;;;;;;;;:::o;25967:830::-;13785:3;;26041:12;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;26551:4:::1;::::0;-1:-1:-1;;;;;26527:29:0;;::::1;26551:4:::0;::::1;26527:29;;26519:70;;;;-1:-1:-1::0;;;26519:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26597:24:0;::::1;26594:198;;26638:3;::::0;:26:::1;::::0;-1:-1:-1;;;;;26638:3:0;;::::1;::::0;26653:6;;26638:26:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26624:40;;;;;26665:14;;26594:198;-1:-1:-1::0;;;;;26693:24:0;::::1;::::0;26690:102:::1;;26757:3;::::0;26727:42:::1;::::0;-1:-1:-1;;;26727:42:0;;-1:-1:-1;;;;;26727:29:0;;::::1;::::0;::::1;::::0;:42:::1;::::0;26757:3;;::::1;::::0;26762:6;;26727:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26720:49;;;;26690:102;-1:-1:-1::0;26787:5:0::1;26780:12;;21619:198:::0;21737:10;;21703:5;;21696:38;;-1:-1:-1;;;21696:38:0;;21662:10;;21737;-1:-1:-1;;;;;21703:5:0;;21696:23;;:38;;21728:4;;21745:1;21696:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;21695:112;;;-1:-1:-1;21796:10:0;;21764:3;;21757:36;;-1:-1:-1;;;21757:36:0;;-1:-1:-1;;;;;21764:3:0;;;;21757:21;;:36;;21787:4;;21804:1;21757:36;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;21695:112;21681:131;;21619:198;:::o;15976:63::-;;;-1:-1:-1;;;;;15976:63:0;;:::o;14233:315::-;14283:4;14299:16;;14296:38;;-1:-1:-1;14327:4:0;14320:12;;14296:38;14390:6;14386:140;14399:9;:16;14397:18;;14386:140;;;14470:9;14480:1;14470:12;;;;;;;;;;;;;;;;;;:19;;;14436:9;14446:1;14436:12;;;;;;;;;;;;;;;;;;;;;:18;14429:39;;-1:-1:-1;;;14429:39:0;;-1:-1:-1;;;;;14436:18:0;;;;14429:36;;:39;;14466:1;;14429:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;14426:95;;14509:4;14502:12;;;;;14426:95;14416:3;;14386:140;;;;14537:5;14530:13;;14233:315;;;;:::o;15625:101::-;15663:13;15719:2;15692:30;;;;;;;;:::i;18128:114::-;18185:4;18203:34;18216:10;18228:3;18233;18203:12;:34::i;:::-;18196:41;18128:114;-1:-1:-1;;;18128:114:0:o;15494:16::-;;;;;;;;;;;;;;;-1:-1:-1;;15494:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18660:1602::-;14926:2;;;;:7;14918:22;;;;-1:-1:-1;;;14918:22:0;;;;;;;:::i;:::-;14950:1;14945:6;;-1:-1:-1;;14945:6:0;;;;;18717:9:::1;::::0;-1:-1:-1;;;18717:9:0;::::1;14945:6:::0;18717:9:::1;18716:10;18708:61;;;;-1:-1:-1::0;;;18708:61:0::1;;;;;;;:::i;:::-;18945:9;:7;:9::i;:::-;18962:12;:10;:12::i;:::-;18959:39;;;18977:19;18990:4;18977;:19::i;:::-;19078:4;::::0;:29:::1;::::0;-1:-1:-1;;;19078:29:0;;19064:11:::1;::::0;-1:-1:-1;;;;;19078:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;19101:4:::1;::::0;19078:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19127:2;::::0;19165:4:::1;::::0;19127:44:::1;::::0;-1:-1:-1;;;19127:44:0;;19064:43;;-1:-1:-1;19112:12:0::1;::::0;-1:-1:-1;;;;;19127:2:0;;::::1;::::0;:15:::1;::::0;:44:::1;::::0;19151:4:::1;::::0;19165;;::::1;::::0;19127:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19184:4;::::0;:48:::1;::::0;-1:-1:-1;;;19184:48:0;;19112:59;;-1:-1:-1;;;;;;19184:4:0::1;::::0;:17:::1;::::0;:48:::1;::::0;19202:10:::1;::::0;19221:4:::1;::::0;19227;;19184:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19176:78;;;;-1:-1:-1::0;;;19176:78:0::1;;;;;;;:::i;:::-;19273:4;::::0;:29:::1;::::0;-1:-1:-1;;;19273:29:0;;19259:11:::1;::::0;-1:-1:-1;;;;;19273:4:0::1;::::0;:14:::1;::::0;:29:::1;::::0;19296:4:::1;::::0;19273:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19259:43;;19307:9;19319:28;19327:3;19319:28;;;;;;;;;;;;;-1:-1:-1::0;;;19319:28:0::1;;::::0;:3:::1;:7;;:28;;;;;:::i;:::-;19352:2;::::0;19371:4:::1;::::0;19352:27:::1;::::0;-1:-1:-1;;;19352:27:0;;19307:40;;-1:-1:-1;;;;;;19352:2:0;;::::1;::::0;:10:::1;::::0;:27:::1;::::0;19371:4:::1;::::0;19307:40;;19352:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19453:2:0::1;::::0;19491:4:::1;::::0;19453:44:::1;::::0;-1:-1:-1;;;19453:44:0;;19438:12:::1;::::0;-1:-1:-1;;;;;;19453:2:0;;::::1;::::0;-1:-1:-1;19453:15:0::1;::::0;:44:::1;::::0;19477:4:::1;::::0;19491;::::1;::::0;19453:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19438:59;;19502:9;19514:28;19523:4;19514:28;;;;;;;;;;;;;-1:-1:-1::0;;;19514:28:0::1;;::::0;:4:::1;:8;;:28;;;;;:::i;:::-;19502:40;;19589:13;19626:1:::0;19612:11:::1;;:15;19611:247;;-1:-1:-1::0;19857:1:0;;19611:247:::1;;;19810:32;19837:4;19812:18;19818:11;;19812:1;:5;;:18;;;;:::i;19810:32::-;19802:40;;;19611:247;-1:-1:-1::0;19863:11:0::1;:20:::0;;;::::1;::::0;;19942:10;;-1:-1:-1;;19942:12:0;19939:85:::1;;19963:21;19973:10;19963:9;:21::i;:::-;:59;;19990:32;20018:3;19991:21;20001:7;20009:1;20001:10;;::::0;19991:5;;:9:::1;:21::i;19990:32::-;19963:59;;;19986:1;19963:59;19956:66;;19939:85;20044:6:::0;;20041:113:::1;;20084:8;::::0;;-1:-1:-1;;;;;20084:8:0;;::::1;20074:19;::::0;;;:9:::1;:19;::::0;;;;;:27;;;::::1;::::0;;20133:8;;20112:36;;20133:8;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;20112:36:0;::::1;::::0;20097:4;;20112:36:::1;:::i;:::-;;;;;;;;20041:113;20183:15;:5:::0;20193:4;20183:9:::1;:15::i;:::-;20168:10;20158:21;::::0;;;:9:::1;:21;::::0;;;;:40;;;;::::1;::::0;;;20168:10;-1:-1:-1;;;;;;;;;;;20241:15:0::1;:5:::0;20251:4;20241:9:::1;:15::i;:::-;20208:49;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;14962:2:0;:6;;-1:-1:-1;;14962:6:0;;;-1:-1:-1;;;;;;;18660:1602:0:o;16419:29::-;;;-1:-1:-1;;;16419:29:0;;;;;:::o;15825:79::-;;;-1:-1:-1;;;;;15825:79:0;;:::o;16109:61::-;;;-1:-1:-1;;;;;16109:61:0;;:::o;16278:72::-;16338:5;;16344:3;;-1:-1:-1;;;;;16338:5:0;;;;16344:3;16278:72;;:::o;17867:91::-;17913:4;17931:22;17939:3;-1:-1:-1;;17931:7:0;:22::i;17797:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14981:26::-;;;;;;;;;;27655:331;27721:4;;27799;;27792:37;;-1:-1:-1;;;27792:37:0;;27690:7;;-1:-1:-1;;;;;27721:4:0;;;;27690:7;;27799:4;;;27792:22;;:37;;27823:4;;27792:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27745:2;;27783:4;;27745:44;;-1:-1:-1;;;27745:44:0;;-1:-1:-1;;;;;27745:2:0;;;;:15;;:44;;27769:4;;27783;;;;27745:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27954:4;;27928:32;;-1:-1:-1;;;27928:32:0;;27745:84;;;;;-1:-1:-1;27926:55:0;;27976:4;;27927:43;;27745:84;;-1:-1:-1;;;;;27928:17:0;;;;;;:32;;27954:4;;27928:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27927:38;;:43::i;27926:55::-;27919:62;;;;27655:331;:::o;14058:118::-;13785:3;;-1:-1:-1;;;;;13785:3:0;13773:10;:15;13765:58;;;;-1:-1:-1;;;13765:58:0;;;;;;;:::i;:::-;14123:9:::1;14133:16:::0;;-1:-1:-1;;14133:18:0;;;14123:29;::::1;;;;;;;;;;;;;;;14110:9;14120:1;14110:12;;;;;;;;;::::0;;;::::1;::::0;;:42;;:12:::1;::::0;;::::1;;:42:::0;;-1:-1:-1;;;;;;14110:42:0::1;-1:-1:-1::0;;;;;14110:42:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;14153:15;;;::::1;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;14153:15:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;14153:15:0::1;::::0;;::::1;;::::0;;;-1:-1:-1;14058:118:0:o;15014:26::-;;;;;;;;;;15908:64;;;-1:-1:-1;;;;;15908:64:0;;:::o;21822:3210::-;21874:9;;-1:-1:-1;;;21874:9:0;;;;21873:10;21865:71;;;;-1:-1:-1;;;21865:71:0;;;;;;;:::i;:::-;22020:12;:10;:12::i;:::-;22012:45;;;;-1:-1:-1;;;22012:45:0;;;;;;;:::i;:::-;22199:5;;22192:38;;-1:-1:-1;;;22192:38:0;;22170:19;;-1:-1:-1;;;;;22199:5:0;;22192:23;;:38;;22224:4;;22192:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22262:3;;22255:36;;-1:-1:-1;;;22255:36:0;;22170:60;;-1:-1:-1;22235:17:0;;-1:-1:-1;;;;;22262:3:0;;;;22255:21;;:36;;22285:4;;22255:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22323:10;;22235:56;;-1:-1:-1;22309:24:0;;22306:478;;;22402:6;;-1:-1:-1;;;;;22402:6:0;22394:69;22470:18;:11;22486:1;22470:15;:18::i;:::-;22495:1;22509:3;22527:4;22539:15;22394:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22618:6:0;;-1:-1:-1;;;;;22618:6:0;;-1:-1:-1;22610:69:0;;-1:-1:-1;22686:18:0;:11;22702:1;22686:15;:18::i;:::-;22711:1;22725:3;22743:4;22755:15;22610:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22306:478;22807:10;;22795:22;;22792:464;;;22880:6;;-1:-1:-1;;;;;22880:6:0;22872:69;22948:16;:9;22962:1;22948:13;:16::i;:::-;22971:1;22985:3;23003:4;23015:15;22872:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23092:6:0;;-1:-1:-1;;;;;23092:6:0;;-1:-1:-1;23084:69:0;;-1:-1:-1;23160:16:0;:9;23174:1;23160:13;:16::i;:::-;23183:1;23197:3;23215:4;23227:15;23084:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22792:464;23290:6;;23316:3;23320:10;;-1:-1:-1;;;;;23290:6:0;;;;23282:28;;23316:3;-1:-1:-1;;23320:12:0;;;23316:17;;;;;;;;;;;;;;:20;:17;;;;;:20;;23348:3;23352:10;;-1:-1:-1;;;;;23316:20:0;;;;-1:-1:-1;;23352:12:0;;;23348:17;;;;;;;;;;;;;:20;:17;;;;;:20;;23404:3;23408:10;;-1:-1:-1;;;;;23348:20:0;;;;:17;-1:-1:-1;;23408:12:0;;;23404:17;;;;;;;;;;;;;;:20;:17;;;;;:20;;23397:53;;-1:-1:-1;;;23397:53:0;;-1:-1:-1;;;;;23404:20:0;;;;23397:38;;:53;;23444:4;;23397:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23469:3;23473:10;;-1:-1:-1;;23473:12:0;;;23469:17;;;;;;;;;;;;;;:20;:17;;;;;:20;;23462:53;;-1:-1:-1;;;23462:53:0;;-1:-1:-1;;;;;23469:20:0;;;;23462:38;;:53;;23509:4;;23462:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23527:1;23540;23561:4;23578:15;23282:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;23716:4:0;;:29;;-1:-1:-1;;;23716:29:0;;23704:9;;-1:-1:-1;;;;;;23716:4:0;;;;:14;;:29;;23739:4;;23716:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23765:2;;23803:4;;23765:44;;-1:-1:-1;;;23765:44:0;;23704:41;;-1:-1:-1;23750:12:0;;-1:-1:-1;;;;;23765:2:0;;;;:15;;:44;;23789:4;;23803;;;;23765:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23814:2;;23833:4;;23814:27;;-1:-1:-1;;;23814:27:0;;23750:59;;-1:-1:-1;;;;;;23814:2:0;;;;:10;;:27;;23833:4;;23839:1;;23814:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23861:2:0;;23899:4;;23861:44;;-1:-1:-1;;;23861:44:0;;23846:12;;-1:-1:-1;;;;;;23861:2:0;;;;-1:-1:-1;23861:15:0;;:44;;23885:4;;23899;;;23861:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23846:59;;23910:9;23922:28;23931:4;23922:28;;;;;;;;;;;;;-1:-1:-1;;;23922:28:0;;;:4;:8;;:28;;;;;:::i;:::-;23910:40;-1:-1:-1;23996:13:0;24123:7;24131:1;24123:10;;24120:54;;24156:15;24138:34;;:10;:34;24120:54;24219:15;24201:34;;:10;:34;24241:11;;24240:247;;-1:-1:-1;24486:1:0;;24240:247;;;24439:32;24466:4;24441:18;24447:11;;24441:1;:5;;:18;;;;:::i;24439:32::-;24431:40;;;24240:247;-1:-1:-1;24555:32:0;24583:3;24556:21;24566:7;24574:1;24566:10;;24556:5;;:9;:21::i;24555:32::-;24542:8;;-1:-1:-1;;;;;24542:8:0;;;24532:19;;;;:9;:19;;;;;:55;;;;;;;;24651:20;;24666:4;24651:20;:37;;24685:3;24651:37;;;24674:8;;-1:-1:-1;;;;;24674:8:0;24651:37;24634:54;-1:-1:-1;24755:32:0;24783:3;24756:21;24766:7;24774:1;24766:10;;24755:32;-1:-1:-1;;;;;24734:17:0;;;;;;:9;:17;;;;;:53;;;;;;;24807:74;24847:32;24875:3;24848:21;24858:7;24866:1;24858:10;;24848:5;;:9;:21::i;24847:32::-;24808;24836:3;24809:21;24819:7;24827:1;24819:10;;24809:5;;:9;:21::i;24808:32::-;24807:38;;:74::i;:::-;24792:11;:89;;;;;;;24912:8;;-1:-1:-1;;;;;24912:8:0;24792:11;-1:-1:-1;;;;;;;;;;;24922:32:0;24950:3;24923:21;24933:7;24941:1;24933:10;;;24923:5;;:9;:21::i;24922:32::-;24891:64;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;24965:62:0;;24982:1;-1:-1:-1;;;;;;;;;;;24994:32:0;25022:3;24995:21;25005:7;25013:1;25005:10;;24994:32;24965:62;;;;;;:::i;:::-;;;;;;;;21822:3210;;;;;;;;;:::o;8971:407::-;9029:7;9250:6;9246:32;;-1:-1:-1;9271:1:0;9264:8;;9246:32;9294:5;;;9298:1;9294;:5;:1;9312:5;;;;;:10;9304:56;;;;-1:-1:-1;;;9304:56:0;;;;;;;:::i;9810:123::-;9868:7;9889:39;9893:1;9896;9889:39;;;;;;;;;;;;;;;;;:3;:39::i;8581:169::-;8667:7;8697:12;8689:6;;;;8681:29;;;;-1:-1:-1;;;8681:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8727:5:0;;;8581:169::o;8189:127::-;8247:7;8268:43;8272:1;8275;8268:43;;;;;;;;;;;;;;;;;:3;:43::i;7786:158::-;7844:7;7870:5;;;7888:6;;;;7880:46;;;;-1:-1:-1;;;7880:46:0;;;;;;;:::i;10385:310::-;10471:7;10561:12;10554:5;10546:28;;;;-1:-1:-1;;;10546:28:0;;;;;;;;:::i;:::-;;10579:9;10595:1;10591;:5;;;;;;;10385:310;-1:-1:-1;;;;;10385:310:0:o;5:130:-1:-;72:20;;-1:-1;;;;;37471:54;;40119:35;;40109:2;;40168:1;;40158:12;1148:498;;1271:4;1259:9;1254:3;1250:19;1246:30;1243:2;;;-1:-1;;1279:12;1243:2;1307:20;1271:4;1307:20;:::i;:::-;1298:29;;1874:6;1868:13;1392:16;1385:86;1531:2;1600:9;1596:22;1868:13;1531:2;1550:5;1546:16;1539:86;1237:409;;;;:::o;1931:241::-;;2035:2;2023:9;2014:7;2010:23;2006:32;2003:2;;;-1:-1;;2041:12;2003:2;2103:53;2148:7;2124:22;2103:53;:::i;2179:366::-;;;2300:2;2288:9;2279:7;2275:23;2271:32;2268:2;;;-1:-1;;2306:12;2268:2;2368:53;2413:7;2389:22;2368:53;:::i;:::-;2358:63;;2476:53;2521:7;2458:2;2501:9;2497:22;2476:53;:::i;:::-;2466:63;;2262:283;;;;;:::o;2552:491::-;;;;2690:2;2678:9;2669:7;2665:23;2661:32;2658:2;;;-1:-1;;2696:12;2658:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2748:63;-1:-1;2848:2;2887:22;;72:20;97:33;72:20;97:33;:::i;:::-;2652:391;;2856:63;;-1:-1;;;2956:2;2995:22;;;;1720:20;;2652:391::o;3050:366::-;;;3171:2;3159:9;3150:7;3146:23;3142:32;3139:2;;;-1:-1;;3177:12;3139:2;3239:53;3284:7;3260:22;3239:53;:::i;:::-;3229:63;3329:2;3368:22;;;;1720:20;;-1:-1;;;3133:283::o;3423:438::-;;3586:2;;3574:9;3565:7;3561:23;3557:32;3554:2;;;-1:-1;;3592:12;3554:2;3643:17;3637:24;3681:18;;3673:6;3670:30;3667:2;;;-1:-1;;3703:12;3667:2;3828:6;3817:9;3813:22;;;331:3;324:4;316:6;312:17;308:27;298:2;;-1:-1;;339:12;298:2;379:6;373:13;3681:18;35153:6;35150:30;35147:2;;;-1:-1;;35183:12;35147:2;401:103;3586:2;;35220:6;35216:17;35281:15;401:103;:::i;:::-;532:21;;;589:14;;;;-1:-1;564:17;;;690:4;678:17;;;669:27;;;;666:36;-1:-1;663:2;;;-1:-1;;705:12;663:2;-1:-1;731:10;;725:240;750:6;747:1;744:13;725:240;;;830:71;897:3;885:10;830:71;:::i;:::-;818:84;;772:1;765:9;;;;;916:14;;;;944;;;;725:240;;;-1:-1;3723:122;;3548:313;-1:-1;;;;;;;;3548:313::o;3868:257::-;;3980:2;3968:9;3959:7;3955:23;3951:32;3948:2;;;-1:-1;;3986:12;3948:2;1060:6;1054:13;40265:5;37801:13;37794:21;40243:5;40240:32;40230:2;;-1:-1;;40276:12;4132:241;;4236:2;4224:9;4215:7;4211:23;4207:32;4204:2;;;-1:-1;;4242:12;4204:2;-1:-1;1720:20;;4198:175;-1:-1;4198:175::o;4380:263::-;;4495:2;4483:9;4474:7;4470:23;4466:32;4463:2;;;-1:-1;;4501:12;4463:2;-1:-1;1868:13;;4457:186;-1:-1;4457:186::o;4650:535::-;;;;4799:2;4787:9;4778:7;4774:23;4770:32;4767:2;;;-1:-1;;4805:12;4767:2;1874:6;1868:13;4857:74;;4968:2;5022:9;5018:22;1868:13;4976:74;;5087:2;5141:9;5137:22;1868:13;5095:74;;4761:424;;;;;:::o;5192:743::-;;;;;;5364:3;5352:9;5343:7;5339:23;5335:33;5332:2;;;-1:-1;;5371:12;5332:2;1733:6;1720:20;5423:63;;5523:2;5566:9;5562:22;1720:20;5531:63;;5631:2;5674:9;5670:22;1720:20;5639:63;;5757:53;5802:7;5739:2;5782:9;5778:22;5757:53;:::i;:::-;5326:609;;;;-1:-1;5326:609;;5847:3;5887:22;1720:20;;5326:609;-1:-1;;5326:609::o;6537:103::-;-1:-1;;;;;37471:54;6598:37;;6592:48::o;6798:690::-;;6991:5;35938:12;36652:6;36647:3;36640:19;36689:4;;36684:3;36680:14;7003:93;;36689:4;7167:5;35428:14;-1:-1;7206:260;7231:6;7228:1;7225:13;7206:260;;;7292:13;;-1:-1;;;;;37471:54;6598:37;;6096:14;;;;36364;;;;37482:42;7246:9;7206:260;;;-1:-1;7472:10;;6922:566;-1:-1;;;;;6922:566::o;8393:94::-;37801:13;37794:21;8448:34;;8442:45::o;9465:884::-;;9602:5;9596:12;9636:1;;9625:9;9621:17;9649:1;9644:268;;;;9923:1;9918:425;;;;9614:729;;9644:268;-1:-1;;9849:25;;9837:38;;9718:1;9703:17;;9722:4;9699:28;9889:16;;;-1:-1;9644:268;;9918:425;9987:1;9976:9;9972:17;35610:3;-1:-1;35600:14;35642:4;;-1:-1;35629:18;-1:-1;10176:130;10190:6;10187:1;10184:13;10176:130;;;10249:14;;10236:11;;;10229:35;10283:15;;;;10205:12;;10176:130;;;-1:-1;;;10320:16;;;-1:-1;9614:729;;;;9572:777;;;;:::o;18462:536::-;;-1:-1;;;11616:11;11609:29;18881:92;11594:1;11661:3;11657:11;18960:6;18881:92;:::i;19005:536::-;;-1:-1;;;15410:11;15403:38;19424:92;15387:2;15464:3;15460:12;19503:6;19424:92;:::i;19548:379::-;19912:10;19736:191::o;19934:222::-;-1:-1;;;;;37471:54;;;;6598:37;;20061:2;20046:18;;20032:124::o;20163:460::-;-1:-1;;;;;37471:54;;;6467:58;;37471:54;;;;20526:2;20511:18;;6598:37;20609:2;20594:18;;18413:37;;;;20354:2;20339:18;;20325:298::o;20630:349::-;-1:-1;;;;;37471:54;;;;6467:58;;20965:2;20950:18;;18413:37;20793:2;20778:18;;20764:215::o;20986:333::-;-1:-1;;;;;37471:54;;;6598:37;;37471:54;;21305:2;21290:18;;6598:37;21141:2;21126:18;;21112:207::o;21326:432::-;-1:-1;;;;;37471:54;;;6598:37;;37471:54;;;;21667:2;21652:18;;6598:37;37801:13;;37794:21;21744:2;21729:18;;8448:34;21503:2;21488:18;;21474:284::o;21765:1136::-;-1:-1;;;;;37471:54;;;6598:37;;37471:54;;;22291:2;22276:18;;6598:37;37801:13;;37794:21;22368:2;22353:18;;8448:34;22451:2;22436:18;;18413:37;;;;22534:3;22519:19;;18413:37;;;;37482:42;22611:19;;9016:58;22718:3;22703:19;;9016:58;37471:54;;;22802:3;22787:19;;6598:37;22886:3;22871:19;;18413:37;;;;22126:3;22111:19;;22097:804::o;22908:481::-;-1:-1;;;;;37471:54;;6598:37;;23113:2;23231;23216:18;;23209:48;;;22908:481;;23271:108;;23098:18;;23365:6;23271:108;:::i;:::-;23263:116;23084:305;-1:-1;;;;23084:305::o;23736:370::-;;23913:2;23934:17;23927:47;23988:108;23913:2;23902:9;23898:18;24082:6;23988:108;:::i;24113:210::-;37801:13;;37794:21;8448:34;;24234:2;24219:18;;24205:118::o;24854:310::-;;25001:2;;25022:17;25015:47;9231:5;35938:12;36652:6;25001:2;24990:9;24986:18;36640:19;-1:-1;39194:101;39208:6;39205:1;39202:13;39194:101;;;39275:11;;;;;39269:18;39256:11;;;36680:14;39256:11;39249:39;39223:10;;39194:101;;;39310:6;39307:1;39304:13;39301:2;;;-1:-1;36680:14;39366:6;24990:9;39357:16;;39350:27;39301:2;-1:-1;39815:7;39799:14;-1:-1;;39795:28;9389:39;;;;36680:14;9389:39;;24972:192;-1:-1;;;24972:192::o;25171:416::-;25371:2;25385:47;;;10582:2;25356:18;;;36640:19;-1:-1;;;36680:14;;;10598:43;10660:12;;;25342:245::o;25594:416::-;25794:2;25808:47;;;10911:1;25779:18;;;36640:19;-1:-1;;;36680:14;;;10926:26;10971:12;;;25765:245::o;26017:416::-;26217:2;26231:47;;;11222:2;26202:18;;;36640:19;11258:29;36680:14;;;11238:50;11307:12;;;26188:245::o;26440:416::-;26640:2;26654:47;;;11907:2;26625:18;;;36640:19;11943:34;36680:14;;;11923:55;-1:-1;;;11998:12;;;11991:31;12041:12;;;26611:245::o;26863:416::-;27063:2;27077:47;;;12292:2;27048:18;;;36640:19;-1:-1;;;36680:14;;;12308:40;12367:12;;;27034:245::o;27286:416::-;27486:2;27500:47;;;12618:2;27471:18;;;36640:19;12654:29;36680:14;;;12634:50;12703:12;;;27457:245::o;27709:416::-;27909:2;27923:47;;;12954:1;27894:18;;;36640:19;-1:-1;;;36680:14;;;12969:32;13020:12;;;27880:245::o;28132:416::-;28332:2;28346:47;;;13271:1;28317:18;;;36640:19;-1:-1;;;36680:14;;;13286:32;13337:12;;;28303:245::o;28555:416::-;28755:2;28769:47;;;13588:2;28740:18;;;36640:19;13624:34;36680:14;;;13604:55;-1:-1;;;13679:12;;;13672:41;13732:12;;;28726:245::o;28978:416::-;29178:2;29192:47;;;13983:2;29163:18;;;36640:19;14019:34;36680:14;;;13999:55;-1:-1;;;14074:12;;;14067:25;14111:12;;;29149:245::o;29401:416::-;29601:2;29615:47;;;14362:1;29586:18;;;36640:19;-1:-1;;;36680:14;;;14377:32;14428:12;;;29572:245::o;29824:416::-;30024:2;30038:47;;;14679:2;30009:18;;;36640:19;14715:25;36680:14;;;14695:46;14760:12;;;29995:245::o;30247:416::-;30447:2;30461:47;;;15011:2;30432:18;;;36640:19;15047:33;36680:14;;;15027:54;15100:12;;;30418:245::o;30670:416::-;30870:2;30884:47;;;15711:2;30855:18;;;36640:19;15747:34;36680:14;;;15727:55;-1:-1;;;15802:12;;;15795:37;15851:12;;;30841:245::o;31093:416::-;31293:2;31307:47;;;16102:2;31278:18;;;36640:19;-1:-1;;;36680:14;;;16118:43;16180:12;;;31264:245::o;31516:416::-;31716:2;31730:47;;;16736:2;31701:18;;;36640:19;16772:30;36680:14;;;16752:51;16822:12;;;31687:245::o;31939:416::-;32139:2;32153:47;;;17073:2;32124:18;;;36640:19;-1:-1;;;36680:14;;;17089:40;17148:12;;;32110:245::o;32362:416::-;32562:2;32576:47;;;17399:2;32547:18;;;36640:19;-1:-1;;;36680:14;;;17415:35;17469:12;;;32533:245::o;32785:222::-;18413:37;;;32912:2;32897:18;;32883:124::o;33014:908::-;;33349:3;;33338:9;33334:19;18443:5;18420:3;18413:37;33522:2;38842:24;33522:2;33511:9;33507:18;9016:58;33559:2;33349:3;33559:2;33548:9;33544:18;33537:48;33599:146;7800:5;36104:12;36652:6;36647:3;36640:19;36680:14;33338:9;36680:14;7812:115;;35610:3;-1:-1;35600:14;33522:2;-1:-1;35629:18;8026:21;;-1:-1;8053:310;8078:6;8075:1;8072:13;8053:310;;;17851:63;17899:14;17790:55;17747:16;17741:23;17790:55;:::i;:::-;17851:63;:::i;:::-;8100:1;17967:16;;17961:23;18071:63;18119:14;;;-1:-1;;;;;37471:54;;18071:63;:::i;:::-;18257:57;33559:2;18303:3;18299:14;37620:4;18241:9;33349:3;40027:15;37609:16;18257:57;:::i;:::-;-1:-1;36504:4;36495:14;;;;;6369:4;6360:14;;;;;8100:1;8093:9;8053:310;;;8057:14;;33591:154;;;;;;;;33756:72;6369:4;33813:9;33809:18;33800:6;33756:72;:::i;:::-;18443:5;33907:3;33896:9;33892:19;18413:37;33320:602;;;;;;;;:::o;33929:780::-;18413:37;;;34361:2;34346:18;;18413:37;;;;34444:2;34429:18;;18413:37;;;;34527:2;34512:18;;18413:37;34610:3;34595:19;;18413:37;34694:3;34679:19;;18413:37;34196:3;34181:19;;34167:542::o;34716:256::-;34778:2;34772:9;34804:17;;;34879:18;34864:34;;34900:22;;;34861:62;34858:2;;;34936:1;;34926:12;34858:2;34778;34945:22;34756:216;;-1:-1;34756:216::o;37396:134::-;-1:-1;;;;;37471:54;;37454:76::o;40060:117::-;-1:-1;;;;;37471:54;;40119:35;;40109:2;;40168:1;;40158:12;40109:2;40103:74;:::o

Swarm Source

ipfs://c55278ae9a4ff74872847ae6b17cf6b98420be4f7a932da651b42269865b59ed

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.