More Info
Private Name Tags
ContractCreator
TokenTracker
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x34f16e217fd4865d10665e13434893480e890e6c93b401356a8de7e5befd819d | Activate User St... | (pending) | 34 hrs ago | IN | 0.003 ETH | (Pending) | |||
Approve | 20851799 | 6 days ago | IN | 0 ETH | 0.00013234 | ||||
Approve | 20851799 | 6 days ago | IN | 0 ETH | 0.00013234 | ||||
Approve | 20828537 | 10 days ago | IN | 0 ETH | 0.00116608 | ||||
Approve | 20825465 | 10 days ago | IN | 0 ETH | 0.0006538 | ||||
Approve | 20723679 | 24 days ago | IN | 0 ETH | 0.00007354 | ||||
Approve | 20624816 | 38 days ago | IN | 0 ETH | 0.0000617 | ||||
Approve | 20609622 | 40 days ago | IN | 0 ETH | 0.00009035 | ||||
Approve | 20580488 | 44 days ago | IN | 0 ETH | 0.00004499 | ||||
Approve | 20458533 | 61 days ago | IN | 0 ETH | 0.00009945 | ||||
Approve | 20443693 | 63 days ago | IN | 0 ETH | 0.00016496 | ||||
Approve | 20407735 | 68 days ago | IN | 0 ETH | 0.00008461 | ||||
Approve | 20403481 | 69 days ago | IN | 0 ETH | 0.00007808 | ||||
CLAIMALLREWARD | 20395699 | 70 days ago | IN | 0 ETH | 0.00024068 | ||||
Activate User St... | 20395697 | 70 days ago | IN | 0.003 ETH | 0.00002831 | ||||
Approve | 20364093 | 74 days ago | IN | 0 ETH | 0.00029237 | ||||
Approve | 20246505 | 91 days ago | IN | 0 ETH | 0.00014677 | ||||
Approve | 20234336 | 92 days ago | IN | 0 ETH | 0.00030037 | ||||
Approve | 20233482 | 93 days ago | IN | 0 ETH | 0.00104967 | ||||
Approve | 20227272 | 93 days ago | IN | 0 ETH | 0.00039115 | ||||
Approve | 20208047 | 96 days ago | IN | 0 ETH | 0.0001 | ||||
Approve | 20111756 | 110 days ago | IN | 0 ETH | 0.00030848 | ||||
Approve | 20058962 | 117 days ago | IN | 0 ETH | 0.00013614 | ||||
Approve | 20040201 | 120 days ago | IN | 0 ETH | 0.00038156 | ||||
Approve | 20040193 | 120 days ago | IN | 0 ETH | 0.00063765 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15120048 | 817 days ago | 0.003 ETH | ||||
15120048 | 817 days ago | 0.003 ETH | ||||
15061142 | 826 days ago | 0.003 ETH | ||||
15061142 | 826 days ago | 0.003 ETH | ||||
14820965 | 867 days ago | 0.003 ETH | ||||
14779558 | 874 days ago | 0.003 ETH | ||||
14779265 | 874 days ago | 0.003 ETH | ||||
14777894 | 874 days ago | 0.003 ETH | ||||
14776837 | 874 days ago | 0.003 ETH | ||||
14773402 | 875 days ago | 0.003 ETH | ||||
14770127 | 875 days ago | 0.003 ETH | ||||
14748168 | 879 days ago | 0.003 ETH | ||||
14747354 | 879 days ago | 0.003 ETH | ||||
14745255 | 879 days ago | 0.003 ETH | ||||
14740175 | 880 days ago | 0.003 ETH | ||||
14736032 | 881 days ago | 0.003 ETH | ||||
14734541 | 881 days ago | 0.003 ETH | ||||
14727920 | 882 days ago | 0.003 ETH | ||||
14727509 | 882 days ago | 0.003 ETH | ||||
14725686 | 882 days ago | 0.003 ETH | ||||
14725136 | 882 days ago | 0.003 ETH | ||||
14720011 | 883 days ago | 0.003 ETH | ||||
14710150 | 885 days ago | 0.003 ETH | ||||
14708549 | 885 days ago | 0.003 ETH | ||||
14708521 | 885 days ago | 0.003 ETH |
Loading...
Loading
Contract Name:
FEGstakeV2
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-31 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.7.6; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } // ---------------------------------------------------------------------------- // SafeMath library // ---------------------------------------------------------------------------- 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; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address payable _newOwner) public onlyOwner { require(_newOwner != address(0), "ERC20: sending to the zero address"); owner = _newOwner; emit OwnershipTransferred(msg.sender, _newOwner); } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // ---------------------------------------------------------------------------- interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address tokenOwner) external view returns (uint256 balance); function allowance(address tokenOwner, address spender) external view returns (uint256 remaining); function transfer(address to, uint256 tokens) external returns (bool success); function approve(address spender, uint256 tokens) external returns (bool success); function transferFrom(address from, address to, uint256 tokens) external returns (bool success); function burnTokens(uint256 _amount) external; function calculateFeesBeforeSend( address sender, address recipient, uint256 amount ) external view returns (uint256, uint256); event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens); } interface regreward { function distributeV2() external; } interface FEGex2 { function BUY( address to, uint minAmountOut ) external payable returns (uint tokenAmountOut, uint spotPriceAfter); } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- library Roles { struct Role { mapping (address => bool) bearer; } function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract WhitelistAdminRole is Owned { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () { _addWhitelistAdmin(msg.sender); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(msg.sender), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(msg.sender); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } contract FNum is ReentrancyGuard{ uint public constant BASE = 10**18; function badd(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "ERR_ADD_OVERFLOW"); return c; } function bsub(uint a, uint b) internal pure returns (uint) { (uint c, bool flag) = bsubSign(a, b); require(!flag, "ERR_SUB_UNDERFLOW"); return c; } function bsubSign(uint a, uint b) internal pure returns (uint, bool) { if (a >= b) { return (a - b, false); } else { return (b - a, true); } } function bmul(uint a, uint b) internal pure returns (uint) { uint c0 = a * b; require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW"); uint c1 = c0 + (BASE / 2); require(c1 >= c0, "ERR_MUL_OVERFLOW"); uint c2 = c1 / BASE; return c2; } function bdiv(uint a, uint b) internal pure returns (uint) { require(b != 0, "ERR_DIV_ZERO"); uint c0 = a * BASE; require(a == 0 || c0 / a == BASE, "ERR_DIV_INTERNAL"); // bmul overflow uint c1 = c0 + (b / 2); require(c1 >= c0, "ERR_DIV_INTERNAL"); // badd require uint c2 = c1 / b; return c2; } function btoi(uint a) internal pure returns (uint) { return a / BASE; } function bfloor(uint a) internal pure returns (uint) { return btoi(a) * BASE; } function bpowi(uint a, uint n) internal pure returns (uint) { uint z = n % 2 != 0 ? a : BASE; for (n /= 2; n != 0; n /= 2) { a = bmul(a, a); if (n % 2 != 0) { z = bmul(z, a); } } return z; } function bpow(uint base, uint exp) internal pure returns (uint) { uint whole = bfloor(exp); uint remain = bsub(exp, whole); uint wholePow = bpowi(base, btoi(whole)); if (remain == 0) { return wholePow; } uint BPOW_PRECISION = BASE / 10**10; uint partialResult = bpowApprox(base, remain, BPOW_PRECISION); return bmul(wholePow, partialResult); } function bpowApprox(uint base, uint exp, uint precision) internal pure returns (uint) { // term 0: uint a = exp; (uint x, bool xneg) = bsubSign(base, BASE); uint term = BASE; uint sum = term; bool negative = false; for (uint i = 1; term >= precision; i++) { uint bigK = i * BASE; (uint c, bool cneg) = bsubSign(a, bsub(bigK, BASE)); term = bmul(term, bmul(c, x)); term = bdiv(term, bigK); if (term == 0) break; if (xneg) negative = !negative; if (cneg) negative = !negative; if (negative) { sum = bsub(sum, term); } else { sum = badd(sum, term); } } return sum; } } contract FTokenBase is FNum { mapping(address => uint) internal _balance; mapping(address => mapping(address=>uint)) internal _allowance; uint public _totalSupply; event Approval(address indexed src, address indexed dst, uint amt); event Transfer(address indexed src, address indexed dst, uint amt); function _mint(uint amt) internal { _balance[address(this)] = badd(_balance[address(this)], amt); _totalSupply = badd(_totalSupply, amt); emit Transfer(address(0), address(this), amt); } function _burn(uint amt) internal { require(_balance[address(this)] >= amt); _balance[address(this)] = bsub(_balance[address(this)], amt); _totalSupply = bsub(_totalSupply, amt); emit Transfer(address(this), address(0), amt); } function _move(address src, address dst, uint amt) internal { require(_balance[src] >= amt); _balance[src] = bsub(_balance[src], amt); _balance[dst] = badd(_balance[dst], amt); emit Transfer(src, dst, amt); } function _push(address to, uint amt) internal { _move(address(this), to, amt); } function _pull(address from, uint amt) internal { _move(from, address(this), amt); } } contract FToken is FTokenBase { string private _name = "FEG Stake Shares"; string private _symbol = "FSS"; uint8 private _decimals = 18; function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns(uint8) { return _decimals; } function allowance(address src, address dst) external view returns (uint) { return _allowance[src][dst]; } function balanceOf(address whom) external view returns (uint) { return _balance[whom]; } function totalSupply() public view returns (uint) { return _totalSupply; } function approve(address dst, uint amt) external returns (bool) { _allowance[msg.sender][dst] = amt; emit Approval(msg.sender, dst, amt); return true; } function increaseApproval(address dst, uint amt) external returns (bool) { _allowance[msg.sender][dst] = badd(_allowance[msg.sender][dst], amt); emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } function decreaseApproval(address dst, uint amt) external returns (bool) { uint oldValue = _allowance[msg.sender][dst]; if (amt > oldValue) { _allowance[msg.sender][dst] = 0; } else { _allowance[msg.sender][dst] = bsub(oldValue, amt); } emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } function transfer(address dst, uint amt) external returns (bool) { _move(msg.sender, dst, amt); return true; } function transferFrom(address src, address dst, uint amt) external returns (bool) { require(msg.sender == src || amt <= _allowance[src][msg.sender]); _move(src, dst, amt); if (msg.sender != src && _allowance[src][msg.sender] != uint256(-1)) { _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt); emit Approval(msg.sender, dst, _allowance[src][msg.sender]); } return true; } } contract FEGstakeV2 is Owned, ReentrancyGuard, WhitelistAdminRole, FNum, FTokenBase, FToken{ using SafeMath for uint256; address public FEG = 0x389999216860AB8E0175387A0c90E5c52522C945; address public fETH = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332; address public USDT = 0x979838c9C16FD365C9fE028B0bEa49B1750d86e9; address public TRY = 0xc12eCeE46ed65D970EE5C899FCC7AE133AfF9b03; address public FETP = 0xa40462266dC28dB1d570FC8F8a0F4B72B8618f7a; address public BTC = 0xe3cDB92b094a3BeF3f16103b53bECfb17A3558ad; address public poolShares = address(this); address public regrewardContract; //Signs The Checks bool public live = false; bool public perform = false; //if true then distribution of rewards from the pool to stakers via the withdraw function is enabled bool public perform2 = true; //if true then distribution of TX rewards from unclaimed 1 and 2 wrap's will distribute to stakers bool public perform3 = true; //if true then distribution of TX rewards from unclaimed 3rd wrap's will distribute to stakers uint256 public scailment = 20; // FEG has TX fee, deduct this fee to not break maths uint256 public totalDividends = 0; uint256 public must = 3e15; uint256 public scaleatize = 99; uint256 private scaledRemainder = 0; uint256 private scaling = uint256(10) ** 12; uint public round = 1; uint256 public totalDividends1 = 0; uint256 private scaledRemainder1 = 0; uint256 private scaling1 = uint256(10) ** 12; uint public round1 = 1; uint256 public totalDividends2 = 0; uint256 private scaledRemainder2 = 0; uint256 private scaling2 = uint256(10) ** 12; uint public round2 = 1; mapping(address => uint) public farmTime; // When you staked struct USER{ uint256 lastDividends; uint256 fromTotalDividend; uint round; uint256 remainder; uint256 lastDividends1; uint256 fromTotalDividend1; uint round1; uint256 remainder1; uint256 lastDividends2; uint256 fromTotalDividend2; uint round2; uint256 remainder2; bool initialized; bool activated; } address[] internal stakeholders; uint public scalerize = 98; uint256 public scaletor = 1e17; uint256 public scaletor1 = 20e18; uint256 public scaletor2 = 1e15; uint256 public totalWrap; // total unclaimed fETH rewards uint256 public totalWrap1; // total unclaimed usdt rewards uint256 public totalWrap2; // total unclaimed btc rewards uint256 public totalWrapRef = bsub(IERC20(fETH).balanceOf(address(this)), totalWrap); //total fETH reflections unclaimed uint256 public totalWrapRef1 = bsub(IERC20(USDT).balanceOf(address(this)), totalWrap1); //total usdt reflections unclaimed uint256 public totalWrapRef2 = bsub(IERC20(BTC).balanceOf(address(this)), totalWrap2); //total BTC reflections unclaimed mapping(address => USER) stakers; mapping (uint => uint256) public payouts; // keeps record of each payout mapping (uint => uint256) public payouts1; // keeps record of each payout mapping (uint => uint256) public payouts2; // keeps record of each payout FEGex2 fegexpair; event STAKED(address staker, uint256 tokens); event ACTIVATED(address staker, uint256 cost); event START(address staker, uint256 tokens); event EARNED(address staker, uint256 tokens); event UNSTAKED(address staker, uint256 tokens); event PAYOUT(uint256 round, uint256 tokens, address sender); event PAYOUT1(uint256 round, uint256 tokens, address sender); event PAYOUT2(uint256 round, uint256 tokens, address sender); event CLAIMEDREWARD(address staker, uint256 reward); event CLAIMEDREWARD1(address staker, uint256 reward); event CLAIMEDREWARD2(address staker, uint256 reward); constructor(){ fegexpair = FEGex2(FETP); } receive() external payable { } function changeFEGExPair(FEGex2 _fegexpair, address addy) external onlyOwner{ // Incase FEGex updates in future require(address(_fegexpair) != address(0), "setting 0 to contract"); fegexpair = _fegexpair; FETP = addy; } function changeTRY(address _try) external onlyOwner{ // Incase TRY updates in future TRY = _try; } function changeScalerize(uint _sca) public onlyOwner{ require(_sca != 0, "You cannot turn off"); scalerize = _sca; } function changeScalatize(uint _scm) public onlyOwner { require(_scm != 0, "You cannot turn off"); scaleatize = _scm; } function isStakeholder(address _address) public view returns(bool) { if(stakers[_address].initialized) return true; else return false; } function addStakeholder(address _stakeholder) internal { (bool _isStakeholder) = isStakeholder(_stakeholder); if(!_isStakeholder) { farmTime[msg.sender] = block.timestamp; stakers[_stakeholder].initialized = true; } } // ------------------------------------------------------------------------ // Token holders can stake their tokens using this function // @param tokens number of tokens to stake // ------------------------------------------------------------------------ function calcPoolInGivenSingleOut( uint tokenBalanceOut, uint tokenWeightOut, uint poolSupply, uint totalWeight, uint tokenAmountOut, uint swapFee ) public pure returns (uint poolAmountIn) { uint normalizedWeight = bdiv(tokenWeightOut, totalWeight); uint zar = bmul(bsub(BASE, normalizedWeight), swapFee); uint tokenAmountOutBeforeSwapFee = bdiv(tokenAmountOut, bsub(BASE, zar)); uint newTokenBalanceOut = bsub(tokenBalanceOut, tokenAmountOutBeforeSwapFee); uint tokenOutRatio = bdiv(newTokenBalanceOut, tokenBalanceOut); uint poolRatio = bpow(tokenOutRatio, normalizedWeight); uint newPoolSupply = bmul(poolRatio, poolSupply); uint poolAmountInAfterExitFee = bsub(poolSupply, newPoolSupply); poolAmountIn = bdiv(poolAmountInAfterExitFee, bsub(BASE, 0)); return (poolAmountIn); } function calcSingleOutGivenPoolIn( uint tokenBalanceOut, uint tokenWeightOut, uint poolSupply, uint totalWeight, uint poolAmountIn, uint swapFee ) public pure returns (uint tokenAmountOut) { uint normalizedWeight = bdiv(tokenWeightOut, totalWeight); uint poolAmountInAfterExitFee = bmul(poolAmountIn, bsub(BASE, 0)); uint newPoolSupply = bsub(poolSupply, poolAmountInAfterExitFee); uint poolRatio = bdiv(newPoolSupply, poolSupply); uint tokenOutRatio = bpow(poolRatio, bdiv(BASE, normalizedWeight)); uint newTokenBalanceOut = bmul(tokenOutRatio, tokenBalanceOut); uint tokenAmountOutBeforeSwapFee = bsub(tokenBalanceOut, newTokenBalanceOut); uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee); tokenAmountOut = bmul(tokenAmountOutBeforeSwapFee, bsub(BASE, zaz)); return tokenAmountOut; } function calcPoolOutGivenSingleIn( uint tokenBalanceIn, uint tokenWeightIn, uint poolSupply, uint totalWeight, uint tokenAmountIn, uint swapFee ) public pure returns (uint poolAmountOut) { uint normalizedWeight = bdiv(tokenWeightIn, totalWeight); uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee); uint tokenAmountInAfterFee = bmul(tokenAmountIn, bsub(BASE, zaz)); uint newTokenBalanceIn = badd(tokenBalanceIn, tokenAmountInAfterFee); uint tokenInRatio = bdiv(newTokenBalanceIn, tokenBalanceIn); uint poolRatio = bpow(tokenInRatio, normalizedWeight); uint newPoolSupply = bmul(poolRatio, poolSupply); poolAmountOut = bsub(newPoolSupply, poolSupply); return (poolAmountOut); } function calcOutGivenIn( uint tokenBalanceIn, uint tokenWeightIn, uint tokenBalanceOut, uint tokenWeightOut, uint tokenAmountIn, uint swapFee ) public pure returns (uint tokenAmountOut, uint tokenInFee) { uint weightRatio = bdiv(tokenWeightIn, tokenWeightOut); uint adjustedIn = bsub(BASE, swapFee); adjustedIn = bmul(tokenAmountIn, adjustedIn); uint y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn)); uint foo = bpow(y, weightRatio); uint bar = bsub(BASE, foo); tokenAmountOut = bmul(tokenBalanceOut, bar); tokenInFee = bsub(tokenAmountIn, adjustedIn); return (tokenAmountOut, tokenInFee); } function calcInGivenOut( uint tokenBalanceIn, uint tokenWeightIn, uint tokenBalanceOut, uint tokenWeightOut, uint tokenAmountOut, uint swapFee ) public pure returns (uint tokenAmountIn) { uint weightRatio = bdiv(tokenWeightOut, tokenWeightIn); uint diff = bsub(tokenBalanceOut, tokenAmountOut); uint y = bdiv(tokenBalanceOut, diff); uint foo = bpow(y, weightRatio); foo = bsub(foo, BASE); foo = bmul(tokenBalanceIn, foo); tokenAmountIn = bsub(BASE, swapFee); tokenAmountIn = bdiv(foo, tokenAmountIn); return (tokenAmountIn); } function activateUserStaking() public payable{ // Activation of FEGstake costs 0.02 fETH which is automatically refunded to your wallet in the form of TRY. require(msg.value == must, "You must deposit the right amount to activate"); fegexpair.BUY{value: msg.value }(msg.sender, 100); stakers[msg.sender].activated = true; emit ACTIVATED(msg.sender, msg.value); } function isActivated(address staker) public view returns(bool){ if(stakers[staker].activated) return true; else return false; } function Start(uint256 tokens) public onlyOwner returns(uint poolAmountOut){ require(live == false, "Can only use once"); require(IERC20(FEG).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from user for locking"); uint256 transferTxFee = (onePercent(tokens).mul(scailment)).div(10); uint256 tokensToStake = (tokens.sub(transferTxFee)); addStakeholder(msg.sender); _mint(tokensToStake); live = true; IERC20(poolShares).transfer(msg.sender, tokensToStake); IERC20(address(fETH)).approve(address(FETP), 1000000000000000000000e18); emit START(msg.sender, tokensToStake); return poolAmountOut; } function STAKE(uint256 tokens) public returns(uint poolAmountOut){ require(IERC20(FEG).balanceOf(msg.sender) >= tokens, "You do not have enough FEG"); require(stakers[msg.sender].activated == true); require(live == true); uint256 transferTxFee = (onePercent(tokens).mul(scailment)).div(10); uint256 tokensToStake = (tokens.sub(transferTxFee)); uint256 totalFEG = IERC20(FEG).balanceOf(address(this)); addStakeholder(msg.sender); // add pending rewards to remainder to be claimed by user later, if there is any existing stake uint256 owing = pendingReward(msg.sender); stakers[msg.sender].remainder += owing; stakers[msg.sender].lastDividends = owing; stakers[msg.sender].fromTotalDividend = totalDividends; stakers[msg.sender].round = round; uint256 owing1 = pendingReward1(msg.sender); stakers[msg.sender].remainder1 += owing1; stakers[msg.sender].lastDividends1 = owing1; stakers[msg.sender].fromTotalDividend1 = totalDividends1; stakers[msg.sender].round1 = round1; uint256 owing2 = pendingReward2(msg.sender); stakers[msg.sender].remainder2 += owing2; stakers[msg.sender].lastDividends2 = owing2; stakers[msg.sender].fromTotalDividend2 = totalDividends2; stakers[msg.sender].round2 = round2; poolAmountOut = calcPoolOutGivenSingleIn( totalFEG, bmul(BASE, 25), _totalSupply, bmul(BASE, 25), tokensToStake, 0 ); require(IERC20(FEG).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from user for locking"); _mint(poolAmountOut); IERC20(poolShares).transfer(msg.sender, poolAmountOut); emit STAKED(msg.sender, tokens); return poolAmountOut; } // ------------------------------------------------------------------------ // Owners can send the funds to be distributed to stakers using this function // @param tokens number of tokens to distribute // ------------------------------------------------------------------------ function ADDFUNDS1(uint256 tokens) public onlyWhitelistAdmin{ require(IERC20(fETH).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from funder account"); uint256 tokens_ = bmul(tokens, bdiv(99, 100)); totalWrap = badd(totalWrap, tokens_); _addPayout(tokens_); } function ADDFUNDS2(uint256 tokens) public onlyWhitelistAdmin{ require(IERC20(USDT).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from funder account"); uint256 tokens_ = bmul(tokens, bdiv(99, 100)); totalWrap1 = badd(totalWrap1, tokens_); _addPayout1(tokens_); } function ADDFUNDS3(uint256 tokens) public onlyWhitelistAdmin{ require(IERC20(BTC).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from funder account"); uint256 tokens_ = bmul(tokens, bdiv(99, 100)); totalWrap2 = badd(totalWrap2, tokens_); _addPayout2(tokens_); } // ------------------------------------------------------------------------ // Private function to register payouts // ------------------------------------------------------------------------ function _addPayout(uint256 tokens_) private { // divide the funds among the currently staked tokens // scale the deposit and add the previous remainder uint256 totalShares = _totalSupply; uint256 available = (tokens_.mul(scaling)).add(scaledRemainder); uint256 dividendPerToken = available.div(totalShares); scaledRemainder = available.mod(totalShares); totalDividends = totalDividends.add(dividendPerToken); payouts[round] = payouts[round - 1].add(dividendPerToken); emit PAYOUT(round, tokens_, msg.sender); round++; } function _addPayout1(uint256 tokens_1) private{ // divide the funds among the currently staked tokens // scale the deposit and add the previous remainder uint256 totalShares = _totalSupply; uint256 available = (tokens_1.mul(scaling)).add(scaledRemainder1); uint256 dividendPerToken = available.div(totalShares); scaledRemainder1 = available.mod(totalShares); totalDividends1 = totalDividends1.add(dividendPerToken); payouts1[round1] = payouts1[round1 - 1].add(dividendPerToken); emit PAYOUT1(round1, tokens_1, msg.sender); round1++; } function _addPayout2(uint256 tokens_2) private{ // divide the funds among the currently staked tokens // scale the deposit and add the previous remainder uint256 totalShares = _totalSupply; uint256 available = (tokens_2.mul(scaling)).add(scaledRemainder2); uint256 dividendPerToken = available.div(totalShares); scaledRemainder2 = available.mod(totalShares); totalDividends2 = totalDividends2.add(dividendPerToken); payouts2[round2] = payouts2[round2 - 1].add(dividendPerToken); emit PAYOUT2(round2, tokens_2, msg.sender); round2++; } // ------------------------------------------------------------------------ // Stakers can claim their pending rewards using this function // ------------------------------------------------------------------------ function CLAIMREWARD() public nonReentrant{ uint256 owing = pendingReward(msg.sender); if(owing > 0){ owing = owing.add(stakers[msg.sender].remainder); stakers[msg.sender].remainder = 0; require(IERC20(fETH).transfer(msg.sender,owing), "ERROR: error in sending reward from contract"); emit CLAIMEDREWARD(msg.sender, owing); totalWrap = bsub(totalWrap, owing); stakers[msg.sender].lastDividends = owing; // unscaled stakers[msg.sender].round = round; // update the round stakers[msg.sender].fromTotalDividend = totalDividends; // scaled } } function CLAIMREWARD1() public nonReentrant { uint256 owing1 = pendingReward1(msg.sender); if(owing1 > 0){ owing1 = owing1.add(stakers[msg.sender].remainder1); stakers[msg.sender].remainder1 = 0; require(IERC20(USDT).transfer(msg.sender,owing1), "ERROR: error in sending reward from contract"); emit CLAIMEDREWARD1(msg.sender, owing1); totalWrap1 = bsub(totalWrap1, owing1); stakers[msg.sender].lastDividends1 = owing1; // unscaled stakers[msg.sender].round1 = round1; // update the round stakers[msg.sender].fromTotalDividend1 = totalDividends1; // scaled } } function CLAIMREWARD2() public nonReentrant { uint256 owing2 = pendingReward2(msg.sender); if(owing2 > 0){ owing2 = owing2.add(stakers[msg.sender].remainder2); stakers[msg.sender].remainder2 = 0; require(IERC20(BTC).transfer(msg.sender, owing2), "ERROR: error in sending reward from contract"); emit CLAIMEDREWARD2(msg.sender, owing2); totalWrap2 = bsub(totalWrap2, owing2); stakers[msg.sender].lastDividends2 = owing2; // unscaled stakers[msg.sender].round2 = round2; // update the round stakers[msg.sender].fromTotalDividend2 = totalDividends2; // scaled } } function CLAIMALLREWARD() public { distribute12(); CLAIMREWARD(); CLAIMREWARD1(); if(perform3==true){ distribute23(); CLAIMREWARD2(); } } // ------------------------------------------------------------------------ // Get the pending rewards of the staker // @param _staker the address of the staker // ------------------------------------------------------------------------ function pendingReward(address staker) private returns (uint256) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(msg.sender); uint stakersRound = stakers[staker].round; uint256 amount = ((totalDividends.sub(payouts[stakersRound - 1])).mul(yourBase)).div(scaling); stakers[staker].remainder += ((totalDividends.sub(payouts[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount, bdiv(scalerize, 100))); } function pendingReward1(address staker) private returns (uint256) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(msg.sender); uint stakersRound = stakers[staker].round1; uint256 amount1 = ((totalDividends1.sub(payouts1[stakersRound - 1])).mul(yourBase)).div(scaling); stakers[staker].remainder1 += ((totalDividends1.sub(payouts1[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount1, bdiv(scalerize, 100))); } function pendingReward2(address staker) private returns (uint256) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(msg.sender); uint stakersRound = stakers[staker].round2; uint256 amount2 = ((totalDividends2.sub(payouts2[stakersRound - 1])).mul(yourBase)).div(scaling); stakers[staker].remainder2 += ((totalDividends2.sub(payouts2[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount2, bdiv(scalerize, 100))); } function getPending1(address staker) public view returns(uint256 _pendingReward) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(staker); uint stakersRound = stakers[staker].round; uint256 amount = ((totalDividends.sub(payouts[stakersRound - 1])).mul(yourBase)).div(scaling); amount += ((totalDividends.sub(payouts[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount.add(stakers[staker].remainder), bdiv(scalerize, 100))); } function getPending2(address staker) public view returns(uint256 _pendingReward) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(staker); uint stakersRound = stakers[staker].round1; uint256 amount1 = ((totalDividends1.sub(payouts1[stakersRound - 1])).mul(yourBase)).div(scaling); amount1 += ((totalDividends1.sub(payouts1[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount1.add(stakers[staker].remainder1), bdiv(scalerize, 100))); } function getPending3(address staker) public view returns(uint256 _pendingReward) { require(staker != address(0), "ERC20: sending to the zero address"); uint256 yourBase = IERC20(poolShares).balanceOf(staker); uint stakersRound = stakers[staker].round2; uint256 amount2 = ((totalDividends2.sub(payouts2[stakersRound - 1])).mul(yourBase)).div(scaling); amount2 += ((totalDividends2.sub(payouts2[stakersRound - 1])).mul(yourBase)) % scaling; return (bmul(amount2.add(stakers[staker].remainder2), bdiv(scalerize, 100))); } // ------------------------------------------------------------------------ // Get the FEG balance of the token holder // @param user the address of the token holder // ------------------------------------------------------------------------ function userStakedFEG(address user) external view returns(uint256 StakedFEG){ require(user != address(0), "ERC20: sending to the zero address"); uint256 totalFEG = IERC20(FEG).balanceOf(address(this)); uint256 yourStakedFEG = calcSingleOutGivenPoolIn( totalFEG, bmul(BASE, 25), _totalSupply, bmul(BASE, 25), IERC20(poolShares).balanceOf(address(user)), 0 ); return yourStakedFEG; } // ------------------------------------------------------------------------ // Stakers can un stake the staked tokens using this function // @param tokens the number of tokens to withdraw // ------------------------------------------------------------------------ function WITHDRAW(address to, uint256 _tokens) external returns (uint tokenAmountOut) { uint256 totalFEG = IERC20(FEG).balanceOf(address(this)); require(stakers[msg.sender].activated == true); if(perform==true) { regreward(regrewardContract).distributeV2(); } CLAIMALLREWARD(); uint256 tokens = calcPoolInGivenSingleOut( totalFEG, bmul(BASE, 25), _totalSupply, bmul(BASE, 25), _tokens, 0 ); tokenAmountOut = calcSingleOutGivenPoolIn( totalFEG, bmul(BASE, 25), _totalSupply, bmul(BASE, 25), tokens, 0 ); require(tokens <= IERC20(poolShares).balanceOf(msg.sender), "You don't have enough FEG"); _pullPoolShare(tokens); _burn(tokens); require(IERC20(FEG).transfer(to, tokenAmountOut), "Error in un-staking tokens"); emit UNSTAKED(msg.sender, tokens); return tokenAmountOut; } function _pullPoolShare(uint amount) internal { bool xfer = IERC20(poolShares).transferFrom(msg.sender, address(this), amount); require(xfer, "ERR_ERC20_FALSE"); } // ------------------------------------------------------------------------ // Private function to calculate 1% percentage // ------------------------------------------------------------------------ function onePercent(uint256 _tokens) private pure returns (uint256){ uint256 roundValue = _tokens.ceil(100); uint onePercentofTokens = roundValue.mul(100).div(100 * 10**uint(2)); return onePercentofTokens; } function emergencySaveLostTokens(address to, address _token, uint256 _amt) public onlyOwner { require(_token != FEG, "Cannot remove users FEG"); require(_token != fETH, "Cannot remove users fETH"); require(_token != USDT, "Cannot remove users fUSDT"); require(_token != BTC, "Cannot remove users fBTC"); require(IERC20(_token).transfer(to, _amt), "Error in retrieving tokens"); payable(owner).transfer(address(this).balance); } function changeregrewardContract(address _regrewardContract) external onlyOwner{ require(address(_regrewardContract) != address(0), "setting 0 to contract"); regrewardContract = _regrewardContract; } function changePerform(bool _bool) external onlyOwner{ perform = _bool; } function changePerform2(bool _bool) external onlyOwner{ perform2 = _bool; } function changePerform3(bool _bool) external onlyOwner{ perform3 = _bool; } function changeMust(uint256 _must) external onlyOwner{ require(must !=0, "Cannot set to 0"); require(must <= 3e15, "Cannot set over 0.003 fETH"); must = _must; } function updateBase(address _BTC, address _ETH, address _USDT) external onlyOwner{ // Incase wraps ever update BTC = _BTC; fETH = _ETH; USDT = _USDT; } function distribute12() public { if (IERC20(fETH).balanceOf(address(this)) > badd(totalWrap, scaletor)) { distributeWrap1(); } if(IERC20(USDT).balanceOf(address(this)) > badd(totalWrap1, scaletor1)){ distributeWrap2(); } } function distribute23() public { if(perform3==true){ if(IERC20(BTC).balanceOf(address(this)) > badd(totalWrap2, scaletor2)){ distributeWrap3();} } } function changeScaletor(uint256 _sca, uint256 _sca1, uint256 _sca2) public onlyOwner { require(_sca !=0 && _sca1 !=0 && _sca2 !=0, "You cannot turn off"); require(_sca >= 5e17 && _sca1 >= 20e18 && _sca2 >= 1e15, "Must be over minimum"); scaletor = _sca; scaletor1 = _sca1; scaletor2 = _sca2; } function distributeWrap1() internal { uint256 wrapped = bsub(IERC20(fETH).balanceOf(address(this)), totalWrap); totalWrap = badd(totalWrap, wrapped); _addPayout(wrapped); } function distributeWrap2() internal { uint256 wrapped = bsub(IERC20(USDT).balanceOf(address(this)), totalWrap1); totalWrap1 = badd(totalWrap1, wrapped); _addPayout1(wrapped); } function distributeWrap3() internal { uint256 wrapped = bsub(IERC20(BTC).balanceOf(address(this)), totalWrap2); totalWrap2 = badd(totalWrap2, wrapped); _addPayout2(wrapped); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"ACTIVATED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDREWARD1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDREWARD2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"EARNED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"STAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"START","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"UNSTAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDS1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDS2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDS3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIMALLREWARD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CLAIMREWARD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CLAIMREWARD1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CLAIMREWARD2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FEG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FETP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"STAKE","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Start","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"WITHDRAW","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateUserStaking","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcInGivenOut","outputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcOutGivenIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcPoolInGivenSingleOut","outputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcPoolOutGivenSingleIn","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSingleOutGivenPoolIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract FEGex2","name":"_fegexpair","type":"address"},{"internalType":"address","name":"addy","type":"address"}],"name":"changeFEGExPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_must","type":"uint256"}],"name":"changeMust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"changePerform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"changePerform2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"changePerform3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_scm","type":"uint256"}],"name":"changeScalatize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sca","type":"uint256"}],"name":"changeScalerize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sca","type":"uint256"},{"internalType":"uint256","name":"_sca1","type":"uint256"},{"internalType":"uint256","name":"_sca2","type":"uint256"}],"name":"changeScaletor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_try","type":"address"}],"name":"changeTRY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_regrewardContract","type":"address"}],"name":"changeregrewardContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute12","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute23","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"emergencySaveLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getPending1","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getPending2","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getPending3","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"isActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isStakeholder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"must","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payouts1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payouts2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perform2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perform3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolShares","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"regrewardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scailment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaleatize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scalerize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaletor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaletor1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaletor2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrap1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrap2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrapRef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrapRef1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWrapRef2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_BTC","type":"address"},{"internalType":"address","name":"_ETH","type":"address"},{"internalType":"address","name":"_USDT","type":"address"}],"name":"updateBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userStakedFEG","outputs":[{"internalType":"uint256","name":"StakedFEG","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052601060808190526f464547205374616b652053686172657360801b60a0908152620000339160069190620005ad565b506040805180820190915260038082526246535360e81b60209092019182526200006091600791620005ad565b5060088054601260ff199091168117610100600160a81b03191674389999216860ab8e0175387a0c90e5c52522c94500179091556009805473f786c34106762ab4eeb45a51b42a62470e9d53326001600160a01b03199182161791829055600a805473979838c9c16fd365c9fe028b0bea49b1750d86e9908316179055600b805473c12ecee46ed65d970ee5c899fcc7ae133aff9b03908316179055600c805473a40462266dc28db1d570fc8f8a0f4b72b8618f7a908316179055600d805473e3cdb92b094a3bef3f16103b53becfb17a3558ad908316179055600e805430921682179055600f8054600160b81b600160b01b62ffffff60a01b199092169190911760ff60b81b19161790556014601081905560006011819055660aa87bee538000909455606360135583905564e8d4a51000601581905560016016819055601785905560188590556019829055601a819055601b859055601c94909455601d55601e92909255606260215567016345785d8a00006022556801158e460913d0000060235566038d7ea4c680006024908155604080516370a0823160e01b815260048101949094525162000276936001600160a01b03909316926370a082319281810192602092909190829003018186803b1580156200023f57600080fd5b505afa15801562000254573d6000803e3d6000fd5b505050506040513d60208110156200026b57600080fd5b5051602554620003e3565b602855600a54604080516370a0823160e01b81523060048201529051620002fe926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015620002c757600080fd5b505afa158015620002dc573d6000803e3d6000fd5b505050506040513d6020811015620002f357600080fd5b5051602654620003e3565b602955600d54604080516370a0823160e01b8152306004820152905162000386926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156200034f57600080fd5b505afa15801562000364573d6000803e3d6000fd5b505050506040513d60208110156200037b57600080fd5b5051602754620003e3565b602a553480156200039657600080fd5b50600080546001600160a01b0319163390811790915560018055620003bb9062000447565b600c54602f80546001600160a01b0319166001600160a01b0390921691909117905562000659565b60008080620003f3858562000499565b9150915080156200043f576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b62000462816002620004c060201b620041a41790919060201c565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600080828410620004b15750508082036000620004b9565b505081810360015b9250929050565b620004cc828262000544565b156200051f576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200058d5760405162461bcd60e51b815260040180806020018281038252602281526020018062005f0a6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005e5576000855562000630565b82601f106200060057805160ff191683800117855562000630565b8280016001018555821562000630579182015b828111156200063057825182559160200191906001019062000613565b506200063e92915062000642565b5090565b5b808211156200063e576000815560010162000643565b6158a180620006696000396000f3fe6080604052600436106104da5760003560e01c8063891e99d811610281578063bd52e6101161015a578063d73dd623116100cc578063f06a29c911610085578063f06a29c914611173578063f2c2c0fc1461119d578063f2fde38b146111b2578063f6a7f6bb146111e5578063f8d6aed41461120f578063f8ebd04e14611257576104e1565b8063d73dd6231461106f578063dd62ed3e146110a8578063dff49b0b146110e3578063ec342ad014611116578063ede238851461112b578063ef037b9014611140576104e1565b8063ca84d5911161011e578063ca84d59114610f94578063cc14d68814610fbe578063cc8ead9b14610fd3578063cfb1c5eb14610ffd578063d246e27614611012578063d41c04fd1461103c576104e1565b8063bd52e61014610efc578063c3f344a814610f11578063c54e44eb14610f44578063c87341f214610f59578063c9faa7c514610f61576104e1565b8063997664d7116101f3578063a9059cbb116101b7578063a9059cbb14610df0578063ab6ed42814610e29578063b121d68114610e3e578063b147f40c14610e53578063ba9530a614610e68578063bb5f747b14610ec9576104e1565b8063997664d714610d875780639acfe6ef14610d9c578063a5b84a1714610db1578063a5d6fe0a14610dc6578063a7ec1bcd14610ddb576104e1565b806391e78dfa1161024557806391e78dfa14610cbc57806392273f3714610ce6578063957aa58c14610cfb57806395d89b4114610d105780639651e6b914610d255780639806e07c14610d51576104e1565b8063891e99d814610c205780638929801214610c355780638ade8d8c14610c7d5780638c25f24914610c925780638da5cb5b14610ca7576104e1565b80634baf782e116103b35780636f47caa1116103255780637a75572c116102e95780637a75572c14610b275780637d5a236d14610b5157806382f652ad14610b66578063834d472514610bae578063836e818014610bc35780638656b65314610bd8576104e1565b80636f47caa114610a5657806370a0823114610a825780637225ae9814610ab5578063722b2dd714610adf5780637362d9c814610af4576104e1565b8063522c906911610377578063522c906914610996578063532b581c146109c9578063582069df146109de5780635ac072d7146109f35780636618846314610a085780636bc01b5a14610a41576104e1565b80634baf782e146108d45780634bc76334146108e95780634c5a628c1461091c5780634f14ea4e146109315780634f49e6551461096a576104e1565b806323b872dd1161044c5780632ae331f2116104105780632ae331f2146107fc578063313ce56714610811578063337704a81461083c5780633d436214146108515780633df737f2146108845780633eaaf86b146108bf576104e1565b806323b872dd1461070b578063274217c91461074e5780632792949d14610793578063281be43f146107a857806329652e86146107d2576104e1565b80630e1cc0ee1161049e5780630e1cc0ee146106185780631336ffeb1461063f578063146ca5311461068457806318160ddd146106995780631f75d80d146106ae5780631ff1bfa1146106e1576104e1565b80630147435b146104e657806304943c0d1461050f57806306fdde0314610540578063093a9fbc146105ca578063095ea7b3146105df576104e1565b366104e157005b600080fd5b3480156104f257600080fd5b506104fb61126c565b604080519115158252519081900360200190f35b34801561051b57600080fd5b5061052461127c565b604080516001600160a01b039092168252519081900360200190f35b34801561054c57600080fd5b5061055561128b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561058f578181015183820152602001610577565b50505050905090810190601f1680156105bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d657600080fd5b50610524611321565b3480156105eb57600080fd5b506104fb6004803603604081101561060257600080fd5b506001600160a01b038135169060200135611335565b34801561062457600080fd5b5061062d61138a565b60408051918252519081900360200190f35b34801561064b57600080fd5b506106826004803603606081101561066257600080fd5b506001600160a01b03813581169160208101359091169060400135611390565b005b34801561069057600080fd5b5061062d61164c565b3480156106a557600080fd5b5061062d611652565b3480156106ba57600080fd5b5061062d600480360360208110156106d157600080fd5b50356001600160a01b0316611658565b3480156106ed57600080fd5b506106826004803603602081101561070457600080fd5b5035611802565b34801561071757600080fd5b506104fb6004803603606081101561072e57600080fd5b506001600160a01b03813581169160208101359091169060400135611866565b34801561075a57600080fd5b506106826004803603606081101561077157600080fd5b506001600160a01b038135811691602081013582169160409091013516611980565b34801561079f57600080fd5b506105246119d6565b3480156107b457600080fd5b50610682600480360360208110156107cb57600080fd5b50356119e5565b3480156107de57600080fd5b5061062d600480360360208110156107f557600080fd5b5035611aa5565b34801561080857600080fd5b5061062d611ab7565b34801561081d57600080fd5b50610826611abd565b6040805160ff9092168252519081900360200190f35b34801561084857600080fd5b50610682611ac6565b34801561085d57600080fd5b5061062d6004803603602081101561087457600080fd5b50356001600160a01b0316611c9c565b34801561089057600080fd5b50610682600480360360408110156108a757600080fd5b506001600160a01b0381358116916020013516611e1d565b3480156108cb57600080fd5b5061062d611eb5565b3480156108e057600080fd5b50610682611ebb565b3480156108f557600080fd5b506106826004803603602081101561090c57600080fd5b50356001600160a01b0316612089565b34801561092857600080fd5b50610682612115565b34801561093d57600080fd5b5061062d6004803603604081101561095457600080fd5b506001600160a01b038135169060200135612120565b34801561097657600080fd5b506106826004803603602081101561098d57600080fd5b503515156124d0565b3480156109a257600080fd5b5061062d600480360360208110156109b957600080fd5b50356001600160a01b0316612505565b3480156109d557600080fd5b5061062d612681565b3480156109ea57600080fd5b5061062d612687565b3480156109ff57600080fd5b5061052461268d565b348015610a1457600080fd5b506104fb60048036036040811015610a2b57600080fd5b506001600160a01b03813516906020013561269c565b348015610a4d57600080fd5b5061062d612774565b348015610a6257600080fd5b5061068260048036036020811015610a7957600080fd5b5035151561277a565b348015610a8e57600080fd5b5061062d60048036036020811015610aa557600080fd5b50356001600160a01b03166127af565b348015610ac157600080fd5b5061062d60048036036020811015610ad857600080fd5b50356127ca565b348015610aeb57600080fd5b5061062d6127dc565b348015610b0057600080fd5b5061068260048036036020811015610b1757600080fd5b50356001600160a01b03166127e2565b348015610b3357600080fd5b5061068260048036036020811015610b4a57600080fd5b5035612832565b348015610b5d57600080fd5b5061062d612967565b348015610b7257600080fd5b5061062d600480360360c0811015610b8957600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561296d565b348015610bba57600080fd5b5061062d612a2a565b348015610bcf57600080fd5b5061062d612a30565b348015610be457600080fd5b5061062d600480360360c0811015610bfb57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612a36565b348015610c2c57600080fd5b50610682612acc565b348015610c4157600080fd5b5061062d600480360360c0811015610c5857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612ca1565b348015610c8957600080fd5b50610524612d57565b348015610c9e57600080fd5b5061062d612d66565b348015610cb357600080fd5b50610524612d6c565b348015610cc857600080fd5b5061068260048036036020811015610cdf57600080fd5b5035612d7b565b348015610cf257600080fd5b5061062d612eac565b348015610d0757600080fd5b506104fb612eb2565b348015610d1c57600080fd5b50610555612ec2565b348015610d3157600080fd5b5061068260048036036020811015610d4857600080fd5b50351515612f23565b348015610d5d57600080fd5b5061068260048036036060811015610d7457600080fd5b5080359060208101359060400135612f58565b348015610d9357600080fd5b5061062d613059565b348015610da857600080fd5b5061062d61305f565b348015610dbd57600080fd5b50610682613065565b348015610dd257600080fd5b5061062d61310f565b348015610de757600080fd5b5061062d613115565b348015610dfc57600080fd5b506104fb60048036036040811015610e1357600080fd5b506001600160a01b03813516906020013561311b565b348015610e3557600080fd5b5061062d613131565b348015610e4a57600080fd5b50610682613137565b348015610e5f57600080fd5b506104fb61325d565b348015610e7457600080fd5b50610eb0600480360360c0811015610e8b57600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561326d565b6040805192835260208301919091528051918290030190f35b348015610ed557600080fd5b506104fb60048036036020811015610eec57600080fd5b50356001600160a01b03166132fe565b348015610f0857600080fd5b5061052461330b565b348015610f1d57600080fd5b5061062d60048036036020811015610f3457600080fd5b50356001600160a01b031661331a565b348015610f5057600080fd5b5061052461332c565b61068261333b565b348015610f6d57600080fd5b506104fb60048036036020811015610f8457600080fd5b50356001600160a01b0316613453565b348015610fa057600080fd5b5061062d60048036036020811015610fb757600080fd5b503561348c565b348015610fca57600080fd5b506105246138f6565b348015610fdf57600080fd5b5061062d60048036036020811015610ff657600080fd5b5035613905565b34801561100957600080fd5b50610682613917565b34801561101e57600080fd5b506106826004803603602081101561103557600080fd5b5035613956565b34801561104857600080fd5b506106826004803603602081101561105f57600080fd5b50356001600160a01b03166139ba565b34801561107b57600080fd5b506104fb6004803603604081101561109257600080fd5b506001600160a01b0381351690602001356139f3565b3480156110b457600080fd5b5061062d600480360360408110156110cb57600080fd5b506001600160a01b0381358116916020013516613a74565b3480156110ef57600080fd5b5061062d6004803603602081101561110657600080fd5b50356001600160a01b0316613a9f565b34801561112257600080fd5b5061062d613c20565b34801561113757600080fd5b5061062d613c2c565b34801561114c57600080fd5b506104fb6004803603602081101561116357600080fd5b50356001600160a01b0316613c32565b34801561117f57600080fd5b5061062d6004803603602081101561119657600080fd5b5035613c5e565b3480156111a957600080fd5b5061062d613f30565b3480156111be57600080fd5b50610682600480360360208110156111d557600080fd5b50356001600160a01b0316613f36565b3480156111f157600080fd5b506106826004803603602081101561120857600080fd5b5035613fdd565b34801561121b57600080fd5b5061062d600480360360c081101561123257600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561410e565b34801561126357600080fd5b506104fb614194565b600f54600160b81b900460ff1681565b600e546001600160a01b031681565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b60085461010090046001600160a01b031681565b3360008181526004602090815260408083206001600160a01b0387168085529083528184208690558151868152915193949093909260008051602061581c833981519152928290030190a35060015b92915050565b601b5481565b6000546001600160a01b031633146113a757600080fd5b6008546001600160a01b0383811661010090920416141561140f576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656d6f766520757365727320464547000000000000000000604482015290519081900360640190fd5b6009546001600160a01b0383811691161415611472576040805162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072656d6f766520757365727320664554480000000000000000604482015290519081900360640190fd5b600a546001600160a01b03838116911614156114d5576040805162461bcd60e51b815260206004820152601960248201527f43616e6e6f742072656d6f766520757365727320665553445400000000000000604482015290519081900360640190fd5b600d546001600160a01b0383811691161415611538576040805162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072656d6f766520757365727320664254430000000000000000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d60208110156115b957600080fd5b505161160c576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e2072657472696576696e6720746f6b656e73000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611646573d6000803e3d6000fd5b50505050565b60165481565b60055490565b60006001600160a01b03821661169f5760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156116f057600080fd5b505afa158015611704573d6000803e3d6000fd5b505050506040513d602081101561171a57600080fd5b50516001600160a01b0384166000908152602b602090815260408083206006015460155460001982018552602d909352908320546017549495509093611777929161177191879161176b9190614225565b9061426e565b906142c7565b90506015546117ab8461176b602d60006001880381526020019081526020016000205460175461422590919063ffffffff16565b816117b257fe5b6001600160a01b0387166000908152602b602052604090206007015491900691909101906117f7906117e5908390614309565b6117f26021546064614363565b614476565b93505050505b919050565b6000546001600160a01b0316331461181957600080fd5b80611861576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b601355565b6000336001600160a01b03851614806118a257506001600160a01b03841660009081526004602090815260408083203384529091529020548211155b6118ab57600080fd5b6118b6848484614538565b336001600160a01b038516148015906118f457506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15611976576001600160a01b0384166000908152600460209081526040808320338452909152902054611927908361460b565b6001600160a01b038581166000908152600460209081526040808320338085529083529281902085905580519485525192871693919260008051602061581c8339815191529281900390910190a35b5060019392505050565b6000546001600160a01b0316331461199757600080fd5b600d80546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600a8054919093169116179055565b600d546001600160a01b031681565b6000546001600160a01b031633146119fc57600080fd5b601254611a42576040805162461bcd60e51b815260206004820152600f60248201526e043616e6e6f742073657420746f203608c1b604482015290519081900360640190fd5b660aa87bee5380006012541115611aa0576040805162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206f76657220302e3030332066455448000000000000604482015290519081900360640190fd5b601255565b602c6020526000908152604090205481565b60265481565b60085460ff1690565b60026001541415611b1e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000611b2e3361466d565b90508015611c9557336000908152602b6020526040902060070154611b54908290614309565b336000818152602b60209081526040808320600701839055600a54815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b5051611c235760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517f63dea4778b4fa18f878b07a9bfec3e95f506efb9d4078c4cdfac77cd013398d9929181900390910190a1611c6a6026548261460b565b602655336000908152602b6020526040902060048101829055601a5460068201556017546005909101555b5060018055565b60006001600160a01b038216611ce35760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015611d3457600080fd5b505afa158015611d48573d6000803e3d6000fd5b505050506040513d6020811015611d5e57600080fd5b50516001600160a01b0384166000908152602b60209081526040808320600a015460155460001982018552602e90935290832054601b549495509093611daf929161177191879161176b9190614225565b9050601554611de38461176b602e600060018803815260200190815260200160002054601b5461422590919063ffffffff16565b81611dea57fe5b6001600160a01b0387166000908152602b60205260409020600b015491900691909101906117f7906117e5908390614309565b6000546001600160a01b03163314611e3457600080fd5b6001600160a01b038216611e87576040805162461bcd60e51b81526020600482015260156024820152741cd95d1d1a5b99c80c081d1bc818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b602f80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b60055481565b60026001541415611f13576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000611f23336147ef565b90508015611c9557336000908152602b6020526040902060030154611f49908290614309565b336000818152602b60209081526040808320600301839055600954815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b505050506040513d6020811015611fdb57600080fd5b50516120185760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e929181900390910190a161205f6025548261460b565b602555336000908152602b6020526040902090815560165460028201556011546001918201558055565b6000546001600160a01b031633146120a057600080fd5b6001600160a01b0381166120f3576040805162461bcd60e51b81526020600482015260156024820152741cd95d1d1a5b99c80c081d1bc818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61211e33614971565b565b600080600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561218557600080fd5b505afa158015612199573d6000803e3d6000fd5b505050506040513d60208110156121af57600080fd5b5051336000908152602b60205260409020600c015490915060ff6101009091041615156001146121de57600080fd5b600f54600160a81b900460ff1615156001141561225e57600f60009054906101000a90046001600160a01b03166001600160a01b031663dda6ae206040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b505050505b612266613917565b600061229d8261227f670de0b6b3a76400006019614476565b600554612295670de0b6b3a76400006019614476565b88600061296d565b90506122d4826122b6670de0b6b3a76400006019614476565b6005546122cc670de0b6b3a76400006019614476565b856000612ca1565b600e54604080516370a0823160e01b815233600482015290519295506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d602081101561234c57600080fd5b50518111156123a2576040805162461bcd60e51b815260206004820152601960248201527f596f7520646f6e2774206861766520656e6f7567682046454700000000000000604482015290519081900360640190fd5b6123ab816149b3565b6123b481614a7e565b6008546040805163a9059cbb60e01b81526001600160a01b0388811660048301526024820187905291516101009093049091169163a9059cbb916044808201926020929091908290030181600087803b15801561241057600080fd5b505af1158015612424573d6000803e3d6000fd5b505050506040513d602081101561243a57600080fd5b505161248d576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e20756e2d7374616b696e6720746f6b656e73000000000000604482015290519081900360640190fd5b604080513381526020810183905281517f4c48d8823de8aa74e6ea4bed3a0c422e95a3d1e10f8f3e47dc7e2fe779be9514929181900390910190a1505092915050565b6000546001600160a01b031633146124e757600080fd5b600f8054911515600160a81b0260ff60a81b19909216919091179055565b60006001600160a01b03821661254c5760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600854604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561259c57600080fd5b505afa1580156125b0573d6000803e3d6000fd5b505050506040513d60208110156125c657600080fd5b505190506000612679826125e3670de0b6b3a76400006019614476565b6005546125f9670de0b6b3a76400006019614476565b600e54604080516370a0823160e01b81526001600160a01b038c81166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561264657600080fd5b505afa15801561265a573d6000803e3d6000fd5b505050506040513d602081101561267057600080fd5b50516000612ca1565b949350505050565b601e5481565b60135481565b600b546001600160a01b031681565b3360009081526004602090815260408083206001600160a01b0386168452909152812054808311156126f1573360009081526004602090815260408083206001600160a01b0388168452909152812055612720565b6126fb818461460b565b3360009081526004602090815260408083206001600160a01b03891684529091529020555b3360008181526004602090815260408083206001600160a01b03891680855290835292819020548151908152905192939260008051602061581c833981519152929181900390910190a35060019392505050565b60255481565b6000546001600160a01b0316331461279157600080fd5b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6001600160a01b031660009081526003602052604090205490565b602d6020526000908152604090205481565b60235481565b6127eb336132fe565b6128265760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b61282f81614b0f565b50565b61283b336132fe565b6128765760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600954604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050506040513d60208110156128fa57600080fd5b50516129375760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b6000612949826117f260636064614363565b905061295760255482614b51565b60255561296381614b9e565b5050565b60285481565b60008061297a8786614363565b90506000612999612993670de0b6b3a76400008461460b565b85614476565b905060006129b8866129b3670de0b6b3a76400008561460b565b614363565b905060006129c68b8361460b565b905060006129d4828d614363565b905060006129e28287614c72565b905060006129f0828d614476565b905060006129fe8d8361460b565b9050612a17816129b3670de0b6b3a7640000600061460b565b9f9e505050505050505050505050505050565b60175481565b601a5481565b600080612a438786614363565b90506000612a5c612993670de0b6b3a76400008461460b565b90506000612a76866117f2670de0b6b3a76400008561460b565b90506000612a848b83614b51565b90506000612a92828d614363565b90506000612aa08287614c72565b90506000612aae828d614476565b9050612aba818d61460b565b9e9d5050505050505050505050505050565b60026001541415612b24576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000612b3433614cdd565b90508015611c9557336000908152602b60205260409020600b0154612b5a908290614309565b336000818152602b60209081526040808320600b01839055600d54815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015612bc257600080fd5b505af1158015612bd6573d6000803e3d6000fd5b505050506040513d6020811015612bec57600080fd5b5051612c295760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517fa6c44e9cd31aeb4add8b7c7e7edf3f3ed16d5384424237062b8f44853ff764b2929181900390910190a1612c706027548261460b565b602755336000908152602b6020526040902060088101829055601e54600a820155601b546009909101555060018055565b600080612cae8786614363565b90506000612cc9856117f2670de0b6b3a7640000600061460b565b90506000612cd7888361460b565b90506000612ce5828a614363565b90506000612d0482612cff670de0b6b3a764000088614363565b614c72565b90506000612d12828e614476565b90506000612d208e8361460b565b90506000612d3f612d39670de0b6b3a76400008a61460b565b8b614476565b9050612a17826117f2670de0b6b3a76400008461460b565b600f546001600160a01b031681565b60225481565b6000546001600160a01b031681565b612d84336132fe565b612dbf5760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600d54604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015612e1957600080fd5b505af1158015612e2d573d6000803e3d6000fd5b505050506040513d6020811015612e4357600080fd5b5051612e805760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b6000612e92826117f260636064614363565b9050612ea060275482614b51565b60275561296381614e5f565b602a5481565b600f54600160a01b900460ff1681565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113175780601f106112ec57610100808354040283529160200191611317565b6000546001600160a01b03163314612f3a57600080fd5b600f8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314612f6f57600080fd5b8215801590612f7d57508115155b8015612f8857508015155b612fcf576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b6706f05b59d3b200008310158015612ff057506801158e460913d000008210155b8015613003575066038d7ea4c680008110155b61304b576040805162461bcd60e51b81526020600482015260146024820152734d757374206265206f766572206d696e696d756d60601b604482015290519081900360640190fd5b602292909255602355602455565b60115481565b60125481565b600f54600160b81b900460ff1615156001141561211e5761308a602754602454614b51565b600d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156130d557600080fd5b505afa1580156130e9573d6000803e3d6000fd5b505050506040513d60208110156130ff57600080fd5b5051111561211e5761211e614f2d565b60105481565b60295481565b6000613128338484614538565b50600192915050565b60215481565b613145602554602254614b51565b600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d60208110156131ba57600080fd5b505111156131ca576131ca614fcd565b6131d8602654602354614b51565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561322357600080fd5b505afa158015613237573d6000803e3d6000fd5b505050506040513d602081101561324d57600080fd5b5051111561211e5761211e61506d565b600f54600160a81b900460ff1681565b600080600061327c8887614363565b90506000613292670de0b6b3a76400008661460b565b905061329e8682614476565b905060006132b08b6129b38d85614b51565b905060006132be8285614c72565b905060006132d4670de0b6b3a76400008361460b565b90506132e08b82614476565b96506132ec898561460b565b95505050505050965096945050505050565b600061138460028361510d565b600c546001600160a01b031681565b601f6020526000908152604090205481565b600a546001600160a01b031681565b601254341461337b5760405162461bcd60e51b815260040180806020018281038252602d8152602001806157ef602d913960400191505060405180910390fd5b602f54604080516311c42a9960e01b81523360048201526064602482015281516001600160a01b03909316926311c42a999234926044808201939182900301818588803b1580156133cb57600080fd5b505af11580156133df573d6000803e3d6000fd5b50505050506040513d60408110156133f657600080fd5b5050336000818152602b6020908152604091829020600c01805461ff0019166101001790558151928352349083015280517feb679799ce0ccbaa7912a3e313e4d8216146af50a959d75b356da3d4f9635aa99281900390910190a1565b6001600160a01b0381166000908152602b60205260408120600c0154610100900460ff1615613484575060016117fd565b5060006117fd565b600081600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156134f157600080fd5b505afa158015613505573d6000803e3d6000fd5b505050506040513d602081101561351b57600080fd5b50511015613570576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206861766520656e6f75676820464547000000000000604482015290519081900360640190fd5b336000908152602b60205260409020600c015460ff61010090910416151560011461359a57600080fd5b600f54600160a01b900460ff1615156001146135b557600080fd5b60006135cb600a61177160105461176b87615174565b905060006135d98483614225565b90506000600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561363f57600080fd5b505afa158015613653573d6000803e3d6000fd5b505050506040513d602081101561366957600080fd5b5051905061367633615197565b6000613681336147ef565b336000818152602b602052604081206003810180548501905583815560115460018201556016546002909101559192506136ba9061466d565b336000818152602b6020526040812060078101805485019055600481018490556017546005820155601a546006909101559192506136f790614cdd565b336000908152602b60205260409020600b810180548301905560088101829055601b546009820155601e54600a90910155905061375f84613741670de0b6b3a76400006019614476565b600554613757670de0b6b3a76400006019614476565b896000612a36565b600854604080516323b872dd60e01b8152336004820152306024820152604481018c905290519299506101009091046001600160a01b0316916323b872dd916064808201926020929091908290030181600087803b1580156137c057600080fd5b505af11580156137d4573d6000803e3d6000fd5b505050506040513d60208110156137ea57600080fd5b50516138275760405162461bcd60e51b81526004018080602001828103825260328152602001806156cb6032913960400191505060405180910390fd5b613830876151e3565b600e546040805163a9059cbb60e01b8152336004820152602481018a905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561388457600080fd5b505af1158015613898573d6000803e3d6000fd5b505050506040513d60208110156138ae57600080fd5b505060408051338152602081018a905281517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c8929181900390910190a1505050505050919050565b6009546001600160a01b031681565b602e6020526000908152604090205481565b61391f613137565b613927611ebb565b61392f611ac6565b600f54600160b81b900460ff1615156001141561211e5761394e613065565b61211e612acc565b6000546001600160a01b0316331461396d57600080fd5b806139b5576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b602155565b6000546001600160a01b031633146139d157600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054613a219083614b51565b3360008181526004602090815260408083206001600160a01b03891680855290835292819020859055805194855251919360008051602061581c833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60006001600160a01b038216613ae65760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015613b3757600080fd5b505afa158015613b4b573d6000803e3d6000fd5b505050506040513d6020811015613b6157600080fd5b50516001600160a01b0384166000908152602b602090815260408083206002015460155460001982018552602c909352908320546011549495509093613bb2929161177191879161176b9190614225565b9050601554613be68461176b602c60006001880381526020019081526020016000205460115461422590919063ffffffff16565b81613bed57fe5b6001600160a01b0387166000908152602b602052604090206003015491900691909101906117f7906117e5908390614309565b670de0b6b3a764000081565b60275481565b6001600160a01b0381166000908152602b60205260408120600c015460ff1615613484575060016117fd565b600080546001600160a01b03163314613c7657600080fd5b600f54600160a01b900460ff1615613cc9576040805162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b604482015290519081900360640190fd5b600854604080516323b872dd60e01b81523360048201523060248201526044810185905290516101009092046001600160a01b0316916323b872dd916064808201926020929091908290030181600087803b158015613d2757600080fd5b505af1158015613d3b573d6000803e3d6000fd5b505050506040513d6020811015613d5157600080fd5b5051613d8e5760405162461bcd60e51b81526004018080602001828103825260328152602001806156cb6032913960400191505060405180910390fd5b6000613da4600a61177160105461176b87615174565b90506000613db28483614225565b9050613dbd33615197565b613dc6816151e3565b600f805460ff60a01b1916600160a01b179055600e546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613e2d57600080fd5b505af1158015613e41573d6000803e3d6000fd5b505050506040513d6020811015613e5757600080fd5b5050600954600c546040805163095ea7b360e01b81526001600160a01b0392831660048201527002f050fe938943acc45f6556800000000060248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015613ec257600080fd5b505af1158015613ed6573d6000803e3d6000fd5b505050506040513d6020811015613eec57600080fd5b5050604080513381526020810183905281517f3150d58b3cd38451a3dd7d23dda6c3234fad144a05d309c8327e688c61bfda51929181900390910190a15050919050565b60245481565b6000546001600160a01b03163314613f4d57600080fd5b6001600160a01b038116613f925760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b613fe6336132fe565b6140215760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600a54604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50516140e25760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b60006140f4826117f260636064614363565b905061410260265482614b51565b60265561296381615258565b60008061411b8588614363565b90506000614129878661460b565b905060006141378883614363565b905060006141458285614c72565b905061415981670de0b6b3a764000061460b565b90506141658b82614476565b9050614179670de0b6b3a76400008761460b565b94506141858186614363565b9b9a5050505050505050505050565b600f54600160b01b900460ff1681565b6141ae828261510d565b15614200576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600061426783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615326565b9392505050565b60008261427d57506000611384565b8282028284828161428a57fe5b04146142675760405162461bcd60e51b815260040180806020018281038252602181526020018061576c6021913960400191505060405180910390fd5b600061426783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506153bd565b600082820183811015614267576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816143a6576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806143ce5750670de0b6b3a76400008482816143cb57fe5b04145b614412576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015614460576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161446b57fe5b049695505050505050565b600082820283158061449057508284828161448d57fe5b04145b6144d4576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015614527576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261446b565b6001600160a01b03831660009081526003602052604090205481111561455d57600080fd5b6001600160a01b038316600090815260036020526040902054614580908261460b565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546145af9082614b51565b6001600160a01b0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600061461a8585615422565b915091508015614665576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60006001600160a01b0382166146b45760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156146ff57600080fd5b505afa158015614713573d6000803e3d6000fd5b505050506040513d602081101561472957600080fd5b50516001600160a01b0384166000908152602b602090815260408083206006015460155460001982018552602d90935290832054601754949550909361477a929161177191879161176b9190614225565b90506015546147ae8461176b602d60006001880381526020019081526020016000205460175461422590919063ffffffff16565b816147b557fe5b6001600160a01b0387166000908152602b6020526040902060070180549290910690910190556021546117f79082906117f2906064614363565b60006001600160a01b0382166148365760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561488157600080fd5b505afa158015614895573d6000803e3d6000fd5b505050506040513d60208110156148ab57600080fd5b50516001600160a01b0384166000908152602b602090815260408083206002015460155460001982018552602c9093529083205460115494955090936148fc929161177191879161176b9190614225565b90506015546149308461176b602c60006001880381526020019081526020016000205460115461422590919063ffffffff16565b8161493757fe5b6001600160a01b0387166000908152602b6020526040902060030180549290910690910190556021546117f79082906117f2906064614363565b61497c600282615447565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b600e54604080516323b872dd60e01b81523360048201523060248201526044810184905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b158015614a0c57600080fd5b505af1158015614a20573d6000803e3d6000fd5b505050506040513d6020811015614a3657600080fd5b5051905080612963576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b30600090815260036020526040902054811115614a9a57600080fd5b30600090815260036020526040902054614ab4908261460b565b30600090815260036020526040902055600554614ad1908261460b565b60055560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b614b1a6002826141a4565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600082820183811015614267576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b600554601454601554600091614bbf91614bb990869061426e565b90614309565b90506000614bcd82846142c7565b9050614bd982846154ae565b601455601154614be99082614309565b601155601654600019016000908152602c6020526040902054614c0c9082614309565b601680546000908152602c602090815260409182902093909355905481519081529182018690523382820152517fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b69181900360600190a150506016805460010190555050565b600080614c7e836154f0565b90506000614c8c848361460b565b90506000614ca286614c9d8561550b565b615519565b905081614cb3579250611384915050565b6305f5e1006000614cc5888584615570565b9050614cd18382614476565b98975050505050505050565b60006001600160a01b038216614d245760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614d6f57600080fd5b505afa158015614d83573d6000803e3d6000fd5b505050506040513d6020811015614d9957600080fd5b50516001600160a01b0384166000908152602b60209081526040808320600a015460155460001982018552602e90935290832054601b549495509093614dea929161177191879161176b9190614225565b9050601554614e1e8461176b602e600060018803815260200190815260200160002054601b5461422590919063ffffffff16565b81614e2557fe5b6001600160a01b0387166000908152602b60205260409020600b0180549290910690910190556021546117f79082906117f2906064614363565b600554601c54601554600091614e7a91614bb990869061426e565b90506000614e8882846142c7565b9050614e9482846154ae565b601c55601b54614ea49082614309565b601b55601e54600019016000908152602e6020526040902054614ec79082614309565b601e80546000908152602e602090815260409182902093909355905481519081529182018690523382820152517f94cccf17fe4ce41005009d430aef95ed21c30f57532c2291f2d53f61476b1b0d9181900360600190a15050601e805460010190555050565b600d54604080516370a0823160e01b81523060048201529051600092614fb3926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015614f7f57600080fd5b505afa158015614f93573d6000803e3d6000fd5b505050506040513d6020811015614fa957600080fd5b505160275461460b565b9050614fc160275482614b51565b60275561282f81614e5f565b600954604080516370a0823160e01b81523060048201529051600092615053926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561501f57600080fd5b505afa158015615033573d6000803e3d6000fd5b505050506040513d602081101561504957600080fd5b505160255461460b565b905061506160255482614b51565b60255561282f81614b9e565b600a54604080516370a0823160e01b815230600482015290516000926150f3926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156150bf57600080fd5b505afa1580156150d3573d6000803e3d6000fd5b505050506040513d60208110156150e957600080fd5b505160265461460b565b905061510160265482614b51565b60265561282f81615258565b60006001600160a01b0382166151545760405162461bcd60e51b815260040180806020018281038252602281526020018061578d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b60008061518283606461564e565b9050600061267961271061177184606461426e565b60006151a282613c32565b90508061296357336000908152601f602090815260408083204290556001600160a01b0385168352602b9091529020600c01805460ff191660011790555050565b306000908152600360205260409020546151fd9082614b51565b3060009081526003602052604090205560055461521a9082614b51565b60055560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b60055460185460155460009161527391614bb990869061426e565b9050600061528182846142c7565b905061528d82846154ae565b60185560175461529d9082614309565b601755601a54600019016000908152602d60205260409020546152c09082614309565b601a80546000908152602d602090815260409182902093909355905481519081529182018690523382820152517fdcd344349dc4f4c9aac80cae728f21723d5adf5224b31d3a7f6f33f36adda5209181900360600190a15050601a805460010190555050565b600081848411156153b55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561537a578181015183820152602001615362565b50505050905090810190601f1680156153a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361540c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561537a578181015183820152602001615362565b50600083858161541857fe5b0495945050505050565b6000808284106154385750508082036000615440565b505081810360015b9250929050565b615451828261510d565b61548c5760405162461bcd60e51b81526004018080602001828103825260218152602001806157296021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600061426783836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615668565b6000670de0b6b3a76400006155048361550b565b0292915050565b670de0b6b3a7640000900490565b6000806002830661553257670de0b6b3a7640000615534565b835b90506002830492505b82156142675761554d8485614476565b93506002830615615565576155628185614476565b90505b60028304925061553d565b600082818061558787670de0b6b3a7640000615422565b9092509050670de0b6b3a764000080600060015b88841061563f576000670de0b6b3a7640000820290506000806155cf8a6155ca85670de0b6b3a764000061460b565b615422565b915091506155e1876117f2848c614476565b96506155ed8784614363565b9650866155fc5750505061563f565b8715615606579315935b8015615610579315935b841561562757615620868861460b565b9550615634565b6156318688614b51565b95505b50505060010161559b565b50909998505050505050505050565b600081826001848601038161565f57fe5b04029392505050565b600081836156b75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561537a578181015183820152602001615362565b508284816156c157fe5b0694935050505056fe546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d207573657220666f72206c6f636b696e674552524f523a206572726f7220696e2073656e64696e67207265776172642066726f6d20636f6e7472616374526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a2073656e64696e6720746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c65596f75206d757374206465706f7369742074686520726967687420616d6f756e7420746f2061637469766174658c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e74a2646970667358221220166f05584d011fabf94648975701bd376286f2525e8a76c3d5387dcc00cf6e7564736f6c63430007060033526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373
Deployed Bytecode
0x6080604052600436106104da5760003560e01c8063891e99d811610281578063bd52e6101161015a578063d73dd623116100cc578063f06a29c911610085578063f06a29c914611173578063f2c2c0fc1461119d578063f2fde38b146111b2578063f6a7f6bb146111e5578063f8d6aed41461120f578063f8ebd04e14611257576104e1565b8063d73dd6231461106f578063dd62ed3e146110a8578063dff49b0b146110e3578063ec342ad014611116578063ede238851461112b578063ef037b9014611140576104e1565b8063ca84d5911161011e578063ca84d59114610f94578063cc14d68814610fbe578063cc8ead9b14610fd3578063cfb1c5eb14610ffd578063d246e27614611012578063d41c04fd1461103c576104e1565b8063bd52e61014610efc578063c3f344a814610f11578063c54e44eb14610f44578063c87341f214610f59578063c9faa7c514610f61576104e1565b8063997664d7116101f3578063a9059cbb116101b7578063a9059cbb14610df0578063ab6ed42814610e29578063b121d68114610e3e578063b147f40c14610e53578063ba9530a614610e68578063bb5f747b14610ec9576104e1565b8063997664d714610d875780639acfe6ef14610d9c578063a5b84a1714610db1578063a5d6fe0a14610dc6578063a7ec1bcd14610ddb576104e1565b806391e78dfa1161024557806391e78dfa14610cbc57806392273f3714610ce6578063957aa58c14610cfb57806395d89b4114610d105780639651e6b914610d255780639806e07c14610d51576104e1565b8063891e99d814610c205780638929801214610c355780638ade8d8c14610c7d5780638c25f24914610c925780638da5cb5b14610ca7576104e1565b80634baf782e116103b35780636f47caa1116103255780637a75572c116102e95780637a75572c14610b275780637d5a236d14610b5157806382f652ad14610b66578063834d472514610bae578063836e818014610bc35780638656b65314610bd8576104e1565b80636f47caa114610a5657806370a0823114610a825780637225ae9814610ab5578063722b2dd714610adf5780637362d9c814610af4576104e1565b8063522c906911610377578063522c906914610996578063532b581c146109c9578063582069df146109de5780635ac072d7146109f35780636618846314610a085780636bc01b5a14610a41576104e1565b80634baf782e146108d45780634bc76334146108e95780634c5a628c1461091c5780634f14ea4e146109315780634f49e6551461096a576104e1565b806323b872dd1161044c5780632ae331f2116104105780632ae331f2146107fc578063313ce56714610811578063337704a81461083c5780633d436214146108515780633df737f2146108845780633eaaf86b146108bf576104e1565b806323b872dd1461070b578063274217c91461074e5780632792949d14610793578063281be43f146107a857806329652e86146107d2576104e1565b80630e1cc0ee1161049e5780630e1cc0ee146106185780631336ffeb1461063f578063146ca5311461068457806318160ddd146106995780631f75d80d146106ae5780631ff1bfa1146106e1576104e1565b80630147435b146104e657806304943c0d1461050f57806306fdde0314610540578063093a9fbc146105ca578063095ea7b3146105df576104e1565b366104e157005b600080fd5b3480156104f257600080fd5b506104fb61126c565b604080519115158252519081900360200190f35b34801561051b57600080fd5b5061052461127c565b604080516001600160a01b039092168252519081900360200190f35b34801561054c57600080fd5b5061055561128b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561058f578181015183820152602001610577565b50505050905090810190601f1680156105bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d657600080fd5b50610524611321565b3480156105eb57600080fd5b506104fb6004803603604081101561060257600080fd5b506001600160a01b038135169060200135611335565b34801561062457600080fd5b5061062d61138a565b60408051918252519081900360200190f35b34801561064b57600080fd5b506106826004803603606081101561066257600080fd5b506001600160a01b03813581169160208101359091169060400135611390565b005b34801561069057600080fd5b5061062d61164c565b3480156106a557600080fd5b5061062d611652565b3480156106ba57600080fd5b5061062d600480360360208110156106d157600080fd5b50356001600160a01b0316611658565b3480156106ed57600080fd5b506106826004803603602081101561070457600080fd5b5035611802565b34801561071757600080fd5b506104fb6004803603606081101561072e57600080fd5b506001600160a01b03813581169160208101359091169060400135611866565b34801561075a57600080fd5b506106826004803603606081101561077157600080fd5b506001600160a01b038135811691602081013582169160409091013516611980565b34801561079f57600080fd5b506105246119d6565b3480156107b457600080fd5b50610682600480360360208110156107cb57600080fd5b50356119e5565b3480156107de57600080fd5b5061062d600480360360208110156107f557600080fd5b5035611aa5565b34801561080857600080fd5b5061062d611ab7565b34801561081d57600080fd5b50610826611abd565b6040805160ff9092168252519081900360200190f35b34801561084857600080fd5b50610682611ac6565b34801561085d57600080fd5b5061062d6004803603602081101561087457600080fd5b50356001600160a01b0316611c9c565b34801561089057600080fd5b50610682600480360360408110156108a757600080fd5b506001600160a01b0381358116916020013516611e1d565b3480156108cb57600080fd5b5061062d611eb5565b3480156108e057600080fd5b50610682611ebb565b3480156108f557600080fd5b506106826004803603602081101561090c57600080fd5b50356001600160a01b0316612089565b34801561092857600080fd5b50610682612115565b34801561093d57600080fd5b5061062d6004803603604081101561095457600080fd5b506001600160a01b038135169060200135612120565b34801561097657600080fd5b506106826004803603602081101561098d57600080fd5b503515156124d0565b3480156109a257600080fd5b5061062d600480360360208110156109b957600080fd5b50356001600160a01b0316612505565b3480156109d557600080fd5b5061062d612681565b3480156109ea57600080fd5b5061062d612687565b3480156109ff57600080fd5b5061052461268d565b348015610a1457600080fd5b506104fb60048036036040811015610a2b57600080fd5b506001600160a01b03813516906020013561269c565b348015610a4d57600080fd5b5061062d612774565b348015610a6257600080fd5b5061068260048036036020811015610a7957600080fd5b5035151561277a565b348015610a8e57600080fd5b5061062d60048036036020811015610aa557600080fd5b50356001600160a01b03166127af565b348015610ac157600080fd5b5061062d60048036036020811015610ad857600080fd5b50356127ca565b348015610aeb57600080fd5b5061062d6127dc565b348015610b0057600080fd5b5061068260048036036020811015610b1757600080fd5b50356001600160a01b03166127e2565b348015610b3357600080fd5b5061068260048036036020811015610b4a57600080fd5b5035612832565b348015610b5d57600080fd5b5061062d612967565b348015610b7257600080fd5b5061062d600480360360c0811015610b8957600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561296d565b348015610bba57600080fd5b5061062d612a2a565b348015610bcf57600080fd5b5061062d612a30565b348015610be457600080fd5b5061062d600480360360c0811015610bfb57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612a36565b348015610c2c57600080fd5b50610682612acc565b348015610c4157600080fd5b5061062d600480360360c0811015610c5857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612ca1565b348015610c8957600080fd5b50610524612d57565b348015610c9e57600080fd5b5061062d612d66565b348015610cb357600080fd5b50610524612d6c565b348015610cc857600080fd5b5061068260048036036020811015610cdf57600080fd5b5035612d7b565b348015610cf257600080fd5b5061062d612eac565b348015610d0757600080fd5b506104fb612eb2565b348015610d1c57600080fd5b50610555612ec2565b348015610d3157600080fd5b5061068260048036036020811015610d4857600080fd5b50351515612f23565b348015610d5d57600080fd5b5061068260048036036060811015610d7457600080fd5b5080359060208101359060400135612f58565b348015610d9357600080fd5b5061062d613059565b348015610da857600080fd5b5061062d61305f565b348015610dbd57600080fd5b50610682613065565b348015610dd257600080fd5b5061062d61310f565b348015610de757600080fd5b5061062d613115565b348015610dfc57600080fd5b506104fb60048036036040811015610e1357600080fd5b506001600160a01b03813516906020013561311b565b348015610e3557600080fd5b5061062d613131565b348015610e4a57600080fd5b50610682613137565b348015610e5f57600080fd5b506104fb61325d565b348015610e7457600080fd5b50610eb0600480360360c0811015610e8b57600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561326d565b6040805192835260208301919091528051918290030190f35b348015610ed557600080fd5b506104fb60048036036020811015610eec57600080fd5b50356001600160a01b03166132fe565b348015610f0857600080fd5b5061052461330b565b348015610f1d57600080fd5b5061062d60048036036020811015610f3457600080fd5b50356001600160a01b031661331a565b348015610f5057600080fd5b5061052461332c565b61068261333b565b348015610f6d57600080fd5b506104fb60048036036020811015610f8457600080fd5b50356001600160a01b0316613453565b348015610fa057600080fd5b5061062d60048036036020811015610fb757600080fd5b503561348c565b348015610fca57600080fd5b506105246138f6565b348015610fdf57600080fd5b5061062d60048036036020811015610ff657600080fd5b5035613905565b34801561100957600080fd5b50610682613917565b34801561101e57600080fd5b506106826004803603602081101561103557600080fd5b5035613956565b34801561104857600080fd5b506106826004803603602081101561105f57600080fd5b50356001600160a01b03166139ba565b34801561107b57600080fd5b506104fb6004803603604081101561109257600080fd5b506001600160a01b0381351690602001356139f3565b3480156110b457600080fd5b5061062d600480360360408110156110cb57600080fd5b506001600160a01b0381358116916020013516613a74565b3480156110ef57600080fd5b5061062d6004803603602081101561110657600080fd5b50356001600160a01b0316613a9f565b34801561112257600080fd5b5061062d613c20565b34801561113757600080fd5b5061062d613c2c565b34801561114c57600080fd5b506104fb6004803603602081101561116357600080fd5b50356001600160a01b0316613c32565b34801561117f57600080fd5b5061062d6004803603602081101561119657600080fd5b5035613c5e565b3480156111a957600080fd5b5061062d613f30565b3480156111be57600080fd5b50610682600480360360208110156111d557600080fd5b50356001600160a01b0316613f36565b3480156111f157600080fd5b506106826004803603602081101561120857600080fd5b5035613fdd565b34801561121b57600080fd5b5061062d600480360360c081101561123257600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561410e565b34801561126357600080fd5b506104fb614194565b600f54600160b81b900460ff1681565b600e546001600160a01b031681565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b60085461010090046001600160a01b031681565b3360008181526004602090815260408083206001600160a01b0387168085529083528184208690558151868152915193949093909260008051602061581c833981519152928290030190a35060015b92915050565b601b5481565b6000546001600160a01b031633146113a757600080fd5b6008546001600160a01b0383811661010090920416141561140f576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656d6f766520757365727320464547000000000000000000604482015290519081900360640190fd5b6009546001600160a01b0383811691161415611472576040805162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072656d6f766520757365727320664554480000000000000000604482015290519081900360640190fd5b600a546001600160a01b03838116911614156114d5576040805162461bcd60e51b815260206004820152601960248201527f43616e6e6f742072656d6f766520757365727320665553445400000000000000604482015290519081900360640190fd5b600d546001600160a01b0383811691161415611538576040805162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072656d6f766520757365727320664254430000000000000000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d60208110156115b957600080fd5b505161160c576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e2072657472696576696e6720746f6b656e73000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611646573d6000803e3d6000fd5b50505050565b60165481565b60055490565b60006001600160a01b03821661169f5760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156116f057600080fd5b505afa158015611704573d6000803e3d6000fd5b505050506040513d602081101561171a57600080fd5b50516001600160a01b0384166000908152602b602090815260408083206006015460155460001982018552602d909352908320546017549495509093611777929161177191879161176b9190614225565b9061426e565b906142c7565b90506015546117ab8461176b602d60006001880381526020019081526020016000205460175461422590919063ffffffff16565b816117b257fe5b6001600160a01b0387166000908152602b602052604090206007015491900691909101906117f7906117e5908390614309565b6117f26021546064614363565b614476565b93505050505b919050565b6000546001600160a01b0316331461181957600080fd5b80611861576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b601355565b6000336001600160a01b03851614806118a257506001600160a01b03841660009081526004602090815260408083203384529091529020548211155b6118ab57600080fd5b6118b6848484614538565b336001600160a01b038516148015906118f457506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15611976576001600160a01b0384166000908152600460209081526040808320338452909152902054611927908361460b565b6001600160a01b038581166000908152600460209081526040808320338085529083529281902085905580519485525192871693919260008051602061581c8339815191529281900390910190a35b5060019392505050565b6000546001600160a01b0316331461199757600080fd5b600d80546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600a8054919093169116179055565b600d546001600160a01b031681565b6000546001600160a01b031633146119fc57600080fd5b601254611a42576040805162461bcd60e51b815260206004820152600f60248201526e043616e6e6f742073657420746f203608c1b604482015290519081900360640190fd5b660aa87bee5380006012541115611aa0576040805162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420736574206f76657220302e3030332066455448000000000000604482015290519081900360640190fd5b601255565b602c6020526000908152604090205481565b60265481565b60085460ff1690565b60026001541415611b1e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000611b2e3361466d565b90508015611c9557336000908152602b6020526040902060070154611b54908290614309565b336000818152602b60209081526040808320600701839055600a54815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b5051611c235760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517f63dea4778b4fa18f878b07a9bfec3e95f506efb9d4078c4cdfac77cd013398d9929181900390910190a1611c6a6026548261460b565b602655336000908152602b6020526040902060048101829055601a5460068201556017546005909101555b5060018055565b60006001600160a01b038216611ce35760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015611d3457600080fd5b505afa158015611d48573d6000803e3d6000fd5b505050506040513d6020811015611d5e57600080fd5b50516001600160a01b0384166000908152602b60209081526040808320600a015460155460001982018552602e90935290832054601b549495509093611daf929161177191879161176b9190614225565b9050601554611de38461176b602e600060018803815260200190815260200160002054601b5461422590919063ffffffff16565b81611dea57fe5b6001600160a01b0387166000908152602b60205260409020600b015491900691909101906117f7906117e5908390614309565b6000546001600160a01b03163314611e3457600080fd5b6001600160a01b038216611e87576040805162461bcd60e51b81526020600482015260156024820152741cd95d1d1a5b99c80c081d1bc818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b602f80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b60055481565b60026001541415611f13576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000611f23336147ef565b90508015611c9557336000908152602b6020526040902060030154611f49908290614309565b336000818152602b60209081526040808320600301839055600954815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b505050506040513d6020811015611fdb57600080fd5b50516120185760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e929181900390910190a161205f6025548261460b565b602555336000908152602b6020526040902090815560165460028201556011546001918201558055565b6000546001600160a01b031633146120a057600080fd5b6001600160a01b0381166120f3576040805162461bcd60e51b81526020600482015260156024820152741cd95d1d1a5b99c80c081d1bc818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61211e33614971565b565b600080600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561218557600080fd5b505afa158015612199573d6000803e3d6000fd5b505050506040513d60208110156121af57600080fd5b5051336000908152602b60205260409020600c015490915060ff6101009091041615156001146121de57600080fd5b600f54600160a81b900460ff1615156001141561225e57600f60009054906101000a90046001600160a01b03166001600160a01b031663dda6ae206040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b505050505b612266613917565b600061229d8261227f670de0b6b3a76400006019614476565b600554612295670de0b6b3a76400006019614476565b88600061296d565b90506122d4826122b6670de0b6b3a76400006019614476565b6005546122cc670de0b6b3a76400006019614476565b856000612ca1565b600e54604080516370a0823160e01b815233600482015290519295506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d602081101561234c57600080fd5b50518111156123a2576040805162461bcd60e51b815260206004820152601960248201527f596f7520646f6e2774206861766520656e6f7567682046454700000000000000604482015290519081900360640190fd5b6123ab816149b3565b6123b481614a7e565b6008546040805163a9059cbb60e01b81526001600160a01b0388811660048301526024820187905291516101009093049091169163a9059cbb916044808201926020929091908290030181600087803b15801561241057600080fd5b505af1158015612424573d6000803e3d6000fd5b505050506040513d602081101561243a57600080fd5b505161248d576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e20756e2d7374616b696e6720746f6b656e73000000000000604482015290519081900360640190fd5b604080513381526020810183905281517f4c48d8823de8aa74e6ea4bed3a0c422e95a3d1e10f8f3e47dc7e2fe779be9514929181900390910190a1505092915050565b6000546001600160a01b031633146124e757600080fd5b600f8054911515600160a81b0260ff60a81b19909216919091179055565b60006001600160a01b03821661254c5760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600854604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561259c57600080fd5b505afa1580156125b0573d6000803e3d6000fd5b505050506040513d60208110156125c657600080fd5b505190506000612679826125e3670de0b6b3a76400006019614476565b6005546125f9670de0b6b3a76400006019614476565b600e54604080516370a0823160e01b81526001600160a01b038c81166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561264657600080fd5b505afa15801561265a573d6000803e3d6000fd5b505050506040513d602081101561267057600080fd5b50516000612ca1565b949350505050565b601e5481565b60135481565b600b546001600160a01b031681565b3360009081526004602090815260408083206001600160a01b0386168452909152812054808311156126f1573360009081526004602090815260408083206001600160a01b0388168452909152812055612720565b6126fb818461460b565b3360009081526004602090815260408083206001600160a01b03891684529091529020555b3360008181526004602090815260408083206001600160a01b03891680855290835292819020548151908152905192939260008051602061581c833981519152929181900390910190a35060019392505050565b60255481565b6000546001600160a01b0316331461279157600080fd5b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6001600160a01b031660009081526003602052604090205490565b602d6020526000908152604090205481565b60235481565b6127eb336132fe565b6128265760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b61282f81614b0f565b50565b61283b336132fe565b6128765760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600954604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050506040513d60208110156128fa57600080fd5b50516129375760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b6000612949826117f260636064614363565b905061295760255482614b51565b60255561296381614b9e565b5050565b60285481565b60008061297a8786614363565b90506000612999612993670de0b6b3a76400008461460b565b85614476565b905060006129b8866129b3670de0b6b3a76400008561460b565b614363565b905060006129c68b8361460b565b905060006129d4828d614363565b905060006129e28287614c72565b905060006129f0828d614476565b905060006129fe8d8361460b565b9050612a17816129b3670de0b6b3a7640000600061460b565b9f9e505050505050505050505050505050565b60175481565b601a5481565b600080612a438786614363565b90506000612a5c612993670de0b6b3a76400008461460b565b90506000612a76866117f2670de0b6b3a76400008561460b565b90506000612a848b83614b51565b90506000612a92828d614363565b90506000612aa08287614c72565b90506000612aae828d614476565b9050612aba818d61460b565b9e9d5050505050505050505050505050565b60026001541415612b24576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000612b3433614cdd565b90508015611c9557336000908152602b60205260409020600b0154612b5a908290614309565b336000818152602b60209081526040808320600b01839055600d54815163a9059cbb60e01b815260048101959095526024850186905290519495506001600160a01b03169363a9059cbb93604480820194918390030190829087803b158015612bc257600080fd5b505af1158015612bd6573d6000803e3d6000fd5b505050506040513d6020811015612bec57600080fd5b5051612c295760405162461bcd60e51b815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b604080513381526020810183905281517fa6c44e9cd31aeb4add8b7c7e7edf3f3ed16d5384424237062b8f44853ff764b2929181900390910190a1612c706027548261460b565b602755336000908152602b6020526040902060088101829055601e54600a820155601b546009909101555060018055565b600080612cae8786614363565b90506000612cc9856117f2670de0b6b3a7640000600061460b565b90506000612cd7888361460b565b90506000612ce5828a614363565b90506000612d0482612cff670de0b6b3a764000088614363565b614c72565b90506000612d12828e614476565b90506000612d208e8361460b565b90506000612d3f612d39670de0b6b3a76400008a61460b565b8b614476565b9050612a17826117f2670de0b6b3a76400008461460b565b600f546001600160a01b031681565b60225481565b6000546001600160a01b031681565b612d84336132fe565b612dbf5760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600d54604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015612e1957600080fd5b505af1158015612e2d573d6000803e3d6000fd5b505050506040513d6020811015612e4357600080fd5b5051612e805760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b6000612e92826117f260636064614363565b9050612ea060275482614b51565b60275561296381614e5f565b602a5481565b600f54600160a01b900460ff1681565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113175780601f106112ec57610100808354040283529160200191611317565b6000546001600160a01b03163314612f3a57600080fd5b600f8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314612f6f57600080fd5b8215801590612f7d57508115155b8015612f8857508015155b612fcf576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b6706f05b59d3b200008310158015612ff057506801158e460913d000008210155b8015613003575066038d7ea4c680008110155b61304b576040805162461bcd60e51b81526020600482015260146024820152734d757374206265206f766572206d696e696d756d60601b604482015290519081900360640190fd5b602292909255602355602455565b60115481565b60125481565b600f54600160b81b900460ff1615156001141561211e5761308a602754602454614b51565b600d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156130d557600080fd5b505afa1580156130e9573d6000803e3d6000fd5b505050506040513d60208110156130ff57600080fd5b5051111561211e5761211e614f2d565b60105481565b60295481565b6000613128338484614538565b50600192915050565b60215481565b613145602554602254614b51565b600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d60208110156131ba57600080fd5b505111156131ca576131ca614fcd565b6131d8602654602354614b51565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561322357600080fd5b505afa158015613237573d6000803e3d6000fd5b505050506040513d602081101561324d57600080fd5b5051111561211e5761211e61506d565b600f54600160a81b900460ff1681565b600080600061327c8887614363565b90506000613292670de0b6b3a76400008661460b565b905061329e8682614476565b905060006132b08b6129b38d85614b51565b905060006132be8285614c72565b905060006132d4670de0b6b3a76400008361460b565b90506132e08b82614476565b96506132ec898561460b565b95505050505050965096945050505050565b600061138460028361510d565b600c546001600160a01b031681565b601f6020526000908152604090205481565b600a546001600160a01b031681565b601254341461337b5760405162461bcd60e51b815260040180806020018281038252602d8152602001806157ef602d913960400191505060405180910390fd5b602f54604080516311c42a9960e01b81523360048201526064602482015281516001600160a01b03909316926311c42a999234926044808201939182900301818588803b1580156133cb57600080fd5b505af11580156133df573d6000803e3d6000fd5b50505050506040513d60408110156133f657600080fd5b5050336000818152602b6020908152604091829020600c01805461ff0019166101001790558151928352349083015280517feb679799ce0ccbaa7912a3e313e4d8216146af50a959d75b356da3d4f9635aa99281900390910190a1565b6001600160a01b0381166000908152602b60205260408120600c0154610100900460ff1615613484575060016117fd565b5060006117fd565b600081600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156134f157600080fd5b505afa158015613505573d6000803e3d6000fd5b505050506040513d602081101561351b57600080fd5b50511015613570576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206861766520656e6f75676820464547000000000000604482015290519081900360640190fd5b336000908152602b60205260409020600c015460ff61010090910416151560011461359a57600080fd5b600f54600160a01b900460ff1615156001146135b557600080fd5b60006135cb600a61177160105461176b87615174565b905060006135d98483614225565b90506000600860019054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561363f57600080fd5b505afa158015613653573d6000803e3d6000fd5b505050506040513d602081101561366957600080fd5b5051905061367633615197565b6000613681336147ef565b336000818152602b602052604081206003810180548501905583815560115460018201556016546002909101559192506136ba9061466d565b336000818152602b6020526040812060078101805485019055600481018490556017546005820155601a546006909101559192506136f790614cdd565b336000908152602b60205260409020600b810180548301905560088101829055601b546009820155601e54600a90910155905061375f84613741670de0b6b3a76400006019614476565b600554613757670de0b6b3a76400006019614476565b896000612a36565b600854604080516323b872dd60e01b8152336004820152306024820152604481018c905290519299506101009091046001600160a01b0316916323b872dd916064808201926020929091908290030181600087803b1580156137c057600080fd5b505af11580156137d4573d6000803e3d6000fd5b505050506040513d60208110156137ea57600080fd5b50516138275760405162461bcd60e51b81526004018080602001828103825260328152602001806156cb6032913960400191505060405180910390fd5b613830876151e3565b600e546040805163a9059cbb60e01b8152336004820152602481018a905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561388457600080fd5b505af1158015613898573d6000803e3d6000fd5b505050506040513d60208110156138ae57600080fd5b505060408051338152602081018a905281517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c8929181900390910190a1505050505050919050565b6009546001600160a01b031681565b602e6020526000908152604090205481565b61391f613137565b613927611ebb565b61392f611ac6565b600f54600160b81b900460ff1615156001141561211e5761394e613065565b61211e612acc565b6000546001600160a01b0316331461396d57600080fd5b806139b5576040805162461bcd60e51b81526020600482015260136024820152722cb7ba9031b0b73737ba103a3ab9371037b33360691b604482015290519081900360640190fd5b602155565b6000546001600160a01b031633146139d157600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054613a219083614b51565b3360008181526004602090815260408083206001600160a01b03891680855290835292819020859055805194855251919360008051602061581c833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60006001600160a01b038216613ae65760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015613b3757600080fd5b505afa158015613b4b573d6000803e3d6000fd5b505050506040513d6020811015613b6157600080fd5b50516001600160a01b0384166000908152602b602090815260408083206002015460155460001982018552602c909352908320546011549495509093613bb2929161177191879161176b9190614225565b9050601554613be68461176b602c60006001880381526020019081526020016000205460115461422590919063ffffffff16565b81613bed57fe5b6001600160a01b0387166000908152602b602052604090206003015491900691909101906117f7906117e5908390614309565b670de0b6b3a764000081565b60275481565b6001600160a01b0381166000908152602b60205260408120600c015460ff1615613484575060016117fd565b600080546001600160a01b03163314613c7657600080fd5b600f54600160a01b900460ff1615613cc9576040805162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b604482015290519081900360640190fd5b600854604080516323b872dd60e01b81523360048201523060248201526044810185905290516101009092046001600160a01b0316916323b872dd916064808201926020929091908290030181600087803b158015613d2757600080fd5b505af1158015613d3b573d6000803e3d6000fd5b505050506040513d6020811015613d5157600080fd5b5051613d8e5760405162461bcd60e51b81526004018080602001828103825260328152602001806156cb6032913960400191505060405180910390fd5b6000613da4600a61177160105461176b87615174565b90506000613db28483614225565b9050613dbd33615197565b613dc6816151e3565b600f805460ff60a01b1916600160a01b179055600e546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613e2d57600080fd5b505af1158015613e41573d6000803e3d6000fd5b505050506040513d6020811015613e5757600080fd5b5050600954600c546040805163095ea7b360e01b81526001600160a01b0392831660048201527002f050fe938943acc45f6556800000000060248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015613ec257600080fd5b505af1158015613ed6573d6000803e3d6000fd5b505050506040513d6020811015613eec57600080fd5b5050604080513381526020810183905281517f3150d58b3cd38451a3dd7d23dda6c3234fad144a05d309c8327e688c61bfda51929181900390910190a15050919050565b60245481565b6000546001600160a01b03163314613f4d57600080fd5b6001600160a01b038116613f925760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b613fe6336132fe565b6140215760405162461bcd60e51b81526004018080602001828103825260408152602001806157af6040913960400191505060405180910390fd5b600a54604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50516140e25760405162461bcd60e51b815260040180806020018281038252603081526020018061583c6030913960400191505060405180910390fd5b60006140f4826117f260636064614363565b905061410260265482614b51565b60265561296381615258565b60008061411b8588614363565b90506000614129878661460b565b905060006141378883614363565b905060006141458285614c72565b905061415981670de0b6b3a764000061460b565b90506141658b82614476565b9050614179670de0b6b3a76400008761460b565b94506141858186614363565b9b9a5050505050505050505050565b600f54600160b01b900460ff1681565b6141ae828261510d565b15614200576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600061426783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615326565b9392505050565b60008261427d57506000611384565b8282028284828161428a57fe5b04146142675760405162461bcd60e51b815260040180806020018281038252602181526020018061576c6021913960400191505060405180910390fd5b600061426783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506153bd565b600082820183811015614267576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816143a6576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806143ce5750670de0b6b3a76400008482816143cb57fe5b04145b614412576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015614460576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161446b57fe5b049695505050505050565b600082820283158061449057508284828161448d57fe5b04145b6144d4576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015614527576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261446b565b6001600160a01b03831660009081526003602052604090205481111561455d57600080fd5b6001600160a01b038316600090815260036020526040902054614580908261460b565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546145af9082614b51565b6001600160a01b0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600061461a8585615422565b915091508015614665576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60006001600160a01b0382166146b45760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156146ff57600080fd5b505afa158015614713573d6000803e3d6000fd5b505050506040513d602081101561472957600080fd5b50516001600160a01b0384166000908152602b602090815260408083206006015460155460001982018552602d90935290832054601754949550909361477a929161177191879161176b9190614225565b90506015546147ae8461176b602d60006001880381526020019081526020016000205460175461422590919063ffffffff16565b816147b557fe5b6001600160a01b0387166000908152602b6020526040902060070180549290910690910190556021546117f79082906117f2906064614363565b60006001600160a01b0382166148365760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561488157600080fd5b505afa158015614895573d6000803e3d6000fd5b505050506040513d60208110156148ab57600080fd5b50516001600160a01b0384166000908152602b602090815260408083206002015460155460001982018552602c9093529083205460115494955090936148fc929161177191879161176b9190614225565b90506015546149308461176b602c60006001880381526020019081526020016000205460115461422590919063ffffffff16565b8161493757fe5b6001600160a01b0387166000908152602b6020526040902060030180549290910690910190556021546117f79082906117f2906064614363565b61497c600282615447565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b600e54604080516323b872dd60e01b81523360048201523060248201526044810184905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b158015614a0c57600080fd5b505af1158015614a20573d6000803e3d6000fd5b505050506040513d6020811015614a3657600080fd5b5051905080612963576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b30600090815260036020526040902054811115614a9a57600080fd5b30600090815260036020526040902054614ab4908261460b565b30600090815260036020526040902055600554614ad1908261460b565b60055560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b614b1a6002826141a4565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600082820183811015614267576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b600554601454601554600091614bbf91614bb990869061426e565b90614309565b90506000614bcd82846142c7565b9050614bd982846154ae565b601455601154614be99082614309565b601155601654600019016000908152602c6020526040902054614c0c9082614309565b601680546000908152602c602090815260409182902093909355905481519081529182018690523382820152517fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b69181900360600190a150506016805460010190555050565b600080614c7e836154f0565b90506000614c8c848361460b565b90506000614ca286614c9d8561550b565b615519565b905081614cb3579250611384915050565b6305f5e1006000614cc5888584615570565b9050614cd18382614476565b98975050505050505050565b60006001600160a01b038216614d245760405162461bcd60e51b815260040180806020018281038252602281526020018061574a6022913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614d6f57600080fd5b505afa158015614d83573d6000803e3d6000fd5b505050506040513d6020811015614d9957600080fd5b50516001600160a01b0384166000908152602b60209081526040808320600a015460155460001982018552602e90935290832054601b549495509093614dea929161177191879161176b9190614225565b9050601554614e1e8461176b602e600060018803815260200190815260200160002054601b5461422590919063ffffffff16565b81614e2557fe5b6001600160a01b0387166000908152602b60205260409020600b0180549290910690910190556021546117f79082906117f2906064614363565b600554601c54601554600091614e7a91614bb990869061426e565b90506000614e8882846142c7565b9050614e9482846154ae565b601c55601b54614ea49082614309565b601b55601e54600019016000908152602e6020526040902054614ec79082614309565b601e80546000908152602e602090815260409182902093909355905481519081529182018690523382820152517f94cccf17fe4ce41005009d430aef95ed21c30f57532c2291f2d53f61476b1b0d9181900360600190a15050601e805460010190555050565b600d54604080516370a0823160e01b81523060048201529051600092614fb3926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015614f7f57600080fd5b505afa158015614f93573d6000803e3d6000fd5b505050506040513d6020811015614fa957600080fd5b505160275461460b565b9050614fc160275482614b51565b60275561282f81614e5f565b600954604080516370a0823160e01b81523060048201529051600092615053926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561501f57600080fd5b505afa158015615033573d6000803e3d6000fd5b505050506040513d602081101561504957600080fd5b505160255461460b565b905061506160255482614b51565b60255561282f81614b9e565b600a54604080516370a0823160e01b815230600482015290516000926150f3926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156150bf57600080fd5b505afa1580156150d3573d6000803e3d6000fd5b505050506040513d60208110156150e957600080fd5b505160265461460b565b905061510160265482614b51565b60265561282f81615258565b60006001600160a01b0382166151545760405162461bcd60e51b815260040180806020018281038252602281526020018061578d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b60008061518283606461564e565b9050600061267961271061177184606461426e565b60006151a282613c32565b90508061296357336000908152601f602090815260408083204290556001600160a01b0385168352602b9091529020600c01805460ff191660011790555050565b306000908152600360205260409020546151fd9082614b51565b3060009081526003602052604090205560055461521a9082614b51565b60055560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b60055460185460155460009161527391614bb990869061426e565b9050600061528182846142c7565b905061528d82846154ae565b60185560175461529d9082614309565b601755601a54600019016000908152602d60205260409020546152c09082614309565b601a80546000908152602d602090815260409182902093909355905481519081529182018690523382820152517fdcd344349dc4f4c9aac80cae728f21723d5adf5224b31d3a7f6f33f36adda5209181900360600190a15050601a805460010190555050565b600081848411156153b55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561537a578181015183820152602001615362565b50505050905090810190601f1680156153a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361540c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561537a578181015183820152602001615362565b50600083858161541857fe5b0495945050505050565b6000808284106154385750508082036000615440565b505081810360015b9250929050565b615451828261510d565b61548c5760405162461bcd60e51b81526004018080602001828103825260218152602001806157296021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600061426783836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615668565b6000670de0b6b3a76400006155048361550b565b0292915050565b670de0b6b3a7640000900490565b6000806002830661553257670de0b6b3a7640000615534565b835b90506002830492505b82156142675761554d8485614476565b93506002830615615565576155628185614476565b90505b60028304925061553d565b600082818061558787670de0b6b3a7640000615422565b9092509050670de0b6b3a764000080600060015b88841061563f576000670de0b6b3a7640000820290506000806155cf8a6155ca85670de0b6b3a764000061460b565b615422565b915091506155e1876117f2848c614476565b96506155ed8784614363565b9650866155fc5750505061563f565b8715615606579315935b8015615610579315935b841561562757615620868861460b565b9550615634565b6156318688614b51565b95505b50505060010161559b565b50909998505050505050505050565b600081826001848601038161565f57fe5b04029392505050565b600081836156b75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561537a578181015183820152602001615362565b508284816156c157fe5b0694935050505056fe546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d207573657220666f72206c6f636b696e674552524f523a206572726f7220696e2073656e64696e67207265776172642066726f6d20636f6e7472616374526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a2073656e64696e6720746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c65596f75206d757374206465706f7369742074686520726967687420616d6f756e7420746f2061637469766174658c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e74a2646970667358221220166f05584d011fabf94648975701bd376286f2525e8a76c3d5387dcc00cf6e7564736f6c63430007060033
Deployed Bytecode Sourcemap
16667:29593:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17647:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17236:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;17236:41:0;;;;;;;;;;;;;;14579:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16804:65;;;;;;;;;;;;;:::i;15189:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15189:184:0;;;;;;;;:::i;18266:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43318:486;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43318:486:0;;;;;;;;;;;;;;;;;:::i;:::-;;18074:21;;;;;;;;;;;;;:::i;15093:88::-;;;;;;;;;;;;;:::i;38884:577::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38884:577:0;-1:-1:-1;;;;;38884:577:0;;:::i;21346:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21346:141:0;;:::i;16187:473::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16187:473:0;;;;;;;;;;;;;;;;;:::i;44551:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44551:183:0;;;;;;;;;;;;;;;;;;;:::i;17164:65::-;;;;;;;;;;;;;:::i;44346:193::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44346:193:0;;:::i;19749:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19749:40:0;;:::i;19200:25::-;;;;;;;;;;;;;:::i;14765:82::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34633:730;;;;;;;;;;;;;:::i;39473:584::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39473:584:0;-1:-1:-1;;;;;39473:584:0;;:::i;20808:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20808:251:0;;;;;;;;;;:::i;13257:24::-;;;;;;;;;;;;;:::i;33912:709::-;;;;;;;;;;;;;:::i;43816:222::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43816:222:0;-1:-1:-1;;;;;43816:222:0;;:::i;9328:93::-;;;;;;;;;;;;;:::i;41258:1371::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41258:1371:0;;;;;;;;:::i;44049:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44049:87:0;;;;:::i;40329:633::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40329:633:0;-1:-1:-1;;;;;40329:633:0;;:::i;18401:22::-;;;;;;;;;;;;;:::i;17945:30::-;;;;;;;;;;;;;:::i;17020:65::-;;;;;;;;;;;;;:::i;15641:397::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15641:397:0;;;;;;;;:::i;19136:24::-;;;;;;;;;;;;;:::i;44245:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44245:89:0;;;;:::i;14983:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14983:102:0;-1:-1:-1;;;;;14983:102:0;;:::i;19845:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19845:41:0;;:::i;19059:32::-;;;;;;;;;;;;;:::i;9204:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9204:116:0;-1:-1:-1;;;;;9204:116:0;;:::i;30492:343::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30492:343:0;;:::i;19329:85::-;;;;;;;;;;;;;:::i;22271:970::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22271:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18102:34::-;;;;;;;;;;;;;:::i;18237:22::-;;;;;;;;;;;;;:::i;24237:857::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24237:857:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35375:728::-;;;;;;;;;;;;;:::i;23253:976::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23253:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17284:32::-;;;;;;;;;;;;;:::i;19022:30::-;;;;;;;;;;;;;:::i;5729:20::-;;;;;;;;;;;;;:::i;31205:335::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31205:335:0;;:::i;19584:85::-;;;;;;;;;;;;;:::i;17348:24::-;;;;;;;;;;;;;:::i;14670:87::-;;;;;;;;;;;;;:::i;44144:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44144:89:0;;;;:::i;45259:343::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45259:343:0;;;;;;;;;;;;:::i;17872:33::-;;;;;;;;;;;;;:::i;17912:26::-;;;;;;;;;;;;;:::i;45050:197::-;;;;;;;;;;;;;:::i;17776:29::-;;;;;;;;;;;;;:::i;19456:86::-;;;;;;;;;;;;;:::i;16046:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16046:133:0;;;;;;;;:::i;18989:26::-;;;;;;;;;;;;;:::i;44746:292::-;;;;;;;;;;;;;:::i;17379:27::-;;;;;;;;;;;;;:::i;25107:769::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25107:769:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9073:125;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9073:125:0;-1:-1:-1;;;;;9073:125:0;;:::i;17092:65::-;;;;;;;;;;;;;:::i;18436:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18436:40:0;-1:-1:-1;;;;;18436:40:0;;:::i;16948:65::-;;;;;;;;;;;;;:::i;26586:421::-;;;:::i;27015:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27015:149:0;-1:-1:-1;;;;;27015:149:0;;:::i;27944:2234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27944:2234:0;;:::i;16876:65::-;;;;;;;;;;;;;:::i;19942:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19942:41:0;;:::i;36115:223::-;;;;;;;;;;;;;:::i;21195:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21195:139:0;;:::i;21071:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21071:112:0;-1:-1:-1;;;;;21071:112:0;;:::i;15381:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15381:252:0;;;;;;;;:::i;14855:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14855:120:0;;;;;;;;;;:::i;38302:570::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38302:570:0;-1:-1:-1;;;;;38302:570:0;;:::i;9786:47::-;;;;;;;;;;;;;:::i;19265:25::-;;;;;;;;;;;;;:::i;21499:193::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21499:193:0;-1:-1:-1;;;;;21499:193:0;;:::i;27176:756::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27176:756:0;;:::i;19098:31::-;;;;;;;;;;;;;:::i;5982:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5982:247:0;-1:-1:-1;;;;;5982:247:0;;:::i;30847:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30847:346:0;;:::i;25884:694::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25884:694:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17514:27::-;;;;;;;;;;;;;:::i;17647:::-;;;-1:-1:-1;;;17647:27:0;;;;;:::o;17236:41::-;;;-1:-1:-1;;;;;17236:41:0;;:::o;14579:83::-;14649:5;14642:12;;;;;;;;-1:-1:-1;;14642:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14616:13;;14642:12;;14649:5;;14642:12;;14649:5;14642:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:83;:::o;16804:65::-;;;;;;-1:-1:-1;;;;;16804:65:0;;:::o;15189:184::-;15275:10;15247:4;15264:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15264:27:0;;;;;;;;;;;:33;;;15313:30;;;;;;;15247:4;;15264:27;;15275:10;;-1:-1:-1;;;;;;;;;;;15313:30:0;;;;;;;-1:-1:-1;15361:4:0;15189:184;;;;;:::o;18266:34::-;;;;:::o;43318:486::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;43439:3:::1;::::0;-1:-1:-1;;;;;43429:13:0;;::::1;43439:3;::::0;;::::1;;43429:13;;43421:49;;;::::0;;-1:-1:-1;;;43421:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43499:4;::::0;-1:-1:-1;;;;;43489:14:0;;::::1;43499:4:::0;::::1;43489:14;;43481:51;;;::::0;;-1:-1:-1;;;43481:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43561:4;::::0;-1:-1:-1;;;;;43551:14:0;;::::1;43561:4:::0;::::1;43551:14;;43543:52;;;::::0;;-1:-1:-1;;;43543:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43624:3;::::0;-1:-1:-1;;;;;43614:13:0;;::::1;43624:3:::0;::::1;43614:13;;43606:50;;;::::0;;-1:-1:-1;;;43606:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43682:6;-1:-1:-1::0;;;;;43675:23:0::1;;43699:2;43703:4;43675:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;43675:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43675:33:0;43667:72:::1;;;::::0;;-1:-1:-1;;;43667:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43758:5;::::0;;43750:46:::1;::::0;-1:-1:-1;;;;;43758:5:0;;::::1;::::0;43774:21:::1;43750:46:::0;::::1;;;::::0;43774:21;;43750:46;43758:5;43750:46;43774:21;43758:5;43750:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43318:486:::0;;;:::o;18074:21::-;;;;:::o;15093:88::-;15161:12;;15093:88;:::o;38884:577::-;38941:22;-1:-1:-1;;;;;38984:20:0;;38976:67;;;;-1:-1:-1;;;38976:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39080:10;;39073:36;;;-1:-1:-1;;;39073:36:0;;-1:-1:-1;;;;;39073:36:0;;;;;;;;;39054:16;;39080:10;;;;;39073:28;;:36;;;;;;;;;;;;;;;39080:10;39073:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39073:36:0;-1:-1:-1;;;;;39140:15:0;;39120:17;39140:15;;;:7;39073:36;39140:15;;;;;;;:22;;;39261:7;;-1:-1:-1;;39222:16:0;;39213:26;;:8;:26;;;;;;;39193:15;;39073:36;;-1:-1:-1;39140:22:0;;39191:78;;39261:7;39192:63;;39073:36;;39193:47;;:15;:19;:47::i;:::-;39192:53;;:63::i;:::-;39191:69;;:78::i;:::-;39173:96;;39359:7;;39292:63;39346:8;39293:47;39313:8;:26;39337:1;39322:12;:16;39313:26;;;;;;;;;;;;39293:15;;:19;;:47;;;;:::i;39292:63::-;39291:75;;;;;-1:-1:-1;;;;;39402:15:0;;;;;;:7;:15;;;;;:26;;;39291:75;;;39280:86;;;;;39385:67;;39390:39;;39280:86;;39390:11;:39::i;:::-;39431:20;39436:9;;39447:3;39431:4;:20::i;:::-;39385:4;:67::i;:::-;39377:76;;;;;38884:577;;;;:::o;21346:141::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;21418:9;21410:41:::1;;;::::0;;-1:-1:-1;;;21410:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21410:41:0;;;;;;;;;;;;;::::1;;21462:10;:17:::0;21346:141::o;16187:473::-;16263:4;16288:10;-1:-1:-1;;;;;16288:17:0;;;;:55;;-1:-1:-1;;;;;;16316:15:0;;;;;;:10;:15;;;;;;;;16332:10;16316:27;;;;;;;;16309:34;;;16288:55;16280:64;;;;;;16362:20;16368:3;16373;16378;16362:5;:20::i;:::-;16397:10;-1:-1:-1;;;;;16397:17:0;;;;;;:63;;-1:-1:-1;;;;;;16418:15:0;;;;;;:10;:15;;;;;;;;16434:10;16418:27;;;;;;;;-1:-1:-1;;16418:42:0;;16397:63;16393:238;;;-1:-1:-1;;;;;16512:15:0;;;;;;:10;:15;;;;;;;;16528:10;16512:27;;;;;;;;16507:38;;16541:3;16507:4;:38::i;:::-;-1:-1:-1;;;;;16477:15:0;;;;;;;:10;:15;;;;;;;;16493:10;16477:27;;;;;;;;;;:68;;;16565:54;;;;;;;;;;16493:10;;-1:-1:-1;;;;;;;;;;;16565:54:0;;;;;;;;;16393:238;-1:-1:-1;16648:4:0;16187:473;;;;;:::o;44551:183::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;44671:3:::1;:10:::0;;-1:-1:-1;;;;;44671:10:0;;::::1;-1:-1:-1::0;;;;;;44671:10:0;;::::1;;::::0;;;44692:4:::1;:11:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;44714:4:::1;:12:::0;;;;;::::1;::::0;::::1;;::::0;;44551:183::o;17164:65::-;;;-1:-1:-1;;;;;17164:65:0;;:::o;44346:193::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;44418:4:::1;::::0;44410:36:::1;;;::::0;;-1:-1:-1;;;44410:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44410:36:0;;;;;;;;;;;;;::::1;;44473:4;44465;;:12;;44457:51;;;::::0;;-1:-1:-1;;;44457:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;44519:4;:12:::0;44346:193::o;19749:40::-;;;;;;;;;;;;;:::o;19200:25::-;;;;:::o;14765:82::-;14830:9;;;;14765:82;:::o;34633:730::-;197:1;348:7;;:19;;340:63;;;;;-1:-1:-1;;;340:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;197:1;416:7;:18;34702:14:::1;34719:26;34734:10;34719:14;:26::i;:::-;34702:43:::0;-1:-1:-1;34759:10:0;;34756:600:::1;;34813:10;34805:19;::::0;;;:7:::1;:19;::::0;;;;:30:::1;;::::0;34794:42:::1;::::0;:6;;:10:::1;:42::i;:::-;34859:10;34884:1;34851:19:::0;;;:7:::1;:19;::::0;;;;;;;:30:::1;;:34:::0;;;34925:4:::1;::::0;34918:40;;-1:-1:-1;;;34918:40:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;34785:51;;-1:-1:-1;;;;;;34925:4:0::1;::::0;34918:21:::1;::::0;:40;;;;;;;;;;;;;34925:4;34918:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34918:40:0;34910:97:::1;;;;-1:-1:-1::0;;;34910:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35037:34;::::0;;35052:10:::1;35037:34:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;35099:24;35104:10;;35116:6;35099:4;:24::i;:::-;35086:10;:37:::0;35146:10:::1;35138:19;::::0;;;:7:::1;:19;::::0;;;;:34:::1;::::0;::::1;:43:::0;;;35237:6:::1;::::0;35208:26:::1;::::0;::::1;:35:::0;35319:15:::1;::::0;35278:38:::1;::::0;;::::1;:56:::0;34756:600:::1;-1:-1:-1::0;153:1:0;461:22;;34633:730::o;39473:584::-;39530:22;-1:-1:-1;;;;;39573:20:0;;39565:67;;;;-1:-1:-1;;;39565:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39669:10;;39662:36;;;-1:-1:-1;;;39662:36:0;;-1:-1:-1;;;;;39662:36:0;;;;;;;;;39643:16;;39669:10;;;;;39662:28;;:36;;;;;;;;;;;;;;;39669:10;39662:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39662:36:0;-1:-1:-1;;;;;39729:15:0;;39709:17;39729:15;;;:7;39662:36;39729:15;;;;;;;:22;;;39851:7;;-1:-1:-1;;39812:16:0;;39803:26;;:8;:26;;;;;;;39783:15;;39662:36;;-1:-1:-1;39729:22:0;;39781:78;;39851:7;39782:63;;39662:36;;39783:47;;:15;:19;:47::i;39781:78::-;39762:97;;39949:7;;39882:63;39936:8;39883:47;39903:8;:26;39927:1;39912:12;:16;39903:26;;;;;;;;;;;;39883:15;;:19;;:47;;;;:::i;39882:63::-;39881:75;;;;;-1:-1:-1;;;;;39992:15:0;;;;;;:7;:15;;;;;:26;;;39881:75;;;39870:86;;;;;39975:67;;39980:39;;39870:86;;39980:11;:39::i;20808:251::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;-1:-1:-1;;;;;20937:33:0;::::1;20929:67;;;::::0;;-1:-1:-1;;;20929:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20929:67:0;;;;;;;;;;;;;::::1;;21007:9;:22:::0;;-1:-1:-1;;;;;21007:22:0;;::::1;-1:-1:-1::0;;;;;;21007:22:0;;::::1;;::::0;;;21040:4:::1;:11:::0;;;;;::::1;::::0;::::1;;::::0;;20808:251::o;13257:24::-;;;;:::o;33912:709::-;197:1;348:7;;:19;;340:63;;;;;-1:-1:-1;;;340:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;197:1;416:7;:18;33979:13:::1;33995:25;34009:10;33995:13;:25::i;:::-;33979:41:::0;-1:-1:-1;34034:9:0;;34031:583:::1;;34085:10;34077:19;::::0;;;:7:::1;:19;::::0;;;;:29:::1;;::::0;34067:40:::1;::::0;:5;;:9:::1;:40::i;:::-;34130:10;34154:1;34122:19:::0;;;:7:::1;:19;::::0;;;;;;;:29:::1;;:33:::0;;;34195:4:::1;::::0;34188:39;;-1:-1:-1;;;34188:39:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;34059:48;;-1:-1:-1;;;;;;34195:4:0::1;::::0;34188:21:::1;::::0;:39;;;;;;;;;;;;;34195:4;34188:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34188:39:0;34180:96:::1;;;;-1:-1:-1::0;;;34180:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34306:32;::::0;;34320:10:::1;34306:32:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;34365:22;34370:9;;34381:5;34365:4;:22::i;:::-;34353:9;:34:::0;34410:10:::1;34402:19;::::0;;;:7:::1;:19;::::0;;;;:41;;;34498:5:::1;::::0;34470:25:::1;::::0;::::1;:33:::0;34578:14:::1;::::0;34538:37:::1;::::0;;::::1;:54:::0;461:22;;33912:709::o;43816:222::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;-1:-1:-1;;;;;43914:41:0;::::1;43906:75;;;::::0;;-1:-1:-1;;;43906:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43906:75:0;;;;;;;;;;;;;::::1;;43992:17;:38:::0;;-1:-1:-1;;;;;;43992:38:0::1;-1:-1:-1::0;;;;;43992:38:0;;;::::1;::::0;;;::::1;::::0;;43816:222::o;9328:93::-;9380:33;9402:10;9380:21;:33::i;:::-;9328:93::o;41258:1371::-;41323:19;41355:16;41381:3;;;;;;;;;-1:-1:-1;;;;;41381:3:0;-1:-1:-1;;;;;41374:21:0;;41404:4;41374:36;;;;;;;;;;;;;-1:-1:-1;;;;;41374:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41374:36:0;41437:10;41429:19;;;;:7;41374:36;41429:19;;;;:29;;;41374:36;;-1:-1:-1;41429:29:0;;;;;;:37;;:29;:37;41421:46;;;;;;41491:7;;-1:-1:-1;;;41491:7:0;;;;:13;;41500:4;41491:13;41488:84;;;41527:17;;;;;;;;;-1:-1:-1;;;;;41527:17:0;-1:-1:-1;;;;;41517:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41488:84;41592:16;:14;:16::i;:::-;41621:14;41638:293;41693:8;41732:14;9827:6;41743:2;41732:4;:14::i;:::-;41777:12;;41820:14;9827:6;41831:2;41820:4;:14::i;:::-;41865:7;41903:1;41638:24;:293::i;:::-;41621:310;;41985:293;42040:8;42080:14;9827:6;42091:2;42080:4;:14::i;:::-;42125:12;;42168:14;9827:6;42179:2;42168:4;:14::i;:::-;42213:6;42250:1;41985:24;:293::i;:::-;42315:10;;42308:40;;;-1:-1:-1;;;42308:40:0;;42337:10;42308:40;;;;;;41968:310;;-1:-1:-1;;;;;;42315:10:0;;;;42308:28;;:40;;;;;;;;;;;;;;;42315:10;42308:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42308:40:0;42298:50;;;42290:88;;;;;-1:-1:-1;;;42290:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42389:22;42404:6;42389:14;:22::i;:::-;42422:13;42428:6;42422:5;:13::i;:::-;42461:3;;42454:40;;;-1:-1:-1;;;42454:40:0;;-1:-1:-1;;;;;42454:40:0;;;;;;;;;;;;;;;42461:3;;;;;;;;42454:20;;:40;;;;;;;;;;;;;;;-1:-1:-1;42461:3:0;42454:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42454:40:0;42446:79;;;;;-1:-1:-1;;;42446:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42551:28;;;42560:10;42551:28;;;;;;;;;;;;;;;;;;;;;42600:21;;41258:1371;;;;:::o;44049:87::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;44113:7:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;44113:15:0::1;-1:-1:-1::0;;;;44113:15:0;;::::1;::::0;;;::::1;::::0;;44049:87::o;40329:633::-;40388:17;-1:-1:-1;;;;;40425:18:0;;40417:65;;;;-1:-1:-1;;;40417:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40519:3;;40512:36;;;-1:-1:-1;;;40512:36:0;;40542:4;40512:36;;;;;;-1:-1:-1;;40519:3:0;;;-1:-1:-1;;;;;40519:3:0;;40512:21;;:36;;;;;;;;;;;;;;40519:3;40512:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40512:36:0;;-1:-1:-1;40559:21:0;40583:330;40512:36;40678:14;9827:6;40689:2;40678:4;:14::i;:::-;40723:12;;40766:14;9827:6;40777:2;40766:4;:14::i;:::-;40818:10;;40811:43;;;-1:-1:-1;;;40811:43:0;;-1:-1:-1;;;;;40811:43:0;;;;;;;;;40818:10;;;;;40811:28;;:43;;;;;;;;;;;;;;40818:10;40811:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40811:43:0;40885:1;40583:24;:330::i;:::-;40559:354;40329:633;-1:-1:-1;;;;40329:633:0:o;18401:22::-;;;;:::o;17945:30::-;;;;:::o;17020:65::-;;;-1:-1:-1;;;;;17020:65:0;;:::o;15641:397::-;15752:10;15708:4;15741:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15741:27:0;;;;;;;;;;15783:14;;;15779:160;;;15825:10;15844:1;15814:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15814:27:0;;;;;;;;;:31;15779:160;;;15908:19;15913:8;15923:3;15908:4;:19::i;:::-;15889:10;15878:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15878:27:0;;;;;;;;;:49;15779:160;15963:10;15980:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15954:54:0;;15980:27;;;;;;;;;;;15954:54;;;;;;;;;15963:10;-1:-1:-1;;;;;;;;;;;15954:54:0;;;;;;;;;;-1:-1:-1;16026:4:0;;15641:397;-1:-1:-1;;;15641:397:0:o;19136:24::-;;;;:::o;44245:89::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;44310:8:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;44310:16:0::1;-1:-1:-1::0;;;;44310:16:0;;::::1;::::0;;;::::1;::::0;;44245:89::o;14983:102::-;-1:-1:-1;;;;;15063:14:0;15039:4;15063:14;;;:8;:14;;;;;;;14983:102::o;19845:41::-;;;;;;;;;;;;;:::o;19059:32::-;;;;:::o;9204:116::-;8948:28;8965:10;8948:16;:28::i;:::-;8940:105;;;;-1:-1:-1;;;8940:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9285:27:::1;9304:7;9285:18;:27::i;:::-;9204:116:::0;:::o;30492:343::-;8948:28;8965:10;8948:16;:28::i;:::-;8940:105;;;;-1:-1:-1;;;8940:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30578:4:::1;::::0;30571:60:::1;::::0;;-1:-1:-1;;;30571:60:0;;30597:10:::1;30571:60;::::0;::::1;::::0;30617:4:::1;30571:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;30578:4:0;;::::1;::::0;30571:25:::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;30578:4:::1;::::0;30571:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30571:60:0;30563:121:::1;;;;-1:-1:-1::0;;;30563:121:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30705:15;30723:27;30728:6;30736:13;30741:2;30745:3;30736:4;:13::i;30723:27::-;30705:45;;30773:24;30778:9;;30789:7;30773:4;:24::i;:::-;30761:9;:36:::0;30808:19:::1;30819:7:::0;30808:10:::1;:19::i;:::-;9056:1;30492:343:::0;:::o;19329:85::-;;;;:::o;22271:970::-;22518:17;22557:21;22581:33;22586:14;22602:11;22581:4;:33::i;:::-;22557:57;;22625:8;22636:43;22641:28;9827:6;22652:16;22641:4;:28::i;:::-;22671:7;22636:4;:43::i;:::-;22625:54;;22690:32;22725:37;22730:14;22746:15;9827:6;22757:3;22746:4;:15::i;:::-;22725:4;:37::i;:::-;22690:72;;22775:23;22801:50;22806:15;22823:27;22801:4;:50::i;:::-;22775:76;;22862:18;22883:41;22888:18;22908:15;22883:4;:41::i;:::-;22862:62;;22939:14;22956:37;22961:13;22976:16;22956:4;:37::i;:::-;22939:54;;23004:18;23025:27;23030:9;23041:10;23025:4;:27::i;:::-;23004:48;;23063:29;23095:31;23100:10;23112:13;23095:4;:31::i;:::-;23063:63;;23156:45;23161:24;23187:13;9827:6;23198:1;23187:4;:13::i;23156:45::-;23141:60;22271:970;-1:-1:-1;;;;;;;;;;;;;;;22271:970:0:o;18102:34::-;;;;:::o;18237:22::-;;;;:::o;24237:857::-;24481:18;24519:21;24543:32;24548:13;24563:11;24543:4;:32::i;:::-;24519:56;;24586:8;24597:43;24602:28;9827:6;24613:16;24602:4;:28::i;24597:43::-;24586:54;;24651:26;24680:36;24685:13;24700:15;9827:6;24711:3;24700:4;:15::i;24680:36::-;24651:65;;24729:22;24754:43;24759:14;24775:21;24754:4;:43::i;:::-;24729:68;;24808:17;24828:39;24833:17;24852:14;24828:4;:39::i;:::-;24808:59;;24883:14;24900:36;24905:12;24919:16;24900:4;:36::i;:::-;24883:53;;24947:18;24968:27;24973:9;24984:10;24968:4;:27::i;:::-;24947:48;;25022:31;25027:13;25042:10;25022:4;:31::i;:::-;25006:47;24237:857;-1:-1:-1;;;;;;;;;;;;;;24237:857:0:o;35375:728::-;197:1;348:7;;:19;;340:63;;;;;-1:-1:-1;;;340:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;197:1;416:7;:18;35442:14:::1;35459:26;35474:10;35459:14;:26::i;:::-;35442:43:::0;-1:-1:-1;35499:10:0;;35496:600:::1;;35553:10;35545:19;::::0;;;:7:::1;:19;::::0;;;;:30:::1;;::::0;35534:42:::1;::::0;:6;;:10:::1;:42::i;:::-;35599:10;35624:1;35591:19:::0;;;:7:::1;:19;::::0;;;;;;;:30:::1;;:34:::0;;;35665:3:::1;::::0;35658:40;;-1:-1:-1;;;35658:40:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;35525:51;;-1:-1:-1;;;;;;35665:3:0::1;::::0;35658:20:::1;::::0;:40;;;;;;;;;;;;;35665:3;35658:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35658:40:0;35650:97:::1;;;;-1:-1:-1::0;;;35650:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35777:34;::::0;;35792:10:::1;35777:34:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;35839:24;35844:10;;35856:6;35839:4;:24::i;:::-;35826:10;:37:::0;35886:10:::1;35878:19;::::0;;;:7:::1;:19;::::0;;;;:34:::1;::::0;::::1;:43:::0;;;35977:6:::1;::::0;35948:26:::1;::::0;::::1;:35:::0;36059:15:::1;::::0;36018:38:::1;::::0;;::::1;:56:::0;-1:-1:-1;153:1:0;461:22;;35375:728::o;23253:976::-;23498:19;23535:21;23559:33;23564:14;23580:11;23559:4;:33::i;:::-;23535:57;;23605:29;23637:33;23642:12;23656:13;9827:6;23667:1;23656:4;:13::i;23637:33::-;23605:65;;23681:18;23702:42;23707:10;23719:24;23702:4;:42::i;:::-;23681:63;;23755:14;23772:31;23777:13;23792:10;23772:4;:31::i;:::-;23755:48;;23818:18;23839:45;23844:9;23855:28;9827:6;23866:16;23855:4;:28::i;:::-;23839:4;:45::i;:::-;23818:66;;23895:23;23921:36;23926:13;23941:15;23921:4;:36::i;:::-;23895:62;;23970:32;24005:41;24010:15;24027:18;24005:4;:41::i;:::-;23970:76;;24057:8;24068:43;24073:28;9827:6;24084:16;24073:4;:28::i;:::-;24103:7;24068:4;:43::i;:::-;24057:54;;24139:50;24144:27;24173:15;9827:6;24184:3;24173:4;:15::i;17284:32::-;;;-1:-1:-1;;;;;17284:32:0;;:::o;19022:30::-;;;;:::o;5729:20::-;;;-1:-1:-1;;;;;5729:20:0;;:::o;31205:335::-;8948:28;8965:10;8948:16;:28::i;:::-;8940:105;;;;-1:-1:-1;;;8940:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31291:3:::1;::::0;31284:59:::1;::::0;;-1:-1:-1;;;31284:59:0;;31309:10:::1;31284:59;::::0;::::1;::::0;31329:4:::1;31284:59:::0;;;;;;;;;;;;-1:-1:-1;;;;;31291:3:0;;::::1;::::0;31284:24:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;31291:3:::1;::::0;31284:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31284:59:0;31276:120:::1;;;;-1:-1:-1::0;;;31276:120:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31407:15;31425:27;31430:6;31438:13;31443:2;31447:3;31438:4;:13::i;31425:27::-;31407:45;;31476:25;31481:10;;31493:7;31476:4;:25::i;:::-;31463:10;:38:::0;31512:20:::1;31524:7:::0;31512:11:::1;:20::i;19584:85::-:0;;;;:::o;17348:24::-;;;-1:-1:-1;;;17348:24:0;;;;;:::o;14670:87::-;14742:7;14735:14;;;;;;;;-1:-1:-1;;14735:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14709:13;;14735:14;;14742:7;;14735:14;;14742:7;14735:14;;;;;;;;;;;;;;;;;;;;;;;;44144:89;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;44209:8:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;44209:16:0::1;-1:-1:-1::0;;;;44209:16:0;;::::1;::::0;;;::::1;::::0;;44144:89::o;45259:343::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;45363:8;;;::::1;::::0;:21:::1;;-1:-1:-1::0;45375:9:0;;::::1;45363:21;:34;;;;-1:-1:-1::0;45388:9:0;;::::1;45363:34;45355:66;;;::::0;;-1:-1:-1;;;45355:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45355:66:0;;;;;;;;;;;;;::::1;;45448:4;45440;:12;;:30;;;;;45465:5;45456;:14;;45440:30;:47;;;;;45483:4;45474:5;:13;;45440:47;45432:80;;;::::0;;-1:-1:-1;;;45432:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45432:80:0;;;;;;;;;;;;;::::1;;45523:8;:15:::0;;;;45549:9:::1;:17:::0;45577:9:::1;:17:::0;45259:343::o;17872:33::-;;;;:::o;17912:26::-;;;;:::o;45050:197::-;45099:8;;-1:-1:-1;;;45099:8:0;;;;:14;;45109:4;45099:14;45096:144;;;45171:27;45176:10;;45188:9;;45171:4;:27::i;:::-;45139:3;;45132:36;;;-1:-1:-1;;;45132:36:0;;45162:4;45132:36;;;;;;-1:-1:-1;;;;;45139:3:0;;;;45132:21;;:36;;;;;;;;;;;;;;;45139:3;45132:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45132:36:0;:66;45129:100;;;45210:17;:15;:17::i;17776:29::-;;;;:::o;19456:86::-;;;;:::o;16046:133::-;16105:4;16122:27;16128:10;16140:3;16145;16122:5;:27::i;:::-;-1:-1:-1;16167:4:0;16046:133;;;;:::o;18989:26::-;;;;:::o;44746:292::-;44832:25;44837:9;;44848:8;;44832:4;:25::i;:::-;44799:4;;44792:37;;;-1:-1:-1;;;44792:37:0;;44823:4;44792:37;;;;;;-1:-1:-1;;;;;44799:4:0;;;;44792:22;;:37;;;;;;;;;;;;;;;44799:4;44792:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44792:37:0;:65;44788:112;;;44871:17;:15;:17::i;:::-;44963:27;44968:10;;44980:9;;44963:4;:27::i;:::-;44930:4;;44923:37;;;-1:-1:-1;;;44923:37:0;;44954:4;44923:37;;;;;;-1:-1:-1;;;;;44930:4:0;;;;44923:22;;:37;;;;;;;;;;;;;;;44930:4;44923:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44923:37:0;:67;44920:111;;;45002:17;:15;:17::i;17379:27::-;;;-1:-1:-1;;;17379:27:0;;;;;:::o;25107:769::-;25349:19;25370:15;25403:16;25422:35;25427:13;25442:14;25422:4;:35::i;:::-;25403:54;;25468:15;25486:19;9827:6;25497:7;25486:4;:19::i;:::-;25468:37;;25529:31;25534:13;25549:10;25529:4;:31::i;:::-;25516:44;;25571:6;25580:54;25585:14;25601:32;25606:14;25622:10;25601:4;:32::i;25580:54::-;25571:63;;25645:8;25656:20;25661:1;25664:11;25656:4;:20::i;:::-;25645:31;;25687:8;25698:15;9827:6;25709:3;25698:4;:15::i;:::-;25687:26;;25741;25746:15;25763:3;25741:4;:26::i;:::-;25724:43;;25791:31;25796:13;25811:10;25791:4;:31::i;:::-;25778:44;;25833:35;;;;;25107:769;;;;;;;;;:::o;9073:125::-;9137:4;9161:29;:16;9182:7;9161:20;:29::i;17092:65::-;;;-1:-1:-1;;;;;17092:65:0;;:::o;18436:40::-;;;;;;;;;;;;;:::o;16948:65::-;;;-1:-1:-1;;;;;16948:65:0;;:::o;26586:421::-;26772:4;;26759:9;:17;26751:75;;;;-1:-1:-1;;;26751:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26845:9;;:49;;;-1:-1:-1;;;26845:49:0;;26878:10;26845:49;;;;26890:3;26845:49;;;;;;-1:-1:-1;;;;;26845:9:0;;;;:13;;26866:9;;26845:49;;;;;;;;;;;26866:9;26845;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26913:10:0;26905:19;;;;:7;26845:49;26905:19;;;26845:49;26905:19;;;;:29;;:36;;-1:-1:-1;;26905:36:0;;;;;26967:32;;;;;26989:9;26967:32;;;;;;;;;;;;;;;;26586:421::o;27015:149::-;-1:-1:-1;;;;;27091:15:0;;27072:4;27091:15;;;:7;:15;;;;;:25;;;;;;;;27088:68;;;-1:-1:-1;27125:4:0;27118:11;;27088:68;-1:-1:-1;27151:5:0;27144:12;;27944:2234;27990:18;28066:6;28036:3;;;;;;;;;-1:-1:-1;;;;;28036:3:0;-1:-1:-1;;;;;28029:21:0;;28051:10;28029:33;;;;;;;;;;;;;-1:-1:-1;;;;;28029:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28029:33:0;:43;;28021:82;;;;;-1:-1:-1;;;28021:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28130:10;28122:19;;;;:7;:19;;;;;:29;;;;;;;;;:37;;:29;:37;28114:46;;;;;;28179:4;;-1:-1:-1;;;28179:4:0;;;;:12;;28187:4;28179:12;28171:21;;;;;;28203;28227:43;28267:2;28228:33;28251:9;;28228:18;28239:6;28228:10;:18::i;28227:43::-;28203:67;-1:-1:-1;28281:21:0;28306:25;:6;28203:67;28306:10;:25::i;:::-;28281:51;;28343:16;28369:3;;;;;;;;;-1:-1:-1;;;;;28369:3:0;-1:-1:-1;;;;;28362:21:0;;28392:4;28362:36;;;;;;;;;;;;;-1:-1:-1;;;;;28362:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28362:36:0;;-1:-1:-1;28409:26:0;28424:10;28409:14;:26::i;:::-;28565:13;28581:25;28595:10;28581:13;:25::i;:::-;28629:10;28621:19;;;;:7;:19;;;;;:29;;;:38;;;;;;28674:41;;;28770:14;;-1:-1:-1;28730:37:0;;:54;28828:5;;-1:-1:-1;28799:25:0;;;:34;28565:41;;-1:-1:-1;28879:26:0;;:14;:26::i;:::-;28928:10;28920:19;;;;:7;:19;;;;;:30;;;:40;;;;;;28975:34;;;:43;;;29074:15;;29033:38;;;:56;29134:6;;29104:26;;;;:36;28862:43;;-1:-1:-1;29186:26:0;;:14;:26::i;:::-;29235:10;29227:19;;;;:7;:19;;;;;:30;;;:40;;;;;;29282:34;;;:43;;;29381:15;;29340:38;;;:56;29441:6;;29411:26;;;;:36;29169:43;-1:-1:-1;29488:299:0;29543:8;29582:14;9827:6;29593:2;29582:4;:14::i;:::-;29627:12;;29670:14;9827:6;29681:2;29670:4;:14::i;:::-;29715:13;29759:1;29488:24;:299::i;:::-;29839:3;;29832:59;;;-1:-1:-1;;;29832:59:0;;29857:10;29832:59;;;;29877:4;29832:59;;;;;;;;;;;;29472:315;;-1:-1:-1;29839:3:0;;;;-1:-1:-1;;;;;29839:3:0;;29832:24;;:59;;;;;;;;;;;;;;;-1:-1:-1;29839:3:0;29832:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29832:59:0;29824:122;;;;-1:-1:-1;;;29824:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29973:20;29979:13;29973:5;:20::i;:::-;30011:10;;30004:54;;;-1:-1:-1;;;30004:54:0;;30032:10;30004:54;;;;;;;;;;;;-1:-1:-1;;;;;30011:10:0;;;;30004:27;;:54;;;;;;;;;;;;;;;30011:10;;30004:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30088:26:0;;;30095:10;30088:26;;30004:54;30088:26;;;;;;;;;;;;;;;;;;30140:20;;;;;;27944:2234;;;:::o;16876:65::-;;;-1:-1:-1;;;;;16876:65:0;;:::o;19942:41::-;;;;;;;;;;;;;:::o;36115:223::-;36160:14;:12;:14::i;:::-;36185:13;:11;:13::i;:::-;36209:14;:12;:14::i;:::-;36247:8;;-1:-1:-1;;;36247:8:0;;;;:14;;36257:4;36247:14;36244:87;;;36273:14;:12;:14::i;:::-;36302;:12;:14::i;21195:139::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;21266:9;21258:41:::1;;;::::0;;-1:-1:-1;;;21258:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21258:41:0;;;;;;;;;;;;;::::1;;21310:9;:16:::0;21195:139::o;21071:112::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;21165:3:::1;:10:::0;;-1:-1:-1;;;;;;21165:10:0::1;-1:-1:-1::0;;;;;21165:10:0;;;::::1;::::0;;;::::1;::::0;;21071:112::o;15381:252::-;15511:10;15448:4;15500:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15500:27:0;;;;;;;;;;15495:38;;15529:3;15495:4;:38::i;:::-;15476:10;15465:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15465:27:0;;;;;;;;;;;;:68;;;15549:54;;;;;;15465:27;;-1:-1:-1;;;;;;;;;;;15549:54:0;;;;;;;;;;-1:-1:-1;15621:4:0;15381:252;;;;:::o;14855:120::-;-1:-1:-1;;;;;14947:15:0;;;14923:4;14947:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;14855:120::o;38302:570::-;38359:22;-1:-1:-1;;;;;38402:20:0;;38394:67;;;;-1:-1:-1;;;38394:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38498:10;;38491:36;;;-1:-1:-1;;;38491:36:0;;-1:-1:-1;;;;;38491:36:0;;;;;;;;;38472:16;;38498:10;;;;;38491:28;;:36;;;;;;;;;;;;;;;38498:10;38491:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38491:36:0;-1:-1:-1;;;;;38558:15:0;;38538:17;38558:15;;;:7;38491:36;38558:15;;;;;;;:21;;;38677:7;;-1:-1:-1;;38638:16:0;;38630:25;;:7;:25;;;;;;;38611:14;;38491:36;;-1:-1:-1;38558:21:0;;38609:76;;38677:7;38610:61;;38491:36;;38611:45;;:14;:18;:45::i;38609:76::-;38591:94;;38772:7;;38707:61;38759:8;38708:45;38727:7;:25;38750:1;38735:12;:16;38727:25;;;;;;;;;;;;38708:14;;:18;;:45;;;;:::i;38707:61::-;38706:73;;;;;-1:-1:-1;;;;;38814:15:0;;;;;;:7;:15;;;;;:25;;;38706:73;;;38696:83;;;;;38798:65;;38803:37;;38696:83;;38803:10;:37::i;9786:47::-;9827:6;9786:47;:::o;19265:25::-;;;;:::o;21499:193::-;-1:-1:-1;;;;;21616:17:0;;21584:4;21616:17;;;:7;:17;;;;;:29;;;;;21613:72;;;-1:-1:-1;21654:4:0;21647:11;;27176:756;27232:18;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;27270:4:::1;::::0;-1:-1:-1;;;27270:4:0;::::1;;;:13;27262:43;;;::::0;;-1:-1:-1;;;27262:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27262:43:0;;;;;;;;;;;;;::::1;;27331:3;::::0;27324:59:::1;::::0;;-1:-1:-1;;;27324:59:0;;27349:10:::1;27324:59;::::0;::::1;::::0;27369:4:::1;27324:59:::0;;;;;;;;;;;;27331:3:::1;::::0;;::::1;-1:-1:-1::0;;;;;27331:3:0::1;::::0;27324:24:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;27331:3:0;27324:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27324:59:0;27316:122:::1;;;;-1:-1:-1::0;;;27316:122:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27449:21;27473:43;27513:2;27474:33;27497:9;;27474:18;27485:6;27474:10;:18::i;27473:43::-;27449:67:::0;-1:-1:-1;27527:21:0::1;27552:25;:6:::0;27449:67;27552:10:::1;:25::i;:::-;27527:51;;27589:26;27604:10;27589:14;:26::i;:::-;27628:20;27634:13;27628:5;:20::i;:::-;27659:4;:11:::0;;-1:-1:-1;;;;27659:11:0::1;-1:-1:-1::0;;;27659:11:0::1;::::0;;27688:10:::1;::::0;27681:54:::1;::::0;;-1:-1:-1;;;27681:54:0;;27709:10:::1;27681:54;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;27688:10:0;;::::1;::::0;27681:27:::1;::::0;:54;;;;;::::1;::::0;;;;;;;;;27659:11;27688:10;27681:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27761:4:0::1;::::0;27784::::1;::::0;27746:71:::1;::::0;;-1:-1:-1;;;27746:71:0;;-1:-1:-1;;;;;27784:4:0;;::::1;27746:71;::::0;::::1;::::0;27791:25:::1;27746:71:::0;;;;;;27761:4;;;::::1;::::0;27746:29:::1;::::0;:71;;;;;27681:54:::1;::::0;27746:71;;;;;;;27761:4:::1;::::0;27746:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27847:32:0::1;::::0;;27853:10:::1;27847:32:::0;;27746:71:::1;27847:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;27904:20;;27176:756:::0;;;:::o;19098:31::-;;;;:::o;5982:247::-;5948:5;;-1:-1:-1;;;;;5948:5:0;5934:10;:19;5926:28;;;;;;-1:-1:-1;;;;;6072:23:0;::::1;6064:70;;;;-1:-1:-1::0;;;6064:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6145:5;:17:::0;;-1:-1:-1;;;;;;6145:17:0::1;-1:-1:-1::0;;;;;6145:17:0;::::1;::::0;;::::1;::::0;;6178:43:::1;::::0;6145:17;;6199:10:::1;::::0;6178:43:::1;::::0;6145:5;6178:43:::1;5982:247:::0;:::o;30847:346::-;8948:28;8965:10;8948:16;:28::i;:::-;8940:105;;;;-1:-1:-1;;;8940:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30933:4:::1;::::0;30926:60:::1;::::0;;-1:-1:-1;;;30926:60:0;;30952:10:::1;30926:60;::::0;::::1;::::0;30972:4:::1;30926:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;30933:4:0;;::::1;::::0;30926:25:::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;30933:4:::1;::::0;30926:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30926:60:0;30918:121:::1;;;;-1:-1:-1::0;;;30918:121:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31060:15;31078:27;31083:6;31091:13;31096:2;31100:3;31091:4;:13::i;31078:27::-;31060:45;;31129:25;31134:10;;31146:7;31129:4;:25::i;:::-;31116:10;:38:::0;31165:20:::1;31177:7:::0;31165:11:::1;:20::i;25884:694::-:0;26127:18;26163:16;26182:35;26187:14;26203:13;26182:4;:35::i;:::-;26163:54;;26228:9;26240:37;26245:15;26262:14;26240:4;:37::i;:::-;26228:49;;26288:6;26297:27;26302:15;26319:4;26297;:27::i;:::-;26288:36;;26335:8;26346:20;26351:1;26354:11;26346:4;:20::i;:::-;26335:31;;26383:15;26388:3;9827:6;26383:4;:15::i;:::-;26377:21;;26415:25;26420:14;26436:3;26415:4;:25::i;:::-;26409:31;;26467:19;9827:6;26478:7;26467:4;:19::i;:::-;26451:35;;26513:24;26518:3;26523:13;26513:4;:24::i;:::-;26497:40;25884:694;-1:-1:-1;;;;;;;;;;;25884:694:0:o;17514:27::-;;;-1:-1:-1;;;17514:27:0;;;;;:::o;7995:178::-;8073:18;8077:4;8083:7;8073:3;:18::i;:::-;8072:19;8064:63;;;;;-1:-1:-1;;;8064:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8138:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;8138:27:0;8161:4;8138:27;;;7995:178::o;1412:136::-;1470:7;1497:43;1501:1;1504;1497:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1490:50;1412:136;-1:-1:-1;;;1412:136:0:o;2302:471::-;2360:7;2605:6;2601:47;;-1:-1:-1;2635:1:0;2628:8;;2601:47;2672:5;;;2676:1;2672;:5;:1;2696:5;;;;;:10;2688:56;;;;-1:-1:-1;;;2688:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3249:132;3307:7;3334:39;3338:1;3341;3334:39;;;;;;;;;;;;;;;;;:3;:39::i;948:181::-;1006:7;1038:5;;;1062:6;;;;1054:46;;;;;-1:-1:-1;;;1054:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10794:387;10865:4;10895:6;10887:31;;;;;-1:-1:-1;;;10887:31:0;;;;;;;;;;;;-1:-1:-1;;;10887:31:0;;;;;;;;;;;;;;;9827:6;10939:8;;10966:6;;;:24;;;9827:6;10981:1;10976:2;:6;;;;;;:14;10966:24;10958:53;;;;;-1:-1:-1;;;10958:53:0;;;;;;;;;;;;-1:-1:-1;;;10958:53:0;;;;;;;;;;;;;;;11059:1;11055:5;;11049:12;;11080:8;;;;11072:37;;;;;-1:-1:-1;;;11072:37:0;;;;;;;;;;;;-1:-1:-1;;;11072:37:0;;;;;;;;;;;;;;;11137:7;11152:1;11147:2;:6;;;;;;;10794:387;-1:-1:-1;;;;;;10794:387:0:o;10475:311::-;10546:4;10578:5;;;10602:6;;;:21;;;10622:1;10617;10612:2;:6;;;;;;:11;10602:21;10594:50;;;;;-1:-1:-1;;;10594:50:0;;;;;;;;;;;;-1:-1:-1;;;10594:50:0;;;;;;;;;;;;;;;10671:8;10665:15;;10699:8;;;;10691:37;;;;;-1:-1:-1;;;10691:37:0;;;;;;;;;;;;-1:-1:-1;;;10691:37:0;;;;;;;;;;;;;;;10739:7;9827:6;10749:2;:9;;13944:249;-1:-1:-1;;;;;14023:13:0;;;;;;:8;:13;;;;;;:20;-1:-1:-1;14023:20:0;14015:29;;;;;;-1:-1:-1;;;;;14076:13:0;;;;;;:8;:13;;;;;;14071:24;;14091:3;14071:4;:24::i;:::-;-1:-1:-1;;;;;14055:13:0;;;;;;;:8;:13;;;;;;:40;;;;14127:13;;;;;;;14122:24;;14142:3;14122:4;:24::i;:::-;-1:-1:-1;;;;;14106:13:0;;;;;;;:8;:13;;;;;;;;;:40;;;;14162:23;;;;;;;14106:13;;14162:23;;;;;;;;;;;;;13944:249;;;:::o;10034:202::-;10105:4;10128:6;10136:9;10149:14;10158:1;10161;10149:8;:14::i;:::-;10127:36;;;;10183:4;10182:5;10174:35;;;;;-1:-1:-1;;;10174:35:0;;;;;;;;;;;;-1:-1:-1;;;10174:35:0;;;;;;;;;;;;;;;-1:-1:-1;10227:1:0;10034:202;-1:-1:-1;;;10034:202:0:o;37170:554::-;37227:7;-1:-1:-1;;;;;37255:20:0;;37247:67;;;;-1:-1:-1;;;37247:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37351:10;;37344:40;;;-1:-1:-1;;;37344:40:0;;37373:10;37344:40;;;;;;37325:16;;-1:-1:-1;;;;;37351:10:0;;37344:28;;:40;;;;;;;;;;;;;;37351:10;37344:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37344:40:0;-1:-1:-1;;;;;37415:15:0;;37395:17;37415:15;;;:7;37344:40;37415:15;;;;;;;:22;;;37537:7;;-1:-1:-1;;37498:16:0;;37489:26;;:8;:26;;;;;;;37469:15;;37344:40;;-1:-1:-1;37415:22:0;;37467:78;;37537:7;37468:63;;37344:40;;37469:47;;:15;:19;:47::i;37467:78::-;37448:97;;37654:7;;37587:63;37641:8;37588:47;37608:8;:26;37632:1;37617:12;:16;37608:26;;;;;;;;;;;;37588:15;;:19;;:47;;;;:::i;37587:63::-;37586:75;;;;;-1:-1:-1;;;;;37556:15:0;;;;;;:7;:15;;;;;:26;;:105;;37586:75;;;;37556:105;;;;;37699:9;;37680:35;;37685:7;;37694:20;;37710:3;37694:4;:20::i;36613:545::-;36669:7;-1:-1:-1;;;;;36697:20:0;;36689:67;;;;-1:-1:-1;;;36689:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36793:10;;36786:40;;;-1:-1:-1;;;36786:40:0;;36815:10;36786:40;;;;;;36767:16;;-1:-1:-1;;;;;36793:10:0;;36786:28;;:40;;;;;;;;;;;;;;36793:10;36786:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36786:40:0;-1:-1:-1;;;;;36857:15:0;;36837:17;36857:15;;;:7;36786:40;36857:15;;;;;;;:21;;;36975:7;;-1:-1:-1;;36936:16:0;;36928:25;;:7;:25;;;;;;;36909:14;;36786:40;;-1:-1:-1;36857:21:0;;36907:76;;36975:7;36908:61;;36786:40;;36909:45;;:14;:18;:45::i;36907:76::-;36889:94;;37089:7;;37024:61;37076:8;37025:45;37044:7;:25;37067:1;37052:12;:16;37044:25;;;;;;;;;;;;37025:14;;:18;;:45;;;;:::i;37024:61::-;37023:73;;;;;-1:-1:-1;;;;;36994:15:0;;;;;;:7;:15;;;;;:25;;:102;;37023:73;;;;36994:102;;;;;37133:9;;37115:34;;37120:6;;37128:20;;37144:3;37128:4;:20::i;9584:154::-;9652:32;:16;9676:7;9652:23;:32::i;:::-;9700:30;;-1:-1:-1;;;;;9700:30:0;;;;;;;;9584:154;:::o;42641:200::-;42731:10;;42724:66;;;-1:-1:-1;;;42724:66:0;;42756:10;42724:66;;;;42776:4;42724:66;;;;;;;;;;;;42712:9;;-1:-1:-1;;;;;42731:10:0;;42724:31;;:66;;;;;;;;;;;;;;42712:9;42731:10;42724:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42724:66:0;;-1:-1:-1;42724:66:0;42801:32;;;;;-1:-1:-1;;;42801:32:0;;;;;;;;;;;;-1:-1:-1;;;42801:32:0;;;;;;;;;;;;;;13664:268;13734:4;13717:23;;;;:8;:23;;;;;;:30;-1:-1:-1;13717:30:0;13709:39;;;;;;13807:4;13790:23;;;;:8;:23;;;;;;13785:34;;13815:3;13785:4;:34::i;:::-;13776:4;13759:23;;;;:8;:23;;;;;:60;13850:12;;13845:23;;13864:3;13845:4;:23::i;:::-;13830:12;:38;13884:40;;;;;;;;13916:1;;13901:4;;13884:40;;;;;;;;;13664:268;:::o;9429:146::-;9494:29;:16;9515:7;9494:20;:29::i;:::-;9539:28;;-1:-1:-1;;;;;9539:28:0;;;;;;;;9429:146;:::o;9846:180::-;9917:4;9948:5;;;9972:6;;;;9964:35;;;;;-1:-1:-1;;;9964:35:0;;;;;;;;;;;;-1:-1:-1;;;9964:35:0;;;;;;;;;;;;;;31759:627;31962:12;;32032:15;;32018:7;;31940:19;;32005:43;;32006:20;;:7;;:11;:20::i;:::-;32005:26;;:43::i;:::-;31985:63;-1:-1:-1;32060:24:0;32087:26;31985:63;32101:11;32087:13;:26::i;:::-;32060:53;-1:-1:-1;32142:26:0;:9;32156:11;32142:13;:26::i;:::-;32124:15;:44;32196:14;;:36;;32215:16;32196:18;:36::i;:::-;32179:14;:53;32268:5;;-1:-1:-1;;32268:9:0;32260:18;;;;:7;:18;;;;;;:40;;32283:16;32260:22;:40::i;:::-;32251:5;;;32243:14;;;;:7;:14;;;;;;;;;:57;;;;32323:5;;32316:34;;;;;;;;;;;32339:10;32316:34;;;;;;;;;;;;;;-1:-1:-1;;32361:5:0;:7;;;;;;-1:-1:-1;;31759:627:0:o;11751:463::-;11827:4;11851:10;11865:11;11872:3;11865:6;:11::i;:::-;11851:25;;11887:11;11901:16;11906:3;11911:5;11901:4;:16::i;:::-;11887:30;;11930:13;11946:24;11952:4;11958:11;11963:5;11958:4;:11::i;:::-;11946:5;:24::i;:::-;11930:40;-1:-1:-1;11987:11:0;11983:59;;12022:8;-1:-1:-1;12015:15:0;;-1:-1:-1;;12015:15:0;11983:59;12074:13;12052:19;12119:40;12130:4;12136:6;12074:13;12119:10;:40::i;:::-;12098:61;;12177:29;12182:8;12192:13;12177:4;:29::i;:::-;12170:36;11751:463;-1:-1:-1;;;;;;;;11751:463:0:o;37736:554::-;37793:7;-1:-1:-1;;;;;37821:20:0;;37813:67;;;;-1:-1:-1;;;37813:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37917:10;;37910:40;;;-1:-1:-1;;;37910:40:0;;37939:10;37910:40;;;;;;37891:16;;-1:-1:-1;;;;;37917:10:0;;37910:28;;:40;;;;;;;;;;;;;;37917:10;37910:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37910:40:0;-1:-1:-1;;;;;37981:15:0;;37961:17;37981:15;;;:7;37910:40;37981:15;;;;;;;:22;;;38103:7;;-1:-1:-1;;38064:16:0;;38055:26;;:8;:26;;;;;;;38035:15;;37910:40;;-1:-1:-1;37981:22:0;;38033:78;;38103:7;38034:63;;37910:40;;38035:47;;:15;:19;:47::i;38033:78::-;38014:97;;38220:7;;38153:63;38207:8;38154:47;38174:8;:26;38198:1;38183:12;:16;38174:26;;;;;;;;;;;;38154:15;;:19;;:47;;;;:::i;38153:63::-;38152:75;;;;;-1:-1:-1;;;;;38122:15:0;;;;;;:7;:15;;;;;:26;;:105;;38152:75;;;;38122:105;;;;;38265:9;;38246:35;;38251:7;;38260:20;;38276:3;38260:4;:20::i;33040:630::-;33243:12;;33314:16;;33300:7;;33221:19;;33286:45;;33287:21;;:8;;:12;:21::i;33286:45::-;33266:65;-1:-1:-1;33343:24:0;33370:26;33266:65;33384:11;33370:13;:26::i;:::-;33343:53;-1:-1:-1;33426:26:0;:9;33440:11;33426:13;:26::i;:::-;33407:16;:45;33481:15;;:37;;33501:16;33481:19;:37::i;:::-;33463:15;:55;33557:6;;-1:-1:-1;;33557:10:0;33548:20;;;;:8;:20;;;;;;:42;;33573:16;33548:24;:42::i;:::-;33538:6;;;33529:16;;;;:8;:16;;;;;;;;;:61;;;;33614:6;;33606:37;;;;;;;;;;;33632:10;33606:37;;;;;;;;;;;;;;-1:-1:-1;;33654:6:0;:8;;;;;;-1:-1:-1;;33040:630:0:o;46046:207::-;46123:3;;46116:36;;;-1:-1:-1;;;46116:36:0;;46146:4;46116:36;;;;;;46093:15;;46111:54;;-1:-1:-1;;;;;46123:3:0;;;;46116:21;;:36;;;;;;;;;;;;;;;46123:3;46116:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46116:36:0;46154:10;;46111:4;:54::i;:::-;46093:72;;46189:25;46194:10;;46206:7;46189:4;:25::i;:::-;46176:10;:38;46225:20;46237:7;46225:11;:20::i;45614:204::-;45691:4;;45684:37;;;-1:-1:-1;;;45684:37:0;;45715:4;45684:37;;;;;;45661:15;;45679:54;;-1:-1:-1;;;;;45691:4:0;;;;45684:22;;:37;;;;;;;;;;;;;;;45691:4;45684:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45684:37:0;45723:9;;45679:4;:54::i;:::-;45661:72;;45756:24;45761:9;;45772:7;45756:4;:24::i;:::-;45744:9;:36;45791:19;45802:7;45791:10;:19::i;45826:208::-;45903:4;;45896:37;;;-1:-1:-1;;;45896:37:0;;45927:4;45896:37;;;;;;45873:15;;45891:55;;-1:-1:-1;;;;;45903:4:0;;;;45896:22;;:37;;;;;;;;;;;;;;;45903:4;45896:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45896:37:0;45935:10;;45891:4;:55::i;:::-;45873:73;;45970:25;45975:10;;45987:7;45970:4;:25::i;:::-;45957:10;:38;46006:20;46018:7;46006:11;:20::i;8372:203::-;8444:4;-1:-1:-1;;;;;8469:21:0;;8461:68;;;;-1:-1:-1;;;8461:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8547:20:0;:11;:20;;;;;;;;;;;;;;;8372:203::o;43067:239::-;43126:7;;43166:17;:7;43179:3;43166:12;:17::i;:::-;43145:38;-1:-1:-1;43194:23:0;43220:42;43244:17;43220:19;43145:38;43250:11;43220:14;:19::i;21702:282::-;21780:19;21803:27;21817:12;21803:13;:27::i;:::-;21779:51;;21844:14;21840:138;;21883:10;21874:20;;;;:8;:20;;;;;;;;21898:15;21874:39;;-1:-1:-1;;;;;21927:21:0;;;;:7;:21;;;;;:33;;:40;;-1:-1:-1;;21927:40:0;21963:4;21927:40;;;21702:282;;:::o;13438:218::-;13531:4;13514:23;;;;:8;:23;;;;;;13509:34;;13539:3;13509:4;:34::i;:::-;13500:4;13483:23;;;;:8;:23;;;;;:60;13574:12;;13569:23;;13588:3;13569:4;:23::i;:::-;13554:12;:38;13608:40;;;;;;;;13637:4;;13625:1;;13608:40;;;;;;;;;13438:218;:::o;32398:630::-;32601:12;;32672:16;;32658:7;;32579:19;;32644:45;;32645:21;;:8;;:12;:21::i;32644:45::-;32624:65;-1:-1:-1;32701:24:0;32728:26;32624:65;32742:11;32728:13;:26::i;:::-;32701:53;-1:-1:-1;32784:26:0;:9;32798:11;32784:13;:26::i;:::-;32765:16;:45;32839:15;;:37;;32859:16;32839:19;:37::i;:::-;32821:15;:55;32915:6;;-1:-1:-1;;32915:10:0;32906:20;;;;:8;:20;;;;;;:42;;32931:16;32906:24;:42::i;:::-;32896:6;;;32887:16;;;;:8;:16;;;;;;;;;:61;;;;32972:6;;32964:37;;;;;;;;;;;32990:10;32964:37;;;;;;;;;;;;;;-1:-1:-1;;33012:6:0;:8;;;;;;-1:-1:-1;;32398:630:0:o;1851:192::-;1937:7;1973:12;1965:6;;;;1957:29;;;;-1:-1:-1;;;1957:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2009:5:0;;;1851:192::o;3877:278::-;3963:7;3998:12;3991:5;3983:28;;;;-1:-1:-1;;;3983:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:9;4038:1;4034;:5;;;;;;;3877:278;-1:-1:-1;;;;;3877:278:0:o;10244:223::-;10319:4;10325;10356:1;10351;:6;10347:113;;-1:-1:-1;;10382:5:0;;;10389;10374:21;;10347:113;-1:-1:-1;;10436:5:0;;;10443:4;10347:113;10244:223;;;;;:::o;8181:183::-;8261:18;8265:4;8271:7;8261:3;:18::i;:::-;8253:64;;;;-1:-1:-1;;;8253:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8328:20:0;8351:5;8328:20;;;;;;;;;;;:28;;-1:-1:-1;;8328:28:0;;;8181:183::o;4620:130::-;4678:7;4705:37;4709:1;4712;4705:37;;;;;;;;;;;;;;;;;:3;:37::i;11305:116::-;11370:4;9827:6;11399:7;11404:1;11399:4;:7::i;:::-;:14;;11305:116;-1:-1:-1;;11305:116:0:o;11189:108::-;9827:6;11281:8;;;11189:108::o;11429:314::-;11501:4;;11536:1;11532;:5;:21;;9827:6;11532:21;;;11545:1;11532:21;11523:30;-1:-1:-1;11576:1:0;11571:6;;;;11566:151;11579:6;;11566:151;;11614:10;11619:1;11622;11614:4;:10::i;:::-;11610:14;-1:-1:-1;11649:1:0;11645;:5;:10;11641:65;;11680:10;11685:1;11688;11680:4;:10::i;:::-;11676:14;;11641:65;11592:1;11587:6;;;;11566:151;;12222:851;12320:4;12375:3;12320:4;;12412:20;12421:4;9827:6;12412:8;:20::i;:::-;12389:43;;-1:-1:-1;12389:43:0;-1:-1:-1;9827:6:0;;12443:9;12548:1;12534:509;12559:9;12551:4;:17;12534:509;;12590:9;9827:6;12602:1;:8;12590:20;;12626:6;12634:9;12647:29;12656:1;12659:16;12664:4;9827:6;12659:4;:16::i;:::-;12647:8;:29::i;:::-;12625:51;;;;12698:22;12703:4;12709:10;12714:1;12717;12709:4;:10::i;12698:22::-;12691:29;;12742:16;12747:4;12753;12742;:16::i;:::-;12735:23;-1:-1:-1;12777:9:0;12773:20;;12788:5;;;;;12773:20;12814:4;12810:30;;;12831:9;;;12810:30;12859:4;12855:30;;;12876:9;;;12855:30;12904:8;12900:132;;;12939:15;12944:3;12949:4;12939;:15::i;:::-;12933:21;;12900:132;;;13001:15;13006:3;13011:4;13001;:15::i;:::-;12995:21;;12900:132;-1:-1:-1;;;12570:3:0;;12534:509;;;-1:-1:-1;13062:3:0;;12222:851;-1:-1:-1;;;;;;;;;12222:851:0:o;5413:106::-;5466:6;5510:1;5506;5501;5497;5493;:5;:9;5492:15;;;;;;:19;;5413:106;-1:-1:-1;;;5413:106:0:o;5235:166::-;5321:7;5357:12;5349:6;5341:29;;;;-1:-1:-1;;;5341:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5392:1;5388;:5;;;;;;;5235:166;-1:-1:-1;;;;5235:166:0:o
Swarm Source
ipfs://166f05584d011fabf94648975701bd376286f2525e8a76c3d5387dcc00cf6e75
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.