Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
StrategyDodoHndEthLp
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-10-13 */ /** *Submitted for verification at arbiscan.io on 2021-10-11 */ // Sources flattened with hardhat v2.6.4 https://hardhat.org // File src/lib/safe-math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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) { 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; } } // File src/lib/context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File src/lib/erc20.sol // File: contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; // File: contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File src/interfaces/jar.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IJar is IERC20 { function token() external view returns (address); function reward() external view returns (address); function claimInsurance() external; // NOTE: Only yDelegatedVault implements this function getRatio() external view returns (uint256); function depositAll() external; function balance() external view returns (uint256); function deposit(uint256) external; function withdrawAll() external; function withdraw(uint256) external; function earn() external; function decimals() external view returns (uint8); } // File src/interfaces/staking-rewards.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IStakingRewards { function balanceOf(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function exit() external; function getReward() external; function getRewardForDuration() external view returns (uint256); function lastTimeRewardApplicable() external view returns (uint256); function lastUpdateTime() external view returns (uint256); function notifyRewardAmount(uint256 reward) external; function periodFinish() external view returns (uint256); function rewardPerToken() external view returns (uint256); function rewardPerTokenStored() external view returns (uint256); function rewardRate() external view returns (uint256); function rewards(address) external view returns (uint256); function rewardsDistribution() external view returns (address); function rewardsDuration() external view returns (uint256); function rewardsToken() external view returns (address); function stake(uint256 amount) external; function deposit(uint256 amount) external; function stakeWithPermit( uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function stakingToken() external view returns (address); function totalSupply() external view returns (uint256); function userRewardPerTokenPaid(address) external view returns (uint256); function withdraw(uint256 amount) external; } interface IStakingRewardsFactory { function deploy(address stakingToken, uint256 rewardAmount) external; function isOwner() external view returns (bool); function notifyRewardAmount(address stakingToken) external; function notifyRewardAmounts() external; function owner() external view returns (address); function renounceOwnership() external; function rewardsToken() external view returns (address); function stakingRewardsGenesis() external view returns (uint256); function stakingRewardsInfoByStakingToken(address) external view returns (address stakingRewards, uint256 rewardAmount); function stakingTokens(uint256) external view returns (address); function transferOwnership(address newOwner) external; } // File src/interfaces/masterchef.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; interface IMasterchef { function BONUS_MULTIPLIER() external view returns (uint256); function add( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; function bonusEndBlock() external view returns (uint256); function deposit(uint256 _pid, uint256 _amount) external; function dev(address _devaddr) external; function devFundDivRate() external view returns (uint256); function devaddr() external view returns (address); function emergencyWithdraw(uint256 _pid) external; function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); function massUpdatePools() external; function owner() external view returns (address); function pendingPickle(uint256 _pid, address _user) external view returns (uint256); function pendingReward(uint256 _pid, address _user) external view returns (uint256); function pending(uint256 _pid, address _user) external view returns (uint256); function pickle() external view returns (address); function picklePerBlock() external view returns (uint256); function poolInfo(uint256) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accPicklePerShare ); function poolLength() external view returns (uint256); function renounceOwnership() external; function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; function setBonusEndBlock(uint256 _bonusEndBlock) external; function setDevFundDivRate(uint256 _devFundDivRate) external; function setPicklePerBlock(uint256 _picklePerBlock) external; function startBlock() external view returns (uint256); function totalAllocPoint() external view returns (uint256); function transferOwnership(address newOwner) external; function updatePool(uint256 _pid) external; function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); function withdraw(uint256 _pid, uint256 _amount) external; } // File src/interfaces/uniswapv2.sol // SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface UniswapRouterV2 { function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function createPair(address tokenA, address tokenB) external returns (address pair); } // File src/interfaces/controller.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IController { function jars(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function withdrawReward(address, uint256) external; function earn(address, uint256) external; function strategies(address) external view returns (address); } // File src/strategies/arbitrum/strategy-base.sol pragma solidity ^0.6.7; // Strategy Contract Basics abstract contract StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Perfomance fees - start with 20% uint256 public performanceTreasuryFee = 2000; uint256 public constant performanceTreasuryMax = 10000; uint256 public performanceDevFee = 0; uint256 public constant performanceDevMax = 10000; // Withdrawal fee 0% // - 0% to treasury // - 0% to dev fund uint256 public withdrawalTreasuryFee = 0; uint256 public constant withdrawalTreasuryMax = 100000; uint256 public withdrawalDevFundFee = 0; uint256 public constant withdrawalDevFundMax = 100000; // Tokens address public want; address public constant weth = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; // User accounts address public governance; address public controller; address public strategist; address public timelock; // Dex address public sushiRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; mapping(address => bool) public harvesters; constructor( address _want, address _governance, address _strategist, address _controller, address _timelock ) public { require(_want != address(0)); require(_governance != address(0)); require(_strategist != address(0)); require(_controller != address(0)); require(_timelock != address(0)); want = _want; governance = _governance; strategist = _strategist; controller = _controller; timelock = _timelock; } // **** Modifiers **** // modifier onlyBenevolent { require( harvesters[msg.sender] || msg.sender == governance || msg.sender == strategist ); _; } // **** Views **** // function balanceOfWant() public view returns (uint256) { return IERC20(want).balanceOf(address(this)); } function balanceOfPool() public virtual view returns (uint256); function balanceOf() public view returns (uint256) { return balanceOfWant().add(balanceOfPool()); } function getName() external virtual pure returns (string memory); // **** Setters **** // function whitelistHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist || harvesters[msg.sender], "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = true; } } function revokeHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist, "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = false; } } function setWithdrawalDevFundFee(uint256 _withdrawalDevFundFee) external { require(msg.sender == timelock, "!timelock"); withdrawalDevFundFee = _withdrawalDevFundFee; } function setWithdrawalTreasuryFee(uint256 _withdrawalTreasuryFee) external { require(msg.sender == timelock, "!timelock"); withdrawalTreasuryFee = _withdrawalTreasuryFee; } function setPerformanceDevFee(uint256 _performanceDevFee) external { require(msg.sender == timelock, "!timelock"); performanceDevFee = _performanceDevFee; } function setPerformanceTreasuryFee(uint256 _performanceTreasuryFee) external { require(msg.sender == timelock, "!timelock"); performanceTreasuryFee = _performanceTreasuryFee; } function setStrategist(address _strategist) external { require(msg.sender == governance, "!governance"); strategist = _strategist; } function setGovernance(address _governance) external { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) external { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setController(address _controller) external { require(msg.sender == timelock, "!timelock"); controller = _controller; } // **** State mutations **** // function deposit() public virtual; // Controller only function for creating additional rewards from dust function withdraw(IERC20 _asset) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); require(want != address(_asset), "want"); balance = _asset.balanceOf(address(this)); _asset.safeTransfer(controller, balance); } // Withdraw partial funds, normally used with a jar withdrawal function withdraw(uint256 _amount) external { require(msg.sender == controller, "!controller"); uint256 _balance = IERC20(want).balanceOf(address(this)); if (_balance < _amount) { _amount = _withdrawSome(_amount.sub(_balance)); _amount = _amount.add(_balance); } uint256 _feeDev = _amount.mul(withdrawalDevFundFee).div( withdrawalDevFundMax ); IERC20(want).safeTransfer(IController(controller).devfund(), _feeDev); uint256 _feeTreasury = _amount.mul(withdrawalTreasuryFee).div( withdrawalTreasuryMax ); IERC20(want).safeTransfer( IController(controller).treasury(), _feeTreasury ); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, _amount.sub(_feeDev).sub(_feeTreasury)); } // Withdraw funds, used to swap between strategies function withdrawForSwap(uint256 _amount) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawSome(_amount); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); IERC20(want).safeTransfer(_jar, balance); } // Withdraw all funds, normally used when migrating strategies function withdrawAll() external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawAll(); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, balance); } function _withdrawAll() internal { _withdrawSome(balanceOfPool()); } function _withdrawSome(uint256 _amount) internal virtual returns (uint256); function harvest() public virtual; // **** Emergency functions **** function execute(address _target, bytes memory _data) public payable returns (bytes memory response) { require(msg.sender == timelock, "!timelock"); require(_target != address(0), "!target"); // call contract in current context assembly { let succeeded := delegatecall( sub(gas(), 5000), _target, add(_data, 0x20), mload(_data), 0, 0 ) let size := returndatasize() response := mload(0x40) mstore( 0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))) ) mstore(response, size) returndatacopy(add(response, 0x20), 0, size) switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(add(response, 0x20), size) } } } // **** Internal functions **** function _swapSushiswap( address _from, address _to, uint256 _amount ) internal { require(_to != address(0)); address[] memory path; if (_from == weth || _to == weth) { path = new address[](2); path[0] = _from; path[1] = _to; } else { path = new address[](3); path[0] = _from; path[1] = weth; path[2] = _to; } IERC20(_from).safeApprove(sushiRouter, 0); IERC20(_from).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), now.add(60) ); } function _swapSushiswapWithPath( address[] memory path, uint256 _amount ) internal { require(path[1] != address(0)); IERC20(path[0]).safeApprove(sushiRouter, 0); IERC20(path[0]).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), now.add(60) ); } function _distributePerformanceFeesAndDeposit() internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _want.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _want.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } } // File src/interfaces/dodo.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; pragma experimental ABIEncoderV2; interface IDodoMine { function getPendingRewardByToken(address user, address rewardToken) external view returns (uint256); function balanceOf(address user) external view returns (uint256); function deposit(uint256 amount) external; function withdraw(uint256 amount) external; function claimAllRewards() external; } interface IDodoPool { function _QUOTE_TOKEN_() external view returns (address); } interface IDodoSwap { function dodoSwapV1( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] calldata dodoPairs, uint256 directions, bool isIncentive, uint256 deadLine ) external returns (uint256 returnAmount); function dodoSwapV2TokenToToken( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] calldata dodoPairs, uint256 directions, bool isIncentive, uint256 deadLine ) external returns (uint256 returnAmount); function addDVMLiquidity( address dvmAddress, uint256 baseInAmount, uint256 quoteInAmount, uint256 baseMinAmount, uint256 quoteMinAmount, uint8 flag, uint256 deadLine ) external returns ( uint256 shares, uint256 baseAdjustedInAmount, uint256 quoteAdjustedInAmount ); } interface IDodoMultiSwap { function mixSwap( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] calldata mixAdapters, address[] calldata mixPairs, address[] calldata assetTo, uint256 directions, bytes[] calldata moreInfos, uint256 deadLine ) external returns (uint256 returnAmount); } // File src/strategies/arbitrum/dodo/strategy-dodo-hnd-eth-lp.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; contract StrategyDodoHndEthLp is StrategyBase { // Token addresses address public constant dodo = 0x69Eb4FA4a2fbd498C257C57Ea8b7655a2559A581; address public constant hnd = 0x10010078a54396F62c96dF8532dc2B4847d47ED3; address public constant rewards = 0x06633cd8E46C3048621A517D6bb5f0A84b4919c6; address public constant dodo_hnd_eth_lp = 0x65E17c52128396443d4A9A61EaCf0970F05F8a20; address public constant dodoSwap = 0x88CBf433471A0CD8240D2a12354362988b4593E5; address public constant dodoMultiSwap = 0x3B6067D4CAa8A14c63fdBE6318F27A0bBc9F9237; address public constant dodo_approve = 0xA867241cDC8d3b0C07C85cC06F25a0cD3b5474d8; address public constant dodoUsdcPair = 0x6a58c68FF5C4e4D90EB6561449CC74A64F818dA5; address public constant usdcEthPair = 0x905dfCD5649217c42684f23958568e533C711Aa3; address[] public dodoEthAdapters; address[] public dodoEthPairs; address[] public dodoEthSwapTo; address[] public hndEthRoute = [dodo_hnd_eth_lp]; constructor( address _governance, address _strategist, address _controller, address _timelock ) public StrategyBase( dodo_hnd_eth_lp, _governance, _strategist, _controller, _timelock ) { dodoEthAdapters = new address[](2); dodoEthPairs = new address[](2); dodoEthSwapTo = new address[](3); dodoEthAdapters = [ 0x8aB2D334cE64B50BE9Ab04184f7ccBa2A6bb6391, 0x17eBC315760Bb47384224A5f3BF829222fbD3Aa7 ]; dodoEthPairs = [dodoUsdcPair, usdcEthPair]; dodoEthSwapTo = [dodoUsdcPair, usdcEthPair, address(this)]; IERC20(dodo).approve(dodo_approve, uint256(-1)); IERC20(hnd).approve(dodo_approve, uint256(-1)); IERC20(weth).approve(dodo_approve, uint256(-1)); } function balanceOfPool() public view override returns (uint256) { uint256 amount = IDodoMine(rewards).balanceOf(address(this)); return amount; } function getHarvestable() external view returns (uint256, uint256) { uint256 _pendingDodo = IDodoMine(rewards).getPendingRewardByToken( address(this), dodo ); uint256 _pendingHnd = IDodoMine(rewards).getPendingRewardByToken( address(this), hnd ); // return IMiniChefV2(miniChef).pendingSushi(poolId, address(this)); return (_pendingDodo, _pendingHnd); } // **** Setters **** function deposit() public override { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { IERC20(want).safeApprove(rewards, 0); IERC20(want).safeApprove(rewards, _want); IDodoMine(rewards).deposit(_want); } } function _withdrawSome(uint256 _amount) internal override returns (uint256) { IDodoMine(rewards).withdraw(_amount); return _amount; } // **** State Mutations **** function harvest() public override onlyBenevolent { // Anyone can harvest it at any given time. // I understand the possibility of being frontrun // But ETH is a dark forest, and I wanna see how this plays out // i.e. will be be heavily frontrunned? // if so, a new strategy will be deployed. // Collects DODO tokens IDodoMine(rewards).claimAllRewards(); uint256 _dodo = IERC20(dodo).balanceOf(address(this)); if (_dodo > 0) { bytes[] memory moreInfos = new bytes[](2); moreInfos[0] = "0x00"; moreInfos[1] = "0x00"; IDodoMultiSwap(dodoMultiSwap).mixSwap( dodo, weth, _dodo, 1, dodoEthAdapters, dodoEthPairs, dodoEthSwapTo, 2, moreInfos, now + 60 ); } uint256 _hnd = IERC20(hnd).balanceOf((address(this))); address[] memory path = new address[](1); path[0] = dodo_hnd_eth_lp; if (_hnd > 0) { IDodoSwap(dodoSwap).dodoSwapV2TokenToToken( hnd, weth, _hnd, 1, path, 1, false, now + 60 ); } // Swap half WETH for HND uint256 _weth = IERC20(weth).balanceOf(address(this)); if (_weth > 0) { IDodoSwap(dodoSwap).dodoSwapV2TokenToToken( weth, hnd, _weth, 1, path, 0, false, now + 60 ); } // Adds in liquidity for WETH/HND _hnd = IERC20(hnd).balanceOf(address(this)); _weth = IERC20(weth).balanceOf(address(this)); if (_weth > 0 && _hnd > 0) { IDodoSwap(dodoSwap).addDVMLiquidity( dodo_hnd_eth_lp, _weth, _hnd, 1, 1, 0, now + 60 ); // Donates DUST IERC20(weth).transfer( IController(controller).treasury(), IERC20(weth).balanceOf(address(this)) ); IERC20(hnd).safeTransfer( IController(controller).treasury(), IERC20(hnd).balanceOf(address(this)) ); } _distributePerformanceFeesAndDeposit(); } // **** Views **** function getName() external pure override returns (string memory) { return "StrategyDodoHndEthLp"; } }
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dodo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dodoEthAdapters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dodoEthPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dodoEthSwapTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodoMultiSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodoSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodoUsdcPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodo_approve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodo_hnd_eth_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getHarvestable","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"harvesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hnd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hndEthRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"revokeHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceDevFee","type":"uint256"}],"name":"setPerformanceDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceTreasuryFee","type":"uint256"}],"name":"setPerformanceTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalDevFundFee","type":"uint256"}],"name":"setWithdrawalDevFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalTreasuryFee","type":"uint256"}],"name":"setWithdrawalTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcEthPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"whitelistHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawForSwap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalDevFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalDevFundMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526107d0600055600060015560006002556000600355731b02da8cb0d097eb8d57a175b88c7d8b47997506600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180602001604052807365e17c52128396443d4a9a61eacf0970f05f8a2073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600e906001620000cf9291906200097b565b50348015620000dd57600080fd5b50604051620061b5380380620061b5833981810160405281019062000103919062000cba565b7365e17c52128396443d4a9a61eacf0970f05f8a2084848484600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156200015757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200019257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001cd57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200020857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200024357600080fd5b84600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050600267ffffffffffffffff81118015620003a657600080fd5b50604051908082528060200260200182016040528015620003d65781602001602082028036833780820191505090505b50600b9080519060200190620003ee92919062000a0a565b50600267ffffffffffffffff811180156200040857600080fd5b50604051908082528060200260200182016040528015620004385781602001602082028036833780820191505090505b50600c90805190602001906200045092919062000a0a565b50600367ffffffffffffffff811180156200046a57600080fd5b506040519080825280602002602001820160405280156200049a5781602001602082028036833780820191505090505b50600d9080519060200190620004b292919062000a0a565b506040518060400160405280738ab2d334ce64b50be9ab04184f7ccba2a6bb639173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017317ebc315760bb47384224a5f3bf829222fbd3aa773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600b9060026200055a92919062000a99565b506040518060400160405280736a58c68ff5c4e4d90eb6561449cc74a64f818da573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173905dfcd5649217c42684f23958568e533c711aa373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600c9060026200060292919062000b28565b506040518060600160405280736a58c68ff5c4e4d90eb6561449cc74a64f818da573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173905dfcd5649217c42684f23958568e533c711aa373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600d906003620006dc92919062000bb7565b507369eb4fa4a2fbd498c257c57ea8b7655a2559a58173ffffffffffffffffffffffffffffffffffffffff1663095ea7b373a867241cdc8d3b0c07c85cc06f25a0cd3b5474d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200076292919062000d74565b602060405180830381600087803b1580156200077d57600080fd5b505af115801562000792573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007b8919062000d26565b507310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff1663095ea7b373a867241cdc8d3b0c07c85cc06f25a0cd3b5474d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200083e92919062000d74565b602060405180830381600087803b1580156200085957600080fd5b505af11580156200086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000894919062000d26565b507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663095ea7b373a867241cdc8d3b0c07c85cc06f25a0cd3b5474d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200091a92919062000d74565b602060405180830381600087803b1580156200093557600080fd5b505af11580156200094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000970919062000d26565b505050505062000e1f565b828054828255906000526020600020908101928215620009f7579160200282015b82811115620009f65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200099c565b5b50905062000a06919062000c46565b5090565b82805482825590600052602060002090810192821562000a86579160200282015b8281111562000a855782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000a2b565b5b50905062000a95919062000c46565b5090565b82805482825590600052602060002090810192821562000b15579160200282015b8281111562000b145782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000aba565b5b50905062000b24919062000c46565b5090565b82805482825590600052602060002090810192821562000ba4579160200282015b8281111562000ba35782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000b49565b5b50905062000bb3919062000c46565b5090565b82805482825590600052602060002090810192821562000c33579160200282015b8281111562000c325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000bd8565b5b50905062000c42919062000c46565b5090565b62000c8991905b8082111562000c8557600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010162000c4d565b5090565b90565b60008151905062000c9d8162000deb565b92915050565b60008151905062000cb48162000e05565b92915050565b6000806000806080858703121562000cd157600080fd5b600062000ce18782880162000c8c565b945050602062000cf48782880162000c8c565b935050604062000d078782880162000c8c565b925050606062000d1a8782880162000c8c565b91505092959194509250565b60006020828403121562000d3957600080fd5b600062000d498482850162000ca3565b91505092915050565b62000d5d8162000da1565b82525050565b62000d6e8162000de1565b82525050565b600060408201905062000d8b600083018562000d52565b62000d9a602083018462000d63565b9392505050565b600062000dae8262000dc1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000df68162000da1565b811462000e0257600080fd5b50565b62000e108162000db5565b811462000e1c57600080fd5b50565b6153868062000e2f6000396000f3fe6080604052600436106102e45760003560e01c8063722713f711610190578063bdacb303116100dc578063d0e30db011610095578063dd434d841161006f578063dd434d8414610b02578063e99d71c314610b3f578063f77c479114610b6a578063fe1f8f7a14610b95576102e4565b8063d0e30db014610a83578063d33219b414610a9a578063d5138de114610ac5576102e4565b8063bdacb30314610975578063c1a3d44c1461099e578063c6223e26146109c9578063c64bca2914610a06578063c65e324214610a31578063c7b9d53014610a5a576102e4565b80638ccdbb7011610149578063a38ae7a711610123578063a38ae7a7146108cf578063ab033ea9146108fa578063ab73e43314610923578063b1f55bd41461094c576102e4565b80638ccdbb701461085057806392eefe9b1461087b5780639ec5a894146108a4576102e4565b8063722713f71461073e5780638237859414610769578063853828b61461079257806387976583146107bd578063885375f7146107fa57806388993f2214610825576102e4565b806335d188dd1161024f5780634fe809cc1161020857806359739ec4116101e257806359739ec4146106925780635aa6e675146106bd5780635fa82374146106e85780636d13582c14610713576102e4565b80634fe809cc146105ff57806351cff8d91461062a57806351f3d0b814610667576102e4565b806335d188dd146104ff5780633a0d02371461053c5780633fc8cef31461056757806343817bc8146105925780634641257d146105bd578063479119be146105d4576102e4565b80631fe4a686116102a15780631fe4a686146103ef57806321b1fc4f1461041a578063249fb9b41461045757806326e886c6146104805780632a951451146104ab5780632e1a7d4d146104d6576102e4565b80630547104d146102e95780630e364fb614610315578063115880861461033e57806317d7de7c146103695780631cff79cd146103945780631f1fcd51146103c4575b600080fd5b3480156102f557600080fd5b506102fe610bc0565b60405161030c929190615023565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190614412565b610d3b565b005b34801561034a57600080fd5b50610353610f12565b6040516103609190615008565b60405180910390f35b34801561037557600080fd5b5061037e610fbb565b60405161038b9190614e66565b60405180910390f35b6103ae60048036038101906103a991906143be565b610ff8565b6040516103bb9190614e44565b60405180910390f35b3480156103d057600080fd5b506103d961114a565b6040516103e69190614b8b565b60405180910390f35b3480156103fb57600080fd5b50610404611170565b6040516104119190614b8b565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906144a9565b611196565b60405161044e9190614b8b565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906144a9565b6111d2565b005b34801561048c57600080fd5b5061049561126c565b6040516104a29190615008565b60405180910390f35b3480156104b757600080fd5b506104c0611272565b6040516104cd9190614b8b565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906144a9565b61128a565b005b34801561050b57600080fd5b50610526600480360381019061052191906144a9565b6117f1565b6040516105339190614b8b565b60405180910390f35b34801561054857600080fd5b5061055161182d565b60405161055e9190614b8b565b60405180910390f35b34801561057357600080fd5b5061057c611845565b6040516105899190614b8b565b60405180910390f35b34801561059e57600080fd5b506105a761185d565b6040516105b49190614b8b565b60405180910390f35b3480156105c957600080fd5b506105d2611875565b005b3480156105e057600080fd5b506105e961259f565b6040516105f69190615008565b60405180910390f35b34801561060b57600080fd5b506106146125a6565b6040516106219190615008565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614480565b6125ac565b60405161065e9190615008565b60405180910390f35b34801561067357600080fd5b5061067c6127ac565b6040516106899190615008565b60405180910390f35b34801561069e57600080fd5b506106a76127b2565b6040516106b49190615008565b60405180910390f35b3480156106c957600080fd5b506106d26127b8565b6040516106df9190614b8b565b60405180910390f35b3480156106f457600080fd5b506106fd6127de565b60405161070a9190614b8b565b60405180910390f35b34801561071f57600080fd5b506107286127f6565b6040516107359190614b8b565b60405180910390f35b34801561074a57600080fd5b5061075361281c565b6040516107609190615008565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906144a9565b612844565b005b34801561079e57600080fd5b506107a76128de565b6040516107b49190615008565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061436c565b612bb7565b6040516107f19190614e29565b60405180910390f35b34801561080657600080fd5b5061080f612bd7565b60405161081c9190614b8b565b60405180910390f35b34801561083157600080fd5b5061083a612bef565b6040516108479190615008565b60405180910390f35b34801561085c57600080fd5b50610865612bf5565b6040516108729190615008565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d919061436c565b612bfb565b005b3480156108b057600080fd5b506108b9612ccf565b6040516108c69190614b8b565b60405180910390f35b3480156108db57600080fd5b506108e4612ce7565b6040516108f19190614b8b565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c919061436c565b612cff565b005b34801561092f57600080fd5b5061094a600480360381019061094591906144a9565b612dd3565b005b34801561095857600080fd5b50610973600480360381019061096e9190614412565b612e6d565b005b34801561098157600080fd5b5061099c6004803603810190610997919061436c565b612ff0565b005b3480156109aa57600080fd5b506109b36130c4565b6040516109c09190615008565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb91906144a9565b613176565b6040516109fd9190615008565b60405180910390f35b348015610a1257600080fd5b50610a1b613453565b604051610a289190614b8b565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a5391906144a9565b61346b565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061436c565b613505565b005b348015610a8f57600080fd5b50610a986135d9565b005b348015610aa657600080fd5b50610aaf6137d7565b604051610abc9190614b8b565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae791906144a9565b6137fd565b604051610af99190614b8b565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906144a9565b613839565b604051610b369190614b8b565b60405180910390f35b348015610b4b57600080fd5b50610b54613875565b604051610b619190614b8b565b60405180910390f35b348015610b7657600080fd5b50610b7f61388d565b604051610b8c9190614b8b565b60405180910390f35b348015610ba157600080fd5b50610baa6138b3565b604051610bb79190615008565b60405180910390f35b60008060007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1662b68f08307369eb4fa4a2fbd498c257c57ea8b7655a2559a5816040518363ffffffff1660e01b8152600401610c27929190614ba6565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7791906144d2565b905060007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1662b68f08307310010078a54396f62c96df8532dc2b4847d47ed36040518363ffffffff1660e01b8152600401610cdd929190614ba6565b60206040518083038186803b158015610cf557600080fd5b505afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d91906144d2565b905081819350935050509091565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610de45750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e385750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614f28565b60405180910390fd5b60008090505b82829050811015610f0d576001600a6000858585818110610e9a57fe5b9050602002016020810190610eaf919061436c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e7d565b505050565b6000807306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f629190614b8b565b60206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb291906144d2565b90508091505090565b60606040518060400160405280601481526020017f5374726174656779446f646f486e644574684c70000000000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190614ea8565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461113a57611141565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d81815481106111a357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990614fc8565b60405180910390fd5b8060008190555050565b61271081565b736a58c68ff5c4e4d90eb6561449cc74a64f818da581565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614ec8565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113779190614b8b565b60206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c791906144d2565b905081811015611404576113ec6113e782846138ba90919063ffffffff16565b613904565b9150611401818361398d90919063ffffffff16565b91505b6000611430620186a0611422600354866139e290919063ffffffff16565b613a5290919063ffffffff16565b905061151e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561149d57600080fd5b505afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190614395565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b600061154a620186a061153c600254876139e290919063ffffffff16565b613a5290919063ffffffff16565b9050611638600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b757600080fd5b505afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef9190614395565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016116b79190614b8b565b60206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177090614f68565b60405180910390fd5b6117ea816117a284611794878a6138ba90919063ffffffff16565b6138ba90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5050505050565b600c81815481106117fe57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7365e17c52128396443d4a9a61eacf0970f05f8a2081565b7382af49447d8a07e3bd95bd0d56f35241523fbab181565b7310010078a54396f62c96df8532dc2b4847d47ed381565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061191a5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806119725750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61197b57600080fd5b7306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff16630b83a7276040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b5050505060007369eb4fa4a2fbd498c257c57ea8b7655a2559a58173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a3e9190614b8b565b60206040518083038186803b158015611a5657600080fd5b505afa158015611a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8e91906144d2565b90506000811115611c6a576060600267ffffffffffffffff81118015611ab357600080fd5b50604051908082528060200260200182016040528015611ae757816020015b6060815260200190600190039081611ad25790505b5090506040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525081600081518110611b2d57fe5b60200260200101819052506040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525081600181518110611b7b57fe5b6020026020010181905250733b6067d4caa8a14c63fdbe6318f27a0bbc9f923773ffffffffffffffffffffffffffffffffffffffff16637617b3897369eb4fa4a2fbd498c257c57ea8b7655a2559a5817382af49447d8a07e3bd95bd0d56f35241523fbab1856001600b600c600d60028a603c42016040518b63ffffffff1660e01b8152600401611c159a99989796959493929190614cd9565b602060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6791906144d2565b50505b60007310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cb99190614b8b565b60206040518083038186803b158015611cd157600080fd5b505afa158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0991906144d2565b90506060600167ffffffffffffffff81118015611d2557600080fd5b50604051908082528060200260200182016040528015611d545781602001602082028036833780820191505090505b5090507365e17c52128396443d4a9a61eacf0970f05f8a2081600081518110611d7957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000821115611e99577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663f87dc1b77310010078a54396f62c96df8532dc2b4847d47ed37382af49447d8a07e3bd95bd0d56f35241523fbab18560018660016000603c42016040518963ffffffff1660e01b8152600401611e45989796959493929190614c54565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9791906144d2565b505b60007382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ee89190614b8b565b60206040518083038186803b158015611f0057600080fd5b505afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3891906144d2565b9050600081111561201f577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663f87dc1b77382af49447d8a07e3bd95bd0d56f35241523fbab17310010078a54396f62c96df8532dc2b4847d47ed384600187600080603c42016040518963ffffffff1660e01b8152600401611fcb989796959493929190614bcf565b602060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d91906144d2565b505b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161206c9190614b8b565b60206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc91906144d2565b92507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161210b9190614b8b565b60206040518083038186803b15801561212357600080fd5b505afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b91906144d2565b905060008111801561216d5750600083115b15612591577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663674d94227365e17c52128396443d4a9a61eacf0970f05f8a2083866001806000603c42016040518863ffffffff1660e01b81526004016121e49796959493929190614dba565b606060405180830381600087803b1580156121fe57600080fd5b505af1158015612212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223691906144fb565b5050507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123099190614395565b7382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123569190614b8b565b60206040518083038186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a691906144d2565b6040518363ffffffff1660e01b81526004016123c3929190614d91565b602060405180830381600087803b1580156123dd57600080fd5b505af11580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190614457565b50612590600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561248157600080fd5b505afa158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b99190614395565b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125069190614b8b565b60206040518083038186803b15801561251e57600080fd5b505afa158015612532573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255691906144d2565b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5b612599613b22565b50505050565b620186a081565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263590614ec8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690614f08565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127089190614b8b565b60206040518083038186803b15801561272057600080fd5b505afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275891906144d2565b90506127a7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b919050565b60035481565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73a867241cdc8d3b0c07c85cc06f25a0cd3b5474d881565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283f612829610f12565b6128316130c4565b61398d90919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614fc8565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296790614ec8565b60405180910390fd5b612978613e0e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129d39190614b8b565b60206040518083038186803b1580156129eb57600080fd5b505afa1580156129ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2391906144d2565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612aa49190614b8b565b60206040518083038186803b158015612abc57600080fd5b505afa158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af49190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90614f68565b60405180910390fd5b612bb38183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b7388cbf433471a0cd8240d2a12354362988b4593e581565b60015481565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8290614fc8565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7306633cd8e46c3048621a517d6bb5f0a84b4919c681565b73905dfcd5649217c42684f23958568e533c711aa381565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8690614e88565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614fc8565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f165750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90614f28565b60405180910390fd5b60008090505b82829050811015612feb576000600a6000858585818110612f7857fe5b9050602002016020810190612f8d919061436c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612f5b565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307790614fc8565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131219190614b8b565b60206040518083038186803b15801561313957600080fd5b505afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317191906144d2565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff90614ec8565b60405180910390fd5b61321182613904565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161326d9190614b8b565b60206040518083038186803b15801561328557600080fd5b505afa158015613299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132bd91906144d2565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161333e9190614b8b565b60206040518083038186803b15801561335657600080fd5b505afa15801561336a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338e9190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f790614f68565b60405180910390fd5b61344d8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b50919050565b7369eb4fa4a2fbd498c257c57ea8b7655a2559a58181565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f290614fc8565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358c90614e88565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136369190614b8b565b60206040518083038186803b15801561364e57600080fd5b505afa158015613662573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368691906144d2565b905060008111156137d4576136f37306633cd8e46c3048621a517d6bb5f0a84b4919c66000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613e219092919063ffffffff16565b6137547306633cd8e46c3048621a517d6bb5f0a84b4919c682600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613e219092919063ffffffff16565b7306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b81526004016137a19190615008565b600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b505050505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b818154811061380a57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e818154811061384657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b733b6067d4caa8a14c63fdbe6318f27a0bbc9f923781565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b60006138fc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f7f565b905092915050565b60007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b81526004016139539190615008565b600060405180830381600087803b15801561396d57600080fd5b505af1158015613981573d6000803e3d6000fd5b50505050819050919050565b6000808284019050838110156139d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cf90614ee8565b60405180910390fd5b8091505092915050565b6000808314156139f55760009050613a4c565b6000828402905082848281613a0657fe5b0414613a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3e90614f48565b60405180910390fd5b809150505b92915050565b6000613a9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fda565b905092915050565b613b1d8363a9059cbb60e01b8484604051602401613abb929190614d91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061403b565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613b7f9190614b8b565b60206040518083038186803b158015613b9757600080fd5b505afa158015613bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcf91906144d2565b90506000811115613e0b57613cee600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015613c4557600080fd5b505afa158015613c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7d9190614395565b613ca6612710613c98600054866139e290919063ffffffff16565b613a5290919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b613e02600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015613d5957600080fd5b505afa158015613d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d919190614395565b613dba612710613dac600154866139e290919063ffffffff16565b613a5290919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b613e0a6135d9565b5b50565b613e1e613e19610f12565b613904565b50565b6000811480613eba575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613e68929190614ba6565b60206040518083038186803b158015613e8057600080fd5b505afa158015613e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb891906144d2565b145b613ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef090614fe8565b60405180910390fd5b613f7a8363095ea7b360e01b8484604051602401613f18929190614d91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061403b565b505050565b6000838311158290613fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fbe9190614e66565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290614021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140189190614e66565b60405180910390fd5b50600083858161402d57fe5b049050809150509392505050565b606061409d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166141029092919063ffffffff16565b90506000815111156140fd57808060200190518101906140bd9190614457565b6140fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140f390614fa8565b60405180910390fd5b5b505050565b6060614111848460008561411a565b90509392505050565b60606141258561423d565b614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415b90614f88565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405161418e9190614b74565b60006040518083038185875af1925050503d80600081146141cb576040519150601f19603f3d011682016040523d82523d6000602084013e6141d0565b606091505b509150915081156141e5578092505050614235565b6000815111156141f85780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422c9190614e66565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b60008135905061425f816152f4565b92915050565b600081519050614274816152f4565b92915050565b60008083601f84011261428c57600080fd5b8235905067ffffffffffffffff8111156142a557600080fd5b6020830191508360208202830111156142bd57600080fd5b9250929050565b6000815190506142d38161530b565b92915050565b600082601f8301126142ea57600080fd5b81356142fd6142f882615079565b61504c565b9150808252602083016020830185838301111561431957600080fd5b614324838284615267565b50505092915050565b60008135905061433c81615322565b92915050565b60008135905061435181615339565b92915050565b60008151905061436681615339565b92915050565b60006020828403121561437e57600080fd5b600061438c84828501614250565b91505092915050565b6000602082840312156143a757600080fd5b60006143b584828501614265565b91505092915050565b600080604083850312156143d157600080fd5b60006143df85828601614250565b925050602083013567ffffffffffffffff8111156143fc57600080fd5b614408858286016142d9565b9150509250929050565b6000806020838503121561442557600080fd5b600083013567ffffffffffffffff81111561443f57600080fd5b61444b8582860161427a565b92509250509250929050565b60006020828403121561446957600080fd5b6000614477848285016142c4565b91505092915050565b60006020828403121561449257600080fd5b60006144a08482850161432d565b91505092915050565b6000602082840312156144bb57600080fd5b60006144c984828501614342565b91505092915050565b6000602082840312156144e457600080fd5b60006144f284828501614357565b91505092915050565b60008060006060848603121561451057600080fd5b600061451e86828701614357565b935050602061452f86828701614357565b925050604061454086828701614357565b9150509250925092565b60006145568383614576565b60208301905092915050565b600061456e83836146db565b905092915050565b61457f816151b8565b82525050565b61458e816151b8565b82525050565b600061459f826150da565b6145a98185615138565b93506145b4836150a5565b8060005b838110156145e55781516145cc888261454a565b97506145d783615111565b9250506001810190506145b8565b5085935050505092915050565b60006145fd826150e5565b6146078185615138565b9350614612836150b5565b8060005b8381101561464a57614627826152c3565b614631888261454a565b975061463c8361511e565b925050600181019050614616565b5085935050505092915050565b6000614662826150f0565b61466c8185615149565b93508360208202850161467e856150ca565b8060005b858110156146ba578484038952815161469b8582614562565b94506146a68361512b565b925060208a01995050600181019050614682565b50829750879550505050505092915050565b6146d5816151ca565b82525050565b60006146e6826150fb565b6146f0818561515a565b9350614700818560208601615276565b614709816152d6565b840191505092915050565b600061471f826150fb565b614729818561516b565b9350614739818560208601615276565b614742816152d6565b840191505092915050565b6000614758826150fb565b614762818561517c565b9350614772818560208601615276565b80840191505092915050565b6147878161521f565b82525050565b61479681615231565b82525050565b6147a581615243565b82525050565b6147b481615255565b82525050565b60006147c582615106565b6147cf8185615187565b93506147df818560208601615276565b6147e8816152d6565b840191505092915050565b6000614800600b83615187565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b6000614840600783615187565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614880600b83615187565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b60006148c0601b83615187565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614900600483615187565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614940600e83615187565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b6000614980602183615187565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149e6600483615187565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614a26601d83615187565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614a66602a83615187565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614acc600983615187565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614b0c603683615187565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b614b6e81615208565b82525050565b6000614b80828461474d565b915081905092915050565b6000602082019050614ba06000830184614585565b92915050565b6000604082019050614bbb6000830185614585565b614bc86020830184614585565b9392505050565b600061010082019050614be5600083018b614585565b614bf2602083018a614585565b614bff6040830189614b65565b614c0c606083018861479c565b8181036080830152614c1e8187614594565b9050614c2d60a083018661477e565b614c3a60c08301856146cc565b614c4760e0830184614b65565b9998505050505050505050565b600061010082019050614c6a600083018b614585565b614c77602083018a614585565b614c846040830189614b65565b614c91606083018861479c565b8181036080830152614ca38187614594565b9050614cb260a083018661479c565b614cbf60c08301856146cc565b614ccc60e0830184614b65565b9998505050505050505050565b600061014082019050614cef600083018d614585565b614cfc602083018c614585565b614d09604083018b614b65565b614d16606083018a61479c565b8181036080830152614d2881896145f2565b905081810360a0830152614d3c81886145f2565b905081810360c0830152614d5081876145f2565b9050614d5f60e08301866147ab565b818103610100830152614d728185614657565b9050614d82610120830184614b65565b9b9a5050505050505050505050565b6000604082019050614da66000830185614585565b614db36020830184614b65565b9392505050565b600060e082019050614dcf600083018a614585565b614ddc6020830189614b65565b614de96040830188614b65565b614df6606083018761479c565b614e03608083018661479c565b614e1060a083018561478d565b614e1d60c0830184614b65565b98975050505050505050565b6000602082019050614e3e60008301846146cc565b92915050565b60006020820190508181036000830152614e5e8184614714565b905092915050565b60006020820190508181036000830152614e8081846147ba565b905092915050565b60006020820190508181036000830152614ea1816147f3565b9050919050565b60006020820190508181036000830152614ec181614833565b9050919050565b60006020820190508181036000830152614ee181614873565b9050919050565b60006020820190508181036000830152614f01816148b3565b9050919050565b60006020820190508181036000830152614f21816148f3565b9050919050565b60006020820190508181036000830152614f4181614933565b9050919050565b60006020820190508181036000830152614f6181614973565b9050919050565b60006020820190508181036000830152614f81816149d9565b9050919050565b60006020820190508181036000830152614fa181614a19565b9050919050565b60006020820190508181036000830152614fc181614a59565b9050919050565b60006020820190508181036000830152614fe181614abf565b9050919050565b6000602082019050818103600083015261500181614aff565b9050919050565b600060208201905061501d6000830184614b65565b92915050565b60006040820190506150386000830185614b65565b6150456020830184614b65565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561506f57600080fd5b8060405250919050565b600067ffffffffffffffff82111561509057600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006151c3826151e8565b9050919050565b60008115159050919050565b60006151e1826151b8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061522a82615208565b9050919050565b600061523c82615212565b9050919050565b600061524e82615208565b9050919050565b600061526082615208565b9050919050565b82818337600083830152505050565b60005b83811015615294578082015181840152602081019050615279565b838111156152a3576000848401525b50505050565b60006152bc6152b7836152e7565b615198565b9050919050565b60006152cf82546152a9565b9050919050565b6000601f19601f8301169050919050565b60008160001c9050919050565b6152fd816151b8565b811461530857600080fd5b50565b615314816151ca565b811461531f57600080fd5b50565b61532b816151d6565b811461533657600080fd5b50565b61534281615208565b811461534d57600080fd5b5056fea2646970667358221220127283f3706338a5d354dc3288812742716bab44a57f185ad324551c7ac51cf864736f6c63430006070033000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode
0x6080604052600436106102e45760003560e01c8063722713f711610190578063bdacb303116100dc578063d0e30db011610095578063dd434d841161006f578063dd434d8414610b02578063e99d71c314610b3f578063f77c479114610b6a578063fe1f8f7a14610b95576102e4565b8063d0e30db014610a83578063d33219b414610a9a578063d5138de114610ac5576102e4565b8063bdacb30314610975578063c1a3d44c1461099e578063c6223e26146109c9578063c64bca2914610a06578063c65e324214610a31578063c7b9d53014610a5a576102e4565b80638ccdbb7011610149578063a38ae7a711610123578063a38ae7a7146108cf578063ab033ea9146108fa578063ab73e43314610923578063b1f55bd41461094c576102e4565b80638ccdbb701461085057806392eefe9b1461087b5780639ec5a894146108a4576102e4565b8063722713f71461073e5780638237859414610769578063853828b61461079257806387976583146107bd578063885375f7146107fa57806388993f2214610825576102e4565b806335d188dd1161024f5780634fe809cc1161020857806359739ec4116101e257806359739ec4146106925780635aa6e675146106bd5780635fa82374146106e85780636d13582c14610713576102e4565b80634fe809cc146105ff57806351cff8d91461062a57806351f3d0b814610667576102e4565b806335d188dd146104ff5780633a0d02371461053c5780633fc8cef31461056757806343817bc8146105925780634641257d146105bd578063479119be146105d4576102e4565b80631fe4a686116102a15780631fe4a686146103ef57806321b1fc4f1461041a578063249fb9b41461045757806326e886c6146104805780632a951451146104ab5780632e1a7d4d146104d6576102e4565b80630547104d146102e95780630e364fb614610315578063115880861461033e57806317d7de7c146103695780631cff79cd146103945780631f1fcd51146103c4575b600080fd5b3480156102f557600080fd5b506102fe610bc0565b60405161030c929190615023565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190614412565b610d3b565b005b34801561034a57600080fd5b50610353610f12565b6040516103609190615008565b60405180910390f35b34801561037557600080fd5b5061037e610fbb565b60405161038b9190614e66565b60405180910390f35b6103ae60048036038101906103a991906143be565b610ff8565b6040516103bb9190614e44565b60405180910390f35b3480156103d057600080fd5b506103d961114a565b6040516103e69190614b8b565b60405180910390f35b3480156103fb57600080fd5b50610404611170565b6040516104119190614b8b565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906144a9565b611196565b60405161044e9190614b8b565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906144a9565b6111d2565b005b34801561048c57600080fd5b5061049561126c565b6040516104a29190615008565b60405180910390f35b3480156104b757600080fd5b506104c0611272565b6040516104cd9190614b8b565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906144a9565b61128a565b005b34801561050b57600080fd5b50610526600480360381019061052191906144a9565b6117f1565b6040516105339190614b8b565b60405180910390f35b34801561054857600080fd5b5061055161182d565b60405161055e9190614b8b565b60405180910390f35b34801561057357600080fd5b5061057c611845565b6040516105899190614b8b565b60405180910390f35b34801561059e57600080fd5b506105a761185d565b6040516105b49190614b8b565b60405180910390f35b3480156105c957600080fd5b506105d2611875565b005b3480156105e057600080fd5b506105e961259f565b6040516105f69190615008565b60405180910390f35b34801561060b57600080fd5b506106146125a6565b6040516106219190615008565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614480565b6125ac565b60405161065e9190615008565b60405180910390f35b34801561067357600080fd5b5061067c6127ac565b6040516106899190615008565b60405180910390f35b34801561069e57600080fd5b506106a76127b2565b6040516106b49190615008565b60405180910390f35b3480156106c957600080fd5b506106d26127b8565b6040516106df9190614b8b565b60405180910390f35b3480156106f457600080fd5b506106fd6127de565b60405161070a9190614b8b565b60405180910390f35b34801561071f57600080fd5b506107286127f6565b6040516107359190614b8b565b60405180910390f35b34801561074a57600080fd5b5061075361281c565b6040516107609190615008565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906144a9565b612844565b005b34801561079e57600080fd5b506107a76128de565b6040516107b49190615008565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061436c565b612bb7565b6040516107f19190614e29565b60405180910390f35b34801561080657600080fd5b5061080f612bd7565b60405161081c9190614b8b565b60405180910390f35b34801561083157600080fd5b5061083a612bef565b6040516108479190615008565b60405180910390f35b34801561085c57600080fd5b50610865612bf5565b6040516108729190615008565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d919061436c565b612bfb565b005b3480156108b057600080fd5b506108b9612ccf565b6040516108c69190614b8b565b60405180910390f35b3480156108db57600080fd5b506108e4612ce7565b6040516108f19190614b8b565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c919061436c565b612cff565b005b34801561092f57600080fd5b5061094a600480360381019061094591906144a9565b612dd3565b005b34801561095857600080fd5b50610973600480360381019061096e9190614412565b612e6d565b005b34801561098157600080fd5b5061099c6004803603810190610997919061436c565b612ff0565b005b3480156109aa57600080fd5b506109b36130c4565b6040516109c09190615008565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb91906144a9565b613176565b6040516109fd9190615008565b60405180910390f35b348015610a1257600080fd5b50610a1b613453565b604051610a289190614b8b565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a5391906144a9565b61346b565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061436c565b613505565b005b348015610a8f57600080fd5b50610a986135d9565b005b348015610aa657600080fd5b50610aaf6137d7565b604051610abc9190614b8b565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae791906144a9565b6137fd565b604051610af99190614b8b565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906144a9565b613839565b604051610b369190614b8b565b60405180910390f35b348015610b4b57600080fd5b50610b54613875565b604051610b619190614b8b565b60405180910390f35b348015610b7657600080fd5b50610b7f61388d565b604051610b8c9190614b8b565b60405180910390f35b348015610ba157600080fd5b50610baa6138b3565b604051610bb79190615008565b60405180910390f35b60008060007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1662b68f08307369eb4fa4a2fbd498c257c57ea8b7655a2559a5816040518363ffffffff1660e01b8152600401610c27929190614ba6565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7791906144d2565b905060007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1662b68f08307310010078a54396f62c96df8532dc2b4847d47ed36040518363ffffffff1660e01b8152600401610cdd929190614ba6565b60206040518083038186803b158015610cf557600080fd5b505afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d91906144d2565b905081819350935050509091565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610de45750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e385750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614f28565b60405180910390fd5b60008090505b82829050811015610f0d576001600a6000858585818110610e9a57fe5b9050602002016020810190610eaf919061436c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e7d565b505050565b6000807306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f629190614b8b565b60206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb291906144d2565b90508091505090565b60606040518060400160405280601481526020017f5374726174656779446f646f486e644574684c70000000000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190614ea8565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461113a57611141565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d81815481106111a357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990614fc8565b60405180910390fd5b8060008190555050565b61271081565b736a58c68ff5c4e4d90eb6561449cc74a64f818da581565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614ec8565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113779190614b8b565b60206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c791906144d2565b905081811015611404576113ec6113e782846138ba90919063ffffffff16565b613904565b9150611401818361398d90919063ffffffff16565b91505b6000611430620186a0611422600354866139e290919063ffffffff16565b613a5290919063ffffffff16565b905061151e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561149d57600080fd5b505afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190614395565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b600061154a620186a061153c600254876139e290919063ffffffff16565b613a5290919063ffffffff16565b9050611638600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b757600080fd5b505afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef9190614395565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016116b79190614b8b565b60206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177090614f68565b60405180910390fd5b6117ea816117a284611794878a6138ba90919063ffffffff16565b6138ba90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5050505050565b600c81815481106117fe57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7365e17c52128396443d4a9a61eacf0970f05f8a2081565b7382af49447d8a07e3bd95bd0d56f35241523fbab181565b7310010078a54396f62c96df8532dc2b4847d47ed381565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061191a5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806119725750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61197b57600080fd5b7306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff16630b83a7276040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b5050505060007369eb4fa4a2fbd498c257c57ea8b7655a2559a58173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a3e9190614b8b565b60206040518083038186803b158015611a5657600080fd5b505afa158015611a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8e91906144d2565b90506000811115611c6a576060600267ffffffffffffffff81118015611ab357600080fd5b50604051908082528060200260200182016040528015611ae757816020015b6060815260200190600190039081611ad25790505b5090506040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525081600081518110611b2d57fe5b60200260200101819052506040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525081600181518110611b7b57fe5b6020026020010181905250733b6067d4caa8a14c63fdbe6318f27a0bbc9f923773ffffffffffffffffffffffffffffffffffffffff16637617b3897369eb4fa4a2fbd498c257c57ea8b7655a2559a5817382af49447d8a07e3bd95bd0d56f35241523fbab1856001600b600c600d60028a603c42016040518b63ffffffff1660e01b8152600401611c159a99989796959493929190614cd9565b602060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6791906144d2565b50505b60007310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cb99190614b8b565b60206040518083038186803b158015611cd157600080fd5b505afa158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0991906144d2565b90506060600167ffffffffffffffff81118015611d2557600080fd5b50604051908082528060200260200182016040528015611d545781602001602082028036833780820191505090505b5090507365e17c52128396443d4a9a61eacf0970f05f8a2081600081518110611d7957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000821115611e99577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663f87dc1b77310010078a54396f62c96df8532dc2b4847d47ed37382af49447d8a07e3bd95bd0d56f35241523fbab18560018660016000603c42016040518963ffffffff1660e01b8152600401611e45989796959493929190614c54565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9791906144d2565b505b60007382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ee89190614b8b565b60206040518083038186803b158015611f0057600080fd5b505afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3891906144d2565b9050600081111561201f577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663f87dc1b77382af49447d8a07e3bd95bd0d56f35241523fbab17310010078a54396f62c96df8532dc2b4847d47ed384600187600080603c42016040518963ffffffff1660e01b8152600401611fcb989796959493929190614bcf565b602060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d91906144d2565b505b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161206c9190614b8b565b60206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc91906144d2565b92507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161210b9190614b8b565b60206040518083038186803b15801561212357600080fd5b505afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b91906144d2565b905060008111801561216d5750600083115b15612591577388cbf433471a0cd8240d2a12354362988b4593e573ffffffffffffffffffffffffffffffffffffffff1663674d94227365e17c52128396443d4a9a61eacf0970f05f8a2083866001806000603c42016040518863ffffffff1660e01b81526004016121e49796959493929190614dba565b606060405180830381600087803b1580156121fe57600080fd5b505af1158015612212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223691906144fb565b5050507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123099190614395565b7382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123569190614b8b565b60206040518083038186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a691906144d2565b6040518363ffffffff1660e01b81526004016123c3929190614d91565b602060405180830381600087803b1580156123dd57600080fd5b505af11580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190614457565b50612590600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561248157600080fd5b505afa158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b99190614395565b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125069190614b8b565b60206040518083038186803b15801561251e57600080fd5b505afa158015612532573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255691906144d2565b7310010078a54396f62c96df8532dc2b4847d47ed373ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5b612599613b22565b50505050565b620186a081565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263590614ec8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690614f08565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127089190614b8b565b60206040518083038186803b15801561272057600080fd5b505afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275891906144d2565b90506127a7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b919050565b60035481565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73a867241cdc8d3b0c07c85cc06f25a0cd3b5474d881565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283f612829610f12565b6128316130c4565b61398d90919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614fc8565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296790614ec8565b60405180910390fd5b612978613e0e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129d39190614b8b565b60206040518083038186803b1580156129eb57600080fd5b505afa1580156129ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2391906144d2565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612aa49190614b8b565b60206040518083038186803b158015612abc57600080fd5b505afa158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af49190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90614f68565b60405180910390fd5b612bb38183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b7388cbf433471a0cd8240d2a12354362988b4593e581565b60015481565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8290614fc8565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7306633cd8e46c3048621a517d6bb5f0a84b4919c681565b73905dfcd5649217c42684f23958568e533c711aa381565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8690614e88565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614fc8565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f165750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90614f28565b60405180910390fd5b60008090505b82829050811015612feb576000600a6000858585818110612f7857fe5b9050602002016020810190612f8d919061436c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612f5b565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307790614fc8565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131219190614b8b565b60206040518083038186803b15801561313957600080fd5b505afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317191906144d2565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff90614ec8565b60405180910390fd5b61321182613904565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161326d9190614b8b565b60206040518083038186803b15801561328557600080fd5b505afa158015613299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132bd91906144d2565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161333e9190614b8b565b60206040518083038186803b15801561335657600080fd5b505afa15801561336a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338e9190614395565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f790614f68565b60405180910390fd5b61344d8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b50919050565b7369eb4fa4a2fbd498c257c57ea8b7655a2559a58181565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f290614fc8565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358c90614e88565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136369190614b8b565b60206040518083038186803b15801561364e57600080fd5b505afa158015613662573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368691906144d2565b905060008111156137d4576136f37306633cd8e46c3048621a517d6bb5f0a84b4919c66000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613e219092919063ffffffff16565b6137547306633cd8e46c3048621a517d6bb5f0a84b4919c682600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613e219092919063ffffffff16565b7306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b81526004016137a19190615008565b600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b505050505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b818154811061380a57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e818154811061384657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b733b6067d4caa8a14c63fdbe6318f27a0bbc9f923781565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b60006138fc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f7f565b905092915050565b60007306633cd8e46c3048621a517d6bb5f0a84b4919c673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b81526004016139539190615008565b600060405180830381600087803b15801561396d57600080fd5b505af1158015613981573d6000803e3d6000fd5b50505050819050919050565b6000808284019050838110156139d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cf90614ee8565b60405180910390fd5b8091505092915050565b6000808314156139f55760009050613a4c565b6000828402905082848281613a0657fe5b0414613a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3e90614f48565b60405180910390fd5b809150505b92915050565b6000613a9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fda565b905092915050565b613b1d8363a9059cbb60e01b8484604051602401613abb929190614d91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061403b565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613b7f9190614b8b565b60206040518083038186803b158015613b9757600080fd5b505afa158015613bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcf91906144d2565b90506000811115613e0b57613cee600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015613c4557600080fd5b505afa158015613c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7d9190614395565b613ca6612710613c98600054866139e290919063ffffffff16565b613a5290919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b613e02600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015613d5957600080fd5b505afa158015613d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d919190614395565b613dba612710613dac600154866139e290919063ffffffff16565b613a5290919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a9c9092919063ffffffff16565b613e0a6135d9565b5b50565b613e1e613e19610f12565b613904565b50565b6000811480613eba575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613e68929190614ba6565b60206040518083038186803b158015613e8057600080fd5b505afa158015613e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb891906144d2565b145b613ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef090614fe8565b60405180910390fd5b613f7a8363095ea7b360e01b8484604051602401613f18929190614d91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061403b565b505050565b6000838311158290613fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fbe9190614e66565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290614021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140189190614e66565b60405180910390fd5b50600083858161402d57fe5b049050809150509392505050565b606061409d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166141029092919063ffffffff16565b90506000815111156140fd57808060200190518101906140bd9190614457565b6140fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140f390614fa8565b60405180910390fd5b5b505050565b6060614111848460008561411a565b90509392505050565b60606141258561423d565b614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415b90614f88565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405161418e9190614b74565b60006040518083038185875af1925050503d80600081146141cb576040519150601f19603f3d011682016040523d82523d6000602084013e6141d0565b606091505b509150915081156141e5578092505050614235565b6000815111156141f85780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422c9190614e66565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b60008135905061425f816152f4565b92915050565b600081519050614274816152f4565b92915050565b60008083601f84011261428c57600080fd5b8235905067ffffffffffffffff8111156142a557600080fd5b6020830191508360208202830111156142bd57600080fd5b9250929050565b6000815190506142d38161530b565b92915050565b600082601f8301126142ea57600080fd5b81356142fd6142f882615079565b61504c565b9150808252602083016020830185838301111561431957600080fd5b614324838284615267565b50505092915050565b60008135905061433c81615322565b92915050565b60008135905061435181615339565b92915050565b60008151905061436681615339565b92915050565b60006020828403121561437e57600080fd5b600061438c84828501614250565b91505092915050565b6000602082840312156143a757600080fd5b60006143b584828501614265565b91505092915050565b600080604083850312156143d157600080fd5b60006143df85828601614250565b925050602083013567ffffffffffffffff8111156143fc57600080fd5b614408858286016142d9565b9150509250929050565b6000806020838503121561442557600080fd5b600083013567ffffffffffffffff81111561443f57600080fd5b61444b8582860161427a565b92509250509250929050565b60006020828403121561446957600080fd5b6000614477848285016142c4565b91505092915050565b60006020828403121561449257600080fd5b60006144a08482850161432d565b91505092915050565b6000602082840312156144bb57600080fd5b60006144c984828501614342565b91505092915050565b6000602082840312156144e457600080fd5b60006144f284828501614357565b91505092915050565b60008060006060848603121561451057600080fd5b600061451e86828701614357565b935050602061452f86828701614357565b925050604061454086828701614357565b9150509250925092565b60006145568383614576565b60208301905092915050565b600061456e83836146db565b905092915050565b61457f816151b8565b82525050565b61458e816151b8565b82525050565b600061459f826150da565b6145a98185615138565b93506145b4836150a5565b8060005b838110156145e55781516145cc888261454a565b97506145d783615111565b9250506001810190506145b8565b5085935050505092915050565b60006145fd826150e5565b6146078185615138565b9350614612836150b5565b8060005b8381101561464a57614627826152c3565b614631888261454a565b975061463c8361511e565b925050600181019050614616565b5085935050505092915050565b6000614662826150f0565b61466c8185615149565b93508360208202850161467e856150ca565b8060005b858110156146ba578484038952815161469b8582614562565b94506146a68361512b565b925060208a01995050600181019050614682565b50829750879550505050505092915050565b6146d5816151ca565b82525050565b60006146e6826150fb565b6146f0818561515a565b9350614700818560208601615276565b614709816152d6565b840191505092915050565b600061471f826150fb565b614729818561516b565b9350614739818560208601615276565b614742816152d6565b840191505092915050565b6000614758826150fb565b614762818561517c565b9350614772818560208601615276565b80840191505092915050565b6147878161521f565b82525050565b61479681615231565b82525050565b6147a581615243565b82525050565b6147b481615255565b82525050565b60006147c582615106565b6147cf8185615187565b93506147df818560208601615276565b6147e8816152d6565b840191505092915050565b6000614800600b83615187565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b6000614840600783615187565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614880600b83615187565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b60006148c0601b83615187565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614900600483615187565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614940600e83615187565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b6000614980602183615187565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149e6600483615187565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614a26601d83615187565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614a66602a83615187565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614acc600983615187565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614b0c603683615187565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b614b6e81615208565b82525050565b6000614b80828461474d565b915081905092915050565b6000602082019050614ba06000830184614585565b92915050565b6000604082019050614bbb6000830185614585565b614bc86020830184614585565b9392505050565b600061010082019050614be5600083018b614585565b614bf2602083018a614585565b614bff6040830189614b65565b614c0c606083018861479c565b8181036080830152614c1e8187614594565b9050614c2d60a083018661477e565b614c3a60c08301856146cc565b614c4760e0830184614b65565b9998505050505050505050565b600061010082019050614c6a600083018b614585565b614c77602083018a614585565b614c846040830189614b65565b614c91606083018861479c565b8181036080830152614ca38187614594565b9050614cb260a083018661479c565b614cbf60c08301856146cc565b614ccc60e0830184614b65565b9998505050505050505050565b600061014082019050614cef600083018d614585565b614cfc602083018c614585565b614d09604083018b614b65565b614d16606083018a61479c565b8181036080830152614d2881896145f2565b905081810360a0830152614d3c81886145f2565b905081810360c0830152614d5081876145f2565b9050614d5f60e08301866147ab565b818103610100830152614d728185614657565b9050614d82610120830184614b65565b9b9a5050505050505050505050565b6000604082019050614da66000830185614585565b614db36020830184614b65565b9392505050565b600060e082019050614dcf600083018a614585565b614ddc6020830189614b65565b614de96040830188614b65565b614df6606083018761479c565b614e03608083018661479c565b614e1060a083018561478d565b614e1d60c0830184614b65565b98975050505050505050565b6000602082019050614e3e60008301846146cc565b92915050565b60006020820190508181036000830152614e5e8184614714565b905092915050565b60006020820190508181036000830152614e8081846147ba565b905092915050565b60006020820190508181036000830152614ea1816147f3565b9050919050565b60006020820190508181036000830152614ec181614833565b9050919050565b60006020820190508181036000830152614ee181614873565b9050919050565b60006020820190508181036000830152614f01816148b3565b9050919050565b60006020820190508181036000830152614f21816148f3565b9050919050565b60006020820190508181036000830152614f4181614933565b9050919050565b60006020820190508181036000830152614f6181614973565b9050919050565b60006020820190508181036000830152614f81816149d9565b9050919050565b60006020820190508181036000830152614fa181614a19565b9050919050565b60006020820190508181036000830152614fc181614a59565b9050919050565b60006020820190508181036000830152614fe181614abf565b9050919050565b6000602082019050818103600083015261500181614aff565b9050919050565b600060208201905061501d6000830184614b65565b92915050565b60006040820190506150386000830185614b65565b6150456020830184614b65565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561506f57600080fd5b8060405250919050565b600067ffffffffffffffff82111561509057600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006151c3826151e8565b9050919050565b60008115159050919050565b60006151e1826151b8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061522a82615208565b9050919050565b600061523c82615212565b9050919050565b600061524e82615208565b9050919050565b600061526082615208565b9050919050565b82818337600083830152505050565b60005b83811015615294578082015181840152602081019050615279565b838111156152a3576000848401525b50505050565b60006152bc6152b7836152e7565b615198565b9050919050565b60006152cf82546152a9565b9050919050565b6000601f19601f8301169050919050565b60008160001c9050919050565b6152fd816151b8565b811461530857600080fd5b50565b615314816151ca565b811461531f57600080fd5b50565b61532b816151d6565b811461533657600080fd5b50565b61534281615208565b811461534d57600080fd5b5056fea2646970667358221220127283f3706338a5d354dc3288812742716bab44a57f185ad324551c7ac51cf864736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
-----Decoded View---------------
Arg [0] : _governance (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [1] : _strategist (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [2] : _controller (address): 0x55D5BCEf2BFD4921B8790525FF87919c2E26bD03
Arg [3] : _timelock (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [1] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [2] : 00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03
Arg [3] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed ByteCode Sourcemap
54702:6052:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;56885:464:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56885:464:0;;;:::i;:::-;;;;;;;;;;;;;;;;;44548:340;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44548:340:0;;;;;;;;;;;;;;;;:::i;:::-;;56710:167;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56710:167:0;;;:::i;:::-;;;;;;;;;;;;;;;;60637:114;;5:9:-1;2:2;;;27:1;24;17:12;2:2;60637:114:0;;;:::i;:::-;;;;;;;;;;;;;;;;49451:1053;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42892:19;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42892:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;43086:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43086:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;55692:30;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55692:30:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;45792:213;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45792:213:0;;;;;;;;;;;;;;;;:::i;:::-;;42419:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42419:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;55422:90;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55422:90:0;;;:::i;:::-;;;;;;;;;;;;;;;;47168:1022;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47168:1022:0;;;;;;;;;;;;;;;;:::i;:::-;;55656:29;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55656:29:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;55032:93;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55032:93:0;;;:::i;:::-;;;;;;;;;;;;;;;;42918:73;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42918:73:0;;;:::i;:::-;;;;;;;;;;;;;;;;54859:72;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54859:72:0;;;:::i;:::-;;;;;;;;;;;;;;;;57923:2680;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57923:2680:0;;;:::i;:::-;;42815:53;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42815:53:0;;;:::i;:::-;;;;;;;;;;;;;;;;42525:49;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42525:49:0;;;:::i;:::-;;;;;;;;;;;;;;;;46803:289;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46803:289:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42769:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42769:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;42368:44;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42368:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;43022:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43022:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;55323:90;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55323:90:0;;;:::i;:::-;;;;;;;;;;;;;;;;43163:71;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43163:71:0;;;:::i;:::-;;;;;;;;;;;;;;;;44323:113;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44323:113:0;;;:::i;:::-;;;;;;;;;;;;;;;;45402:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45402:195:0;;;;;;;;;;;;;;;;:::i;:::-;;48758:430;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48758:430:0;;;:::i;:::-;;;;;;;;;;;;;;;;43243:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43243:42:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;55132:86;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55132:86:0;;;:::i;:::-;;;;;;;;;;;;;;;;42482:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42482:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;42659:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42659:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;46490:151;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46490:151:0;;;;;;;;;;;;;;;;:::i;:::-;;54940:85;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54940:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;55519:89;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55519:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;46176:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46176:155:0;;;;;;;;;;;;;;;;:::i;:::-;;45203:191;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45203:191:0;;;;;;;;;;;;;;;;:::i;:::-;;44896:299;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44896:299:0;;;;;;;;;;;;;;;;:::i;:::-;;46339:143;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46339:143:0;;;;;;;;;;;;;;;;:::i;:::-;;44126:118;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44126:118:0;;;:::i;:::-;;;;;;;;;;;;;;;;48254:428;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48254:428:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;54779:73;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54779:73:0;;;:::i;:::-;;;;;;;;;;;;;;;;45605:179;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45605:179:0;;;;;;;;;;;;;;;;:::i;:::-;;46013:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46013:155:0;;;;;;;;;;;;;;;;:::i;:::-;;57385:298;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57385:298:0;;;:::i;:::-;;43118:23;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43118:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;55617:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55617:32:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;55731:48;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55731:48:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;55225:91;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55225:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;43054:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43054:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;42706:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42706:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;56885:464;56934:7;56943;56963:20;54983:42;56986;;;57051:4;54810:42;56986:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56986:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56986:100:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56986:100:0;;;;;;;;;56963:123;;57097:19;54983:42;57119;;;57184:4;54889:42;57119:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57119:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57119:99:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57119:99:0;;;;;;;;;57097:121;;57315:12;57329:11;57307:34;;;;;;56885:464;;:::o;44548:340::-;44651:10;;;;;;;;;;;44637:24;;:10;:24;;;:66;;;;44693:10;;;;;;;;;;;44679:24;;:10;:24;;;44637:66;:92;;;;44707:10;:22;44718:10;44707:22;;;;;;;;;;;;;;;;;;;;;;;;;44637:92;44629:119;;;;;;;;;;;;;;;;;;;;;;44779:6;44788:1;44779:10;;44774:107;44795:11;;:18;;44791:1;:22;44774:107;;;44865:4;44836:10;:26;44847:11;;44859:1;44847:14;;;;;;;;;;;;;;;;;;;;;;44836:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;44815:4;;;;;;;44774:107;;;;44548:340;;:::o;56710:167::-;56765:7;56785:14;54983:42;56802:28;;;56839:4;56802:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56802:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56802:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56802:43:0;;;;;;;;;56785:60;;56863:6;56856:13;;;56710:167;:::o;60637:114::-;60688:13;60714:29;;;;;;;;;;;;;;;;;;;60637:114;:::o;49451:1053::-;49556:21;49617:8;;;;;;;;;;;49603:22;;:10;:22;;;49595:44;;;;;;;;;;;;;;;;;;;;;;49677:1;49658:21;;:7;:21;;;;49650:41;;;;;;;;;;;;;;;;;;;;;;49968:1;49948;49923:5;49917:12;49893:4;49886:5;49882:16;49856:7;49832:4;49825:5;49821:16;49790:194;50010:16;50060:4;50054:11;50042:23;;50177:4;50173:9;50166:4;50159;50153;50149:15;50145:26;50141:42;50131:8;50127:57;50104:4;50079:120;50230:4;50220:8;50213:22;50288:4;50285:1;50278:4;50268:8;50264:19;50249:44;50323:9;50316:17;50356:1;50351:135;;;;50309:177;;50351:135;50462:4;50455;50445:8;50441:19;50434:33;50309:177;;49758:739;;;;;;:::o;42892:19::-;;;;;;;;;;;;;:::o;43086:25::-;;;;;;;;;;;;;:::o;55692:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45792:213::-;45916:8;;;;;;;;;;;45902:22;;:10;:22;;;45894:44;;;;;;;;;;;;;;;;;;;;;;45974:23;45949:22;:48;;;;45792:213;:::o;42419:54::-;42468:5;42419:54;:::o;55422:90::-;55470:42;55422:90;:::o;47168:1022::-;47245:10;;;;;;;;;;;47231:24;;:10;:24;;;47223:48;;;;;;;;;;;;;;;;;;;;;;47282:16;47308:4;;;;;;;;;;;47301:22;;;47332:4;47301:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47301:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47301:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47301:37:0;;;;;;;;;47282:56;;47364:7;47353:8;:18;47349:143;;;47398:36;47412:21;47424:8;47412:7;:11;;:21;;;;:::i;:::-;47398:13;:36::i;:::-;47388:46;;47459:21;47471:8;47459:7;:11;;:21;;;;:::i;:::-;47449:31;;47349:143;47504:15;47522:83;42862:6;47522:33;47534:20;;47522:7;:11;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;47504:101;;47616:69;47654:10;;;;;;;;;;;47642:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47642:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47642:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47642:33:0;;;;;;;;;47677:7;47623:4;;;;;;;;;;;47616:25;;;;:69;;;;;:::i;:::-;47698:20;47721:85;42754:6;47721:34;47733:21;;47721:7;:11;;:34;;;;:::i;:::-;:38;;:85;;;;:::i;:::-;47698:108;;47817:112;47869:10;;;;;;;;;;;47857:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47857:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47857:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47857:34:0;;;;;;;;;47906:12;47824:4;;;;;;;;;;;47817:25;;;;:112;;;;;:::i;:::-;47942:12;47969:10;;;;;;;;;;;47957:28;;;47994:4;;;;;;;;;;;47957:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47957:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47957:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47957:43:0;;;;;;;;;47942:58;;48035:1;48019:18;;:4;:18;;;;48011:35;;;;;;;;;;;;;;;;;;;;;;48111:71;48137:4;48143:38;48168:12;48143:20;48155:7;48143;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;48118:4;;;;;;;;;;;48111:25;;;;:71;;;;;:::i;:::-;47168:1022;;;;;:::o;55656:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55032:93::-;55083:42;55032:93;:::o;42918:73::-;42949:42;42918:73;:::o;54859:72::-;54889:42;54859:72;:::o;57923:2680::-;43946:10;:22;43957:10;43946:22;;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;44003:10;;;;;;;;;;;43989:24;;:10;:24;;;43946:67;:112;;;;44048:10;;;;;;;;;;;44034:24;;:10;:24;;;43946:112;43924:145;;12:1:-1;9;2:12;43924:145:0;54983:42:::1;58310:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;58310:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;58310:36:0;;;;58357:13;54810:42;58373:22;;;58404:4;58373:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;58373:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;58373:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;58373:37:0;;;;;;;;;58357:53;;58433:1;58425:5;:9;58421:486;;;58451:24;58490:1;58478:14;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;58478:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58451:41;;58507:21;;;;;;;;;;;;;;;;::::0;:9:::1;58517:1;58507:12;;;;;;;;;;;;;:21;;;;58543;;;;;;;;;;;;;;;;::::0;:9:::1;58553:1;58543:12;;;;;;;;;;;;;:21;;;;55274:42;58581:37;;;54810:42;42949;58683:5;58707:1;58727:15;58761:12;58792:13;58824:1;58844:9;58878:2;58872:3;:8;58581:314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;58581:314:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;58581:314:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;58581:314:0;;;;;;;;;;58421:486;;58927:12;54889:42;58942:21;;;58973:4;58942:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;58942:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;58942:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;58942:38:0;;;;;;;;;58927:53;;58991:21;59029:1;59015:16;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59015:16:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;156:4;148:6;144:17;134:27;;0:165;59015:16:0;;;;58991:40;;55083:42;59042:4;59047:1;59042:7;;;;;;;;;;;;;:25;;;;;;;;;::::0;::::1;59091:1;59084:4;:8;59080:280;;;55176:42;59109;;;54889;42949;59215:4;59238:1;59258:4;59281:1;59301:5;59331:2;59325:3;:8;59109:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59109:239:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59109:239:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59109:239:0;;;;;;;;;;59080:280;59407:13;42949:42;59423:22;;;59454:4;59423:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59423:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59423:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59423:37:0;;;;;;;;;59407:53;;59483:1;59475:5;:9;59471:282;;;55176:42;59501;;;42949;54889;59607:5;59631:1;59651:4;59674:1;59694:5:::0;59724:2:::1;59718:3;:8;59501:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59501:240:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59501:240:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59501:240:0;;;;;;;;;;59471:282;54889:42;59815:21;;;59845:4;59815:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59815:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59815:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59815:36:0;;;;;;;;;59808:43;;42949:42;59870:22;;;59901:4;59870:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59870:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59870:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59870:37:0;;;;;;;;;59862:45;;59930:1;59922:5;:9;:21;;;;;59942:1;59935:4;:8;59922:21;59918:627;;;55176:42;59962:35;;;55083:42;60050:5;60074:4;60097:1;60117::::0;60137::::1;60163:2;60157:3;:8;59962:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59962:218:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59962:218:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59962:218:0;;;;;;;;;;;;42949:42;60226:21;;;60278:10;;;;;;;;;;;60266:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60266:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60266:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60266:34:0;;;;;;;;;42949:42;60319:22;;;60350:4;60319:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60319:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60319:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60319:37:0;;;;;;;;;60226:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60226:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60226:145:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60226:145:0;;;;;;;;;;60386:147;60441:10;;;;;;;;;;;60429:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60429:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60429:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60429:34:0;;;;;;;;;54889:42;60482:21;;;60512:4;60482:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60482:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60482:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60482:36:0;;;;;;;;;54889:42;60386:24;;;;:147;;;;;:::i;:::-;59918:627;60557:38;:36;:38::i;:::-;44080:1;;;;57923:2680::o:0;42815:53::-;42862:6;42815:53;:::o;42525:49::-;42569:5;42525:49;:::o;46803:289::-;46854:15;46904:10;;;;;;;;;;;46890:24;;:10;:24;;;46882:48;;;;;;;;;;;;;;;;;;;;;;46965:6;46949:23;;:4;;;;;;;;;;;:23;;;;46941:40;;;;;;;;;;;;;;;;;;;;;;47002:6;:16;;;47027:4;47002:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47002:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47002:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47002:31:0;;;;;;;;;46992:41;;47044:40;47064:10;;;;;;;;;;;47076:7;47044:6;:19;;;;:40;;;;;:::i;:::-;46803:289;;;:::o;42769:39::-;;;;:::o;42368:44::-;;;;:::o;43022:25::-;;;;;;;;;;;;;:::o;55323:90::-;55371:42;55323:90;:::o;43163:71::-;;;;;;;;;;;;;:::o;44323:113::-;44365:7;44392:36;44412:15;:13;:15::i;:::-;44392;:13;:15::i;:::-;:19;;:36;;;;:::i;:::-;44385:43;;44323:113;:::o;45402:195::-;45510:8;;;;;;;;;;;45496:22;;:10;:22;;;45488:44;;;;;;;;;;;;;;;;;;;;;;45567:22;45543:21;:46;;;;45402:195;:::o;48758:430::-;48799:15;48849:10;;;;;;;;;;;48835:24;;:10;:24;;;48827:48;;;;;;;;;;;;;;;;;;;;;;48886:14;:12;:14::i;:::-;48930:4;;;;;;;;;;;48923:22;;;48954:4;48923:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48923:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48923:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48923:37:0;;;;;;;;;48913:47;;48973:12;49000:10;;;;;;;;;;;48988:28;;;49025:4;;;;;;;;;;;48988:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48988:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48988:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48988:43:0;;;;;;;;;48973:58;;49066:1;49050:18;;:4;:18;;;;49042:35;;;;;;;;;;;;;;;;;;;;;;49140:40;49166:4;49172:7;49147:4;;;;;;;;;;;49140:25;;;;:40;;;;;:::i;:::-;48758:430;;:::o;43243:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;55132:86::-;55176:42;55132:86;:::o;42482:36::-;;;;:::o;42659:40::-;;;;:::o;46490:151::-;46576:8;;;;;;;;;;;46562:22;;:10;:22;;;46554:44;;;;;;;;;;;;;;;;;;;;;;46622:11;46609:10;;:24;;;;;;;;;;;;;;;;;;46490:151;:::o;54940:85::-;54983:42;54940:85;:::o;55519:89::-;55566:42;55519:89;:::o;46176:155::-;46262:10;;;;;;;;;;;46248:24;;:10;:24;;;46240:48;;;;;;;;;;;;;;;;;;;;;;46312:11;46299:10;;:24;;;;;;;;;;;;;;;;;;46176:155;:::o;45203:191::-;45309:8;;;;;;;;;;;45295:22;;:10;:22;;;45287:44;;;;;;;;;;;;;;;;;;;;;;45365:21;45342:20;:44;;;;45203:191;:::o;44896:299::-;44996:10;;;;;;;;;;;44982:24;;:10;:24;;;:66;;;;45038:10;;;;;;;;;;;45024:24;;:10;:24;;;44982:66;44974:93;;;;;;;;;;;;;;;;;;;;;;45085:6;45094:1;45085:10;;45080:108;45101:11;;:18;;45097:1;:22;45080:108;;;45171:5;45142:10;:26;45153:11;;45165:1;45153:14;;;;;;;;;;;;;;;;;;;;;;45142:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45121:4;;;;;;;45080:108;;;;44896:299;;:::o;46339:143::-;46421:8;;;;;;;;;;;46407:22;;:10;:22;;;46399:44;;;;;;;;;;;;;;;;;;;;;;46465:9;46454:8;;:20;;;;;;;;;;;;;;;;;;46339:143;:::o;44126:118::-;44172:7;44206:4;;;;;;;;;;;44199:22;;;44230:4;44199:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44199:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44199:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;44199:37:0;;;;;;;;;44192:44;;44126:118;:::o;48254:428::-;48332:15;48387:10;;;;;;;;;;;48373:24;;:10;:24;;;48365:48;;;;;;;;;;;;;;;;;;;;;;48424:22;48438:7;48424:13;:22::i;:::-;;48476:4;;;;;;;;;;;48469:22;;;48500:4;48469:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48469:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48469:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48469:37:0;;;;;;;;;48459:47;;48519:12;48546:10;;;;;;;;;;;48534:28;;;48571:4;;;;;;;;;;;48534:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48534:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48534:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48534:43:0;;;;;;;;;48519:58;;48612:1;48596:18;;:4;:18;;;;48588:35;;;;;;;;;;;;;;;;;;;;;;48634:40;48660:4;48666:7;48641:4;;;;;;;;;;;48634:25;;;;:40;;;;;:::i;:::-;48254:428;;;;:::o;54779:73::-;54810:42;54779:73;:::o;45605:179::-;45705:8;;;;;;;;;;;45691:22;;:10;:22;;;45683:44;;;;;;;;;;;;;;;;;;;;;;45758:18;45738:17;:38;;;;45605:179;:::o;46013:155::-;46099:10;;;;;;;;;;;46085:24;;:10;:24;;;46077:48;;;;;;;;;;;;;;;;;;;;;;46149:11;46136:10;;:24;;;;;;;;;;;;;;;;;;46013:155;:::o;57385:298::-;57431:13;57454:4;;;;;;;;;;;57447:22;;;57478:4;57447:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57447:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57447:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57447:37:0;;;;;;;;;57431:53;;57507:1;57499:5;:9;57495:181;;;57525:36;54983:42;57559:1;57532:4;;;;;;;;;;;57525:24;;;;:36;;;;;:::i;:::-;57576:40;54983:42;57610:5;57583:4;;;;;;;;;;;57576:24;;;;:40;;;;;:::i;:::-;54983:42;57631:26;;;57658:5;57631:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57631:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57631:33:0;;;;57495:181;57385:298;:::o;43118:23::-;;;;;;;;;;;;;:::o;55617:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55731:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55225:91::-;55274:42;55225:91;:::o;43054:25::-;;;;;;;;;;;;;:::o;42706:54::-;42754:6;42706:54;:::o;1533:136::-;1591:7;1618:43;1622:1;1625;1618:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1611:50;;1533:136;;;;:::o;57691:188::-;57785:7;54983:42;57810:27;;;57838:7;57810:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57810:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57810:36:0;;;;57864:7;57857:14;;57691:188;;;:::o;1069:181::-;1127:7;1147:9;1163:1;1159;:5;1147:17;;1188:1;1183;:6;;1175:46;;;;;;;;;;;;;;;;;;;;;;1241:1;1234:8;;;1069:181;;;;:::o;2423:471::-;2481:7;2731:1;2726;:6;2722:47;;;2756:1;2749:8;;;;2722:47;2781:9;2797:1;2793;:5;2781:17;;2826:1;2821;2817;:5;;;;;;:10;2809:56;;;;;;;;;;;;;;;;;;;;;;2885:1;2878:8;;;2423:471;;;;;:::o;3370:132::-;3428:7;3455:39;3459:1;3462;3455:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3448:46;;3370:132;;;;:::o;26929:177::-;27012:86;27032:5;27062:23;;;27087:2;27091:5;27039:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27039:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27039:58:0;27012:19;:86::i;:::-;26929:177;;;:::o;51816:623::-;51884:13;51907:4;;;;;;;;;;;51900:22;;;51931:4;51900:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51900:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51900:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51900:37:0;;;;;;;;;51884:53;;51962:1;51954:5;:9;51950:482;;;52010:173;52066:10;;;;;;;;;;;52054:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52054:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52054:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;52054:34:0;;;;;;;;;52107:61;42468:5;52107:33;52117:22;;52107:5;:9;;:33;;;;:::i;:::-;:37;;:61;;;;:::i;:::-;52017:4;;;;;;;;;;;52010:25;;;;:173;;;;;:::i;:::-;52232:162;52288:10;;;;;;;;;;;52276:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52276:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52276:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;52276:33:0;;;;;;;;;52328:51;42569:5;52328:28;52338:17;;52328:5;:9;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;52239:4;;;;;;;;;;;52232:25;;;;:162;;;;;:::i;:::-;52411:9;:7;:9::i;:::-;51950:482;51816:623;:::o;49196:82::-;49240:30;49254:15;:13;:15::i;:::-;49240:13;:30::i;:::-;;49196:82::o;27588:622::-;27967:1;27958:5;:10;27957:62;;;;28017:1;27974:5;:15;;;27998:4;28005:7;27974:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27974:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27974:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27974:39:0;;;;;;;;;:44;27957:62;27949:152;;;;;;;;;;;;;;;;;;;;;;28112:90;28132:5;28162:22;;;28186:7;28195:5;28139:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28139:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;28139:62:0;28112:19;:90::i;:::-;27588:622;;;:::o;1972:192::-;2058:7;2091:1;2086;:6;;2094:12;2078:29;;;;;;;;;;;;;;;;;;;;;;;;;2118:9;2134:1;2130;:5;2118:17;;2155:1;2148:8;;;1972:192;;;;;:::o;3998:278::-;4084:7;4116:1;4112;:5;4119:12;4104:28;;;;;;;;;;;;;;;;;;;;;;;;;4143:9;4159:1;4155;:5;;;;;;4143:17;;4267:1;4260:8;;;3998:278;;;;;:::o;29234:761::-;29658:23;29684:69;29712:4;29684:69;;;;;;;;;;;;;;;;;29692:5;29684:27;;;;:69;;;;;:::i;:::-;29658:95;;29788:1;29768:10;:17;:21;29764:224;;;29910:10;29899:30;;;;;;;;;;;;;;29891:85;;;;;;;;;;;;;;;;;;;;;;29764:224;29234:761;;;:::o;13055:196::-;13158:12;13190:53;13213:6;13221:4;13227:1;13230:12;13190:22;:53::i;:::-;13183:60;;13055:196;;;;;:::o;14432:979::-;14562:12;14595:18;14606:6;14595:10;:18::i;:::-;14587:60;;;;;;;;;;;;;;;;;;;;;;14721:12;14735:23;14762:6;:11;;14782:8;14793:4;14762:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14720:78:0;;;;14813:7;14809:595;;;14844:10;14837:17;;;;;;14809:595;14978:1;14958:10;:17;:21;14954:439;;;15221:10;15215:17;15282:15;15269:10;15265:2;15261:19;15254:44;15169:148;15364:12;15357:20;;;;;;;;;;;;;;;;;;;;14432:979;;;;;;;:::o;10137:422::-;10197:4;10405:12;10516:7;10504:20;10496:28;;10550:1;10543:4;:8;10536:15;;;10137:422;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;661:128;;742:6;736:13;727:22;;754:30;778:5;754:30;;;721:68;;;;;797:440;;898:3;891:4;883:6;879:17;875:27;865:2;;916:1;913;906:12;865:2;953:6;940:20;975:64;990:48;1031:6;990:48;;;975:64;;;966:73;;1059:6;1052:5;1045:21;1095:4;1087:6;1083:17;1128:4;1121:5;1117:16;1163:3;1154:6;1149:3;1145:16;1142:25;1139:2;;;1180:1;1177;1170:12;1139:2;1190:41;1224:6;1219:3;1214;1190:41;;;858:379;;;;;;;;1245:158;;1339:6;1326:20;1317:29;;1351:47;1392:5;1351:47;;;1311:92;;;;;1410:130;;1490:6;1477:20;1468:29;;1502:33;1529:5;1502:33;;;1462:78;;;;;1547:134;;1631:6;1625:13;1616:22;;1643:33;1670:5;1643:33;;;1610:71;;;;;1688:241;;1792:2;1780:9;1771:7;1767:23;1763:32;1760:2;;;1808:1;1805;1798:12;1760:2;1843:1;1860:53;1905:7;1896:6;1885:9;1881:22;1860:53;;;1850:63;;1822:97;1754:175;;;;;1936:263;;2051:2;2039:9;2030:7;2026:23;2022:32;2019:2;;;2067:1;2064;2057:12;2019:2;2102:1;2119:64;2175:7;2166:6;2155:9;2151:22;2119:64;;;2109:74;;2081:108;2013:186;;;;;2206:470;;;2336:2;2324:9;2315:7;2311:23;2307:32;2304:2;;;2352:1;2349;2342:12;2304:2;2387:1;2404:53;2449:7;2440:6;2429:9;2425:22;2404:53;;;2394:63;;2366:97;2522:2;2511:9;2507:18;2494:32;2546:18;2538:6;2535:30;2532:2;;;2578:1;2575;2568:12;2532:2;2598:62;2652:7;2643:6;2632:9;2628:22;2598:62;;;2588:72;;2473:193;2298:378;;;;;;2683:397;;;2822:2;2810:9;2801:7;2797:23;2793:32;2790:2;;;2838:1;2835;2828:12;2790:2;2901:1;2890:9;2886:17;2873:31;2924:18;2916:6;2913:30;2910:2;;;2956:1;2953;2946:12;2910:2;2984:80;3056:7;3047:6;3036:9;3032:22;2984:80;;;2974:90;;;;2852:218;2784:296;;;;;;3087:257;;3199:2;3187:9;3178:7;3174:23;3170:32;3167:2;;;3215:1;3212;3205:12;3167:2;3250:1;3267:61;3320:7;3311:6;3300:9;3296:22;3267:61;;;3257:71;;3229:105;3161:183;;;;;3351:269;;3469:2;3457:9;3448:7;3444:23;3440:32;3437:2;;;3485:1;3482;3475:12;3437:2;3520:1;3537:67;3596:7;3587:6;3576:9;3572:22;3537:67;;;3527:77;;3499:111;3431:189;;;;;3627:241;;3731:2;3719:9;3710:7;3706:23;3702:32;3699:2;;;3747:1;3744;3737:12;3699:2;3782:1;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;;;3789:63;;3761:97;3693:175;;;;;3875:263;;3990:2;3978:9;3969:7;3965:23;3961:32;3958:2;;;4006:1;4003;3996:12;3958:2;4041:1;4058:64;4114:7;4105:6;4094:9;4090:22;4058:64;;;4048:74;;4020:108;3952:186;;;;;4145:535;;;;4294:2;4282:9;4273:7;4269:23;4265:32;4262:2;;;4310:1;4307;4300:12;4262:2;4345:1;4362:64;4418:7;4409:6;4398:9;4394:22;4362:64;;;4352:74;;4324:108;4463:2;4481:64;4537:7;4528:6;4517:9;4513:22;4481:64;;;4471:74;;4442:109;4582:2;4600:64;4656:7;4647:6;4636:9;4632:22;4600:64;;;4590:74;;4561:109;4256:424;;;;;;4688:173;;4775:46;4817:3;4809:6;4775:46;;;4850:4;4845:3;4841:14;4827:28;;4768:93;;;;;4870:189;;4989:64;5049:3;5041:6;4989:64;;;4975:78;;4968:91;;;;;5067:103;5140:24;5158:5;5140:24;;;5135:3;5128:37;5122:48;;;5177:113;5260:24;5278:5;5260:24;;;5255:3;5248:37;5242:48;;;5328:690;;5473:54;5521:5;5473:54;;;5540:86;5619:6;5614:3;5540:86;;;5533:93;;5647:56;5697:5;5647:56;;;5723:7;5751:1;5736:260;5761:6;5758:1;5755:13;5736:260;;;5828:6;5822:13;5849:63;5908:3;5893:13;5849:63;;;5842:70;;5929:60;5982:6;5929:60;;;5919:70;;5793:203;5783:1;5780;5776:9;5771:14;;5736:260;;;5740:14;6009:3;6002:10;;5452:566;;;;;;;;6057:709;;6199:51;6244:5;6199:51;;;6263:86;6342:6;6337:3;6263:86;;;6256:93;;6370:53;6417:5;6370:53;;;6443:7;6471:1;6456:288;6481:6;6478:1;6475:13;6456:288;;;6542:44;6579:6;6542:44;;;6600:63;6659:3;6644:13;6600:63;;;6593:70;;6680:57;6730:6;6680:57;;;6670:67;;6513:231;6503:1;6500;6496:9;6491:14;;6456:288;;;6460:14;6757:3;6750:10;;6178:588;;;;;;;;6801:920;;6964:63;7021:5;6964:63;;;7040:95;7128:6;7123:3;7040:95;;;7033:102;;7158:3;7200:4;7192:6;7188:17;7183:3;7179:27;7227:65;7286:5;7227:65;;;7312:7;7340:1;7325:357;7350:6;7347:1;7344:13;7325:357;;;7412:9;7406:4;7402:20;7397:3;7390:33;7457:6;7451:13;7479:82;7556:4;7541:13;7479:82;;;7471:90;;7578:69;7640:6;7578:69;;;7568:79;;7670:4;7665:3;7661:14;7654:21;;7382:300;7372:1;7369;7365:9;7360:14;;7325:357;;;7329:14;7695:4;7688:11;;7712:3;7705:10;;6943:778;;;;;;;;;;7729:104;7806:21;7821:5;7806:21;;;7801:3;7794:34;7788:45;;;7840:323;;7940:38;7972:5;7940:38;;;7990:60;8043:6;8038:3;7990:60;;;7983:67;;8055:52;8100:6;8095:3;8088:4;8081:5;8077:16;8055:52;;;8128:29;8150:6;8128:29;;;8123:3;8119:39;8112:46;;7920:243;;;;;;8170:343;;8280:38;8312:5;8280:38;;;8330:70;8393:6;8388:3;8330:70;;;8323:77;;8405:52;8450:6;8445:3;8438:4;8431:5;8427:16;8405:52;;;8478:29;8500:6;8478:29;;;8473:3;8469:39;8462:46;;8260:253;;;;;;8520:356;;8648:38;8680:5;8648:38;;;8698:88;8779:6;8774:3;8698:88;;;8691:95;;8791:52;8836:6;8831:3;8824:4;8817:5;8813:16;8791:52;;;8864:6;8859:3;8855:16;8848:23;;8628:248;;;;;;8883:142;8974:45;9013:5;8974:45;;;8969:3;8962:58;8956:69;;;9032:138;9121:43;9158:5;9121:43;;;9116:3;9109:56;9103:67;;;9177:142;9268:45;9307:5;9268:45;;;9263:3;9256:58;9250:69;;;9326:142;9417:45;9456:5;9417:45;;;9412:3;9405:58;9399:69;;;9475:347;;9587:39;9620:5;9587:39;;;9638:71;9702:6;9697:3;9638:71;;;9631:78;;9714:52;9759:6;9754:3;9747:4;9740:5;9736:16;9714:52;;;9787:29;9809:6;9787:29;;;9782:3;9778:39;9771:46;;9567:255;;;;;;9830:311;;9990:67;10054:2;10049:3;9990:67;;;9983:74;;10090:13;10086:1;10081:3;10077:11;10070:34;10132:2;10127:3;10123:12;10116:19;;9976:165;;;;10150:306;;10310:66;10374:1;10369:3;10310:66;;;10303:73;;10409:9;10405:1;10400:3;10396:11;10389:30;10447:2;10442:3;10438:12;10431:19;;10296:160;;;;10465:311;;10625:67;10689:2;10684:3;10625:67;;;10618:74;;10725:13;10721:1;10716:3;10712:11;10705:34;10767:2;10762:3;10758:12;10751:19;;10611:165;;;;10785:327;;10945:67;11009:2;11004:3;10945:67;;;10938:74;;11045:29;11041:1;11036:3;11032:11;11025:50;11103:2;11098:3;11094:12;11087:19;;10931:181;;;;11121:303;;11281:66;11345:1;11340:3;11281:66;;;11274:73;;11380:6;11376:1;11371:3;11367:11;11360:27;11415:2;11410:3;11406:12;11399:19;;11267:157;;;;11433:314;;11593:67;11657:2;11652:3;11593:67;;;11586:74;;11693:16;11689:1;11684:3;11680:11;11673:37;11738:2;11733:3;11729:12;11722:19;;11579:168;;;;11756:370;;11916:67;11980:2;11975:3;11916:67;;;11909:74;;12016:34;12012:1;12007:3;12003:11;11996:55;12085:3;12080:2;12075:3;12071:12;12064:25;12117:2;12112:3;12108:12;12101:19;;11902:224;;;;12135:303;;12295:66;12359:1;12354:3;12295:66;;;12288:73;;12394:6;12390:1;12385:3;12381:11;12374:27;12429:2;12424:3;12420:12;12413:19;;12281:157;;;;12447:329;;12607:67;12671:2;12666:3;12607:67;;;12600:74;;12707:31;12703:1;12698:3;12694:11;12687:52;12767:2;12762:3;12758:12;12751:19;;12593:183;;;;12785:379;;12945:67;13009:2;13004:3;12945:67;;;12938:74;;13045:34;13041:1;13036:3;13032:11;13025:55;13114:12;13109:2;13104:3;13100:12;13093:34;13155:2;13150:3;13146:12;13139:19;;12931:233;;;;13173:308;;13333:66;13397:1;13392:3;13333:66;;;13326:73;;13432:11;13428:1;13423:3;13419:11;13412:32;13472:2;13467:3;13463:12;13456:19;;13319:162;;;;13490:391;;13650:67;13714:2;13709:3;13650:67;;;13643:74;;13750:34;13746:1;13741:3;13737:11;13730:55;13819:24;13814:2;13809:3;13805:12;13798:46;13872:2;13867:3;13863:12;13856:19;;13636:245;;;;13889:113;13972:24;13990:5;13972:24;;;13967:3;13960:37;13954:48;;;14009:262;;14153:93;14242:3;14233:6;14153:93;;;14146:100;;14263:3;14256:10;;14134:137;;;;;14278:213;;14396:2;14385:9;14381:18;14373:26;;14410:71;14478:1;14467:9;14463:17;14454:6;14410:71;;;14367:124;;;;;14498:324;;14644:2;14633:9;14629:18;14621:26;;14658:71;14726:1;14715:9;14711:17;14702:6;14658:71;;;14740:72;14808:2;14797:9;14793:18;14784:6;14740:72;;;14615:207;;;;;;14829:1163;;15203:3;15192:9;15188:19;15180:27;;15218:71;15286:1;15275:9;15271:17;15262:6;15218:71;;;15300:72;15368:2;15357:9;15353:18;15344:6;15300:72;;;15383;15451:2;15440:9;15436:18;15427:6;15383:72;;;15466:80;15542:2;15531:9;15527:18;15518:6;15466:80;;;15595:9;15589:4;15585:20;15579:3;15568:9;15564:19;15557:49;15620:108;15723:4;15714:6;15620:108;;;15612:116;;15739:81;15815:3;15804:9;15800:19;15791:6;15739:81;;;15831:67;15893:3;15882:9;15878:19;15869:6;15831:67;;;15909:73;15977:3;15966:9;15962:19;15953:6;15909:73;;;15174:818;;;;;;;;;;;;15999:1163;;16373:3;16362:9;16358:19;16350:27;;16388:71;16456:1;16445:9;16441:17;16432:6;16388:71;;;16470:72;16538:2;16527:9;16523:18;16514:6;16470:72;;;16553;16621:2;16610:9;16606:18;16597:6;16553:72;;;16636:80;16712:2;16701:9;16697:18;16688:6;16636:80;;;16765:9;16759:4;16755:20;16749:3;16738:9;16734:19;16727:49;16790:108;16893:4;16884:6;16790:108;;;16782:116;;16909:81;16985:3;16974:9;16970:19;16961:6;16909:81;;;17001:67;17063:3;17052:9;17048:19;17039:6;17001:67;;;17079:73;17147:3;17136:9;17132:19;17123:6;17079:73;;;16344:818;;;;;;;;;;;;17169:1861;;17764:3;17753:9;17749:19;17741:27;;17779:71;17847:1;17836:9;17832:17;17823:6;17779:71;;;17861:72;17929:2;17918:9;17914:18;17905:6;17861:72;;;17944;18012:2;18001:9;17997:18;17988:6;17944:72;;;18027:80;18103:2;18092:9;18088:18;18079:6;18027:80;;;18156:9;18150:4;18146:20;18140:3;18129:9;18125:19;18118:49;18181:105;18281:4;18272:6;18181:105;;;18173:113;;18335:9;18329:4;18325:20;18319:3;18308:9;18304:19;18297:49;18360:105;18460:4;18451:6;18360:105;;;18352:113;;18514:9;18508:4;18504:20;18498:3;18487:9;18483:19;18476:49;18539:105;18639:4;18630:6;18539:105;;;18531:113;;18655:81;18731:3;18720:9;18716:19;18707:6;18655:81;;;18785:9;18779:4;18775:20;18769:3;18758:9;18754:19;18747:49;18810:126;18931:4;18922:6;18810:126;;;18802:134;;18947:73;19015:3;19004:9;19000:19;18991:6;18947:73;;;17735:1295;;;;;;;;;;;;;;19037:324;;19183:2;19172:9;19168:18;19160:26;;19197:71;19265:1;19254:9;19250:17;19241:6;19197:71;;;19279:72;19347:2;19336:9;19332:18;19323:6;19279:72;;;19154:207;;;;;;19368:927;;19676:3;19665:9;19661:19;19653:27;;19691:71;19759:1;19748:9;19744:17;19735:6;19691:71;;;19773:72;19841:2;19830:9;19826:18;19817:6;19773:72;;;19856;19924:2;19913:9;19909:18;19900:6;19856:72;;;19939:80;20015:2;20004:9;20000:18;19991:6;19939:80;;;20030:81;20106:3;20095:9;20091:19;20082:6;20030:81;;;20122:79;20196:3;20185:9;20181:19;20172:6;20122:79;;;20212:73;20280:3;20269:9;20265:19;20256:6;20212:73;;;19647:648;;;;;;;;;;;20302:201;;20414:2;20403:9;20399:18;20391:26;;20428:65;20490:1;20479:9;20475:17;20466:6;20428:65;;;20385:118;;;;;20510:297;;20646:2;20635:9;20631:18;20623:26;;20696:9;20690:4;20686:20;20682:1;20671:9;20667:17;20660:47;20721:76;20792:4;20783:6;20721:76;;;20713:84;;20617:190;;;;;20814:301;;20952:2;20941:9;20937:18;20929:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21027:78;21100:4;21091:6;21027:78;;;21019:86;;20923:192;;;;;21122:407;;21313:2;21302:9;21298:18;21290:26;;21363:9;21357:4;21353:20;21349:1;21338:9;21334:17;21327:47;21388:131;21514:4;21388:131;;;21380:139;;21284:245;;;;21536:407;;21727:2;21716:9;21712:18;21704:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21802:131;21928:4;21802:131;;;21794:139;;21698:245;;;;21950:407;;22141:2;22130:9;22126:18;22118:26;;22191:9;22185:4;22181:20;22177:1;22166:9;22162:17;22155:47;22216:131;22342:4;22216:131;;;22208:139;;22112:245;;;;22364:407;;22555:2;22544:9;22540:18;22532:26;;22605:9;22599:4;22595:20;22591:1;22580:9;22576:17;22569:47;22630:131;22756:4;22630:131;;;22622:139;;22526:245;;;;22778:407;;22969:2;22958:9;22954:18;22946:26;;23019:9;23013:4;23009:20;23005:1;22994:9;22990:17;22983:47;23044:131;23170:4;23044:131;;;23036:139;;22940:245;;;;23192:407;;23383:2;23372:9;23368:18;23360:26;;23433:9;23427:4;23423:20;23419:1;23408:9;23404:17;23397:47;23458:131;23584:4;23458:131;;;23450:139;;23354:245;;;;23606:407;;23797:2;23786:9;23782:18;23774:26;;23847:9;23841:4;23837:20;23833:1;23822:9;23818:17;23811:47;23872:131;23998:4;23872:131;;;23864:139;;23768:245;;;;24020:407;;24211:2;24200:9;24196:18;24188:26;;24261:9;24255:4;24251:20;24247:1;24236:9;24232:17;24225:47;24286:131;24412:4;24286:131;;;24278:139;;24182:245;;;;24434:407;;24625:2;24614:9;24610:18;24602:26;;24675:9;24669:4;24665:20;24661:1;24650:9;24646:17;24639:47;24700:131;24826:4;24700:131;;;24692:139;;24596:245;;;;24848:407;;25039:2;25028:9;25024:18;25016:26;;25089:9;25083:4;25079:20;25075:1;25064:9;25060:17;25053:47;25114:131;25240:4;25114:131;;;25106:139;;25010:245;;;;25262:407;;25453:2;25442:9;25438:18;25430:26;;25503:9;25497:4;25493:20;25489:1;25478:9;25474:17;25467:47;25528:131;25654:4;25528:131;;;25520:139;;25424:245;;;;25676:407;;25867:2;25856:9;25852:18;25844:26;;25917:9;25911:4;25907:20;25903:1;25892:9;25888:17;25881:47;25942:131;26068:4;25942:131;;;25934:139;;25838:245;;;;26090:213;;26208:2;26197:9;26193:18;26185:26;;26222:71;26290:1;26279:9;26275:17;26266:6;26222:71;;;26179:124;;;;;26310:324;;26456:2;26445:9;26441:18;26433:26;;26470:71;26538:1;26527:9;26523:17;26514:6;26470:71;;;26552:72;26620:2;26609:9;26605:18;26596:6;26552:72;;;26427:207;;;;;;26641:256;;26703:2;26697:9;26687:19;;26741:4;26733:6;26729:17;26840:6;26828:10;26825:22;26804:18;26792:10;26789:34;26786:62;26783:2;;;26861:1;26858;26851:12;26783:2;26881:10;26877:2;26870:22;26681:216;;;;;26904:321;;27047:18;27039:6;27036:30;27033:2;;;27079:1;27076;27069:12;27033:2;27146:4;27142:9;27135:4;27127:6;27123:17;27119:33;27111:41;;27210:4;27204;27200:15;27192:23;;26970:255;;;;27232:151;;27318:3;27310:11;;27356:4;27351:3;27347:14;27339:22;;27304:79;;;;27390:173;;27473:3;27465:11;;27510:3;27507:1;27500:14;27542:4;27539:1;27529:18;27521:26;;27459:104;;;;27570:160;;27665:3;27657:11;;27703:4;27698:3;27694:14;27686:22;;27651:79;;;;27737:137;;27846:5;27840:12;27830:22;;27811:63;;;;27881:141;;27993:5;27987:12;27977:22;;27952:70;;;;28029:146;;28147:5;28141:12;28131:22;;28112:63;;;;28182:121;;28275:5;28269:12;28259:22;;28240:63;;;;28310:122;;28404:5;28398:12;28388:22;;28369:63;;;;28439:108;;28537:4;28532:3;28528:14;28520:22;;28514:33;;;;28554:105;;28649:4;28644:3;28640:14;28632:22;;28626:33;;;;28666:117;;28773:4;28768:3;28764:14;28756:22;;28750:33;;;;28791:178;;28921:6;28916:3;28909:19;28958:4;28953:3;28949:14;28934:29;;28902:67;;;;;28978:187;;29117:6;29112:3;29105:19;29154:4;29149:3;29145:14;29130:29;;29098:67;;;;;29174:152;;29278:6;29273:3;29266:19;29315:4;29310:3;29306:14;29291:29;;29259:67;;;;;29335:162;;29449:6;29444:3;29437:19;29486:4;29481:3;29477:14;29462:29;;29430:67;;;;;29506:144;;29641:3;29626:18;;29619:31;;;;;29659:163;;29774:6;29769:3;29762:19;29811:4;29806:3;29802:14;29787:29;;29755:67;;;;;29830:134;;29916:42;29909:5;29905:54;29894:65;;29888:76;;;;29971:91;;30033:24;30051:5;30033:24;;;30022:35;;30016:46;;;;30069:85;;30142:5;30135:13;30128:21;30117:32;;30111:43;;;;30161:105;;30237:24;30255:5;30237:24;;;30226:35;;30220:46;;;;30273:121;;30346:42;30339:5;30335:54;30324:65;;30318:76;;;;30401:72;;30463:5;30452:16;;30446:27;;;;30480:81;;30551:4;30544:5;30540:16;30529:27;;30523:38;;;;30568:116;;30655:24;30673:5;30655:24;;;30642:37;;30636:48;;;;30691:112;;30776:22;30792:5;30776:22;;;30763:35;;30757:46;;;;30810:116;;30897:24;30915:5;30897:24;;;30884:37;;30878:48;;;;30933:116;;31020:24;31038:5;31020:24;;;31007:37;;31001:48;;;;31057:145;31138:6;31133:3;31128;31115:30;31194:1;31185:6;31180:3;31176:16;31169:27;31108:94;;;;31211:268;31276:1;31283:101;31297:6;31294:1;31291:13;31283:101;;;31373:1;31368:3;31364:11;31358:18;31354:1;31349:3;31345:11;31338:39;31319:2;31316:1;31312:10;31307:15;;31283:101;;;31399:6;31396:1;31393:13;31390:2;;;31464:1;31455:6;31450:3;31446:16;31439:27;31390:2;31260:219;;;;;31487:161;;31577:66;31608:34;31631:10;31608:34;;;31577:66;;;31568:75;;31562:86;;;;31655:138;;31731:57;31782:4;31776:11;31731:57;;;31722:66;;31716:77;;;;31800:97;;31888:2;31884:7;31879:2;31872:5;31868:14;31864:28;31854:38;;31848:49;;;;31905:102;;31991:5;31988:1;31984:13;31962:35;;31956:51;;;;32015:117;32084:24;32102:5;32084:24;;;32077:5;32074:35;32064:2;;32123:1;32120;32113:12;32064:2;32058:74;;32139:111;32205:21;32220:5;32205:21;;;32198:5;32195:32;32185:2;;32241:1;32238;32231:12;32185:2;32179:71;;32257:145;32340:38;32372:5;32340:38;;;32333:5;32330:49;32320:2;;32393:1;32390;32383:12;32320:2;32314:88;;32409:117;32478:24;32496:5;32478:24;;;32471:5;32468:35;32458:2;;32517:1;32514;32507:12;32458:2;32452:74;
Metadata Hash
127283f3706338a5d354dc3288812742716bab44a57f185ad324551c7ac51cf8
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.