Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,850 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute Transact... | 22303772 | 3 days ago | IN | 0 ETH | 0.00066215 | ||||
Execute Transact... | 22290679 | 4 days ago | IN | 0 ETH | 0.00071162 | ||||
Execute Transact... | 22290647 | 4 days ago | IN | 0 ETH | 0.00069535 | ||||
Execute Transact... | 22282173 | 6 days ago | IN | 0 ETH | 0.00081794 | ||||
Execute Transact... | 22281999 | 6 days ago | IN | 0 ETH | 0.00076923 | ||||
Execute Transact... | 22276751 | 6 days ago | IN | 0 ETH | 0.00065012 | ||||
Execute Transact... | 22275987 | 6 days ago | IN | 0 ETH | 0.0007157 | ||||
Execute Transact... | 22268127 | 8 days ago | IN | 0 ETH | 0.00179617 | ||||
Execute Transact... | 22255389 | 9 days ago | IN | 0 ETH | 0.00067606 | ||||
Execute Transact... | 22197998 | 17 days ago | IN | 0 ETH | 0.00079658 | ||||
Execute Transact... | 22196404 | 18 days ago | IN | 0 ETH | 0.00115326 | ||||
Execute Transact... | 22175070 | 21 days ago | IN | 0 ETH | 0.00122061 | ||||
Execute Transact... | 22175049 | 21 days ago | IN | 0 ETH | 0.00111744 | ||||
Execute Transact... | 22153342 | 24 days ago | IN | 0 ETH | 0.00070107 | ||||
Execute Transact... | 22137653 | 26 days ago | IN | 0 ETH | 0.00068062 | ||||
Execute Transact... | 22120084 | 28 days ago | IN | 0 ETH | 0.00067466 | ||||
Execute Transact... | 22120015 | 28 days ago | IN | 0 ETH | 0.00071158 | ||||
Execute Transact... | 22117051 | 29 days ago | IN | 0 ETH | 0.0006673 | ||||
Execute Transact... | 22110619 | 30 days ago | IN | 0 ETH | 0.00061276 | ||||
Execute Transact... | 22097400 | 31 days ago | IN | 0 ETH | 0.00065019 | ||||
Execute Transact... | 22091413 | 32 days ago | IN | 0 ETH | 0.00066385 | ||||
Execute Transact... | 22088461 | 33 days ago | IN | 0 ETH | 0.00067158 | ||||
Execute Transact... | 22084843 | 33 days ago | IN | 0 ETH | 0.0006589 | ||||
Execute Transact... | 22068686 | 35 days ago | IN | 0 ETH | 0.00071164 | ||||
Execute Transact... | 22068534 | 35 days ago | IN | 0 ETH | 0.00111202 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Federation
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-07 */ // File: contracts/zeppelin/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/zeppelin/token/ERC20/ERC20Detailed.sol pragma solidity ^0.5.0; /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } } // File: contracts/IBridge.sol pragma solidity ^0.5.0; interface IBridge { function version() external pure returns (string memory); //function getFeePercentage() external view returns(uint); //function calcMaxWithdraw() external view returns (uint); /** * ERC-20 tokens approve and transferFrom pattern * See https://eips.ethereum.org/EIPS/eip-20#transferfrom */ function receiveTokens(address tokenToUse, uint256 amount) external returns(bool); /** * ERC-20 tokens approve and transferFrom pattern * See https://eips.ethereum.org/EIPS/eip-20#transferfrom */ function receiveTokensAt( address tokenToUse, uint256 amount, address receiver, bytes calldata extraData ) external returns(bool); /** * ERC-777 tokensReceived hook allows to send tokens to a contract and notify it in a single transaction * See https://eips.ethereum.org/EIPS/eip-777#motivation for details */ function tokensReceived ( address operator, address from, address to, uint amount, bytes calldata userData, bytes calldata operatorData ) external; /** * Accepts the transaction from the other chain that was voted and sent by the federation contract */ function acceptTransfer( address originalTokenAddress, address receiver, uint256 amount, string calldata symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity ) external returns(bool); function acceptTransferAt( address originalTokenAddress, address receiver, uint256 amount, string calldata symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes calldata userData ) external returns(bool); function receiveEthAt(address _receiver, bytes calldata _extraData) external payable; function setRevokeTransaction(bytes32 _revokeTransactionID) external; function setErc777Converter(address _erc777Converter) external; //function getErc777Converter() external view returns(address erc777Addr); event Cross(address indexed _tokenAddress, address indexed _to, uint256 _amount, string _symbol, bytes _userData, uint8 _decimals, uint256 _granularity); event NewSideToken(address indexed _newSideTokenAddress, address indexed _originalTokenAddress, string _newSymbol, uint256 _granularity); event AcceptedCrossTransfer(address indexed _tokenAddress, address indexed _to, uint256 _amount, uint8 _decimals, uint256 _granularity, uint256 _formattedAmount, uint8 _calculatedDecimals, uint256 _calculatedGranularity, bytes _userData); //event FeePercentageChanged(uint256 _amount); event ErrorTokenReceiver(bytes _errorData); //event AllowTokenChanged(address _newAllowToken); //event PrefixUpdated(bool _isPrefix, string _prefix); } // File: contracts/zeppelin/GSN/Context.sol pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/zeppelin/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/zeppelin/cryptography/ECDSA.sol pragma solidity ^0.5.2; /** * @title Elliptic curve signature operations * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d * TODO Remove this library once solidity supports passing a signature to ecrecover. * See https://github.com/ethereum/solidity/issues/864 */ library ECDSA { /** * @dev Recover signer address from a message by using their signature * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address. * @param signature bytes signature, the signature is generated using web3.eth.sign() */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } // If the signature is valid (and not malleable), return the signer address return ecrecover(hash, v, r, s); } /** * toEthSignedMessageHash * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:" * and hash the result */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: contracts/Federation.sol pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; contract Federation is Ownable { struct SignatureInfo { bytes signature; uint256 deadline; } uint256 public constant MAX_MEMBER_COUNT = 50; address private constant NULL_ADDRESS = address(0); IBridge public bridge; address[] public members; uint256 public required; bytes32 private constant NULL_HASH = bytes32(0); bool public initStageDone; mapping(address => bool) public isMember; mapping(bytes32 => mapping(address => bool)) public votes; mapping(bytes32 => bool) public processed; // solium-disable-next-line max-len event Voted( address indexed sender, bytes32 indexed transactionId, address originalTokenAddress, address receiver, uint256 amount, string symbol, bytes32 blockHash, bytes32 indexed transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes userData ); event Signed(bytes32 indexed transactionId, address validator); event Executed(bytes32 indexed transactionId); event MemberAddition(address indexed member); event MemberRemoval(address indexed member); event RequirementChange(uint256 required); event BridgeChanged(address bridge); event RevokeTxAndVote(bytes32 tx_revoked); event StoreFormerFederationExecutedTx(bytes32[] tx_stored); modifier onlyMember() { require(isMember[_msgSender()], "Federation: Caller not a Federator"); _; } modifier validRequirement(uint256 membersCount, uint256 _required) { // solium-disable-next-line max-len require( _required <= membersCount && _required != 0 && membersCount != 0, "Federation: Invalid requirements" ); _; } constructor(address[] memory _members, uint256 _required) public validRequirement(_members.length, _required) { require(_members.length <= MAX_MEMBER_COUNT, "Federation: Members larger than max allowed"); members = _members; for (uint256 i = 0; i < _members.length; i++) { require( !isMember[_members[i]] && _members[i] != NULL_ADDRESS, "Federation: Invalid members" ); isMember[_members[i]] = true; // members.push(_members[i]); emit MemberAddition(_members[i]); } required = _required; emit RequirementChange(required); } function setBridge(address _bridge) external onlyOwner { require(_bridge != NULL_ADDRESS, "Federation: Empty bridge"); bridge = IBridge(_bridge); emit BridgeChanged(_bridge); } function voteTransaction( address originalTokenAddress, address receiver, uint256 amount, string calldata symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity ) external returns (bool) { return _voteTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, "" ); } function voteTransactionAt( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData ) public returns (bool) { return _voteTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); } function _voteTransaction( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData ) internal onlyMember returns (bool) { // solium-disable-next-line max-len require( initStageDone == true, "Federation: Cannot process TX while initStageDone == false" ); bytes32 transactionId = getTransactionId( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity ); if (processed[transactionId]) return true; // Bug fix // // UserData is not included in transactionId hash. // In order to keep backward competability, since transctions that were already processed are marked as processed[transactionId], // We keep the transactionId and adding transactionIdU (that includes userData hashing) // Assuming processed[transactionId) == false from this line // Depreciating transactionId for unprocessed transaction. // Using transactionIdU instead. // This should be updated in Federator BE as well. // Function processTransaction() created to solve EVM stack to deep error if ( processTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ) ) { // No need to update processed[transactionId], since it is used only for backward competability // processed[transactionId] = true; return true; } return true; } function processTransaction( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData ) internal returns (bool) { bytes32 transactionIdU = getTransactionIdU( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); if (processed[transactionIdU]) return true; if (votes[transactionIdU][_msgSender()]) return true; votes[transactionIdU][_msgSender()] = true; // solium-disable-next-line max-len emit Voted( _msgSender(), transactionIdU, originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); uint256 transactionCount = getTransactionCount(transactionIdU); if (transactionCount >= required && transactionCount >= members.length / 2 + 1) { processed[transactionIdU] = true; bool acceptTransfer = bridge.acceptTransferAt( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); require(acceptTransfer, "Federation: Bridge acceptTransfer error"); emit Executed(transactionIdU); return true; } } function executeTransaction( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, SignatureInfo[] memory signaturesInfos ) public returns (bool) { return _executeTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, "", signaturesInfos ); } function executeTransactionAt( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData, SignatureInfo[] memory signaturesInfos ) public returns (bool) { return _executeTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData, signaturesInfos ); } function _executeTransaction( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData, SignatureInfo[] memory signaturesInfos ) internal onlyMember returns (bool) { // solium-disable-next-line max-len require( initStageDone == true, "Federation: Cannot process TX while initStageDone == false" ); bytes32 transactionId = getTransactionId( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity ); if (processed[transactionId]) return true; // Bug fix // // UserData is not included in transactionId hash. // In order to keep backward competability, since transctions that were already processed are marked as processed[transactionId], // We keep the transactionId and adding transactionIdU (that includes userData hashing) // Assuming processed[transactionId) == false from this line // Depreciating transactionId for unprocessed transaction. // Using transactionIdU instead. // This should be updated in Federator BE as well. // Function processTransaction() created to solve EVM stack to deep error if ( processSignedTransaction( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData, signaturesInfos ) ) { // No need to update processed[transactionId], since it is used only for backward competability // processed[transactionId] = true; return true; } return true; } function processSignedTransaction( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData, SignatureInfo[] memory signaturesInfos ) internal returns (bool) { bytes32 transactionIdU = getTransactionIdU( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); if (processed[transactionIdU]) return true; // Sender implicitly accepts votes[transactionIdU][_msgSender()] = true; uint256 memberValidations = 1; emit Signed(transactionIdU, _msgSender()); for (uint256 i; i < signaturesInfos.length; i += 1) { require( signaturesInfos[i].deadline > block.timestamp, "Some signature is not valid anymore" ); uint256 chainId; assembly { chainId := chainid() } bytes32 hash = keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n116", abi.encodePacked( transactionIdU, chainId, address(this), signaturesInfos[i].deadline ) ) ); address signer = ECDSA.recover(hash, signaturesInfos[i].signature); require(isMember[signer], "Signature doesn't match any member"); if (!votes[transactionIdU][signer]) { votes[transactionIdU][signer] = true; memberValidations += 1; emit Signed(transactionIdU, signer); } } require( memberValidations >= required && memberValidations >= members.length / 2 + 1, "Not enough validations" ); processed[transactionIdU] = true; releaseTokensOnBridge( transactionIdU, originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); emit Executed(transactionIdU); return true; } function releaseTokensOnBridge( bytes32 transactionIdU, address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData ) private { emit Voted( _msgSender(), transactionIdU, originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); bool acceptTransfer = bridge.acceptTransferAt( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ); require(acceptTransfer, "Federation: Bridge acceptTransfer error"); } function getTransactionCount(bytes32 transactionId) public view returns (uint256) { uint256 count = 0; for (uint256 i = 0; i < members.length; i++) { if (votes[transactionId][members[i]]) count += 1; } return count; } function hasVoted(bytes32 transactionId) external view returns (bool) { return votes[transactionId][_msgSender()]; } function transactionWasProcessed(bytes32 transactionId) external view returns (bool) { return processed[transactionId]; } function getTransactionId( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity ) public pure returns (bytes32) { // solium-disable-next-line max-len return keccak256( abi.encodePacked( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity ) ); } function getTransactionIdU( address originalTokenAddress, address receiver, uint256 amount, string memory symbol, bytes32 blockHash, bytes32 transactionHash, uint32 logIndex, uint8 decimals, uint256 granularity, bytes memory userData ) public pure returns (bytes32) { // solium-disable-next-line max-len return keccak256( abi.encodePacked( originalTokenAddress, receiver, amount, symbol, blockHash, transactionHash, logIndex, decimals, granularity, userData ) ); } function addMember(address _newMember) external onlyOwner { require(_newMember != NULL_ADDRESS, "Federation: Empty member"); require(!isMember[_newMember], "Federation: Member already exists"); require(members.length < MAX_MEMBER_COUNT, "Federation: Max members reached"); isMember[_newMember] = true; members.push(_newMember); emit MemberAddition(_newMember); } function removeMember(address _oldMember) external onlyOwner { require(_oldMember != NULL_ADDRESS, "Federation: Empty member"); require(isMember[_oldMember], "Federation: Member doesn't exists"); require(members.length > 1, "Federation: Can't remove all the members"); require( members.length - 1 >= required, "Federation: Can't have less than required members" ); isMember[_oldMember] = false; for (uint256 i = 0; i < members.length - 1; i++) { if (members[i] == _oldMember) { members[i] = members[members.length - 1]; break; } } members.length -= 1; emit MemberRemoval(_oldMember); } function getMembers() external view returns (address[] memory) { return members; } function changeRequirement(uint256 _required) external onlyOwner validRequirement(members.length, _required) { require(_required >= 2, "Federation: Requires at least 2"); required = _required; emit RequirementChange(_required); } // Revoke state of txID (from true to false), to enable multiSig release of stucked txID on the bridge // setRevokeTransaction() should be called on the bridge as well to enable revoke of txID function setRevokeTransactionAndVote(bytes32 _revokeTransactionID) external onlyOwner { require( _revokeTransactionID != NULL_HASH, "Federation: _revokeTransactionID cannot be NULL" ); require( processed[_revokeTransactionID] == true, "Federation: cannot revoke unprocessed TX" ); processed[_revokeTransactionID] = false; for (uint256 i = 0; i < members.length; i++) { votes[_revokeTransactionID][members[i]] = false; } emit RevokeTxAndVote(_revokeTransactionID); } // Store former Federation contract version processed[] state // Can be used only at deployment stage. Cannot _voteTransaction txID while this stage is active (initStageDone is false) function initStoreOldFederation(bytes32[] calldata _TransactionIDs) external onlyOwner { require( initStageDone == false, "Federation: initStoreOldFederation enabled only during deployment setup Stage" ); for (uint256 i = 0; i < _TransactionIDs.length; i++) { require( _TransactionIDs[i] != NULL_HASH, "Federation: _storeTransactionID cannot be NULL" ); processed[_TransactionIDs[i]] = true; } emit StoreFormerFederationExecutedTx(_TransactionIDs); } // Finish stage of store of former Federation contract version // Must be set to true before _voteTransaction is called function endDeploymentSetup() external onlyOwner { initStageDone = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_members","type":"address[]"},{"internalType":"uint256","name":"_required","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"bridge","type":"address"}],"name":"BridgeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transactionId","type":"bytes32"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"}],"name":"MemberAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"}],"name":"MemberRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"required","type":"uint256"}],"name":"RequirementChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"tx_revoked","type":"bytes32"}],"name":"RevokeTxAndVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transactionId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"validator","type":"address"}],"name":"Signed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"tx_stored","type":"bytes32[]"}],"name":"StoreFormerFederationExecutedTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"bytes32","name":"transactionId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"originalTokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"logIndex","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"decimals","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"granularity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"}],"name":"Voted","type":"event"},{"constant":true,"inputs":[],"name":"MAX_MEMBER_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newMember","type":"address"}],"name":"addMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bridge","outputs":[{"internalType":"contract IBridge","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_required","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"endDeploymentSetup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct Federation.SignatureInfo[]","name":"signaturesInfos","type":"tuple[]"}],"name":"executeTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct Federation.SignatureInfo[]","name":"signaturesInfos","type":"tuple[]"}],"name":"executeTransactionAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMembers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"transactionId","type":"bytes32"}],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"}],"name":"getTransactionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"getTransactionIdU","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"transactionId","type":"bytes32"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initStageDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32[]","name":"_TransactionIDs","type":"bytes32[]"}],"name":"initStoreOldFederation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"members","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_oldMember","type":"address"}],"name":"removeMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"required","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"setBridge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_revokeTransactionID","type":"bytes32"}],"name":"setRevokeTransactionAndVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"transactionId","type":"bytes32"}],"name":"transactionWasProcessed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"}],"name":"voteTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"originalTokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint32","name":"logIndex","type":"uint32"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"granularity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"voteTransactionAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200341a3803806200341a8339810160408190526200003491620003d8565b620000476001600160e01b036200029916565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3815181818111158015620000a257508015155b8015620000ae57508115155b620000d65760405162461bcd60e51b8152600401620000cd9062000504565b60405180910390fd5b603284511115620000fb5760405162461bcd60e51b8152600401620000cd9062000516565b8351620001109060029060208701906200029e565b5060005b84518110156200024f57600560008683815181106200012f57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156200018b575060006001600160a01b03168582815181106200017757fe5b60200260200101516001600160a01b031614155b620001aa5760405162461bcd60e51b8152600401620000cd9062000528565b600160056000878481518110620001bd57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508481815181106200020957fe5b60200260200101516001600160a01b03167f72114e270de66b9d2710ecf140403e5e99b1574767d6a8197bdc8d807a46e7c760405160405180910390a260010162000114565b5060038390556040517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a90620002879085906200053a565b60405180910390a150505050620005d2565b335b90565b828054828255906000526020600020908101928215620002f6579160200282015b82811115620002f657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002bf565b506200030492915062000308565b5090565b6200029b91905b80821115620003045780546001600160a01b03191681556001016200030f565b80516200033c81620005ad565b92915050565b600082601f8301126200035457600080fd5b81516200036b620003658262000571565b6200054a565b915081818352602084019350602081019050838560208402820111156200039157600080fd5b60005b83811015620003c15781620003aa88826200032f565b845250602092830192919091019060010162000394565b5050505092915050565b80516200033c81620005c7565b60008060408385031215620003ec57600080fd5b82516001600160401b038111156200040357600080fd5b620004118582860162000342565b92505060206200042485828601620003cb565b9150509250929050565b60006200043d60208362000592565b7f46656465726174696f6e3a20496e76616c696420726571756972656d656e7473815260200192915050565b600062000478602b8362000592565b7f46656465726174696f6e3a204d656d62657273206c6172676572207468616e2081526a1b585e08185b1b1bddd95960aa1b602082015260400192915050565b6000620004c7601b8362000592565b7f46656465726174696f6e3a20496e76616c6964206d656d626572730000000000815260200192915050565b620004fe816200029b565b82525050565b602080825281016200033c816200042e565b602080825281016200033c8162000469565b602080825281016200033c81620004b8565b602081016200033c8284620004f3565b6040518181016001600160401b03811182821017156200056957600080fd5b604052919050565b60006001600160401b038211156200058857600080fd5b5060209081020190565b90815260200190565b60006001600160a01b0382166200033c565b620005b8816200059b565b8114620005c457600080fd5b50565b620005b8816200029b565b612e3880620005e26000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a1fb4acb11610104578063c5721deb116100a2578063e78cea9211610071578063e78cea9214610396578063e8c15dd7146103ab578063f2f34d51146103be578063f2fde38b146103d1576101cf565b8063c5721deb14610355578063ca6d56dc14610368578063d03e1ee91461037b578063dc8452cd1461038e576101cf565b8063a93585f0116100de578063a93585f014610309578063ae6d1d791461031c578063ba51a6df1461032f578063c1f0808a14610342576101cf565b8063a1fb4acb146102db578063a230c524146102ee578063a3d70f0014610301576101cf565b8063795fd702116101715780638f32d59b1161014b5780638f32d59b146102a35780639386775a146102ab5780639c8f1a83146102be5780639eab5253146102c6576101cf565b8063795fd702146102755780638da5cb5b146102885780638dd1480214610290576101cf565b8063493532a2116101ad578063493532a2146102325780635daf08ca14610245578063681fc92114610265578063715018a61461026d576101cf565b806309916057146101d45780630b1ca49a146101fd5780631b4613cb14610212575b600080fd5b6101e76101e2366004611b82565b6103e4565b6040516101f49190612ad2565b60405180910390f35b61021061020b366004611a7c565b61042c565b005b610225610220366004611fd9565b610621565b6040516101f49190612ac4565b610225610240366004611d52565b61065b565b610258610253366004611fd9565b610680565b6040516101f4919061296f565b6101e76106a7565b6102106106ac565b610210610283366004611f7a565b61071a565b61025861081f565b61021061029e366004611a7c565b61082f565b6102256108cf565b6102256102b9366004611ff7565b6108f3565b610210610913565b6102ce610946565b6040516101f49190612aa1565b6101e76102e9366004611fd9565b6109a8565b6102256102fc366004611a7c565b610a19565b610225610a2e565b610225610317366004611fd9565b610a37565b61022561032a366004611e47565b610a4c565b61021061033d366004611fd9565b610a73565b610225610350366004611fd9565b610b34565b610210610363366004611fd9565b610b49565b610210610376366004611a7c565b610c69565b610225610389366004611aa2565b610d9a565b6101e7610df4565b61039e610dfa565b6040516101f49190612b1e565b6102256103b9366004611c5d565b610e09565b6101e76103cc366004611d52565b610e2d565b6102106103df366004611a7c565b610e78565b6000898989898989898989604051602001610407999897969594939291906127c8565b6040516020818303038152906040528051906020012090509998505050505050505050565b6104346108cf565b6104595760405162461bcd60e51b815260040161045090612c0c565b60405180910390fd5b6001600160a01b03811661047f5760405162461bcd60e51b815260040161045090612c2c565b6001600160a01b03811660009081526005602052604090205460ff166104b75760405162461bcd60e51b815260040161045090612b9c565b6002546001106104d95760405162461bcd60e51b815260040161045090612c4c565b6003546002546000190110156105015760405162461bcd60e51b815260040161045090612bdc565b6001600160a01b0381166000908152600560205260408120805460ff191690555b600254600019018110156105d557816001600160a01b03166002828154811061054757fe5b6000918252602090912001546001600160a01b031614156105cd5760028054600019810190811061057457fe5b600091825260209091200154600280546001600160a01b03909216918390811061059a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506105d5565b600101610522565b506002805460001901906105e9908261185d565b506040516001600160a01b038216907f270bfc616dd36d5cb6b35aac93e6ef22b089c34e6f6ad6f0892797424840897b90600090a250565b600081815260066020526040812081610638610ea8565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b600061066f8b8b8b8b8b8b8b8b8b8b610eac565b90505b9a9950505050505050505050565b6002818154811061068d57fe5b6000918252602090912001546001600160a01b0316905081565b603281565b6106b46108cf565b6106d05760405162461bcd60e51b815260040161045090612c0c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107226108cf565b61073e5760405162461bcd60e51b815260040161045090612c0c565b60045460ff16156107615760405162461bcd60e51b815260040161045090612c5c565b60005b818110156107e157600083838381811061077a57fe5b90506020020135141561079f5760405162461bcd60e51b815260040161045090612b7c565b6001600760008585858181106107b157fe5b60209081029290920135835250810191909152604001600020805460ff1916911515919091179055600101610764565b507f34b66caee0bfc067332d9d8a887ffd44f8742d7b258b45e200f88ac13a7ba5a88282604051610813929190612ab2565b60405180910390a15050565b6000546001600160a01b03165b90565b6108376108cf565b6108535760405162461bcd60e51b815260040161045090612c0c565b6001600160a01b0381166108795760405162461bcd60e51b815260040161045090612bbc565b600180546001600160a01b0319166001600160a01b0383161790556040517f9775531310b2880b61484ed85cbb0b491c8fde3a07f289c63b92551782794497906108c490839061296f565b60405180910390a150565b600080546001600160a01b03166108e4610ea8565b6001600160a01b031614905090565b600660209081526000928352604080842090915290825290205460ff1681565b61091b6108cf565b6109375760405162461bcd60e51b815260040161045090612c0c565b6004805460ff19166001179055565b6060600280548060200260200160405190810160405280929190818152602001828054801561099e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610980575b5050505050905090565b600080805b600254811015610a1257600084815260066020526040812060028054919291849081106109d657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615610a0a576001820191505b6001016109ad565b5092915050565b60056020526000908152604090205460ff1681565b60045460ff1681565b60009081526007602052604090205460ff1690565b6000610a618c8c8c8c8c8c8c8c8c8c8c610f84565b90505b9b9a5050505050505050505050565b610a7b6108cf565b610a975760405162461bcd60e51b815260040161045090612c0c565b60025481818111801590610aaa57508015155b8015610ab557508115155b610ad15760405162461bcd60e51b815260040161045090612b2c565b6002831015610af25760405162461bcd60e51b815260040161045090612c1c565b60038390556040517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a90610b27908590612ad2565b60405180910390a1505050565b60076020526000908152604090205460ff1681565b610b516108cf565b610b6d5760405162461bcd60e51b815260040161045090612c0c565b80610b8a5760405162461bcd60e51b815260040161045090612c3c565b60008181526007602052604090205460ff161515600114610bbd5760405162461bcd60e51b815260040161045090612b6c565b6000818152600760205260408120805460ff191690555b600254811015610c395760008281526006602052604081206002805483919085908110610bfd57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101610bd4565b507f2d3fe24dc10cb7b5e4ae5c167c9ef8de17a5fa5c429b7dac54b1503b8ee44c70816040516108c49190612ad2565b610c716108cf565b610c8d5760405162461bcd60e51b815260040161045090612c0c565b6001600160a01b038116610cb35760405162461bcd60e51b815260040161045090612c2c565b6001600160a01b03811660009081526005602052604090205460ff1615610cec5760405162461bcd60e51b815260040161045090612bac565b600254603211610d0e5760405162461bcd60e51b815260040161045090612b3c565b6001600160a01b038116600081815260056020526040808220805460ff1916600190811790915560028054918201815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191684179055517f72114e270de66b9d2710ecf140403e5e99b1574767d6a8197bdc8d807a46e7c79190a250565b600061066f8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528e93508d92508c91508b908b90610eac565b60035481565b6001546001600160a01b031681565b600061066f8b8b8b8b8b8b8b8b8b604051806020016040528060008152508c610f84565b60008a8a8a8a8a8a8a8a8a8a604051602001610e529a99989796959493929190612861565b6040516020818303038152906040528051906020012090509a9950505050505050505050565b610e806108cf565b610e9c5760405162461bcd60e51b815260040161045090612c0c565b610ea58161105e565b50565b3390565b600060056000610eba610ea8565b6001600160a01b0316815260208101919091526040016000205460ff16610ef35760405162461bcd60e51b815260040161045090612b4c565b60045460ff161515600114610f1a5760405162461bcd60e51b815260040161045090612bcc565b6000610f2d8c8c8c8c8c8c8c8c8c6103e4565b60008181526007602052604090205490915060ff1615610f51576001915050610672565b610f638c8c8c8c8c8c8c8c8c8c6110df565b15610f72576001915050610672565b5060019b9a5050505050505050505050565b600060056000610f92610ea8565b6001600160a01b0316815260208101919091526040016000205460ff16610fcb5760405162461bcd60e51b815260040161045090612b4c565b60045460ff161515600114610ff25760405162461bcd60e51b815260040161045090612bcc565b60006110058d8d8d8d8d8d8d8d8d6103e4565b60008181526007602052604090205490915060ff1615611029576001915050610a64565b61103c8d8d8d8d8d8d8d8d8d8d8d61135a565b1561104b576001915050610a64565b5060019c9b505050505050505050505050565b6001600160a01b0381166110845760405162461bcd60e51b815260040161045090612b5c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806110f48c8c8c8c8c8c8c8c8c8c610e2d565b60008181526007602052604090205490915060ff1615611118576001915050610672565b60008181526006602052604081209061112f610ea8565b6001600160a01b0316815260208101919091526040016000205460ff161561115b576001915050610672565b6000818152600660205260408120600191611174610ea8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905586816111a6610ea8565b6001600160a01b03167f0c7da013568f30bdd9f486d42a289fd23d0f6b4006a80ff093407b121138bdf18f8f8f8f8f8e8e8e8e6040516111ee99989796959493929190612a1d565b60405180910390a46000611201826109a8565b9050600354811015801561121c575060028054046001018110155b1561134a5760016007600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600160009054906101000a90046001600160a01b03166001600160a01b031663d058ae968f8f8f8f8f8f8f8f8f8f6040518b63ffffffff1660e01b81526004016112a29a9998979695949392919061298b565b602060405180830381600087803b1580156112bc57600080fd5b505af11580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112f49190810190611fbb565b9050806113135760405162461bcd60e51b815260040161045090612b8c565b60405183907fa74c8847d513feba22a0f0cb38d53081abf97562cdb293926ba243689e7c41ca90600090a260019350505050610672565b50509a9950505050505050505050565b60008061136f8d8d8d8d8d8d8d8d8d8d610e2d565b60008181526007602052604090205490915060ff1615611393576001915050610a64565b60008181526006602052604081206001916113ac610ea8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001817fdc9da68bd73c4161c8f5bc195573e6649390acdb7090a16542862b767eacac5a611400610ea8565b60405161140d919061297d565b60405180910390a260005b84518110156115c3574285828151811061142e57fe5b602002602001015160200151116114575760405162461bcd60e51b815260040161045090612bec565b6000469050600084823089868151811061146d57fe5b60200260200101516020015160405160200161148c9493929190612909565b60408051601f19818403018152908290526114a991602001612951565b60405160208183030381529060405280519060200120905060006114e4828986815181106114d357fe5b602002602001015160000151611664565b6001600160a01b03811660009081526005602052604090205490915060ff1661151f5760405162461bcd60e51b815260040161045090612c6c565b60008681526006602090815260408083206001600160a01b038516845290915290205460ff166115b85760008681526006602090815260408083206001600160a01b038516845290915290819020805460ff19166001908117909155905195019486907fdc9da68bd73c4161c8f5bc195573e6649390acdb7090a16542862b767eacac5a906115af90849061296f565b60405180910390a25b505050600101611418565b5060035481101580156115dd575060028054046001018110155b6115f95760405162461bcd60e51b815260040161045090612bfc565b6000828152600760205260409020805460ff19166001179055611625828f8f8f8f8f8f8f8f8f8f611741565b60405182907fa74c8847d513feba22a0f0cb38d53081abf97562cdb293926ba243689e7c41ca90600090a25060019d9c50505050505050505050505050565b600081516041146116775750600061173b565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156116bd576000935050505061173b565b8060ff16601b141580156116d557508060ff16601c14155b156116e6576000935050505061173b565b600186828585604051600081526020016040526040516117099493929190612ae0565b6020604051602081039080840390855afa15801561172b573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b848b61174b610ea8565b6001600160a01b03167f0c7da013568f30bdd9f486d42a289fd23d0f6b4006a80ff093407b121138bdf18d8d8d8d8d8c8c8c8c60405161179399989796959493929190612a1d565b60405180910390a460015460405163682c574b60e11b81526000916001600160a01b03169063d058ae96906117de908e908e908e908e908e908e908e908e908e908e9060040161298b565b602060405180830381600087803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118309190810190611fbb565b90508061184f5760405162461bcd60e51b815260040161045090612b8c565b505050505050505050505050565b81548183558181111561188157600083815260209020611881918101908301611886565b505050565b61082c91905b808211156118a0576000815560010161188c565b5090565b803561173b81612dbd565b60008083601f8401126118c157600080fd5b5081356001600160401b038111156118d857600080fd5b6020830191508360208202830111156118f057600080fd5b9250929050565b600082601f83011261190857600080fd5b813561191b61191682612ca2565b612c7c565b81815260209384019390925082018360005b8381101561195957813586016119438882611a09565b845250602092830192919091019060010161192d565b5050505092915050565b805161173b81612dd1565b803561173b81612dda565b600082601f83011261198a57600080fd5b813561199861191682612cc2565b915080825260208301602083018583830111156119b457600080fd5b6119bf838284612d3e565b50505092915050565b60008083601f8401126119da57600080fd5b5081356001600160401b038111156119f157600080fd5b6020830191508360018202830111156118f057600080fd5b600060408284031215611a1b57600080fd5b611a256040612c7c565b905081356001600160401b03811115611a3d57600080fd5b611a4984828501611979565b8252506020611a5a8484830161196e565b60208301525092915050565b803561173b81612de3565b803561173b81612dec565b600060208284031215611a8e57600080fd5b6000611a9a84846118a4565b949350505050565b6000806000806000806000806000806101208b8d031215611ac257600080fd5b6000611ace8d8d6118a4565b9a50506020611adf8d828e016118a4565b9950506040611af08d828e0161196e565b98505060608b01356001600160401b03811115611b0c57600080fd5b611b188d828e016119c8565b97509750506080611b2b8d828e0161196e565b95505060a0611b3c8d828e0161196e565b94505060c0611b4d8d828e01611a66565b93505060e0611b5e8d828e01611a71565b925050610100611b708d828e0161196e565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c031215611ba157600080fd5b6000611bad8c8c6118a4565b9950506020611bbe8c828d016118a4565b9850506040611bcf8c828d0161196e565b97505060608a01356001600160401b03811115611beb57600080fd5b611bf78c828d01611979565b9650506080611c088c828d0161196e565b95505060a0611c198c828d0161196e565b94505060c0611c2a8c828d01611a66565b93505060e0611c3b8c828d01611a71565b925050610100611c4d8c828d0161196e565b9150509295985092959850929598565b6000806000806000806000806000806101408b8d031215611c7d57600080fd5b6000611c898d8d6118a4565b9a50506020611c9a8d828e016118a4565b9950506040611cab8d828e0161196e565b98505060608b01356001600160401b03811115611cc757600080fd5b611cd38d828e01611979565b9750506080611ce48d828e0161196e565b96505060a0611cf58d828e0161196e565b95505060c0611d068d828e01611a66565b94505060e0611d178d828e01611a71565b935050610100611d298d828e0161196e565b9250506101208b01356001600160401b03811115611d4657600080fd5b611b708d828e016118f7565b6000806000806000806000806000806101408b8d031215611d7257600080fd5b6000611d7e8d8d6118a4565b9a50506020611d8f8d828e016118a4565b9950506040611da08d828e0161196e565b98505060608b01356001600160401b03811115611dbc57600080fd5b611dc88d828e01611979565b9750506080611dd98d828e0161196e565b96505060a0611dea8d828e0161196e565b95505060c0611dfb8d828e01611a66565b94505060e0611e0c8d828e01611a71565b935050610100611e1e8d828e0161196e565b9250506101208b01356001600160401b03811115611e3b57600080fd5b611b708d828e01611979565b60008060008060008060008060008060006101608c8e031215611e6957600080fd5b6000611e758e8e6118a4565b9b50506020611e868e828f016118a4565b9a50506040611e978e828f0161196e565b99505060608c01356001600160401b03811115611eb357600080fd5b611ebf8e828f01611979565b9850506080611ed08e828f0161196e565b97505060a0611ee18e828f0161196e565b96505060c0611ef28e828f01611a66565b95505060e0611f038e828f01611a71565b945050610100611f158e828f0161196e565b9350506101208c01356001600160401b03811115611f3257600080fd5b611f3e8e828f01611979565b9250506101408c01356001600160401b03811115611f5b57600080fd5b611f678e828f016118f7565b9150509295989b509295989b9093969950565b60008060208385031215611f8d57600080fd5b82356001600160401b03811115611fa357600080fd5b611faf858286016118af565b92509250509250929050565b600060208284031215611fcd57600080fd5b6000611a9a8484611963565b600060208284031215611feb57600080fd5b6000611a9a848461196e565b6000806040838503121561200a57600080fd5b6000612016858561196e565b9250506020612027858286016118a4565b9150509250929050565b600061203d8383612054565b505060200190565b61204e81612d2c565b82525050565b61204e81612d01565b61204e61206982612d01565b612d7a565b600061207982612cef565b6120838185612cf3565b935061208e83612ce9565b8060005b838110156120bc5781516120a68882612031565b97506120b183612ce9565b925050600101612092565b509495945050505050565b60006120d38385612cf3565b93506001600160fb1b038311156120e957600080fd5b6020830292506120fa838584612d3e565b50500190565b61204e81612d0c565b61204e8161082c565b61204e61211e8261082c565b61082c565b600061212e82612cef565b6121388185612cf3565b9350612148818560208601612d4a565b61215181612da1565b9093019392505050565b600061216682612cef565b6121708185612cfc565b9350612180818560208601612d4a565b9290920192915050565b61204e81612d33565b60006121a0602083612cf3565b7f46656465726174696f6e3a20496e76616c696420726571756972656d656e7473815260200192915050565b60006121d9601f83612cf3565b7f46656465726174696f6e3a204d6178206d656d62657273207265616368656400815260200192915050565b6000612212602283612cf3565b7f46656465726174696f6e3a2043616c6c6572206e6f742061204665646572617481526137b960f11b602082015260400192915050565b6000612256602683612cf3565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061229e602883612cf3565b7f46656465726174696f6e3a2063616e6e6f74207265766f6b6520756e70726f638152670cae6e6cac840a8b60c31b602082015260400192915050565b60006122e8602e83612cf3565b7f46656465726174696f6e3a205f73746f72655472616e73616374696f6e49442081526d18d85b9b9bdd081899481395531360921b602082015260400192915050565b6000612338602783612cf3565b7f46656465726174696f6e3a20427269646765206163636570745472616e736665815266391032b93937b960c91b602082015260400192915050565b6000612381602183612cf3565b7f46656465726174696f6e3a204d656d62657220646f65736e27742065786973748152607360f81b602082015260400192915050565b60006123c4602183612cf3565b7f46656465726174696f6e3a204d656d62657220616c72656164792065786973748152607360f81b602082015260400192915050565b6000612407601883612cf3565b7f46656465726174696f6e3a20456d707479206272696467650000000000000000815260200192915050565b6000612440603a83612cf3565b7f46656465726174696f6e3a2043616e6e6f742070726f6365737320545820776881527f696c6520696e69745374616765446f6e65203d3d2066616c7365000000000000602082015260400192915050565b600061249f601d83612cfc565b7f19457468657265756d205369676e6564204d6573736167653a0a3131360000008152601d0192915050565b60006124d8603183612cf3565b7f46656465726174696f6e3a2043616e27742068617665206c657373207468616e815270207265717569726564206d656d6265727360781b602082015260400192915050565b600061252b602383612cf3565b7f536f6d65207369676e6174757265206973206e6f742076616c696420616e796d8152626f726560e81b602082015260400192915050565b6000612570601683612cf3565b754e6f7420656e6f7567682076616c69646174696f6e7360501b815260200192915050565b60006125a2602083612cf3565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006125db601f83612cf3565b7f46656465726174696f6e3a205265717569726573206174206c65617374203200815260200192915050565b6000612614601883612cf3565b7f46656465726174696f6e3a20456d707479206d656d6265720000000000000000815260200192915050565b600061264d602f83612cf3565b7f46656465726174696f6e3a205f7265766f6b655472616e73616374696f6e494481526e0818d85b9b9bdd0818994813955313608a1b602082015260400192915050565b600061269e602883612cf3565b7f46656465726174696f6e3a2043616e27742072656d6f766520616c6c20746865815267206d656d6265727360c01b602082015260400192915050565b60006126e8604d83612cf3565b7f46656465726174696f6e3a20696e697453746f72654f6c64466564657261746981527f6f6e20656e61626c6564206f6e6c7920647572696e67206465706c6f796d656e60208201526c7420736574757020537461676560981b604082015260600192915050565b600061275d602283612cf3565b7f5369676e617475726520646f65736e2774206d6174636820616e79206d656d6281526132b960f11b602082015260400192915050565b61204e81612d1d565b61204e6127a982612d1d565b612d8b565b61204e81612d26565b61204e6127c382612d26565b612d96565b60006127d4828c61205d565b6014820191506127e4828b61205d565b6014820191506127f4828a612112565b602082019150612804828961215b565b91506128108288612112565b6020820191506128208287612112565b602082019150612830828661279d565b60048201915061284082856127b7565b6001820191506128508284612112565b506020019998505050505050505050565b600061286d828d61205d565b60148201915061287d828c61205d565b60148201915061288d828b612112565b60208201915061289d828a61215b565b91506128a98289612112565b6020820191506128b98288612112565b6020820191506128c9828761279d565b6004820191506128d982866127b7565b6001820191506128e98285612112565b6020820191506128f9828461215b565b9c9b505050505050505050505050565b60006129158287612112565b6020820191506129258286612112565b602082019150612935828561205d565b6014820191506129458284612112565b50602001949350505050565b600061295c82612492565b9150612968828461215b565b9392505050565b6020810161173b8284612054565b6020810161173b8284612045565b610140810161299a828d612054565b6129a7602083018c612054565b6129b4604083018b612109565b81810360608301526129c6818a612123565b90506129d56080830189612109565b6129e260a0830188612109565b6129ef60c0830187612794565b6129fc60e08301866127ae565b612a0a610100830185612109565b818103610120830152610a618184612123565b6101208101612a2c828c612054565b612a39602083018b612054565b612a46604083018a612109565b8181036060830152612a588189612123565b9050612a676080830188612109565b612a7460a0830187612794565b612a8160c08301866127ae565b612a8e60e0830185612109565b81810361010083015261066f8184612123565b60208082528101612968818461206e565b60208082528101611a9a8184866120c7565b6020810161173b8284612100565b6020810161173b8284612109565b60808101612aee8287612109565b612afb60208301866127ae565b612b086040830185612109565b612b156060830184612109565b95945050505050565b6020810161173b828461218a565b6020808252810161173b81612193565b6020808252810161173b816121cc565b6020808252810161173b81612205565b6020808252810161173b81612249565b6020808252810161173b81612291565b6020808252810161173b816122db565b6020808252810161173b8161232b565b6020808252810161173b81612374565b6020808252810161173b816123b7565b6020808252810161173b816123fa565b6020808252810161173b81612433565b6020808252810161173b816124cb565b6020808252810161173b8161251e565b6020808252810161173b81612563565b6020808252810161173b81612595565b6020808252810161173b816125ce565b6020808252810161173b81612607565b6020808252810161173b81612640565b6020808252810161173b81612691565b6020808252810161173b816126db565b6020808252810161173b81612750565b6040518181016001600160401b0381118282101715612c9a57600080fd5b604052919050565b60006001600160401b03821115612cb857600080fd5b5060209081020190565b60006001600160401b03821115612cd857600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b600061173b82612d11565b151590565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061173b825b600061173b82612d01565b82818337506000910152565b60005b83811015612d65578181015183820152602001612d4d565b83811115612d74576000848401525b50505050565b600061173b82600061173b82612db7565b600061173b82612dab565b600061173b82612db1565b601f01601f191690565b60e01b90565b60f81b90565b60601b90565b612dc681612d01565b8114610ea557600080fd5b612dc681612d0c565b612dc68161082c565b612dc681612d1d565b612dc681612d2656fea365627a7a72315820a2d24e452867ab3d8366e9b3d561081f1a7990db6dd0d92b29b8d7227a0240896c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005000000000000000000000000a420512b06b23d14beb25bae524a9b5f8789c45c000000000000000000000000cd1b561207e20a7ccbcf004bb0a4bc897ba8f2ee000000000000000000000000778898877a3277f7306b19879f426a86d078e1150000000000000000000000005e7847e22dfb937672815cdfe28724bbdf5773fd0000000000000000000000008a2241ce21afa71515a73f82d09e690b85603f35
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a1fb4acb11610104578063c5721deb116100a2578063e78cea9211610071578063e78cea9214610396578063e8c15dd7146103ab578063f2f34d51146103be578063f2fde38b146103d1576101cf565b8063c5721deb14610355578063ca6d56dc14610368578063d03e1ee91461037b578063dc8452cd1461038e576101cf565b8063a93585f0116100de578063a93585f014610309578063ae6d1d791461031c578063ba51a6df1461032f578063c1f0808a14610342576101cf565b8063a1fb4acb146102db578063a230c524146102ee578063a3d70f0014610301576101cf565b8063795fd702116101715780638f32d59b1161014b5780638f32d59b146102a35780639386775a146102ab5780639c8f1a83146102be5780639eab5253146102c6576101cf565b8063795fd702146102755780638da5cb5b146102885780638dd1480214610290576101cf565b8063493532a2116101ad578063493532a2146102325780635daf08ca14610245578063681fc92114610265578063715018a61461026d576101cf565b806309916057146101d45780630b1ca49a146101fd5780631b4613cb14610212575b600080fd5b6101e76101e2366004611b82565b6103e4565b6040516101f49190612ad2565b60405180910390f35b61021061020b366004611a7c565b61042c565b005b610225610220366004611fd9565b610621565b6040516101f49190612ac4565b610225610240366004611d52565b61065b565b610258610253366004611fd9565b610680565b6040516101f4919061296f565b6101e76106a7565b6102106106ac565b610210610283366004611f7a565b61071a565b61025861081f565b61021061029e366004611a7c565b61082f565b6102256108cf565b6102256102b9366004611ff7565b6108f3565b610210610913565b6102ce610946565b6040516101f49190612aa1565b6101e76102e9366004611fd9565b6109a8565b6102256102fc366004611a7c565b610a19565b610225610a2e565b610225610317366004611fd9565b610a37565b61022561032a366004611e47565b610a4c565b61021061033d366004611fd9565b610a73565b610225610350366004611fd9565b610b34565b610210610363366004611fd9565b610b49565b610210610376366004611a7c565b610c69565b610225610389366004611aa2565b610d9a565b6101e7610df4565b61039e610dfa565b6040516101f49190612b1e565b6102256103b9366004611c5d565b610e09565b6101e76103cc366004611d52565b610e2d565b6102106103df366004611a7c565b610e78565b6000898989898989898989604051602001610407999897969594939291906127c8565b6040516020818303038152906040528051906020012090509998505050505050505050565b6104346108cf565b6104595760405162461bcd60e51b815260040161045090612c0c565b60405180910390fd5b6001600160a01b03811661047f5760405162461bcd60e51b815260040161045090612c2c565b6001600160a01b03811660009081526005602052604090205460ff166104b75760405162461bcd60e51b815260040161045090612b9c565b6002546001106104d95760405162461bcd60e51b815260040161045090612c4c565b6003546002546000190110156105015760405162461bcd60e51b815260040161045090612bdc565b6001600160a01b0381166000908152600560205260408120805460ff191690555b600254600019018110156105d557816001600160a01b03166002828154811061054757fe5b6000918252602090912001546001600160a01b031614156105cd5760028054600019810190811061057457fe5b600091825260209091200154600280546001600160a01b03909216918390811061059a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506105d5565b600101610522565b506002805460001901906105e9908261185d565b506040516001600160a01b038216907f270bfc616dd36d5cb6b35aac93e6ef22b089c34e6f6ad6f0892797424840897b90600090a250565b600081815260066020526040812081610638610ea8565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b600061066f8b8b8b8b8b8b8b8b8b8b610eac565b90505b9a9950505050505050505050565b6002818154811061068d57fe5b6000918252602090912001546001600160a01b0316905081565b603281565b6106b46108cf565b6106d05760405162461bcd60e51b815260040161045090612c0c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107226108cf565b61073e5760405162461bcd60e51b815260040161045090612c0c565b60045460ff16156107615760405162461bcd60e51b815260040161045090612c5c565b60005b818110156107e157600083838381811061077a57fe5b90506020020135141561079f5760405162461bcd60e51b815260040161045090612b7c565b6001600760008585858181106107b157fe5b60209081029290920135835250810191909152604001600020805460ff1916911515919091179055600101610764565b507f34b66caee0bfc067332d9d8a887ffd44f8742d7b258b45e200f88ac13a7ba5a88282604051610813929190612ab2565b60405180910390a15050565b6000546001600160a01b03165b90565b6108376108cf565b6108535760405162461bcd60e51b815260040161045090612c0c565b6001600160a01b0381166108795760405162461bcd60e51b815260040161045090612bbc565b600180546001600160a01b0319166001600160a01b0383161790556040517f9775531310b2880b61484ed85cbb0b491c8fde3a07f289c63b92551782794497906108c490839061296f565b60405180910390a150565b600080546001600160a01b03166108e4610ea8565b6001600160a01b031614905090565b600660209081526000928352604080842090915290825290205460ff1681565b61091b6108cf565b6109375760405162461bcd60e51b815260040161045090612c0c565b6004805460ff19166001179055565b6060600280548060200260200160405190810160405280929190818152602001828054801561099e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610980575b5050505050905090565b600080805b600254811015610a1257600084815260066020526040812060028054919291849081106109d657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615610a0a576001820191505b6001016109ad565b5092915050565b60056020526000908152604090205460ff1681565b60045460ff1681565b60009081526007602052604090205460ff1690565b6000610a618c8c8c8c8c8c8c8c8c8c8c610f84565b90505b9b9a5050505050505050505050565b610a7b6108cf565b610a975760405162461bcd60e51b815260040161045090612c0c565b60025481818111801590610aaa57508015155b8015610ab557508115155b610ad15760405162461bcd60e51b815260040161045090612b2c565b6002831015610af25760405162461bcd60e51b815260040161045090612c1c565b60038390556040517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a90610b27908590612ad2565b60405180910390a1505050565b60076020526000908152604090205460ff1681565b610b516108cf565b610b6d5760405162461bcd60e51b815260040161045090612c0c565b80610b8a5760405162461bcd60e51b815260040161045090612c3c565b60008181526007602052604090205460ff161515600114610bbd5760405162461bcd60e51b815260040161045090612b6c565b6000818152600760205260408120805460ff191690555b600254811015610c395760008281526006602052604081206002805483919085908110610bfd57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101610bd4565b507f2d3fe24dc10cb7b5e4ae5c167c9ef8de17a5fa5c429b7dac54b1503b8ee44c70816040516108c49190612ad2565b610c716108cf565b610c8d5760405162461bcd60e51b815260040161045090612c0c565b6001600160a01b038116610cb35760405162461bcd60e51b815260040161045090612c2c565b6001600160a01b03811660009081526005602052604090205460ff1615610cec5760405162461bcd60e51b815260040161045090612bac565b600254603211610d0e5760405162461bcd60e51b815260040161045090612b3c565b6001600160a01b038116600081815260056020526040808220805460ff1916600190811790915560028054918201815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191684179055517f72114e270de66b9d2710ecf140403e5e99b1574767d6a8197bdc8d807a46e7c79190a250565b600061066f8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528e93508d92508c91508b908b90610eac565b60035481565b6001546001600160a01b031681565b600061066f8b8b8b8b8b8b8b8b8b604051806020016040528060008152508c610f84565b60008a8a8a8a8a8a8a8a8a8a604051602001610e529a99989796959493929190612861565b6040516020818303038152906040528051906020012090509a9950505050505050505050565b610e806108cf565b610e9c5760405162461bcd60e51b815260040161045090612c0c565b610ea58161105e565b50565b3390565b600060056000610eba610ea8565b6001600160a01b0316815260208101919091526040016000205460ff16610ef35760405162461bcd60e51b815260040161045090612b4c565b60045460ff161515600114610f1a5760405162461bcd60e51b815260040161045090612bcc565b6000610f2d8c8c8c8c8c8c8c8c8c6103e4565b60008181526007602052604090205490915060ff1615610f51576001915050610672565b610f638c8c8c8c8c8c8c8c8c8c6110df565b15610f72576001915050610672565b5060019b9a5050505050505050505050565b600060056000610f92610ea8565b6001600160a01b0316815260208101919091526040016000205460ff16610fcb5760405162461bcd60e51b815260040161045090612b4c565b60045460ff161515600114610ff25760405162461bcd60e51b815260040161045090612bcc565b60006110058d8d8d8d8d8d8d8d8d6103e4565b60008181526007602052604090205490915060ff1615611029576001915050610a64565b61103c8d8d8d8d8d8d8d8d8d8d8d61135a565b1561104b576001915050610a64565b5060019c9b505050505050505050505050565b6001600160a01b0381166110845760405162461bcd60e51b815260040161045090612b5c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806110f48c8c8c8c8c8c8c8c8c8c610e2d565b60008181526007602052604090205490915060ff1615611118576001915050610672565b60008181526006602052604081209061112f610ea8565b6001600160a01b0316815260208101919091526040016000205460ff161561115b576001915050610672565b6000818152600660205260408120600191611174610ea8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905586816111a6610ea8565b6001600160a01b03167f0c7da013568f30bdd9f486d42a289fd23d0f6b4006a80ff093407b121138bdf18f8f8f8f8f8e8e8e8e6040516111ee99989796959493929190612a1d565b60405180910390a46000611201826109a8565b9050600354811015801561121c575060028054046001018110155b1561134a5760016007600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600160009054906101000a90046001600160a01b03166001600160a01b031663d058ae968f8f8f8f8f8f8f8f8f8f6040518b63ffffffff1660e01b81526004016112a29a9998979695949392919061298b565b602060405180830381600087803b1580156112bc57600080fd5b505af11580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112f49190810190611fbb565b9050806113135760405162461bcd60e51b815260040161045090612b8c565b60405183907fa74c8847d513feba22a0f0cb38d53081abf97562cdb293926ba243689e7c41ca90600090a260019350505050610672565b50509a9950505050505050505050565b60008061136f8d8d8d8d8d8d8d8d8d8d610e2d565b60008181526007602052604090205490915060ff1615611393576001915050610a64565b60008181526006602052604081206001916113ac610ea8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001817fdc9da68bd73c4161c8f5bc195573e6649390acdb7090a16542862b767eacac5a611400610ea8565b60405161140d919061297d565b60405180910390a260005b84518110156115c3574285828151811061142e57fe5b602002602001015160200151116114575760405162461bcd60e51b815260040161045090612bec565b6000469050600084823089868151811061146d57fe5b60200260200101516020015160405160200161148c9493929190612909565b60408051601f19818403018152908290526114a991602001612951565b60405160208183030381529060405280519060200120905060006114e4828986815181106114d357fe5b602002602001015160000151611664565b6001600160a01b03811660009081526005602052604090205490915060ff1661151f5760405162461bcd60e51b815260040161045090612c6c565b60008681526006602090815260408083206001600160a01b038516845290915290205460ff166115b85760008681526006602090815260408083206001600160a01b038516845290915290819020805460ff19166001908117909155905195019486907fdc9da68bd73c4161c8f5bc195573e6649390acdb7090a16542862b767eacac5a906115af90849061296f565b60405180910390a25b505050600101611418565b5060035481101580156115dd575060028054046001018110155b6115f95760405162461bcd60e51b815260040161045090612bfc565b6000828152600760205260409020805460ff19166001179055611625828f8f8f8f8f8f8f8f8f8f611741565b60405182907fa74c8847d513feba22a0f0cb38d53081abf97562cdb293926ba243689e7c41ca90600090a25060019d9c50505050505050505050505050565b600081516041146116775750600061173b565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156116bd576000935050505061173b565b8060ff16601b141580156116d557508060ff16601c14155b156116e6576000935050505061173b565b600186828585604051600081526020016040526040516117099493929190612ae0565b6020604051602081039080840390855afa15801561172b573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b848b61174b610ea8565b6001600160a01b03167f0c7da013568f30bdd9f486d42a289fd23d0f6b4006a80ff093407b121138bdf18d8d8d8d8d8c8c8c8c60405161179399989796959493929190612a1d565b60405180910390a460015460405163682c574b60e11b81526000916001600160a01b03169063d058ae96906117de908e908e908e908e908e908e908e908e908e908e9060040161298b565b602060405180830381600087803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118309190810190611fbb565b90508061184f5760405162461bcd60e51b815260040161045090612b8c565b505050505050505050505050565b81548183558181111561188157600083815260209020611881918101908301611886565b505050565b61082c91905b808211156118a0576000815560010161188c565b5090565b803561173b81612dbd565b60008083601f8401126118c157600080fd5b5081356001600160401b038111156118d857600080fd5b6020830191508360208202830111156118f057600080fd5b9250929050565b600082601f83011261190857600080fd5b813561191b61191682612ca2565b612c7c565b81815260209384019390925082018360005b8381101561195957813586016119438882611a09565b845250602092830192919091019060010161192d565b5050505092915050565b805161173b81612dd1565b803561173b81612dda565b600082601f83011261198a57600080fd5b813561199861191682612cc2565b915080825260208301602083018583830111156119b457600080fd5b6119bf838284612d3e565b50505092915050565b60008083601f8401126119da57600080fd5b5081356001600160401b038111156119f157600080fd5b6020830191508360018202830111156118f057600080fd5b600060408284031215611a1b57600080fd5b611a256040612c7c565b905081356001600160401b03811115611a3d57600080fd5b611a4984828501611979565b8252506020611a5a8484830161196e565b60208301525092915050565b803561173b81612de3565b803561173b81612dec565b600060208284031215611a8e57600080fd5b6000611a9a84846118a4565b949350505050565b6000806000806000806000806000806101208b8d031215611ac257600080fd5b6000611ace8d8d6118a4565b9a50506020611adf8d828e016118a4565b9950506040611af08d828e0161196e565b98505060608b01356001600160401b03811115611b0c57600080fd5b611b188d828e016119c8565b97509750506080611b2b8d828e0161196e565b95505060a0611b3c8d828e0161196e565b94505060c0611b4d8d828e01611a66565b93505060e0611b5e8d828e01611a71565b925050610100611b708d828e0161196e565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c031215611ba157600080fd5b6000611bad8c8c6118a4565b9950506020611bbe8c828d016118a4565b9850506040611bcf8c828d0161196e565b97505060608a01356001600160401b03811115611beb57600080fd5b611bf78c828d01611979565b9650506080611c088c828d0161196e565b95505060a0611c198c828d0161196e565b94505060c0611c2a8c828d01611a66565b93505060e0611c3b8c828d01611a71565b925050610100611c4d8c828d0161196e565b9150509295985092959850929598565b6000806000806000806000806000806101408b8d031215611c7d57600080fd5b6000611c898d8d6118a4565b9a50506020611c9a8d828e016118a4565b9950506040611cab8d828e0161196e565b98505060608b01356001600160401b03811115611cc757600080fd5b611cd38d828e01611979565b9750506080611ce48d828e0161196e565b96505060a0611cf58d828e0161196e565b95505060c0611d068d828e01611a66565b94505060e0611d178d828e01611a71565b935050610100611d298d828e0161196e565b9250506101208b01356001600160401b03811115611d4657600080fd5b611b708d828e016118f7565b6000806000806000806000806000806101408b8d031215611d7257600080fd5b6000611d7e8d8d6118a4565b9a50506020611d8f8d828e016118a4565b9950506040611da08d828e0161196e565b98505060608b01356001600160401b03811115611dbc57600080fd5b611dc88d828e01611979565b9750506080611dd98d828e0161196e565b96505060a0611dea8d828e0161196e565b95505060c0611dfb8d828e01611a66565b94505060e0611e0c8d828e01611a71565b935050610100611e1e8d828e0161196e565b9250506101208b01356001600160401b03811115611e3b57600080fd5b611b708d828e01611979565b60008060008060008060008060008060006101608c8e031215611e6957600080fd5b6000611e758e8e6118a4565b9b50506020611e868e828f016118a4565b9a50506040611e978e828f0161196e565b99505060608c01356001600160401b03811115611eb357600080fd5b611ebf8e828f01611979565b9850506080611ed08e828f0161196e565b97505060a0611ee18e828f0161196e565b96505060c0611ef28e828f01611a66565b95505060e0611f038e828f01611a71565b945050610100611f158e828f0161196e565b9350506101208c01356001600160401b03811115611f3257600080fd5b611f3e8e828f01611979565b9250506101408c01356001600160401b03811115611f5b57600080fd5b611f678e828f016118f7565b9150509295989b509295989b9093969950565b60008060208385031215611f8d57600080fd5b82356001600160401b03811115611fa357600080fd5b611faf858286016118af565b92509250509250929050565b600060208284031215611fcd57600080fd5b6000611a9a8484611963565b600060208284031215611feb57600080fd5b6000611a9a848461196e565b6000806040838503121561200a57600080fd5b6000612016858561196e565b9250506020612027858286016118a4565b9150509250929050565b600061203d8383612054565b505060200190565b61204e81612d2c565b82525050565b61204e81612d01565b61204e61206982612d01565b612d7a565b600061207982612cef565b6120838185612cf3565b935061208e83612ce9565b8060005b838110156120bc5781516120a68882612031565b97506120b183612ce9565b925050600101612092565b509495945050505050565b60006120d38385612cf3565b93506001600160fb1b038311156120e957600080fd5b6020830292506120fa838584612d3e565b50500190565b61204e81612d0c565b61204e8161082c565b61204e61211e8261082c565b61082c565b600061212e82612cef565b6121388185612cf3565b9350612148818560208601612d4a565b61215181612da1565b9093019392505050565b600061216682612cef565b6121708185612cfc565b9350612180818560208601612d4a565b9290920192915050565b61204e81612d33565b60006121a0602083612cf3565b7f46656465726174696f6e3a20496e76616c696420726571756972656d656e7473815260200192915050565b60006121d9601f83612cf3565b7f46656465726174696f6e3a204d6178206d656d62657273207265616368656400815260200192915050565b6000612212602283612cf3565b7f46656465726174696f6e3a2043616c6c6572206e6f742061204665646572617481526137b960f11b602082015260400192915050565b6000612256602683612cf3565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061229e602883612cf3565b7f46656465726174696f6e3a2063616e6e6f74207265766f6b6520756e70726f638152670cae6e6cac840a8b60c31b602082015260400192915050565b60006122e8602e83612cf3565b7f46656465726174696f6e3a205f73746f72655472616e73616374696f6e49442081526d18d85b9b9bdd081899481395531360921b602082015260400192915050565b6000612338602783612cf3565b7f46656465726174696f6e3a20427269646765206163636570745472616e736665815266391032b93937b960c91b602082015260400192915050565b6000612381602183612cf3565b7f46656465726174696f6e3a204d656d62657220646f65736e27742065786973748152607360f81b602082015260400192915050565b60006123c4602183612cf3565b7f46656465726174696f6e3a204d656d62657220616c72656164792065786973748152607360f81b602082015260400192915050565b6000612407601883612cf3565b7f46656465726174696f6e3a20456d707479206272696467650000000000000000815260200192915050565b6000612440603a83612cf3565b7f46656465726174696f6e3a2043616e6e6f742070726f6365737320545820776881527f696c6520696e69745374616765446f6e65203d3d2066616c7365000000000000602082015260400192915050565b600061249f601d83612cfc565b7f19457468657265756d205369676e6564204d6573736167653a0a3131360000008152601d0192915050565b60006124d8603183612cf3565b7f46656465726174696f6e3a2043616e27742068617665206c657373207468616e815270207265717569726564206d656d6265727360781b602082015260400192915050565b600061252b602383612cf3565b7f536f6d65207369676e6174757265206973206e6f742076616c696420616e796d8152626f726560e81b602082015260400192915050565b6000612570601683612cf3565b754e6f7420656e6f7567682076616c69646174696f6e7360501b815260200192915050565b60006125a2602083612cf3565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006125db601f83612cf3565b7f46656465726174696f6e3a205265717569726573206174206c65617374203200815260200192915050565b6000612614601883612cf3565b7f46656465726174696f6e3a20456d707479206d656d6265720000000000000000815260200192915050565b600061264d602f83612cf3565b7f46656465726174696f6e3a205f7265766f6b655472616e73616374696f6e494481526e0818d85b9b9bdd0818994813955313608a1b602082015260400192915050565b600061269e602883612cf3565b7f46656465726174696f6e3a2043616e27742072656d6f766520616c6c20746865815267206d656d6265727360c01b602082015260400192915050565b60006126e8604d83612cf3565b7f46656465726174696f6e3a20696e697453746f72654f6c64466564657261746981527f6f6e20656e61626c6564206f6e6c7920647572696e67206465706c6f796d656e60208201526c7420736574757020537461676560981b604082015260600192915050565b600061275d602283612cf3565b7f5369676e617475726520646f65736e2774206d6174636820616e79206d656d6281526132b960f11b602082015260400192915050565b61204e81612d1d565b61204e6127a982612d1d565b612d8b565b61204e81612d26565b61204e6127c382612d26565b612d96565b60006127d4828c61205d565b6014820191506127e4828b61205d565b6014820191506127f4828a612112565b602082019150612804828961215b565b91506128108288612112565b6020820191506128208287612112565b602082019150612830828661279d565b60048201915061284082856127b7565b6001820191506128508284612112565b506020019998505050505050505050565b600061286d828d61205d565b60148201915061287d828c61205d565b60148201915061288d828b612112565b60208201915061289d828a61215b565b91506128a98289612112565b6020820191506128b98288612112565b6020820191506128c9828761279d565b6004820191506128d982866127b7565b6001820191506128e98285612112565b6020820191506128f9828461215b565b9c9b505050505050505050505050565b60006129158287612112565b6020820191506129258286612112565b602082019150612935828561205d565b6014820191506129458284612112565b50602001949350505050565b600061295c82612492565b9150612968828461215b565b9392505050565b6020810161173b8284612054565b6020810161173b8284612045565b610140810161299a828d612054565b6129a7602083018c612054565b6129b4604083018b612109565b81810360608301526129c6818a612123565b90506129d56080830189612109565b6129e260a0830188612109565b6129ef60c0830187612794565b6129fc60e08301866127ae565b612a0a610100830185612109565b818103610120830152610a618184612123565b6101208101612a2c828c612054565b612a39602083018b612054565b612a46604083018a612109565b8181036060830152612a588189612123565b9050612a676080830188612109565b612a7460a0830187612794565b612a8160c08301866127ae565b612a8e60e0830185612109565b81810361010083015261066f8184612123565b60208082528101612968818461206e565b60208082528101611a9a8184866120c7565b6020810161173b8284612100565b6020810161173b8284612109565b60808101612aee8287612109565b612afb60208301866127ae565b612b086040830185612109565b612b156060830184612109565b95945050505050565b6020810161173b828461218a565b6020808252810161173b81612193565b6020808252810161173b816121cc565b6020808252810161173b81612205565b6020808252810161173b81612249565b6020808252810161173b81612291565b6020808252810161173b816122db565b6020808252810161173b8161232b565b6020808252810161173b81612374565b6020808252810161173b816123b7565b6020808252810161173b816123fa565b6020808252810161173b81612433565b6020808252810161173b816124cb565b6020808252810161173b8161251e565b6020808252810161173b81612563565b6020808252810161173b81612595565b6020808252810161173b816125ce565b6020808252810161173b81612607565b6020808252810161173b81612640565b6020808252810161173b81612691565b6020808252810161173b816126db565b6020808252810161173b81612750565b6040518181016001600160401b0381118282101715612c9a57600080fd5b604052919050565b60006001600160401b03821115612cb857600080fd5b5060209081020190565b60006001600160401b03821115612cd857600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b600061173b82612d11565b151590565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061173b825b600061173b82612d01565b82818337506000910152565b60005b83811015612d65578181015183820152602001612d4d565b83811115612d74576000848401525b50505050565b600061173b82600061173b82612db7565b600061173b82612dab565b600061173b82612db1565b601f01601f191690565b60e01b90565b60f81b90565b60601b90565b612dc681612d01565b8114610ea557600080fd5b612dc681612d0c565b612dc68161082c565b612dc681612d1d565b612dc681612d2656fea365627a7a72315820a2d24e452867ab3d8366e9b3d561081f1a7990db6dd0d92b29b8d7227a0240896c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005000000000000000000000000a420512b06b23d14beb25bae524a9b5f8789c45c000000000000000000000000cd1b561207e20a7ccbcf004bb0a4bc897ba8f2ee000000000000000000000000778898877a3277f7306b19879f426a86d078e1150000000000000000000000005e7847e22dfb937672815cdfe28724bbdf5773fd0000000000000000000000008a2241ce21afa71515a73f82d09e690b85603f35
-----Decoded View---------------
Arg [0] : _members (address[]): 0xa420512B06B23d14Beb25Bae524a9B5F8789c45C,0xcD1b561207E20A7ccbcf004bb0a4bc897BA8F2eE,0x778898877A3277F7306b19879F426A86d078E115,0x5E7847e22DFb937672815Cdfe28724bbdf5773fd,0x8a2241ce21AfA71515a73f82D09E690b85603F35
Arg [1] : _required (uint256): 3
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 000000000000000000000000a420512b06b23d14beb25bae524a9b5f8789c45c
Arg [4] : 000000000000000000000000cd1b561207e20a7ccbcf004bb0a4bc897ba8f2ee
Arg [5] : 000000000000000000000000778898877a3277f7306b19879f426a86d078e115
Arg [6] : 0000000000000000000000005e7847e22dfb937672815cdfe28724bbdf5773fd
Arg [7] : 0000000000000000000000008a2241ce21afa71515a73f82d09e690b85603f35
Deployed Bytecode Sourcemap
14487:21589:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14487:21589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30968:788;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33055:768;;;;;;;;;:::i;:::-;;30687:130;;;;;;;;;:::i;:::-;;;;;;;;17962:712;;;;;;;;;:::i;14754:24::-;;;;;;;;;:::i;:::-;;;;;;;;14615:45;;;:::i;10595:140::-;;;:::i;35248:599::-;;;;;;;;;:::i;9784:79::-;;;:::i;17062:208::-;;;;;;;;;:::i;10150:94::-;;;:::i;14952:57::-;;;;;;;;;:::i;35985:88::-;;;:::i;33831:96::-;;;:::i;:::-;;;;;;;;30408:271;;;;;;;;;:::i;14905:40::-;;;;;;;;;:::i;14871:25::-;;;:::i;30825:135::-;;;;;;;;;:::i;23565:801::-;;;;;;;;;:::i;33935:293::-;;;;;;;;;:::i;15016:41::-;;;;;;;;;:::i;34439:607::-;;;;;;;;;:::i;32624:423::-;;;;;;;;;:::i;17278:676::-;;;;;;;;;:::i;14785:23::-;;;:::i;14726:21::-;;;:::i;:::-;;;;;;;;22796:761;;;;;;;;;:::i;31764:852::-;;;;;;;;;:::i;10890:109::-;;;;;;;;;:::i;30968:788::-;31287:7;31439:20;31482:8;31513:6;31542;31571:9;31603:15;31641:8;31672;31703:11;31400:333;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;31400:333:0;;;31372:376;;;;;;31352:396;;30968:788;;;;;;;;;;;:::o;33055:768::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33135:26:0;;33127:63;;;;-1:-1:-1;;;33127:63:0;;;;;;;;;-1:-1:-1;;;;;33209:20:0;;;;;;:8;:20;;;;;;;;33201:66;;;;-1:-1:-1;;;33201:66:0;;;;;;;;;33286:7;:14;33303:1;-1:-1:-1;33278:71:0;;;;-1:-1:-1;;;33278:71:0;;;;;;;;;33404:8;;33382:7;:14;-1:-1:-1;;33382:18:0;:30;;33360:129;;;;-1:-1:-1;;;33360:129:0;;;;;;;;;-1:-1:-1;;;;;33502:20:0;;33525:5;33502:20;;;:8;:20;;;;;:28;;-1:-1:-1;;33502:28:0;;;33541:204;33565:7;:14;-1:-1:-1;;33565:18:0;33561:22;;33541:204;;;33623:10;-1:-1:-1;;;;;33609:24:0;:7;33617:1;33609:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33609:10:0;:24;33605:129;;;33667:7;33675:14;;-1:-1:-1;;33675:18:0;;;33667:27;;;;;;;;;;;;;;;;33654:7;:10;;-1:-1:-1;;;;;33667:27:0;;;;33662:1;;33654:10;;;;;;;;;;;;;;:40;;;;;-1:-1:-1;;;;;33654:40:0;;;;;-1:-1:-1;;;;;33654:40:0;;;;;;33713:5;;33605:129;33585:3;;33541:204;;;-1:-1:-1;33755:7:0;:19;;-1:-1:-1;;33755:19:0;;;;;;:::i;:::-;-1:-1:-1;33790:25:0;;-1:-1:-1;;;;;33790:25:0;;;;;;;;33055:768;:::o;30687:130::-;30751:4;30775:20;;;:5;:20;;;;;30751:4;30796:12;:10;:12::i;:::-;-1:-1:-1;;;;;30775:34:0;;;;;;;;;;;;-1:-1:-1;30775:34:0;;;;;30687:130;-1:-1:-1;;30687:130:0:o;17962:712::-;18309:4;18346:320;18381:20;18420:8;18447:6;18472;18497:9;18525:15;18559:8;18586;18613:11;18643:8;18346:16;:320::i;:::-;18326:340;;17962:712;;;;;;;;;;;;;:::o;14754:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14754:24:0;;-1:-1:-1;14754:24:0;:::o;14615:45::-;14658:2;14615:45;:::o;10595:140::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;10694:1;10678:6;;10657:40;;-1:-1:-1;;;;;10678:6:0;;;;10657:40;;10694:1;;10657:40;10725:1;10708:19;;-1:-1:-1;;;;;;10708:19:0;;;10595:140::o;35248:599::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;35368:13;;;;:22;35346:149;;;;-1:-1:-1;;;35346:149:0;;;;;;;;;35511:9;35506:270;35526:26;;;35506:270;;;14862:1;35600:15;;35616:1;35600:18;;;;;;;;;;;;;:31;;35574:139;;;;-1:-1:-1;;;35574:139:0;;;;;;;;;35760:4;35728:9;:29;35738:15;;35754:1;35738:18;;;;;;;;;;;;;;;;35728:29;;-1:-1:-1;35728:29:0;;;;;;;;-1:-1:-1;35728:29:0;:36;;-1:-1:-1;;35728:36:0;;;;;;;;;;-1:-1:-1;35554:3:0;35506:270;;;;35791:48;35823:15;;35791:48;;;;;;;;;;;;;;;;35248:599;;:::o;9784:79::-;9822:7;9849:6;-1:-1:-1;;;;;9849:6:0;9784:79;;:::o;17062:208::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;-1:-1:-1;;;;;17136:23:0;;17128:60;;;;-1:-1:-1;;;17128:60:0;;;;;;;;;17199:6;:25;;-1:-1:-1;;;;;;17199:25:0;-1:-1:-1;;;;;17199:25:0;;;;;17240:22;;;;;;17199:25;;17240:22;;;;;;;;;;17062:208;:::o;10150:94::-;10190:4;10230:6;;-1:-1:-1;;;;;10230:6:0;10214:12;:10;:12::i;:::-;-1:-1:-1;;;;;10214:22:0;;10207:29;;10150:94;:::o;14952:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35985:88::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;36045:13;:20;;-1:-1:-1;;36045:20:0;36061:4;36045:20;;;35985:88::o;33831:96::-;33876:16;33912:7;33905:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33905:14:0;;;;;;;;;;;;;;;;;;;;;;;33831:96;:::o;30408:271::-;30481:7;;;30529:120;30553:7;:14;30549:18;;30529:120;;;30593:20;;;;:5;:20;;;;;30614:7;:10;;30593:20;;;30622:1;;30614:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30614:10:0;30593:32;;;;;;;;;;;;;;;30589:48;;;30636:1;30627:10;;;;30589:48;30569:3;;30529:120;;;-1:-1:-1;30666:5:0;30408:271;-1:-1:-1;;30408:271:0:o;14905:40::-;;;;;;;;;;;;;;;:::o;14871:25::-;;;;;;:::o;30825:135::-;30904:4;30928:24;;;:9;:24;;;;;;;;;30825:135::o;23565:801::-;23964:4;24001:357;24039:20;24078:8;24105:6;24130;24155:9;24183:15;24217:8;24244;24271:11;24301:8;24328:15;24001:19;:357::i;:::-;23981:377;;23565:801;;;;;;;;;;;;;;:::o;33935:293::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;34044:7;:14;34060:9;16196:25;;;;;;:43;;-1:-1:-1;16225:14:0;;;16196:43;:64;;;;-1:-1:-1;16243:17:0;;;16196:64;16174:146;;;;-1:-1:-1;;;16174:146:0;;;;;;;;;34108:1;34095:9;:14;;34087:58;;;;-1:-1:-1;;;34087:58:0;;;;;;;;;34156:8;:20;;;34192:28;;;;;;34167:9;;34192:28;;;;;;;;;;10053:1;;33935:293;:::o;15016:41::-;;;;;;;;;;;;;;;:::o;34439:607::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;34558:33;34536:130;;;;-1:-1:-1;;;34536:130:0;;;;;;;;;34699:31;;;;:9;:31;;;;;;;;:39;;:31;:39;34677:129;;;;-1:-1:-1;;;34677:129:0;;;;;;;;;34851:5;34817:31;;;:9;:31;;;;;:39;;-1:-1:-1;;34817:39:0;;;34867:119;34891:7;:14;34887:18;;34867:119;;;34969:5;34927:27;;;:5;:27;;;;;34955:7;:10;;34969:5;;34955:7;34963:1;;34955:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34955:10:0;34927:39;;;;;;;;;;;;:47;;-1:-1:-1;;34927:47:0;;;;;;;;;;-1:-1:-1;34907:3:0;34867:119;;;;35001:37;35017:20;35001:37;;;;;;;32624:423;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;-1:-1:-1;;;;;32701:26:0;;32693:63;;;;-1:-1:-1;;;32693:63:0;;;;;;;;;-1:-1:-1;;;;;32776:20:0;;;;;;:8;:20;;;;;;;;32775:21;32767:67;;;;-1:-1:-1;;;32767:67:0;;;;;;;;;32853:7;:14;14658:2;-1:-1:-1;32845:77:0;;;;-1:-1:-1;;;32845:77:0;;;;;;;;;-1:-1:-1;;;;;32935:20:0;;;;;;:8;:20;;;;;;:27;;-1:-1:-1;;32935:27:0;32958:4;32935:27;;;;;;32973:7;27:10:-1;;23:18;;;45:23;;32973:24:0;;;;;;-1:-1:-1;;;;;;32973:24:0;;;;;33013:26;;;32935:20;33013:26;32624:423;:::o;17278:676::-;17595:4;17632:314;17667:20;17706:8;17733:6;17758;;17632:314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;17632:314:0;;;;;;;;;;;;17783:9;;-1:-1:-1;17811:15:0;;-1:-1:-1;17845:8:0;;-1:-1:-1;17872:8:0;;17899:11;;17632:16;:314::i;14785:23::-;;;;:::o;14726:21::-;;;-1:-1:-1;;;;;14726:21:0;;:::o;22796:761::-;23161:4;23198:351;23236:20;23275:8;23302:6;23327;23352:9;23380:15;23414:8;23441;23468:11;23198:351;;;;;;;;;;;;23519:15;23198:19;:351::i;31764:852::-;32116:7;32268:20;32311:8;32342:6;32371;32400:9;32432:15;32470:8;32501;32532:11;32566:8;32229:364;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;32229:364:0;;;32201:407;;;;;;32181:427;;31764:852;;;;;;;;;;;;:::o;10890:109::-;9996:9;:7;:9::i;:::-;9988:54;;;;-1:-1:-1;;;9988:54:0;;;;;;;;;10963:28;10982:8;10963:18;:28::i;:::-;10890:109;:::o;8538:98::-;8618:10;8538:98;:::o;18682:2125::-;19041:4;15962:8;:22;15971:12;:10;:12::i;:::-;-1:-1:-1;;;;;15962:22:0;;;;;;;;;;;;-1:-1:-1;15962:22:0;;;;15954:69;;;;-1:-1:-1;;;15954:69:0;;;;;;;;;19125:13;;;;:21;;:13;:21;19103:129;;;;-1:-1:-1;;;19103:129:0;;;;;;;;;19245:21;19269:253;19300:20;19335:8;19358:6;19379;19400:9;19424:15;19454:8;19477;19500:11;19269:16;:253::i;:::-;19537:24;;;;:9;:24;;;;;;19245:277;;-1:-1:-1;19537:24:0;;19533:41;;;19570:4;19563:11;;;;;19533:41;20248:322;20285:20;20324:8;20351:6;20376;20401:9;20429:15;20463:8;20490;20517:11;20547:8;20248:18;:322::i;:::-;20230:548;;;20762:4;20755:11;;;;;20230:548;-1:-1:-1;20795:4:0;;18682:2125;-1:-1:-1;;;;;;;;;;;18682:2125:0:o;24374:2217::-;24785:4;15962:8;:22;15971:12;:10;:12::i;:::-;-1:-1:-1;;;;;15962:22:0;;;;;;;;;;;;-1:-1:-1;15962:22:0;;;;15954:69;;;;-1:-1:-1;;;15954:69:0;;;;;;;;;24869:13;;;;:21;;:13;:21;24847:129;;;;-1:-1:-1;;;24847:129:0;;;;;;;;;24989:21;25013:253;25044:20;25079:8;25102:6;25123;25144:9;25168:15;25198:8;25221;25244:11;25013:16;:253::i;:::-;25281:24;;;;:9;:24;;;;;;24989:277;;-1:-1:-1;25281:24:0;;25277:41;;;25314:4;25307:11;;;;;25277:41;25992:362;26035:20;26074:8;26101:6;26126;26151:9;26179:15;26213:8;26240;26267:11;26297:8;26324:15;25992:24;:362::i;:::-;25974:588;;;26546:4;26539:11;;;;;25974:588;-1:-1:-1;26579:4:0;;24374:2217;-1:-1:-1;;;;;;;;;;;;24374:2217:0:o;11105:229::-;-1:-1:-1;;;;;11179:22:0;;11171:73;;;;-1:-1:-1;;;11171:73:0;;;;;;;;;11281:6;;;11260:38;;-1:-1:-1;;;;;11260:38:0;;;;11281:6;;;11260:38;;;11309:6;:17;;-1:-1:-1;;;;;;11309:17:0;-1:-1:-1;;;;;11309:17:0;;;;;;;;;;11105:229::o;20815:1973::-;21165:4;21182:22;21207:277;21239:20;21274:8;21297:6;21318;21339:9;21363:15;21393:8;21416;21439:11;21465:8;21207:17;:277::i;:::-;21501:25;;;;:9;:25;;;;;;21182:302;;-1:-1:-1;21501:25:0;;21497:42;;;21535:4;21528:11;;;;;21497:42;21556:21;;;;:5;:21;;;;;;21578:12;:10;:12::i;:::-;-1:-1:-1;;;;;21556:35:0;;;;;;;;;;;;-1:-1:-1;21556:35:0;;;;21552:52;;;21600:4;21593:11;;;;;21552:52;21617:21;;;;:5;:21;;;;;21655:4;;21639:12;:10;:12::i;:::-;-1:-1:-1;;;;;21617:35:0;;;;;;;;;;;;-1:-1:-1;21617:35:0;:42;;-1:-1:-1;;21617:42:0;;;;;;;;;;21920:15;21767:14;21740:12;:10;:12::i;:::-;-1:-1:-1;;;;;21720:321:0;;21796:20;21831:8;21854:6;21875;21896:9;21950:8;21973;21996:11;22022:8;21720:321;;;;;;;;;;;;;;;;;;;;;;;22054:24;22081:35;22101:14;22081:19;:35::i;:::-;22054:62;;22151:8;;22131:16;:28;;:74;;;;-1:-1:-1;22200:1:0;22183:14;;:18;22204:1;22183:22;22163:16;:42;;22131:74;22127:654;;;22250:4;22222:9;:25;22232:14;22222:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22269:19;22291:6;;;;;;;;;-1:-1:-1;;;;;22291:6:0;-1:-1:-1;;;;;22291:23:0;;22333:20;22372:8;22399:6;22424;22449:9;22477:15;22511:8;22538;22565:11;22595:8;22291:327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22291:327:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22291:327:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22291:327:0;;;;;;;;;22269:349;;22641:14;22633:66;;;;-1:-1:-1;;;22633:66:0;;;;;;;;;22719:24;;22728:14;;22719:24;;;;;22765:4;22758:11;;;;;;;22127:654;20815:1973;;;;;;;;;;;;;;:::o;26599:2679::-;27004:4;27021:22;27046:277;27078:20;27113:8;27136:6;27157;27178:9;27202:15;27232:8;27255;27278:11;27304:8;27046:17;:277::i;:::-;27338:25;;;;:9;:25;;;;;;27021:302;;-1:-1:-1;27338:25:0;;27334:42;;;27372:4;27365:11;;;;;27334:42;27427:21;;;;:5;:21;;;;;27465:4;;27449:12;:10;:12::i;:::-;-1:-1:-1;;;;;27427:35:0;;;;;;;;;;;;-1:-1:-1;27427:35:0;:42;;-1:-1:-1;;27427:42:0;;;;;;;;;;-1:-1:-1;27532:14:0;27525:36;27548:12;:10;:12::i;:::-;27525:36;;;;;;;;;;;;;;;27579:9;27574:1104;27594:15;:22;27590:1;:26;27574:1104;;;27697:15;27667;27683:1;27667:18;;;;;;;;;;;;;;:27;;;:45;27641:142;;;;-1:-1:-1;;;27641:142:0;;;;;;;;;27800:15;27869:9;27858:20;;27907:12;28090:14;28131:7;28173:4;28205:15;28221:1;28205:18;;;;;;;;;;;;;;:27;;;28047:208;;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;28047:208:0;;;;27950:324;;49:4:-1;27950:324:0;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27950:324:0;;;27922:367;;;;;;27907:382;;28304:14;28321:49;28335:4;28341:15;28357:1;28341:18;;;;;;;;;;;;;;:28;;;28321:13;:49::i;:::-;-1:-1:-1;;;;;28395:16:0;;;;;;:8;:16;;;;;;28304:66;;-1:-1:-1;28395:16:0;;28387:63;;;;-1:-1:-1;;;28387:63:0;;;;;;;;;28470:21;;;;:5;:21;;;;;;;;-1:-1:-1;;;;;28470:29:0;;;;;;;;;;;;28465:202;;28520:21;;;;:5;:21;;;;;;;;-1:-1:-1;;;;;28520:29:0;;;;;;;;;;;:36;;-1:-1:-1;;28520:36:0;28552:4;28520:36;;;;;;28621:30;;28575:22;;;28526:14;;28621:30;;;;28542:6;;28621:30;;;;;;;;;;28465:202;-1:-1:-1;;;27623:1:0;27618:6;27574:1104;;;;28733:8;;28712:17;:29;;:76;;;;-1:-1:-1;28783:1:0;28766:14;;:18;28787:1;28766:22;28745:17;:43;;28712:76;28690:148;;;;-1:-1:-1;;;28690:148:0;;;;;;;;;28851:25;;;;:9;:25;;;;;:32;;-1:-1:-1;;28851:32:0;28879:4;28851:32;;;28896:310;28861:14;28961:20;28996:8;29019:6;29040;29061:9;29085:15;29115:8;29138;29161:11;29187:8;28896:21;:310::i;:::-;29222:24;;29231:14;;29222:24;;;;;-1:-1:-1;29266:4:0;;26599:2679;-1:-1:-1;;;;;;;;;;;;;26599:2679:0:o;12019:1930::-;12097:7;12160:9;:16;12180:2;12160:22;12156:74;;-1:-1:-1;12215:1:0;12199:19;;12156:74;12591:4;12576:20;;12570:27;12637:4;12622:20;;12616:27;12691:4;12676:20;;12670:27;12299:9;12662:36;13621:66;13608:79;;13604:129;;;13719:1;13704:17;;;;;;;13604:129;13749:1;:7;;13754:2;13749:7;;:18;;;;;13760:1;:7;;13765:2;13760:7;;13749:18;13745:68;;;13799:1;13784:17;;;;;;;13745:68;13917:24;13927:4;13933:1;13936;13939;13917:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13917:24:0;;;;;;;;13910:31;;;;;12019:1930;;;;;:::o;29286:1114::-;29878:15;29725:14;29698:12;:10;:12::i;:::-;-1:-1:-1;;;;;29678:321:0;;29754:20;29789:8;29812:6;29833;29854:9;29908:8;29931;29954:11;29980:8;29678:321;;;;;;;;;;;;;;;;;;;;;;;30032:6;;:283;;-1:-1:-1;;;30032:283:0;;30010:19;;-1:-1:-1;;;;;30032:6:0;;:23;;:283;;30070:20;;30105:8;;30128:6;;30149;;30170:9;;30194:15;;30224:8;;30247;;30270:11;;30296:8;;30032:283;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30032:283:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30032:283:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30032:283:0;;;;;;;;;30010:305;;30334:14;30326:66;;;;-1:-1:-1;;;30326:66:0;;;;;;;;;29286:1114;;;;;;;;;;;;:::o;14487:21589::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;160:352;;;290:3;283:4;275:6;271:17;267:27;257:2;;308:1;305;298:12;257:2;-1:-1;328:20;;-1:-1;;;;;357:30;;354:2;;;400:1;397;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;477:4;469:6;465:17;455:8;451:32;448:41;445:2;;;502:1;499;492:12;445:2;250:262;;;;;;562:756;;705:3;698:4;690:6;686:17;682:27;672:2;;723:1;720;713:12;672:2;760:6;747:20;782:106;797:90;880:6;797:90;;;782:106;;;916:21;;;960:4;948:17;;;;773:115;;-1:-1;973:14;;948:17;1068:1;1053:259;1078:6;1075:1;1072:13;1053:259;;;1161:3;1148:17;1140:6;1136:30;1185:63;1244:3;1232:10;1185:63;;;1173:76;;-1:-1;1272:4;1263:14;;;;1291;;;;;1100:1;1093:9;1053:259;;;1057:14;665:653;;;;;;;;1326:128;1401:13;;1419:30;1401:13;1419:30;;1461:130;1528:20;;1553:33;1528:20;1553:33;;1599:432;;1696:3;1689:4;1681:6;1677:17;1673:27;1663:2;;1714:1;1711;1704:12;1663:2;1751:6;1738:20;1773:60;1788:44;1825:6;1788:44;;1773:60;1764:69;;1853:6;1846:5;1839:21;1889:4;1881:6;1877:17;1922:4;1915:5;1911:16;1957:3;1948:6;1943:3;1939:16;1936:25;1933:2;;;1974:1;1971;1964:12;1933:2;1984:41;2018:6;2013:3;2008;1984:41;;;1656:375;;;;;;;;2503:337;;;2618:3;2611:4;2603:6;2599:17;2595:27;2585:2;;2636:1;2633;2626:12;2585:2;-1:-1;2656:20;;-1:-1;;;;;2685:30;;2682:2;;;2728:1;2725;2718:12;2682:2;2762:4;2754:6;2750:17;2738:29;;2813:3;2805:4;2797:6;2793:17;2783:8;2779:32;2776:41;2773:2;;;2830:1;2827;2820:12;3337:568;;3452:4;3440:9;3435:3;3431:19;3427:30;3424:2;;;3470:1;3467;3460:12;3424:2;3488:20;3503:4;3488:20;;;3479:29;-1:-1;3563:31;;-1:-1;;;;;3603:30;;3600:2;;;3646:1;3643;3636:12;3600:2;3681:54;3731:3;3722:6;3711:9;3707:22;3681:54;;;3656:80;;-1:-1;3801:2;3834:49;3879:3;3855:22;;;3834:49;;;3827:4;3820:5;3816:16;3809:75;3757:138;3418:487;;;;;4049:128;4115:20;;4140:32;4115:20;4140:32;;4184:126;4249:20;;4274:31;4249:20;4274:31;;4317:241;;4421:2;4409:9;4400:7;4396:23;4392:32;4389:2;;;4437:1;4434;4427:12;4389:2;4472:1;4489:53;4534:7;4514:9;4489:53;;;4479:63;4383:175;-1:-1;;;;4383:175;4565:1367;;;;;;;;;;;4822:3;4810:9;4801:7;4797:23;4793:33;4790:2;;;4839:1;4836;4829:12;4790:2;4874:1;4891:53;4936:7;4916:9;4891:53;;;4881:63;;4853:97;4981:2;4999:53;5044:7;5035:6;5024:9;5020:22;4999:53;;;4989:63;;4960:98;5089:2;5107:53;5152:7;5143:6;5132:9;5128:22;5107:53;;;5097:63;;5068:98;5225:2;5214:9;5210:18;5197:32;-1:-1;;;;;5241:6;5238:30;5235:2;;;5281:1;5278;5271:12;5235:2;5309:65;5366:7;5357:6;5346:9;5342:22;5309:65;;;5299:75;;;;5176:204;5411:3;5430:53;5475:7;5466:6;5455:9;5451:22;5430:53;;;5420:63;;5390:99;5520:3;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;;;5529:63;;5499:99;5629:3;5648:52;5692:7;5683:6;5672:9;5668:22;5648:52;;;5638:62;;5608:98;5737:3;5756:51;5799:7;5790:6;5779:9;5775:22;5756:51;;;5746:61;;5716:97;5844:3;5863:53;5908:7;5899:6;5888:9;5884:22;5863:53;;;5853:63;;5823:99;4784:1148;;;;;;;;;;;;;;5939:1347;;;;;;;;;;6186:3;6174:9;6165:7;6161:23;6157:33;6154:2;;;6203:1;6200;6193:12;6154:2;6238:1;6255:53;6300:7;6280:9;6255:53;;;6245:63;;6217:97;6345:2;6363:53;6408:7;6399:6;6388:9;6384:22;6363:53;;;6353:63;;6324:98;6453:2;6471:53;6516:7;6507:6;6496:9;6492:22;6471:53;;;6461:63;;6432:98;6589:2;6578:9;6574:18;6561:32;-1:-1;;;;;6605:6;6602:30;6599:2;;;6645:1;6642;6635:12;6599:2;6665:63;6720:7;6711:6;6700:9;6696:22;6665:63;;;6655:73;;6540:194;6765:3;6784:53;6829:7;6820:6;6809:9;6805:22;6784:53;;;6774:63;;6744:99;6874:3;6893:53;6938:7;6929:6;6918:9;6914:22;6893:53;;;6883:63;;6853:99;6983:3;7002:52;7046:7;7037:6;7026:9;7022:22;7002:52;;;6992:62;;6962:98;7091:3;7110:51;7153:7;7144:6;7133:9;7129:22;7110:51;;;7100:61;;7070:97;7198:3;7217:53;7262:7;7253:6;7242:9;7238:22;7217:53;;;7207:63;;7177:99;6148:1138;;;;;;;;;;;;7293:1661;;;;;;;;;;;7608:3;7596:9;7587:7;7583:23;7579:33;7576:2;;;7625:1;7622;7615:12;7576:2;7660:1;7677:53;7722:7;7702:9;7677:53;;;7667:63;;7639:97;7767:2;7785:53;7830:7;7821:6;7810:9;7806:22;7785:53;;;7775:63;;7746:98;7875:2;7893:53;7938:7;7929:6;7918:9;7914:22;7893:53;;;7883:63;;7854:98;8011:2;8000:9;7996:18;7983:32;-1:-1;;;;;8027:6;8024:30;8021:2;;;8067:1;8064;8057:12;8021:2;8087:63;8142:7;8133:6;8122:9;8118:22;8087:63;;;8077:73;;7962:194;8187:3;8206:53;8251:7;8242:6;8231:9;8227:22;8206:53;;;8196:63;;8166:99;8296:3;8315:53;8360:7;8351:6;8340:9;8336:22;8315:53;;;8305:63;;8275:99;8405:3;8424:52;8468:7;8459:6;8448:9;8444:22;8424:52;;;8414:62;;8384:98;8513:3;8532:51;8575:7;8566:6;8555:9;8551:22;8532:51;;;8522:61;;8492:97;8620:3;8639:53;8684:7;8675:6;8664:9;8660:22;8639:53;;;8629:63;;8599:99;8757:3;8746:9;8742:19;8729:33;-1:-1;;;;;8774:6;8771:30;8768:2;;;8814:1;8811;8804:12;8768:2;8834:104;8930:7;8921:6;8910:9;8906:22;8834:104;;8961:1577;;;;;;;;;;;9234:3;9222:9;9213:7;9209:23;9205:33;9202:2;;;9251:1;9248;9241:12;9202:2;9286:1;9303:53;9348:7;9328:9;9303:53;;;9293:63;;9265:97;9393:2;9411:53;9456:7;9447:6;9436:9;9432:22;9411:53;;;9401:63;;9372:98;9501:2;9519:53;9564:7;9555:6;9544:9;9540:22;9519:53;;;9509:63;;9480:98;9637:2;9626:9;9622:18;9609:32;-1:-1;;;;;9653:6;9650:30;9647:2;;;9693:1;9690;9683:12;9647:2;9713:63;9768:7;9759:6;9748:9;9744:22;9713:63;;;9703:73;;9588:194;9813:3;9832:53;9877:7;9868:6;9857:9;9853:22;9832:53;;;9822:63;;9792:99;9922:3;9941:53;9986:7;9977:6;9966:9;9962:22;9941:53;;;9931:63;;9901:99;10031:3;10050:52;10094:7;10085:6;10074:9;10070:22;10050:52;;;10040:62;;10010:98;10139:3;10158:51;10201:7;10192:6;10181:9;10177:22;10158:51;;;10148:61;;10118:97;10246:3;10265:53;10310:7;10301:6;10290:9;10286:22;10265:53;;;10255:63;;10225:99;10383:3;10372:9;10368:19;10355:33;-1:-1;;;;;10400:6;10397:30;10394:2;;;10440:1;10437;10430:12;10394:2;10460:62;10514:7;10505:6;10494:9;10490:22;10460:62;;10545:1893;;;;;;;;;;;;10887:3;10875:9;10866:7;10862:23;10858:33;10855:2;;;10904:1;10901;10894:12;10855:2;10939:1;10956:53;11001:7;10981:9;10956:53;;;10946:63;;10918:97;11046:2;11064:53;11109:7;11100:6;11089:9;11085:22;11064:53;;;11054:63;;11025:98;11154:2;11172:53;11217:7;11208:6;11197:9;11193:22;11172:53;;;11162:63;;11133:98;11290:2;11279:9;11275:18;11262:32;-1:-1;;;;;11306:6;11303:30;11300:2;;;11346:1;11343;11336:12;11300:2;11366:63;11421:7;11412:6;11401:9;11397:22;11366:63;;;11356:73;;11241:194;11466:3;11485:53;11530:7;11521:6;11510:9;11506:22;11485:53;;;11475:63;;11445:99;11575:3;11594:53;11639:7;11630:6;11619:9;11615:22;11594:53;;;11584:63;;11554:99;11684:3;11703:52;11747:7;11738:6;11727:9;11723:22;11703:52;;;11693:62;;11663:98;11792:3;11811:51;11854:7;11845:6;11834:9;11830:22;11811:51;;;11801:61;;11771:97;11899:3;11918:53;11963:7;11954:6;11943:9;11939:22;11918:53;;;11908:63;;11878:99;12036:3;12025:9;12021:19;12008:33;-1:-1;;;;;12053:6;12050:30;12047:2;;;12093:1;12090;12083:12;12047:2;12113:62;12167:7;12158:6;12147:9;12143:22;12113:62;;;12103:72;;11987:194;12240:3;12229:9;12225:19;12212:33;-1:-1;;;;;12257:6;12254:30;12251:2;;;12297:1;12294;12287:12;12251:2;12318:104;12414:7;12405:6;12394:9;12390:22;12318:104;;;12307:115;;12191:237;10849:1589;;;;;;;;;;;;;;;12445:397;;;12584:2;12572:9;12563:7;12559:23;12555:32;12552:2;;;12600:1;12597;12590:12;12552:2;12635:31;;-1:-1;;;;;12675:30;;12672:2;;;12718:1;12715;12708:12;12672:2;12746:80;12818:7;12809:6;12798:9;12794:22;12746:80;;;12736:90;;;;12614:218;12546:296;;;;;;12849:257;;12961:2;12949:9;12940:7;12936:23;12932:32;12929:2;;;12977:1;12974;12967:12;12929:2;13012:1;13029:61;13082:7;13062:9;13029:61;;13113:241;;13217:2;13205:9;13196:7;13192:23;13188:32;13185:2;;;13233:1;13230;13223:12;13185:2;13268:1;13285:53;13330:7;13310:9;13285:53;;13361:366;;;13482:2;13470:9;13461:7;13457:23;13453:32;13450:2;;;13498:1;13495;13488:12;13450:2;13533:1;13550:53;13595:7;13575:9;13550:53;;;13540:63;;13512:97;13640:2;13658:53;13703:7;13694:6;13683:9;13679:22;13658:53;;;13648:63;;13619:98;13444:283;;;;;;13983:173;;14070:46;14112:3;14104:6;14070:46;;;-1:-1;;14145:4;14136:14;;14063:93;14164:142;14255:45;14294:5;14255:45;;;14250:3;14243:58;14237:69;;;14313:103;14386:24;14404:5;14386:24;;14543:152;14644:45;14664:24;14682:5;14664:24;;;14644:45;;14733:690;;14878:54;14926:5;14878:54;;;14945:86;15024:6;15019:3;14945:86;;;14938:93;;15052:56;15102:5;15052:56;;;15128:7;15156:1;15141:260;15166:6;15163:1;15160:13;15141:260;;;15233:6;15227:13;15254:63;15313:3;15298:13;15254:63;;;15247:70;;15334:60;15387:6;15334:60;;;15324:70;-1:-1;;15188:1;15181:9;15141:260;;;-1:-1;15414:3;;14857:566;-1:-1;;;;;14857:566;15462:467;;15608:86;15687:6;15682:3;15608:86;;;15601:93;;-1:-1;;;;;15713:6;15710:78;15707:2;;;15801:1;15798;15791:12;15707:2;15834:4;15826:6;15822:17;15812:27;;15851:43;15887:6;15882:3;15875:5;15851:43;;;-1:-1;;15907:16;;15594:335;15937:104;16014:21;16029:5;16014:21;;16048:113;16131:24;16149:5;16131:24;;16168:152;16269:45;16289:24;16307:5;16289:24;;;16269:45;;16327:343;;16437:38;16469:5;16437:38;;;16487:70;16550:6;16545:3;16487:70;;;16480:77;;16562:52;16607:6;16602:3;16595:4;16588:5;16584:16;16562:52;;;16635:29;16657:6;16635:29;;;16626:39;;;;16417:253;-1:-1;;;16417:253;16677:356;;16805:38;16837:5;16805:38;;;16855:88;16936:6;16931:3;16855:88;;;16848:95;;16948:52;16993:6;16988:3;16981:4;16974:5;16970:16;16948:52;;;17012:16;;;;;16785:248;-1:-1;;16785:248;17040:156;17138:52;17184:5;17138:52;;17925:332;;18085:67;18149:2;18144:3;18085:67;;;18185:34;18165:55;;18248:2;18239:12;;18071:186;-1:-1;;18071:186;18266:331;;18426:67;18490:2;18485:3;18426:67;;;18526:33;18506:54;;18588:2;18579:12;;18412:185;-1:-1;;18412:185;18606:371;;18766:67;18830:2;18825:3;18766:67;;;18866:34;18846:55;;-1:-1;;;18930:2;18921:12;;18914:26;18968:2;18959:12;;18752:225;-1:-1;;18752:225;18986:375;;19146:67;19210:2;19205:3;19146:67;;;19246:34;19226:55;;-1:-1;;;19310:2;19301:12;;19294:30;19352:2;19343:12;;19132:229;-1:-1;;19132:229;19370:377;;19530:67;19594:2;19589:3;19530:67;;;19630:34;19610:55;;-1:-1;;;19694:2;19685:12;;19678:32;19738:2;19729:12;;19516:231;-1:-1;;19516:231;19756:383;;19916:67;19980:2;19975:3;19916:67;;;20016:34;19996:55;;-1:-1;;;20080:2;20071:12;;20064:38;20130:2;20121:12;;19902:237;-1:-1;;19902:237;20148:376;;20308:67;20372:2;20367:3;20308:67;;;20408:34;20388:55;;-1:-1;;;20472:2;20463:12;;20456:31;20515:2;20506:12;;20294:230;-1:-1;;20294:230;20533:370;;20693:67;20757:2;20752:3;20693:67;;;20793:34;20773:55;;-1:-1;;;20857:2;20848:12;;20841:25;20894:2;20885:12;;20679:224;-1:-1;;20679:224;20912:370;;21072:67;21136:2;21131:3;21072:67;;;21172:34;21152:55;;-1:-1;;;21236:2;21227:12;;21220:25;21273:2;21264:12;;21058:224;-1:-1;;21058:224;21291:324;;21451:67;21515:2;21510:3;21451:67;;;21551:26;21531:47;;21606:2;21597:12;;21437:178;-1:-1;;21437:178;21624:395;;21784:67;21848:2;21843:3;21784:67;;;21884:34;21864:55;;21953:28;21948:2;21939:12;;21932:50;22010:2;22001:12;;21770:249;-1:-1;;21770:249;22028:400;;22206:85;22288:2;22283:3;22206:85;;;22324:66;22304:87;;22419:2;22410:12;;22192:236;-1:-1;;22192:236;22437:386;;22597:67;22661:2;22656:3;22597:67;;;22697:34;22677:55;;-1:-1;;;22761:2;22752:12;;22745:41;22814:2;22805:12;;22583:240;-1:-1;;22583:240;22832:372;;22992:67;23056:2;23051:3;22992:67;;;23092:34;23072:55;;-1:-1;;;23156:2;23147:12;;23140:27;23195:2;23186:12;;22978:226;-1:-1;;22978:226;23213:322;;23373:67;23437:2;23432:3;23373:67;;;-1:-1;;;23453:45;;23526:2;23517:12;;23359:176;-1:-1;;23359:176;23544:332;;23704:67;23768:2;23763:3;23704:67;;;23804:34;23784:55;;23867:2;23858:12;;23690:186;-1:-1;;23690:186;23885:331;;24045:67;24109:2;24104:3;24045:67;;;24145:33;24125:54;;24207:2;24198:12;;24031:185;-1:-1;;24031:185;24225:324;;24385:67;24449:2;24444:3;24385:67;;;24485:26;24465:47;;24540:2;24531:12;;24371:178;-1:-1;;24371:178;24558:384;;24718:67;24782:2;24777:3;24718:67;;;24818:34;24798:55;;-1:-1;;;24882:2;24873:12;;24866:39;24933:2;24924:12;;24704:238;-1:-1;;24704:238;24951:377;;25111:67;25175:2;25170:3;25111:67;;;25211:34;25191:55;;-1:-1;;;25275:2;25266:12;;25259:32;25319:2;25310:12;;25097:231;-1:-1;;25097:231;25337:451;;25497:67;25561:2;25556:3;25497:67;;;25597:34;25577:55;;25666:34;25661:2;25652:12;;25645:56;-1:-1;;;25730:2;25721:12;;25714:37;25779:2;25770:12;;25483:305;-1:-1;;25483:305;25797:371;;25957:67;26021:2;26016:3;25957:67;;;26057:34;26037:55;;-1:-1;;;26121:2;26112:12;;26105:26;26159:2;26150:12;;25943:225;-1:-1;;25943:225;26455:110;26536:23;26553:5;26536:23;;26572:148;26671:43;26690:23;26707:5;26690:23;;;26671:43;;26727:107;26806:22;26822:5;26806:22;;26841:144;26938:41;26956:22;26972:5;26956:22;;;26938:41;;26992:1364;;27349:75;27420:3;27411:6;27349:75;;;27446:2;27441:3;27437:12;27430:19;;27460:75;27531:3;27522:6;27460:75;;;27557:2;27552:3;27548:12;27541:19;;27571:75;27642:3;27633:6;27571:75;;;27668:2;27663:3;27659:12;27652:19;;27689:95;27780:3;27771:6;27689:95;;;27682:102;;27795:75;27866:3;27857:6;27795:75;;;27892:2;27887:3;27883:12;27876:19;;27906:75;27977:3;27968:6;27906:75;;;28003:2;27998:3;27994:12;27987:19;;28017:73;28086:3;28077:6;28017:73;;;28112:1;28107:3;28103:11;28096:18;;28125:71;28192:3;28183:6;28125:71;;;28218:1;28213:3;28209:11;28202:18;;28231:75;28302:3;28293:6;28231:75;;;-1:-1;28328:2;28319:12;;27337:1019;-1:-1;;;;;;;;;27337:1019;28363:1521;;28766:75;28837:3;28828:6;28766:75;;;28863:2;28858:3;28854:12;28847:19;;28877:75;28948:3;28939:6;28877:75;;;28974:2;28969:3;28965:12;28958:19;;28988:75;29059:3;29050:6;28988:75;;;29085:2;29080:3;29076:12;29069:19;;29106:95;29197:3;29188:6;29106:95;;;29099:102;;29212:75;29283:3;29274:6;29212:75;;;29309:2;29304:3;29300:12;29293:19;;29323:75;29394:3;29385:6;29323:75;;;29420:2;29415:3;29411:12;29404:19;;29434:73;29503:3;29494:6;29434:73;;;29529:1;29524:3;29520:11;29513:18;;29542:71;29609:3;29600:6;29542:71;;;29635:1;29630:3;29626:11;29619:18;;29648:75;29719:3;29710:6;29648:75;;;29745:2;29740:3;29736:12;29729:19;;29766:93;29855:3;29846:6;29766:93;;;29759:100;28754:1130;-1:-1;;;;;;;;;;;;28754:1130;29891:661;;30094:75;30165:3;30156:6;30094:75;;;30191:2;30186:3;30182:12;30175:19;;30205:75;30276:3;30267:6;30205:75;;;30302:2;30297:3;30293:12;30286:19;;30316:75;30387:3;30378:6;30316:75;;;30413:2;30408:3;30404:12;30397:19;;30427:75;30498:3;30489:6;30427:75;;;-1:-1;30524:2;30515:12;;30082:470;-1:-1;;;;30082:470;30559:529;;30804:148;30948:3;30804:148;;;30797:155;;30970:93;31059:3;31050:6;30970:93;;;30963:100;30785:303;-1:-1;;;30785:303;31095:213;31213:2;31198:18;;31227:71;31202:9;31271:6;31227:71;;31315:229;31441:2;31426:18;;31455:79;31430:9;31507:6;31455:79;;31551:1379;31953:3;31938:19;;31968:71;31942:9;32012:6;31968:71;;;32050:72;32118:2;32107:9;32103:18;32094:6;32050:72;;;32133;32201:2;32190:9;32186:18;32177:6;32133:72;;;32253:9;32247:4;32243:20;32238:2;32227:9;32223:18;32216:48;32278:78;32351:4;32342:6;32278:78;;;32270:86;;32367:73;32435:3;32424:9;32420:19;32411:6;32367:73;;;32451;32519:3;32508:9;32504:19;32495:6;32451:73;;;32535:71;32601:3;32590:9;32586:19;32577:6;32535:71;;;32617:69;32681:3;32670:9;32666:19;32657:6;32617:69;;;32697:73;32765:3;32754:9;32750:19;32741:6;32697:73;;;32819:9;32813:4;32809:20;32803:3;32792:9;32788:19;32781:49;32844:76;32915:4;32906:6;32844:76;;32937:1267;33311:3;33296:19;;33326:71;33300:9;33370:6;33326:71;;;33408:72;33476:2;33465:9;33461:18;33452:6;33408:72;;;33491;33559:2;33548:9;33544:18;33535:6;33491:72;;;33611:9;33605:4;33601:20;33596:2;33585:9;33581:18;33574:48;33636:78;33709:4;33700:6;33636:78;;;33628:86;;33725:73;33793:3;33782:9;33778:19;33769:6;33725:73;;;33809:71;33875:3;33864:9;33860:19;33851:6;33809:71;;;33891:69;33955:3;33944:9;33940:19;33931:6;33891:69;;;33971:73;34039:3;34028:9;34024:19;34015:6;33971:73;;;34093:9;34087:4;34083:20;34077:3;34066:9;34062:19;34055:49;34118:76;34189:4;34180:6;34118:76;;34211:361;34379:2;34393:47;;;34364:18;;34454:108;34364:18;34548:6;34454:108;;34579:381;34757:2;34771:47;;;34742:18;;34832:118;34742:18;34936:6;34928;34832:118;;34967:201;35079:2;35064:18;;35093:65;35068:9;35131:6;35093:65;;35175:213;35293:2;35278:18;;35307:71;35282:9;35351:6;35307:71;;35395:539;35593:3;35578:19;;35608:71;35582:9;35652:6;35608:71;;;35690:68;35754:2;35743:9;35739:18;35730:6;35690:68;;;35769:72;35837:2;35826:9;35822:18;35813:6;35769:72;;;35852;35920:2;35909:9;35905:18;35896:6;35852:72;;;35564:370;;;;;;;;35941:243;36074:2;36059:18;;36088:86;36063:9;36147:6;36088:86;;36191:407;36382:2;36396:47;;;36367:18;;36457:131;36367:18;36457:131;;36605:407;36796:2;36810:47;;;36781:18;;36871:131;36781:18;36871:131;;37019:407;37210:2;37224:47;;;37195:18;;37285:131;37195:18;37285:131;;37433:407;37624:2;37638:47;;;37609:18;;37699:131;37609:18;37699:131;;37847:407;38038:2;38052:47;;;38023:18;;38113:131;38023:18;38113:131;;38261:407;38452:2;38466:47;;;38437:18;;38527:131;38437:18;38527:131;;38675:407;38866:2;38880:47;;;38851:18;;38941:131;38851:18;38941:131;;39089:407;39280:2;39294:47;;;39265:18;;39355:131;39265:18;39355:131;;39503:407;39694:2;39708:47;;;39679:18;;39769:131;39679:18;39769:131;;39917:407;40108:2;40122:47;;;40093:18;;40183:131;40093:18;40183:131;;40331:407;40522:2;40536:47;;;40507:18;;40597:131;40507:18;40597:131;;40745:407;40936:2;40950:47;;;40921:18;;41011:131;40921:18;41011:131;;41159:407;41350:2;41364:47;;;41335:18;;41425:131;41335:18;41425:131;;41573:407;41764:2;41778:47;;;41749:18;;41839:131;41749:18;41839:131;;41987:407;42178:2;42192:47;;;42163:18;;42253:131;42163:18;42253:131;;42401:407;42592:2;42606:47;;;42577:18;;42667:131;42577:18;42667:131;;42815:407;43006:2;43020:47;;;42991:18;;43081:131;42991:18;43081:131;;43229:407;43420:2;43434:47;;;43405:18;;43495:131;43405:18;43495:131;;43643:407;43834:2;43848:47;;;43819:18;;43909:131;43819:18;43909:131;;44057:407;44248:2;44262:47;;;44233:18;;44323:131;44233:18;44323:131;;44471:407;44662:2;44676:47;;;44647:18;;44737:131;44647:18;44737:131;;45105:256;45167:2;45161:9;45193:17;;;-1:-1;;;;;45253:34;;45289:22;;;45250:62;45247:2;;;45325:1;45322;45315:12;45247:2;45341;45334:22;45145:216;;-1:-1;45145:216;45368:330;;-1:-1;;;;;45545:6;45542:30;45539:2;;;45585:1;45582;45575:12;45539:2;-1:-1;45620:4;45608:17;;;45673:15;;45476:222;45705:317;;-1:-1;;;;;45836:6;45833:30;45830:2;;;45876:1;45873;45866:12;45830:2;-1:-1;46007:4;45943;45920:17;;;;-1:-1;;45916:33;45997:15;;45767:255;46686:151;46810:4;46801:14;;46758:79;46844:137;46947:12;;46918:63;47361:178;47479:19;;;47528:4;47519:14;;47472:67;47906:144;48041:3;48019:31;-1:-1;48019:31;48384:91;;48446:24;48464:5;48446:24;;48482:85;48548:13;48541:21;;48524:43;48653:121;-1:-1;;;;;48715:54;;48698:76;48860:88;48932:10;48921:22;;48904:44;48955:81;49026:4;49015:16;;48998:38;49043:129;;49130:37;49161:5;49179:151;;49273:52;49319:5;49273:52;;49711:145;49792:6;49787:3;49782;49769:30;-1:-1;49848:1;49830:16;;49823:27;49762:94;49865:268;49930:1;49937:101;49951:6;49948:1;49945:13;49937:101;;;50018:11;;;50012:18;49999:11;;;49992:39;49973:2;49966:10;49937:101;;;50053:6;50050:1;50047:13;50044:2;;;50118:1;50109:6;50104:3;50100:16;50093:27;50044:2;49914:219;;;;;50141:95;;50205:26;50225:5;50324:89;50388:20;50402:5;50388:20;;50501:89;;50564:21;50579:5;50564:21;;50597:88;;50659:21;50674:5;50659:21;;50692:97;50780:2;50760:14;-1:-1;;50756:28;;50740:49;50797:96;50872:3;50868:15;;50840:53;50901:96;50976:3;50972:15;;50944:53;51005:94;51079:2;51075:14;;51047:52;51107:117;51176:24;51194:5;51176:24;;;51169:5;51166:35;51156:2;;51215:1;51212;51205:12;51231:111;51297:21;51312:5;51297:21;;51349:117;51418:24;51436:5;51418:24;;51597:115;51665:23;51682:5;51665:23;;51719:113;51786:22;51802:5;51786:22;
Swarm Source
bzzr://a2d24e452867ab3d8366e9b3d561081f1a7990db6dd0d92b29b8d7227a024089
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.