Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 37,993 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Nft Own... | 16608009 | 651 days ago | IN | 0 ETH | 0.00053665 | ||||
Buy With Signatu... | 16608001 | 651 days ago | IN | 0 ETH | 0.00600055 | ||||
Buy With Signatu... | 16608001 | 651 days ago | IN | 0 ETH | 0.00879634 | ||||
Buy With Signatu... | 16607995 | 651 days ago | IN | 0 ETH | 0.00612199 | ||||
Buy With Signatu... | 16607959 | 651 days ago | IN | 0 ETH | 0.00624349 | ||||
Buy With Signatu... | 16607918 | 651 days ago | IN | 0 ETH | 0.00697208 | ||||
Buy With Signatu... | 16607908 | 651 days ago | IN | 0 ETH | 0.00673147 | ||||
Buy With Signatu... | 16607845 | 651 days ago | IN | 0 ETH | 0.0088236 | ||||
Buy With Signatu... | 16607835 | 651 days ago | IN | 0 ETH | 0.00927471 | ||||
Buy With Signatu... | 16607797 | 651 days ago | IN | 0 ETH | 0.01238759 | ||||
Buy With Signatu... | 16607796 | 651 days ago | IN | 0 ETH | 0.01118699 | ||||
Buy With Signatu... | 16607792 | 651 days ago | IN | 0 ETH | 0.01206553 | ||||
Buy With Signatu... | 16607786 | 651 days ago | IN | 0 ETH | 0.01272449 | ||||
Buy With Signatu... | 16607784 | 651 days ago | IN | 0 ETH | 0.01373927 | ||||
Buy With Signatu... | 16607760 | 651 days ago | IN | 0 ETH | 0.00793134 | ||||
Buy With Signatu... | 16607748 | 651 days ago | IN | 0 ETH | 0.00821846 | ||||
Buy With Signatu... | 16607734 | 651 days ago | IN | 0 ETH | 0.00674888 | ||||
Buy With Signatu... | 16607725 | 651 days ago | IN | 0 ETH | 0.00583534 | ||||
Buy With Signatu... | 16607719 | 651 days ago | IN | 0 ETH | 0.00636863 | ||||
Buy With Signatu... | 16607719 | 651 days ago | IN | 0 ETH | 0.00632392 | ||||
Buy With Signatu... | 16607670 | 651 days ago | IN | 0 ETH | 0.0061162 | ||||
Buy With Signatu... | 16607661 | 651 days ago | IN | 0 ETH | 0.00692088 | ||||
Buy With Signatu... | 16607658 | 651 days ago | IN | 0 ETH | 0.00710424 | ||||
Buy With Signatu... | 16607647 | 651 days ago | IN | 0 ETH | 0.00633861 | ||||
Buy With Signatu... | 16607579 | 651 days ago | IN | 0 ETH | 0.00644299 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
VaultHandlerV7
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-14 */ // ___________ ___. .__ // \_ _____/ _____\_ |__ | | ____ _____ // | __)_ / \| __ \| | _/ __ \ / \ // | \ Y Y \ \_\ \ |_\ ___/| Y Y \ // /_______ /__|_| /___ /____/\___ >__|_| / // \/ \/ \/ \/ \/ // ____ ____ .__ __ // \ \ / /____ __ __| |_/ |_ // \ Y /\__ \ | | \ |\ __\ // \ / / __ \| | / |_| | // \___/ (____ /____/|____/__| // \/ // ___ ___ .___.__ _________ // / | \_____ ____ __| _/| | ___________ ___ __ | ____ / // / ~ \__ \ / \ / __ | | | _/ __ \_ __ \ \ \/ / / / // \ Y // __ \| | \/ /_/ | | |_\ ___/| | \/ \ / / / // \___|_ /(____ /___| /\____ | |____/\___ >__| \_/ /_/ // \/ \/ \/ \/ \/ // File: browser/ReentrancyGuard.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: browser/IERC20Token.sol pragma solidity ^0.6.11; interface IERC20Token { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: browser/SafeMath.sol pragma solidity ^0.6.11; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: browser/VaultHandler_v4.sol pragma experimental ABIEncoderV2; pragma solidity ^0.6.11; interface IERC721 { function burn(uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function mint( address _to, uint256 _tokenId, string calldata _uri, string calldata _payload) external; function changeName(string calldata name, string calldata symbol) external; function updateTokenUri(uint256 _tokenId,string memory _uri) external; function tokenPayload(uint256 _tokenId) external view returns (string memory); function ownerOf(uint256 _tokenId) external returns (address _owner); function getApproved(uint256 _tokenId) external returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; } interface Ownable { function transferOwnership(address newOwner) external; } interface BasicERC20 { function burn(uint256 value) external; function mint(address account, uint256 amount) external; function decimals() external view returns (uint8); } contract Context { constructor() internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } } contract Bridged is Context { using SafeMath for uint256; using SafeMath for uint8; using SafeMath for uint; address public paymentAddress; mapping(uint => bool) public chainIds; mapping(uint => uint256) public chainBalances; constructor () public { chainIds[1] = true; chainBalances[1] = 200000000000000000; chainIds[137] = true; chainBalances[137] = 200000000000000000; chainIds[80001] = true; chainBalances[80001] = 200000000000000000; chainIds[100] = true; chainBalances[100] = 200000000000000000; chainIds[56] = true; chainBalances[56] = 200000000000000000; chainIds[250] = true; chainBalances[250] = 200000000000000000; } function transferToChain(uint chainId, uint256 amount) public returns (bool) { require(chainIds[chainId], 'Invalid Chain ID'); IERC20Token paymentToken = IERC20Token(paymentAddress); require(paymentToken.allowance(_msgSender(), address(this)) >= amount, 'Handler unable to spend '); require(paymentToken.transferFrom(_msgSender(), address(this), amount), 'Transfer ERROR'); BasicERC20(paymentAddress).burn(amount); chainBalances[chainId] = chainBalances[chainId].add(amount); emit BridgeDeposit(_msgSender(), amount, chainId); return true; } function _transferFromChain(address _to, uint chainId, uint256 amount) internal returns (bool) { require(chainBalances[chainId] >= amount, 'Can not transfer more than deposited'); require(chainIds[chainId], 'Invalid Chain ID'); BasicERC20 paymentToken = BasicERC20(paymentAddress); paymentToken.mint(_to, amount); chainBalances[chainId] = chainBalances[chainId].sub(amount); emit BridgeWithdrawal(_msgSender(), amount, chainId); return true; } event BridgeDeposit(address indexed sender, uint256 indexed amount, uint chainId); event BridgeWithdrawal(address indexed sender, uint256 indexed amount, uint chainId); function _addChainId(uint chainId) internal returns (bool) { chainIds[chainId] = true; return true; } function _removeChainId(uint chainId) internal returns (bool) { chainIds[chainId] = false; return true; } } contract VaultHandlerV7 is ReentrancyGuard, Bridged { using SafeMath for uint256; using SafeMath for uint8; address payable private owner; string public metadataBaseUri; bool public initialized; address public nftAddress; address public recipientAddress; // address public couponAddress; uint256 public price; // uint256 public offerPrice = 0; // bool public payToAcceptOffer = false; // bool public payToMakeOffer = false; bool public shouldBurn = false; struct PreMint { string payload; bytes32 preImage; } struct PreTransfer { string payload; bytes32 preImage; address _from; } struct Offer { uint tokenId; address _from; } // mapping(uint => PreMint) public tokenIdToPreMint; mapping(address => mapping(uint => PreMint)) preMints; mapping(address => mapping(uint => PreMint)) preMintsByIndex; mapping(address => uint) preMintCounts; mapping(uint => PreTransfer) preTransfers; mapping(uint => mapping(uint => PreTransfer)) preTransfersByIndex; mapping(uint => uint) preTransferCounts; mapping(uint => Offer[]) offers; mapping(uint => Offer[]) rejected; mapping(address => mapping(uint => Offer)) offered; mapping(address => bool) public witnesses; mapping(uint256 => bool) usedNonces; // event for EVM logging event OwnerSet(address indexed oldOwner, address indexed newOwner); // modifier to check if caller is owner modifier isOwner() { // If the first argument of 'require' evaluates to 'false', execution terminates and all // changes to the state and to Ether balances are reverted. // This used to consume all gas in old EVM versions, but not anymore. // It is often a good idea to use 'require' to check if functions are called correctly. // As a second argument, you can also provide an explanation about what went wrong. require(msg.sender == owner, "Caller is not owner"); _; } /** * @dev Change owner * @param newOwner address of new owner */ function transferOwnership(address payable newOwner) public isOwner { emit OwnerSet(owner, newOwner); owner = newOwner; } /** * @dev Return owner address * @return address of owner */ function getOwner() external view returns (address) { return owner; } constructor(address _nftAddress, address _paymentAddress, address _recipientAddress, uint256 _price) public { owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor emit OwnerSet(address(0), owner); addWitness(owner); metadataBaseUri = "https://api.emblemvault.io/s:evmetadata/meta/"; nftAddress = _nftAddress; paymentAddress = _paymentAddress; recipientAddress = _recipientAddress; initialized = true; uint decimals = BasicERC20(paymentAddress).decimals(); price = _price * 10 ** decimals; } function claim(uint256 tokenId) public isOwner { IERC721 token = IERC721(nftAddress); token.burn(tokenId); } function buyWithPaymentOnly(address _to, uint256 _tokenId, string calldata image) public payable { IERC20Token paymentToken = IERC20Token(paymentAddress); IERC721 nftToken = IERC721(nftAddress); PreMint memory preMint = preMints[msg.sender][_tokenId]; require(preMint.preImage == sha256(abi.encodePacked(image)), 'Payload does not match'); // Payload should match if (shouldBurn) { require(paymentToken.transferFrom(msg.sender, address(this), price), 'Transfer ERROR'); // Payment sent to recipient BasicERC20(paymentAddress).burn(price); } else { require(paymentToken.transferFrom(msg.sender, address(recipientAddress), price), 'Transfer ERROR'); // Payment sent to recipient } string memory _uri = concat(metadataBaseUri, uintToStr(_tokenId)); nftToken.mint(_to, _tokenId, _uri, preMint.payload); delete preMintsByIndex[msg.sender][preMintCounts[msg.sender]]; delete preMints[msg.sender][_tokenId]; preMintCounts[msg.sender] = preMintCounts[msg.sender].sub(1); } function buyWithSignature(address _to, uint256 _tokenId, string calldata _payload, uint256 _nonce, bytes calldata _signature) public payable { IERC20Token paymentToken = IERC20Token(paymentAddress); IERC721 nftToken = IERC721(nftAddress); if (shouldBurn) { require(paymentToken.transferFrom(msg.sender, address(this), price), 'Transfer ERROR'); // Payment sent to recipient BasicERC20(paymentAddress).burn(price); } else { require(paymentToken.transferFrom(msg.sender, address(recipientAddress), price), 'Transfer ERROR'); // Payment sent to recipient } address signer = getAddressFromSignature(_tokenId, _nonce, _payload, _signature); require(witnesses[signer], 'Not Witnessed'); usedNonces[_nonce] = true; string memory _uri = concat(metadataBaseUri, uintToStr(_tokenId)); nftToken.mint(_to, _tokenId, _uri, _payload); } function addPreMint(address _for, string calldata _payload, uint256 _tokenId, bytes32 preImage) public isOwner { try IERC721(nftAddress).tokenPayload(_tokenId) returns (string memory) { revert('NFT Exists with this ID'); } catch { require(!_duplicatePremint(_for, _tokenId), 'Duplicate PreMint'); preMintCounts[_for] = preMintCounts[_for].add(1); preMints[_for][_tokenId] = PreMint(_payload, preImage); preMintsByIndex[_for][preMintCounts[_for]] = preMints[_for][_tokenId]; } } function _duplicatePremint(address _for, uint256 _tokenId) internal view returns (bool) { string memory data = preMints[_for][_tokenId].payload; bytes32 NULL = keccak256(bytes('')); return keccak256(bytes(data)) != NULL; } function deletePreMint(address _for, uint256 _tokenId) public isOwner { delete preMintsByIndex[_for][preMintCounts[_for]]; preMintCounts[_for] = preMintCounts[_for].sub(1); delete preMints[_for][_tokenId]; } function getPreMint(address _for, uint256 _tokenId) public view returns (PreMint memory) { return preMints[_for][_tokenId]; } function checkPreMintImage(string memory image, bytes32 preImage) public pure returns (bytes32, bytes32, bool) { bytes32 calculated = sha256(abi.encodePacked(image)); bytes32 preBytes = preImage; return (calculated, preBytes, calculated == preBytes); } function getPreMintCount(address _for) public view returns (uint length) { return preMintCounts[_for]; } function getPreMintByIndex(address _for, uint index) public view returns (PreMint memory) { return preMintsByIndex[_for][index]; } function toggleShouldBurn() public { shouldBurn = !shouldBurn; } /* Transfer with code */ function addWitness(address _witness) public isOwner { witnesses[_witness] = true; } function removeWitness(address _witness) public isOwner { witnesses[_witness] = false; } function getAddressFromSignature(uint256 _tokenId, uint256 _nonce, bytes memory signature) public view returns (address) { require(!usedNonces[_nonce]); bytes32 hash = keccak256(abi.encodePacked(concat(uintToStr(_tokenId), uintToStr(_nonce)))); address addressFromSig = recoverSigner(hash, signature); return addressFromSig; } function getAddressFromSignature(uint256 _tokenId, uint256 _nonce, string calldata payload, bytes memory signature) public view returns (address) { require(!usedNonces[_nonce]); string memory combined = concat(uintToStr(_tokenId), payload); bytes32 hash = keccak256(abi.encodePacked(concat(combined, uintToStr(_nonce)))); address addressFromSig = recoverSigner(hash, signature); return addressFromSig; } function getAddressFromSignature(bytes32 _hash, bytes calldata signature) public pure returns (address) { address addressFromSig = recoverSigner(_hash, signature); return addressFromSig; } function getHash(string calldata _payload) public pure returns (bytes32) { bytes32 hash = keccak256(abi.encodePacked(_payload)); return hash; } function transferWithCode(uint256 _tokenId, string calldata code, address _to, uint256 _nonce, bytes memory signature) public payable { require(witnesses[getAddressFromSignature(_tokenId, _nonce, signature)], 'Not Witnessed'); IERC721 nftToken = IERC721(nftAddress); PreTransfer memory preTransfer = preTransfers[_tokenId]; require(preTransfer.preImage == sha256(abi.encodePacked(code)), 'Code does not match'); // Payload should match nftToken.transferFrom(preTransfer._from, _to, _tokenId); delete preTransfers[_tokenId]; delete preTransfersByIndex[_tokenId][preTransferCounts[_tokenId]]; preTransferCounts[_tokenId] = preTransferCounts[_tokenId].sub(1); usedNonces[_nonce] = true; } function addPreTransfer(uint256 _tokenId, bytes32 preImage) public { require(!_duplicatePretransfer(_tokenId), 'Duplicate PreTransfer'); preTransferCounts[_tokenId] = preTransferCounts[_tokenId].add(1); preTransfers[_tokenId] = PreTransfer("payload", preImage, msg.sender); preTransfersByIndex[_tokenId][preTransferCounts[_tokenId]] = preTransfers[_tokenId]; } function _duplicatePretransfer(uint256 _tokenId) internal view returns (bool) { string memory data = preTransfers[_tokenId].payload; bytes32 NULL = keccak256(bytes('')); return keccak256(bytes(data)) != NULL; } function deletePreTransfer(uint256 _tokenId) public { require(preTransfers[_tokenId]._from == msg.sender, 'PreTransfer does not belong to sender'); delete preTransfersByIndex[_tokenId][preTransferCounts[_tokenId]]; preTransferCounts[_tokenId] = preTransferCounts[_tokenId].sub(1); delete preTransfers[_tokenId]; } function getPreTransfer(uint256 _tokenId) public view returns (PreTransfer memory) { return preTransfers[_tokenId]; } function checkPreTransferImage(string memory image, bytes32 preImage) public pure returns (bytes32, bytes32, bool) { bytes32 calculated = sha256(abi.encodePacked(image)); bytes32 preBytes = preImage; return (calculated, preBytes, calculated == preBytes); } function getPreTransferCount(uint256 _tokenId) public view returns (uint length) { return preTransferCounts[_tokenId]; } function getPreTransferByIndex(uint256 _tokenId, uint index) public view returns (PreTransfer memory) { return preTransfersByIndex[_tokenId][index]; } function changeMetadataBaseUri(string calldata _uri) public isOwner { metadataBaseUri = _uri; } function transferPaymentOwnership(address newOwner) external isOwner { Ownable paymentToken = Ownable(paymentAddress); paymentToken.transferOwnership(newOwner); } function transferNftOwnership(address newOwner) external isOwner { Ownable nftToken = Ownable(nftAddress); nftToken.transferOwnership(newOwner); } function mint( address _to, uint256 _tokenId, string calldata _uri, string calldata _payload) external isOwner { IERC721 nftToken = IERC721(nftAddress); nftToken.mint(_to, _tokenId, _uri, _payload); } function changeName(string calldata name, string calldata symbol) external isOwner { IERC721 nftToken = IERC721(nftAddress); nftToken.changeName(name, symbol); } function updateTokenUri(uint256 _tokenId,string memory _uri) external isOwner { IERC721 nftToken = IERC721(nftAddress); nftToken.updateTokenUri(_tokenId, _uri); } function getPaymentDecimals() public view returns (uint8){ BasicERC20 token = BasicERC20(paymentAddress); return token.decimals(); } function changePayment(address payment) public isOwner { paymentAddress = payment; } // function changeCoupon(address coupon) public isOwner { // couponAddress = coupon; // } function changeRecipient(address _recipient) public isOwner { recipientAddress = _recipient; } function changeNft(address token) public isOwner { nftAddress = token; } function changePrice(uint256 _price) public isOwner { uint decimals = BasicERC20(paymentAddress).decimals(); price = _price * 10 ** decimals; } // function changeOfferPrice(uint256 _price) public isOwner { // uint decimals = BasicERC20(couponAddress).decimals(); // offerPrice = _price * 10 ** decimals; // } function addChainId(uint chainId) public isOwner returns (bool) { return (_addChainId(chainId)); } function removeChainId(uint chainId) public isOwner returns (bool) { return (_removeChainId(chainId)); } function transferFromChain(address _to, uint chainId, uint256 amount) public isOwner returns (bool) { return _transferFromChain(_to, chainId, amount); } function concat(string memory a, string memory b) internal pure returns (string memory) { return string(abi.encodePacked(a, b)); } /** * @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 sig bytes signature, the signature is generated using web3.eth.sign(). Inclusive "0x..." */ function recoverSigner(bytes32 hash, bytes memory sig) internal pure returns (address) { require(sig.length == 65, "Require correct length"); bytes32 r; bytes32 s; uint8 v; // Divide the signature in r, s and v variables assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } // Version of signature should be 27 or 28, but 0 and 1 are also possible versions if (v < 27) { v += 27; } require(v == 27 || v == 28, "Signature version not match"); return recoverSigner2(hash, v, r, s); } function recoverSigner2(bytes32 h, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, h)); address addr = ecrecover(prefixedHash, v, r, s); return addr; } /// @notice converts number to string /// @dev source: https://github.com/provable-things/ethereum-api/blob/master/oraclizeAPI_0.5.sol#L1045 /// @param _i integer to convert /// @return _uintAsString function uintToStr(uint _i) internal pure returns (string memory _uintAsString) { uint number = _i; if (number == 0) { return "0"; } uint j = number; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (number != 0) { bstr[k--] = byte(uint8(48 + number % 10)); number /= 10; } return string(bstr); } function stringToBytes32(string memory source) internal pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } } function bytes32ToStr(bytes32 _bytes32) internal pure returns (string memory) { // string memory str = string(_bytes32); // TypeError: Explicit type conversion not allowed from "bytes32" to "string storage pointer" // thus we should fist convert bytes32 to bytes (to dynamically-sized byte array) bytes memory bytesArray = new bytes(32); for (uint256 i; i < 32; i++) { bytesArray[i] = _bytes32[i]; } return string(bytesArray); } function asciiToInteger(bytes32 x) public pure returns (uint256) { uint256 y; for (uint256 i = 0; i < 32; i++) { uint256 c = (uint256(x) >> (i * 8)) & 0xff; if (48 <= c && c <= 57) y += (c - 48) * 10 ** i; else break; } return y; } function toString(address account) public pure returns(string memory) { return toString(abi.encodePacked(account)); } function toString(uint256 value) public pure returns(string memory) { return toString(abi.encodePacked(value)); } function toString(bytes32 value) public pure returns(string memory) { return toString(abi.encodePacked(value)); } function toString(bytes memory data) public pure returns(string memory) { bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(2 + data.length * 2); str[0] = "0"; str[1] = "x"; for (uint i = 0; i < data.length; i++) { str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))]; str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))]; } return string(str); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"BridgeDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"BridgeWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"addChainId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_for","type":"address"},{"internalType":"string","name":"_payload","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"name":"addPreMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"name":"addPreTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_witness","type":"address"}],"name":"addWitness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"x","type":"bytes32"}],"name":"asciiToInteger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"image","type":"string"}],"name":"buyWithPaymentOnly","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_payload","type":"string"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"buyWithSignature","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"changeMetadataBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"changeNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payment","type":"address"}],"name":"changePayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"changeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"image","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"name":"checkPreMintImage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"image","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"name":"checkPreTransferImage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_for","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"deletePreMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"deletePreTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"string","name":"payload","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"getAddressFromSignature","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"getAddressFromSignature","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"getAddressFromSignature","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_payload","type":"string"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaymentDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_for","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getPreMint","outputs":[{"components":[{"internalType":"string","name":"payload","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"internalType":"struct VaultHandlerV7.PreMint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_for","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPreMintByIndex","outputs":[{"components":[{"internalType":"string","name":"payload","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"internalType":"struct VaultHandlerV7.PreMint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_for","type":"address"}],"name":"getPreMintCount","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getPreTransfer","outputs":[{"components":[{"internalType":"string","name":"payload","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"}],"internalType":"struct VaultHandlerV7.PreTransfer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPreTransferByIndex","outputs":[{"components":[{"internalType":"string","name":"payload","type":"string"},{"internalType":"bytes32","name":"preImage","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"}],"internalType":"struct VaultHandlerV7.PreTransfer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getPreTransferCount","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_payload","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipientAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"removeChainId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_witness","type":"address"}],"name":"removeWitness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleShouldBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferNftOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferPaymentOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"code","type":"string"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"transferWithCode","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"updateTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"witnesses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526009805460ff191690553480156200001b57600080fd5b506040516200485e3803806200485e8339810160408190526200003e91620004b7565b600160008181557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805460ff1990811684179091556702c68af0bb1400007fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8190557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548316851790557f0f7c2a22036bfa20acc9ee73aa9ab92bebf1413ecc0991a7c2b4d6178e9838ed8190557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548316851790557fdcb06883458ea50914626defda05e41b08347a7ab71dc9fa1dc89dada3554b9c8190557f7673bcbb3401a7cbae68f81d40eea2cf35afdaf7ecd016ebf3f02857fcc1260a80548316851790557f6b16ef514f22b74729cbea5cc7babfecbdc2309e530ca716643d11fe929eed2e8190557f7235287a5cb1908d23369905908658187d8d258d18d7ad15bcb288795998bcba80548316851790557f22848320af6c4894685e387cf97d56ba798f5dabcd8f3a2db70374776f0f2f9381905560fa83527f2246e3a745c1df3cc2a1c7eecb7d02c255de440492ab220c839a47c0ff0ff61f8054909216909317905560036020527fd1a8b09c64a23b2afda8cd351fe2756c44d7cad4fe3cb981d9b54c00cc07ebbc91909155600480546001600160a01b0319163317908190556040516001600160a01b039190911691907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36004546200028e906001600160a01b0316620003a3565b6040518060600160405280602d815260200162004831602d91398051620002be91600591602090910190620003fd565b5060068054600180546001600160a01b03199081166001600160a01b03888116919091178084556007805490931688831617909255610100600160a81b0319909316610100898516021760ff19169091179092556040805163313ce56760e01b815290516000939092169163313ce56791600480820192602092909190829003018186803b1580156200035057600080fd5b505afa15801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b91906200050b565b60ff16600a0a91909102600855506200056c92505050565b6004546001600160a01b03163314620003d95760405162461bcd60e51b8152600401620003d09062000535565b60405180910390fd5b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200044057805160ff191683800117855562000470565b8280016001018555821562000470579182015b828111156200047057825182559160200191906001019062000453565b506200047e92915062000482565b5090565b5b808211156200047e576000815560010162000483565b80516001600160a01b0381168114620004b157600080fd5b92915050565b60008060008060808587031215620004cd578384fd5b620004d9868662000499565b9350620004ea866020870162000499565b9250620004fb866040870162000499565b6060959095015193969295505050565b6000602082840312156200051d578081fd5b815160ff811681146200052e578182fd5b9392505050565b60208082526013908201527f43616c6c6572206973206e6f74206f776e657200000000000000000000000000604082015260600190565b6142b5806200057c6000396000f3fe6080604052600436106103505760003560e01c80637224bb92116101c6578063bc2bf73e116100f7578063d81fba1611610095578063ee2f13cd1161006f578063ee2f13cd14610962578063f2fde38b14610982578063fad80169146109a2578063fc9a85b1146109b557610350565b8063d81fba16146104ce578063df4a529d1461092f578063e94b77061461094f57610350565b8063d02b1153116100d1578063d02b1153146108ad578063d0569c22146108cd578063d2b64472146108ed578063d31af4841461090f57610350565b8063bc2bf73e14610840578063bd54c89c1461086d578063c5eeb8af1461088d57610350565b806399b2c1c711610164578063a035b1fe1161013e578063a035b1fe146107eb578063a111fbae14610800578063a2b40d1914610820578063b11a19e81461067657610350565b806399b2c1c71461078b5780639d75afc7146107ab5780639eaa5626146107cb57610350565b8063893d20e8116101a0578063893d20e8146107165780638ddc20201461072b57806392c2bcb41461074b578063945cfe1f1461076b57610350565b80637224bb92146106b657806379d33606146106d657806386575e40146106f657610350565b80633b442cdb116102a05780635aff59991161023e5780635e1bd52a116102185780635e1bd52a14610641578063633423be146106615780636900a3ae1461067657806371aad10d1461069657610350565b80635aff5999146105ea5780635b6beeb9146105ff5780635bf8633a1461062c57610350565b806356ca623e1161027a57806356ca623e1461056a578063582f1da21461058a57806359e26be1146105aa5780635aaf27b7146105ca57610350565b80633b442cdb146104fd5780633debbbc01461052a578063528204d01461054a57610350565b806331726da11161030d57806332ca2c00116102e757806332ca2c001461045f57806336864adb1461048c578063379607f5146104ae57806339f6c85e146104ce57610350565b806331726da11461040a57806331b480551461042a578063321c3cf61461043f57610350565b80630d7def9514610355578063158ef93e1461036c57806321d93090146103975780632754902f146103b75780632fb102cf146103ca57806330e6822c146103ea575b600080fd5b34801561036157600080fd5b5061036a6109d5565b005b34801561037857600080fd5b506103816109e9565b60405161038e9190613de4565b60405180910390f35b3480156103a357600080fd5b506103816103b23660046137f2565b6109f2565b61036a6103c5366004613a04565b610a07565b3480156103d657600080fd5b5061036a6103e5366004613684565b610cf7565b3480156103f657600080fd5b5061038161040536600461379e565b610d9c565b34801561041657600080fd5b5061036a610425366004613580565b610ddc565b34801561043657600080fd5b50610381610e6e565b34801561044b57600080fd5b5061038161045a366004613580565b610e77565b34801561046b57600080fd5b5061047f61047a3660046137f2565b610e8c565b60405161038e9190614183565b34801561049857600080fd5b506104a1610f61565b60405161038e9190613e4c565b3480156104ba57600080fd5b5061036a6104c93660046137f2565b610fef565b3480156104da57600080fd5b506104ee6104e93660046139a1565b61104f565b60405161038e93929190613def565b34801561050957600080fd5b5061051d610518366004613b21565b6110d1565b60405161038e9190613cb4565b34801561053657600080fd5b5061036a610545366004613580565b61118e565b34801561055657600080fd5b5061036a6105653660046139e3565b6111ee565b34801561057657600080fd5b506104a1610585366004613580565b611346565b34801561059657600080fd5b506103816105a53660046137f2565b611376565b3480156105b657600080fd5b5061036a6105c5366004613580565b6113ac565b3480156105d657600080fd5b5061036a6105e5366004613580565b6113fa565b3480156105f657600080fd5b5061051d611446565b34801561060b57600080fd5b5061061f61061a36600461389d565b611455565b60405161038e9190613c2e565b34801561063857600080fd5b5061051d61148b565b34801561064d57600080fd5b5061038161065c3660046139e3565b61149f565b34801561066d57600080fd5b5061051d6116f6565b34801561068257600080fd5b506104a16106913660046137f2565b611705565b3480156106a257600080fd5b506104a16106b136600461386b565b61171b565b3480156106c257600080fd5b5061061f6106d13660046137f2565b6118c4565b3480156106e257600080fd5b5061051d6106f1366004613822565b6118d6565b34801561070257600080fd5b5061036a6107113660046138dc565b611922565b34801561072257600080fd5b5061051d6119c1565b34801561073757600080fd5b5061036a610746366004613580565b6119d0565b34801561075757600080fd5b5061036a610766366004613580565b611a22565b34801561077757600080fd5b5061047f6107863660046139e3565b611a6e565b34801561079757600080fd5b5061061f6107a63660046137f2565b611b4a565b3480156107b757600080fd5b5061036a6107c6366004613600565b611ba2565b3480156107d757600080fd5b5061051d6107e6366004613ad4565b611c72565b3480156107f757600080fd5b5061061f611ce3565b34801561080c57600080fd5b5061061f61081b3660046137f2565b611ce9565b34801561082c57600080fd5b5061036a61083b3660046137f2565b611cfb565b34801561084c57600080fd5b5061086061085b366004613600565b611db2565b60405161038e9190614151565b34801561087957600080fd5b5061036a61088836600461389d565b611e83565b34801561089957600080fd5b506103816108a83660046137f2565b611ebe565b3480156108b957600080fd5b5061036a6108c836600461359c565b611ef4565b3480156108d957600080fd5b5061061f6108e8366004613580565b612117565b3480156108f957600080fd5b50610902612132565b60405161038e91906141e3565b34801561091b57600080fd5b5061036a61092a366004613a90565b6121b8565b34801561093b57600080fd5b5061036a61094a3660046137f2565b612251565b61036a61095d36600461370c565b61232c565b34801561096e57600080fd5b5061036a61097d366004613580565b6126ae565b34801561098e57600080fd5b5061036a61099d366004613580565b6126f9565b61036a6109b036600461362b565b61277f565b3480156109c157600080fd5b506108606109d0366004613600565b612c3e565b6009805460ff19811660ff90911615179055565b60065460ff1681565b60026020526000908152604090205460ff1681565b60136000610a16888585611c72565b6001600160a01b0316815260208101919091526040016000205460ff16610a585760405162461bcd60e51b8152600401610a4f90614021565b60405180910390fd5b60065461010090046001600160a01b0316610a716132f2565b6000888152600d60209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015610b0f5780601f10610ae457610100808354040283529160200191610b0f565b820191906000526020600020905b815481529060010190602001808311610af257829003601f168201915b505050918352505060018201546020808301919091526002928301546001600160a01b031660409283015290519293509091610b4f918a918a9101613c75565b60408051601f1981840301815290829052610b6991613c37565b602060405180830381855afa158015610b86573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610ba9919061380a565b816020015114610bcb5760405162461bcd60e51b8152600401610a4f90614070565b60408082015190516323b872dd60e01b81526001600160a01b038416916323b872dd91610bff919089908d90600401613ce2565b600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050506000898152600d602052604081209150610c4a8282613312565b50600060018201819055600290910180546001600160a01b0319169055888152600e60209081526040808320600f8352818420548452909152812090610c908282613312565b5060006001828101829055600290920180546001600160a01b0319169055898152600f6020526040902054610cc491612cc9565b6000988952600f60209081526040808b20929092559489526014909452505050909320805460ff19166001179055505050565b6004546001600160a01b03163314610d215760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051632fb102cf60e01b81526101009091046001600160a01b0316908190632fb102cf90610d61908a908a908a908a908a908a90600401613d1f565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b5050505050505050505050565b6004546000906001600160a01b03163314610dc95760405162461bcd60e51b8152600401610a4f90613ee8565b610dd4848484612d12565b949350505050565b6004546001600160a01b03163314610e065760405162461bcd60e51b8152600401610a4f90613ee8565b60015460405163f2fde38b60e01b81526001600160a01b0390911690819063f2fde38b90610e38908590600401613cb4565b600060405180830381600087803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b505050505050565b60095460ff1681565b60136020526000908152604090205460ff1681565b610e946132f2565b6000828152600d60209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b5050509183525050600182015460208201526002909101546001600160a01b031660409091015290505b919050565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fe75780601f10610fbc57610100808354040283529160200191610fe7565b820191906000526020600020905b815481529060010190602001808311610fca57829003601f168201915b505050505081565b6004546001600160a01b031633146110195760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051630852cd8d60e31b81526101009091046001600160a01b03169081906342966c6890610e38908590600401613c2e565b6000806000806002866040516020016110689190613c37565b60408051601f198184030181529082905261108291613c37565b602060405180830381855afa15801561109f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110c2919061380a565b96949550505083851492915050565b60008481526014602052604081205460ff16156110ed57600080fd5b60606111376110fb88612e50565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2a92505050565b9050600061114d8261114889612e50565b612f2a565b60405160200161115d9190613c37565b60405160208183030381529060405280519060200120905060006111818286612f56565b9998505050505050505050565b6004546001600160a01b031633146111b85760405162461bcd60e51b8152600401610a4f90613ee8565b60065460405163f2fde38b60e01b81526101009091046001600160a01b031690819063f2fde38b90610e38908590600401613cb4565b6111f782612fd5565b156112145760405162461bcd60e51b8152600401610a4f90613e89565b6000828152600f602052604090205461122e9060016130af565b6000838152600f6020908152604080832093909355825160a081018452600760608201908152661c185e5b1bd85960ca1b608083015281528082018590523381850152858352600d82529290912082518051919261129192849290910190613359565b50602082810151600180840191909155604093840151600293840180546001600160a01b039092166001600160a01b03199092169190911790556000868152600d8352848120600e8452858220600f8552868320548352909352939093208154919390926113129284928692908216156101000260001901909116046133d7565b5060018281015490820155600291820154910180546001600160a01b0319166001600160a01b039092169190911790555050565b60606113708260405160200161135c9190613c11565b60405160208183030381529060405261171b565b92915050565b6004546000906001600160a01b031633146113a35760405162461bcd60e51b8152600401610a4f90613ee8565b611370826130d4565b6004546001600160a01b031633146113d65760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6004546001600160a01b031633146114245760405162461bcd60e51b8152600401610a4f90613ee8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b600080838360405160200161146b929190613c75565b60408051808303601f190181529190528051602090910120949350505050565b60065461010090046001600160a01b031681565b60008281526002602052604081205460ff166114cd5760405162461bcd60e51b8152600401610a4f90613e5f565b6001546001600160a01b0316828163dd62ed3e6114e86130f3565b306040518363ffffffff1660e01b8152600401611506929190613cc8565b60206040518083038186803b15801561151e57600080fd5b505afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611556919061380a565b10156115745760405162461bcd60e51b8152600401610a4f90613fea565b806001600160a01b03166323b872dd61158b6130f3565b30866040518463ffffffff1660e01b81526004016115ab93929190613ce2565b602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd91906137d2565b6116195760405162461bcd60e51b8152600401610a4f90614048565b600154604051630852cd8d60e31b81526001600160a01b03909116906342966c6890611649908690600401613c2e565b600060405180830381600087803b15801561166357600080fd5b505af1158015611677573d6000803e3d6000fd5b5050506000858152600360205260409020546116949150846130af565b600085815260036020526040902055826116ac6130f3565b6001600160a01b03167fed2432d91de9329ae454049df81fd5d6b856c4470096ca37a29c1fe111f57f0c866040516116e49190613c2e565b60405180910390a35060019392505050565b6001546001600160a01b031681565b60606113708260405160200161135c9190613c2e565b6060806040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b8152509050606083516002026002016001600160401b038111801561176857600080fd5b506040519080825280601f01601f191660200182016040528015611793576020820181803683370190505b509050600360fc1b816000815181106117a857fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106117d157fe5b60200101906001600160f81b031916908160001a90535060005b84518110156118bc5782600486838151811061180357fe5b016020015182516001600160f81b031990911690911c60f81c90811061182557fe5b602001015160f81c60f81b82826002026002018151811061184257fe5b60200101906001600160f81b031916908160001a9053508285828151811061186657fe5b602091010151815160f89190911c600f1690811061188057fe5b602001015160f81c60f81b82826002026003018151811061189d57fe5b60200101906001600160f81b031916908160001a9053506001016117eb565b509392505050565b60036020526000908152604090205481565b6000806119198585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5692505050565b95945050505050565b6004546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610a4f90613ee8565b6006546040516302195d7960e61b81526101009091046001600160a01b03169081906386575e4090611988908890889088908890600401613e25565b600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505050505050505050565b6004546001600160a01b031690565b6004546001600160a01b031633146119fa5760405162461bcd60e51b8152600401610a4f90613ee8565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6004546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610a4f90613ee8565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611a766132f2565b6000838152600e602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050509183525050600182015460208201526002909101546001600160a01b03166040909101529392505050565b60008060005b6020811015611b9b5760ff6008820285901c1660308110801590611b75575060398111155b15611b8c5781600a0a603082030283019250611b92565b50611b9b565b50600101611b50565b5092915050565b6004546001600160a01b03163314611bcc5760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b0382166000908152600b60209081526040808320600c8352818420548452909152812090611c018282613312565b50600060019182018190556001600160a01b0384168152600c6020526040902054611c2b91612cc9565b6001600160a01b0383166000908152600c6020908152604080832093909355600a8152828220848352905290812090611c648282613312565b600182016000905550505050565b60008281526014602052604081205460ff1615611c8e57600080fd5b6000611ca5611c9c86612e50565b61114886612e50565b604051602001611cb59190613c37565b6040516020818303038152906040528051906020012090506000611cd98285612f56565b9695505050505050565b60085481565b6000908152600f602052604090205490565b6004546001600160a01b03163314611d255760405162461bcd60e51b8152600401610a4f90613ee8565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da29190613b9a565b60ff16600a0a9190910260085550565b611dba61344c565b6001600160a01b0383166000908152600b602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f8101849004909302810160609081018552938101838152909391928492849190840182828015611e685780601f10611e3d57610100808354040283529160200191611e68565b820191906000526020600020905b815481529060010190602001808311611e4b57829003601f168201915b50505050508152602001600182015481525050905092915050565b6004546001600160a01b03163314611ead5760405162461bcd60e51b8152600401610a4f90613ee8565b611eb960058383613464565b505050565b6004546000906001600160a01b03163314611eeb5760405162461bcd60e51b8152600401610a4f90613ee8565b611370826130f7565b6004546001600160a01b03163314611f1e5760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051634d6ca91960e11b81526101009091046001600160a01b031690639ad9523290611f52908590600401613c2e565b60006040518083038186803b158015611f6a57600080fd5b505afa925050508015611f9f57506040513d6000823e601f3d908101601f19168201604052611f9c9190810190613938565b60015b6120f857611fad8583613112565b15611fca5760405162461bcd60e51b8152600401610a4f906140e2565b6001600160a01b0385166000908152600c6020526040902054611fee9060016130af565b6001600160a01b0386166000908152600c6020908152604091829020929092558051601f860183900490920282016060908101825290820185815282918790879081908501838280828437600092018290525093855250505060209182018490526001600160a01b0388168152600a825260408082208683528352902082518051919261208092849290910190613359565b506020918201516001918201556001600160a01b0387166000818152600a845260408082208783528552808220928252600b8552808220600c865281832054835290945292909220825490916120e99183918591600291811615610100026000190116046133d7565b50600191820154910155612110565b60405162461bcd60e51b8152600401610a4f90613fb3565b5050505050565b6001600160a01b03166000908152600c602052604090205490565b6001546040805163313ce56760e01b815290516000926001600160a01b031691829163313ce56791600480820192602092909190829003018186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b29190613b9a565b91505090565b6004546001600160a01b031633146121e25760405162461bcd60e51b8152600401610a4f90613ee8565b6006546040516334c6bd2160e21b81526101009091046001600160a01b031690819063d31af4849061221a90869086906004016141ca565b600060405180830381600087803b15801561223457600080fd5b505af1158015612248573d6000803e3d6000fd5b50505050505050565b6000818152600d60205260409020600201546001600160a01b0316331461228a5760405162461bcd60e51b8152600401610a4f9061409d565b6000818152600e60209081526040808320600f83528184205484529091528120906122b58282613312565b5060006001828101829055600290920180546001600160a01b0319169055828152600f60205260409020546122e991612cc9565b6000828152600f6020908152604080832093909355600d9052908120906123108282613312565b506000600182015560020180546001600160a01b031916905550565b6001546006546009546001600160a01b03928316926101009092049091169060ff161561245b576008546040516323b872dd60e01b81526001600160a01b038416916323b872dd91612385913391309190600401613ce2565b602060405180830381600087803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d791906137d2565b6123f35760405162461bcd60e51b8152600401610a4f90614048565b600154600854604051630852cd8d60e31b81526001600160a01b03909216916342966c689161242491600401613c2e565b600060405180830381600087803b15801561243e57600080fd5b505af1158015612452573d6000803e3d6000fd5b50505050612500565b6007546008546040516323b872dd60e01b81526001600160a01b03858116936323b872dd9361249293339390921691600401613ce2565b602060405180830381600087803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e491906137d2565b6125005760405162461bcd60e51b8152600401610a4f90614048565b600061254589878a8a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110d192505050565b6001600160a01b03811660009081526013602052604090205490915060ff166125805760405162461bcd60e51b8152600401610a4f90614021565b600086815260146020908152604091829020805460ff19166001908117909155600580548451601f6002600019958416156101000295909501909216939093049081018490048402830184019094528382526060936126389383018282801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050506111488c612e50565b604051632fb102cf60e01b81529091506001600160a01b03841690632fb102cf9061266f908e908e9086908f908f90600401613d5a565b600060405180830381600087803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b505050505050505050505050505050565b6004546001600160a01b031633146126d85760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6004546001600160a01b031633146127235760405162461bcd60e51b8152600401610a4f90613ee8565b6004546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546006546001600160a01b0391821691610100909104166127a061344c565b336000908152600a602090815260408083208984528252918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156128455780601f1061281a57610100808354040283529160200191612845565b820191906000526020600020905b81548152906001019060200180831161282857829003601f168201915b5050505050815260200160018201548152505090506002858560405160200161286f929190613c75565b60408051601f198184030181529082905261288991613c37565b602060405180830381855afa1580156128a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906128c9919061380a565b8160200151146128eb5760405162461bcd60e51b8152600401610a4f90613f83565b60095460ff16156129fe576008546040516323b872dd60e01b81526001600160a01b038516916323b872dd91612928913391309190600401613ce2565b602060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a91906137d2565b6129965760405162461bcd60e51b8152600401610a4f90614048565b600154600854604051630852cd8d60e31b81526001600160a01b03909216916342966c68916129c791600401613c2e565b600060405180830381600087803b1580156129e157600080fd5b505af11580156129f5573d6000803e3d6000fd5b50505050612aa3565b6007546008546040516323b872dd60e01b81526001600160a01b03868116936323b872dd93612a3593339390921691600401613ce2565b602060405180830381600087803b158015612a4f57600080fd5b505af1158015612a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8791906137d2565b612aa35760405162461bcd60e51b8152600401610a4f90614048565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152606093612b409391929091830182828015612b325780601f10612b0757610100808354040283529160200191612b32565b820191906000526020600020905b815481529060010190602001808311612b1557829003601f168201915b505050505061114889612e50565b8251604051632fb102cf60e01b81529192506001600160a01b03851691632fb102cf91612b76918c918c91879190600401613da0565b600060405180830381600087803b158015612b9057600080fd5b505af1158015612ba4573d6000803e3d6000fd5b5050336000908152600b60209081526040808320600c8352818420548452909152812092509050612bd58282613312565b506000600191909101819055338152600a602090815260408083208a8452909152812090612c038282613312565b5060006001918201819055338152600c6020526040902054612c2491612cc9565b336000908152600c60205260409020555050505050505050565b612c4661344c565b6001600160a01b0383166000908152600a602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f8101849004909302810160609081018552938101838152909391928492849190840182828015611e685780601f10611e3d57610100808354040283529160200191611e68565b6000612d0b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ff565b9392505050565b600082815260036020526040812054821115612d405760405162461bcd60e51b8152600401610a4f9061410d565b60008381526002602052604090205460ff16612d6e5760405162461bcd60e51b8152600401610a4f90613e5f565b6001546040516340c10f1960e01b81526001600160a01b039091169081906340c10f1990612da29088908790600401613d06565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050600085815260036020526040902054612ded915084612cc9565b60008581526003602052604090205582612e056130f3565b6001600160a01b03167fdfb36617677d4721feefea07d11b2d1aca3d4ea49facf2bae87fbc8db4ecc91386604051612e3d9190613c2e565b60405180910390a3506001949350505050565b60608180612e775750506040805180820190915260018152600360fc1b6020820152610f5c565b8060005b8115612e8f57600101600a82049150612e7b565b6060816001600160401b0381118015612ea757600080fd5b506040519080825280601f01601f191660200182016040528015612ed2576020820181803683370190505b50905060001982015b8415612f2057600a850660300160f81b82828060019003935081518110612efe57fe5b60200101906001600160f81b031916908160001a905350600a85049450612edb565b5095945050505050565b60608282604051602001612f3f929190613c85565b604051602081830303815290604052905092915050565b60008151604114612f795760405162461bcd60e51b8152600401610a4f90613eb8565b60208201516040830151606084015160001a601b811015612f9857601b015b8060ff16601b1480612fad57508060ff16601c145b612fc95760405162461bcd60e51b8152600401610a4f90613f4c565b611cd98682858561322b565b6000818152600d6020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060938301828280156130685780601f1061303d57610100808354040283529160200191613068565b820191906000526020600020905b81548152906001019060200180831161304b57829003601f168201915b50506040805160208082019092526000905284519401939093207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47014159695505050505050565b600082820183811015612d0b5760405162461bcd60e51b8152600401610a4f90613f15565b6000908152600260205260409020805460ff1916600190811790915590565b3390565b6000908152600260205260409020805460ff19169055600190565b6001600160a01b0382166000908152600a60209081526040808320848452825280832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060938301828280156131b75780601f1061318c576101008083540402835291602001916131b7565b820191906000526020600020905b81548152906001019060200180831161319a57829003601f168201915b50506040805160208082019092526000905284519401939093207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701415979650505050505050565b600081848411156132235760405162461bcd60e51b8152600401610a4f9190613e4c565b505050900390565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818760405160200161327c929190613c53565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516132b99493929190613e07565b6020604051602081039080840390855afa1580156132db573d6000803e3d6000fd5b5050604051601f1901519998505050505050505050565b604080516060808201835281526000602082018190529181019190915290565b50805460018160011615610100020316600290046000825580601f106133385750613356565b601f01602090049060005260206000209081019061335691906134d2565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061339a57805160ff19168380011785556133c7565b828001600101855582156133c7579182015b828111156133c75782518255916020019190600101906133ac565b506133d39291506134d2565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061341057805485556133c7565b828001600101855582156133c757600052602060002091601f016020900482015b828111156133c7578254825591600101919060010190613431565b60408051808201909152606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134a55782800160ff198235161785556133c7565b828001600101855582156133c7579182015b828111156133c75782358255916020019190600101906134b7565b5b808211156133d357600081556001016134d3565b60008083601f8401126134f8578182fd5b5081356001600160401b0381111561350e578182fd5b60208301915083602082850101111561352657600080fd5b9250929050565b600082601f83011261353d578081fd5b813561355061354b82614217565b6141f1565b915080825283602082850101111561356757600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215613591578081fd5b8135612d0b8161426a565b6000806000806000608086880312156135b3578081fd5b85356135be8161426a565b945060208601356001600160401b038111156135d8578182fd5b6135e4888289016134e7565b9699909850959660408101359660609091013595509350505050565b60008060408385031215613612578182fd5b823561361d8161426a565b946020939093013593505050565b60008060008060608587031215613640578384fd5b843561364b8161426a565b93506020850135925060408501356001600160401b0381111561366c578283fd5b613678878288016134e7565b95989497509550505050565b6000806000806000806080878903121561369c578081fd5b86356136a78161426a565b95506020870135945060408701356001600160401b03808211156136c9578283fd5b6136d58a838b016134e7565b909650945060608901359150808211156136ed578283fd5b506136fa89828a016134e7565b979a9699509497509295939492505050565b600080600080600080600060a0888a031215613726578081fd5b87356137318161426a565b96506020880135955060408801356001600160401b0380821115613753578283fd5b61375f8b838c016134e7565b909750955060608a0135945060808a013591508082111561377e578283fd5b5061378b8a828b016134e7565b989b979a50959850939692959293505050565b6000806000606084860312156137b2578283fd5b83356137bd8161426a565b95602085013595506040909401359392505050565b6000602082840312156137e3578081fd5b81518015158114612d0b578182fd5b600060208284031215613803578081fd5b5035919050565b60006020828403121561381b578081fd5b5051919050565b600080600060408486031215613836578081fd5b8335925060208401356001600160401b03811115613852578182fd5b61385e868287016134e7565b9497909650939450505050565b60006020828403121561387c578081fd5b81356001600160401b03811115613891578182fd5b610dd48482850161352d565b600080602083850312156138af578182fd5b82356001600160401b038111156138c4578283fd5b6138d0858286016134e7565b90969095509350505050565b600080600080604085870312156138f1578182fd5b84356001600160401b0380821115613907578384fd5b613913888389016134e7565b9096509450602087013591508082111561392b578384fd5b50613678878288016134e7565b600060208284031215613949578081fd5b81516001600160401b0381111561395e578182fd5b8201601f8101841361396e578182fd5b805161397c61354b82614217565b818152856020838501011115613990578384fd5b61191982602083016020860161423a565b600080604083850312156139b3578182fd5b82356001600160401b038111156139c8578283fd5b6139d48582860161352d565b95602094909401359450505050565b600080604083850312156139f5578182fd5b50508035926020909101359150565b60008060008060008060a08789031215613a1c578384fd5b8635955060208701356001600160401b0380821115613a39578586fd5b613a458a838b016134e7565b909750955060408901359150613a5a8261426a565b9093506060880135925060808801359080821115613a76578283fd5b50613a8389828a0161352d565b9150509295509295509295565b60008060408385031215613aa2578182fd5b8235915060208301356001600160401b03811115613abe578182fd5b613aca8582860161352d565b9150509250929050565b600080600060608486031215613ae8578081fd5b833592506020840135915060408401356001600160401b03811115613b0b578182fd5b613b178682870161352d565b9150509250925092565b600080600080600060808688031215613b38578283fd5b853594506020860135935060408601356001600160401b0380821115613b5c578485fd5b613b6889838a016134e7565b90955093506060880135915080821115613b80578283fd5b50613b8d8882890161352d565b9150509295509295909350565b600060208284031215613bab578081fd5b815160ff81168114612d0b578182fd5b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613bfd81602086016020860161423a565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b90815260200190565b60008251613c4981846020870161423a565b9190910192915050565b60008351613c6581846020880161423a565b9190910191825250602001919050565b6000828483379101908152919050565b60008351613c9781846020880161423a565b835190830190613cab81836020880161423a565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260806040830152613d47608083018688613bbb565b8281036060840152611181818587613bbb565b600060018060a01b038716825285602083015260806040830152613d816080830186613be5565b8281036060840152613d94818587613bbb565b98975050505050505050565b600060018060a01b038616825284602083015260806040830152613dc76080830185613be5565b8281036060840152613dd98185613be5565b979650505050505050565b901515815260200190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060408252613e39604083018688613bbb565b8281036020840152613dd9818587613bbb565b600060208252612d0b6020830184613be5565b60208082526010908201526f125b9d985b1a590810da185a5b88125160821b604082015260600190565b602080825260159082015274223ab83634b1b0ba3290283932aa3930b739b332b960591b604082015260600190565b6020808252601690820152750a4cae2ead2e4ca40c6dee4e4cac6e840d8cadccee8d60531b604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601b908201527f5369676e61747572652076657273696f6e206e6f74206d617463680000000000604082015260600190565b6020808252601690820152750a0c2f2d8dec2c840c8decae640dcdee840dac2e8c6d60531b604082015260600190565b60208082526017908201527f4e46542045786973747320776974682074686973204944000000000000000000604082015260600190565b60208082526018908201527f48616e646c657220756e61626c6520746f207370656e64200000000000000000604082015260600190565b6020808252600d908201526c139bdd0815da5d1b995cdcd959609a1b604082015260600190565b6020808252600e908201526d2a3930b739b332b91022a92927a960911b604082015260600190565b602080825260139082015272086dec8ca40c8decae640dcdee840dac2e8c6d606b1b604082015260600190565b60208082526025908201527f5072655472616e7366657220646f6573206e6f742062656c6f6e6720746f207360408201526432b73232b960d91b606082015260800190565b602080825260119082015270111d5c1b1a58d85d1948141c99535a5b9d607a1b604082015260600190565b60208082526024908201527f43616e206e6f74207472616e73666572206d6f7265207468616e206465706f736040820152631a5d195960e21b606082015260800190565b60006020825282516040602084015261416d6060840182613be5565b9050602084015160408401528091505092915050565b60006020825282516060602084015261419f6080840182613be5565b6020850151604085810191909152909401516001600160a01b03166060909301929092525090919050565b600083825260406020830152610dd46040830184613be5565b60ff91909116815260200190565b6040518181016001600160401b038111828210171561420f57600080fd5b604052919050565b60006001600160401b0382111561422c578081fd5b50601f01601f191660200190565b60005b8381101561425557818101518382015260200161423d565b83811115614264576000848401525b50505050565b6001600160a01b038116811461335657600080fdfea2646970667358221220df0a71af19a3779eec6b00292761fb6798319030f62f7b2b752b25bb20df44ac64736f6c634300060c003368747470733a2f2f6170692e656d626c656d7661756c742e696f2f733a65766d657461646174612f6d6574612f00000000000000000000000082c7a8f707110f5fbb16184a5933e9f78a34c6ab0000000000000000000000003d658390460295fb963f54dc0899cfb1c30776df0000000000000000000000002272ecf43a7481088fa2d4ba9109804ed5a31901000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode
0x6080604052600436106103505760003560e01c80637224bb92116101c6578063bc2bf73e116100f7578063d81fba1611610095578063ee2f13cd1161006f578063ee2f13cd14610962578063f2fde38b14610982578063fad80169146109a2578063fc9a85b1146109b557610350565b8063d81fba16146104ce578063df4a529d1461092f578063e94b77061461094f57610350565b8063d02b1153116100d1578063d02b1153146108ad578063d0569c22146108cd578063d2b64472146108ed578063d31af4841461090f57610350565b8063bc2bf73e14610840578063bd54c89c1461086d578063c5eeb8af1461088d57610350565b806399b2c1c711610164578063a035b1fe1161013e578063a035b1fe146107eb578063a111fbae14610800578063a2b40d1914610820578063b11a19e81461067657610350565b806399b2c1c71461078b5780639d75afc7146107ab5780639eaa5626146107cb57610350565b8063893d20e8116101a0578063893d20e8146107165780638ddc20201461072b57806392c2bcb41461074b578063945cfe1f1461076b57610350565b80637224bb92146106b657806379d33606146106d657806386575e40146106f657610350565b80633b442cdb116102a05780635aff59991161023e5780635e1bd52a116102185780635e1bd52a14610641578063633423be146106615780636900a3ae1461067657806371aad10d1461069657610350565b80635aff5999146105ea5780635b6beeb9146105ff5780635bf8633a1461062c57610350565b806356ca623e1161027a57806356ca623e1461056a578063582f1da21461058a57806359e26be1146105aa5780635aaf27b7146105ca57610350565b80633b442cdb146104fd5780633debbbc01461052a578063528204d01461054a57610350565b806331726da11161030d57806332ca2c00116102e757806332ca2c001461045f57806336864adb1461048c578063379607f5146104ae57806339f6c85e146104ce57610350565b806331726da11461040a57806331b480551461042a578063321c3cf61461043f57610350565b80630d7def9514610355578063158ef93e1461036c57806321d93090146103975780632754902f146103b75780632fb102cf146103ca57806330e6822c146103ea575b600080fd5b34801561036157600080fd5b5061036a6109d5565b005b34801561037857600080fd5b506103816109e9565b60405161038e9190613de4565b60405180910390f35b3480156103a357600080fd5b506103816103b23660046137f2565b6109f2565b61036a6103c5366004613a04565b610a07565b3480156103d657600080fd5b5061036a6103e5366004613684565b610cf7565b3480156103f657600080fd5b5061038161040536600461379e565b610d9c565b34801561041657600080fd5b5061036a610425366004613580565b610ddc565b34801561043657600080fd5b50610381610e6e565b34801561044b57600080fd5b5061038161045a366004613580565b610e77565b34801561046b57600080fd5b5061047f61047a3660046137f2565b610e8c565b60405161038e9190614183565b34801561049857600080fd5b506104a1610f61565b60405161038e9190613e4c565b3480156104ba57600080fd5b5061036a6104c93660046137f2565b610fef565b3480156104da57600080fd5b506104ee6104e93660046139a1565b61104f565b60405161038e93929190613def565b34801561050957600080fd5b5061051d610518366004613b21565b6110d1565b60405161038e9190613cb4565b34801561053657600080fd5b5061036a610545366004613580565b61118e565b34801561055657600080fd5b5061036a6105653660046139e3565b6111ee565b34801561057657600080fd5b506104a1610585366004613580565b611346565b34801561059657600080fd5b506103816105a53660046137f2565b611376565b3480156105b657600080fd5b5061036a6105c5366004613580565b6113ac565b3480156105d657600080fd5b5061036a6105e5366004613580565b6113fa565b3480156105f657600080fd5b5061051d611446565b34801561060b57600080fd5b5061061f61061a36600461389d565b611455565b60405161038e9190613c2e565b34801561063857600080fd5b5061051d61148b565b34801561064d57600080fd5b5061038161065c3660046139e3565b61149f565b34801561066d57600080fd5b5061051d6116f6565b34801561068257600080fd5b506104a16106913660046137f2565b611705565b3480156106a257600080fd5b506104a16106b136600461386b565b61171b565b3480156106c257600080fd5b5061061f6106d13660046137f2565b6118c4565b3480156106e257600080fd5b5061051d6106f1366004613822565b6118d6565b34801561070257600080fd5b5061036a6107113660046138dc565b611922565b34801561072257600080fd5b5061051d6119c1565b34801561073757600080fd5b5061036a610746366004613580565b6119d0565b34801561075757600080fd5b5061036a610766366004613580565b611a22565b34801561077757600080fd5b5061047f6107863660046139e3565b611a6e565b34801561079757600080fd5b5061061f6107a63660046137f2565b611b4a565b3480156107b757600080fd5b5061036a6107c6366004613600565b611ba2565b3480156107d757600080fd5b5061051d6107e6366004613ad4565b611c72565b3480156107f757600080fd5b5061061f611ce3565b34801561080c57600080fd5b5061061f61081b3660046137f2565b611ce9565b34801561082c57600080fd5b5061036a61083b3660046137f2565b611cfb565b34801561084c57600080fd5b5061086061085b366004613600565b611db2565b60405161038e9190614151565b34801561087957600080fd5b5061036a61088836600461389d565b611e83565b34801561089957600080fd5b506103816108a83660046137f2565b611ebe565b3480156108b957600080fd5b5061036a6108c836600461359c565b611ef4565b3480156108d957600080fd5b5061061f6108e8366004613580565b612117565b3480156108f957600080fd5b50610902612132565b60405161038e91906141e3565b34801561091b57600080fd5b5061036a61092a366004613a90565b6121b8565b34801561093b57600080fd5b5061036a61094a3660046137f2565b612251565b61036a61095d36600461370c565b61232c565b34801561096e57600080fd5b5061036a61097d366004613580565b6126ae565b34801561098e57600080fd5b5061036a61099d366004613580565b6126f9565b61036a6109b036600461362b565b61277f565b3480156109c157600080fd5b506108606109d0366004613600565b612c3e565b6009805460ff19811660ff90911615179055565b60065460ff1681565b60026020526000908152604090205460ff1681565b60136000610a16888585611c72565b6001600160a01b0316815260208101919091526040016000205460ff16610a585760405162461bcd60e51b8152600401610a4f90614021565b60405180910390fd5b60065461010090046001600160a01b0316610a716132f2565b6000888152600d60209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015610b0f5780601f10610ae457610100808354040283529160200191610b0f565b820191906000526020600020905b815481529060010190602001808311610af257829003601f168201915b505050918352505060018201546020808301919091526002928301546001600160a01b031660409283015290519293509091610b4f918a918a9101613c75565b60408051601f1981840301815290829052610b6991613c37565b602060405180830381855afa158015610b86573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610ba9919061380a565b816020015114610bcb5760405162461bcd60e51b8152600401610a4f90614070565b60408082015190516323b872dd60e01b81526001600160a01b038416916323b872dd91610bff919089908d90600401613ce2565b600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050506000898152600d602052604081209150610c4a8282613312565b50600060018201819055600290910180546001600160a01b0319169055888152600e60209081526040808320600f8352818420548452909152812090610c908282613312565b5060006001828101829055600290920180546001600160a01b0319169055898152600f6020526040902054610cc491612cc9565b6000988952600f60209081526040808b20929092559489526014909452505050909320805460ff19166001179055505050565b6004546001600160a01b03163314610d215760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051632fb102cf60e01b81526101009091046001600160a01b0316908190632fb102cf90610d61908a908a908a908a908a908a90600401613d1f565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b5050505050505050505050565b6004546000906001600160a01b03163314610dc95760405162461bcd60e51b8152600401610a4f90613ee8565b610dd4848484612d12565b949350505050565b6004546001600160a01b03163314610e065760405162461bcd60e51b8152600401610a4f90613ee8565b60015460405163f2fde38b60e01b81526001600160a01b0390911690819063f2fde38b90610e38908590600401613cb4565b600060405180830381600087803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b505050505050565b60095460ff1681565b60136020526000908152604090205460ff1681565b610e946132f2565b6000828152600d60209081526040918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b5050509183525050600182015460208201526002909101546001600160a01b031660409091015290505b919050565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fe75780601f10610fbc57610100808354040283529160200191610fe7565b820191906000526020600020905b815481529060010190602001808311610fca57829003601f168201915b505050505081565b6004546001600160a01b031633146110195760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051630852cd8d60e31b81526101009091046001600160a01b03169081906342966c6890610e38908590600401613c2e565b6000806000806002866040516020016110689190613c37565b60408051601f198184030181529082905261108291613c37565b602060405180830381855afa15801561109f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110c2919061380a565b96949550505083851492915050565b60008481526014602052604081205460ff16156110ed57600080fd5b60606111376110fb88612e50565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2a92505050565b9050600061114d8261114889612e50565b612f2a565b60405160200161115d9190613c37565b60405160208183030381529060405280519060200120905060006111818286612f56565b9998505050505050505050565b6004546001600160a01b031633146111b85760405162461bcd60e51b8152600401610a4f90613ee8565b60065460405163f2fde38b60e01b81526101009091046001600160a01b031690819063f2fde38b90610e38908590600401613cb4565b6111f782612fd5565b156112145760405162461bcd60e51b8152600401610a4f90613e89565b6000828152600f602052604090205461122e9060016130af565b6000838152600f6020908152604080832093909355825160a081018452600760608201908152661c185e5b1bd85960ca1b608083015281528082018590523381850152858352600d82529290912082518051919261129192849290910190613359565b50602082810151600180840191909155604093840151600293840180546001600160a01b039092166001600160a01b03199092169190911790556000868152600d8352848120600e8452858220600f8552868320548352909352939093208154919390926113129284928692908216156101000260001901909116046133d7565b5060018281015490820155600291820154910180546001600160a01b0319166001600160a01b039092169190911790555050565b60606113708260405160200161135c9190613c11565b60405160208183030381529060405261171b565b92915050565b6004546000906001600160a01b031633146113a35760405162461bcd60e51b8152600401610a4f90613ee8565b611370826130d4565b6004546001600160a01b031633146113d65760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6004546001600160a01b031633146114245760405162461bcd60e51b8152600401610a4f90613ee8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b600080838360405160200161146b929190613c75565b60408051808303601f190181529190528051602090910120949350505050565b60065461010090046001600160a01b031681565b60008281526002602052604081205460ff166114cd5760405162461bcd60e51b8152600401610a4f90613e5f565b6001546001600160a01b0316828163dd62ed3e6114e86130f3565b306040518363ffffffff1660e01b8152600401611506929190613cc8565b60206040518083038186803b15801561151e57600080fd5b505afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611556919061380a565b10156115745760405162461bcd60e51b8152600401610a4f90613fea565b806001600160a01b03166323b872dd61158b6130f3565b30866040518463ffffffff1660e01b81526004016115ab93929190613ce2565b602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd91906137d2565b6116195760405162461bcd60e51b8152600401610a4f90614048565b600154604051630852cd8d60e31b81526001600160a01b03909116906342966c6890611649908690600401613c2e565b600060405180830381600087803b15801561166357600080fd5b505af1158015611677573d6000803e3d6000fd5b5050506000858152600360205260409020546116949150846130af565b600085815260036020526040902055826116ac6130f3565b6001600160a01b03167fed2432d91de9329ae454049df81fd5d6b856c4470096ca37a29c1fe111f57f0c866040516116e49190613c2e565b60405180910390a35060019392505050565b6001546001600160a01b031681565b60606113708260405160200161135c9190613c2e565b6060806040518060400160405280601081526020016f181899199a1a9b1b9c1cb0b131b232b360811b8152509050606083516002026002016001600160401b038111801561176857600080fd5b506040519080825280601f01601f191660200182016040528015611793576020820181803683370190505b509050600360fc1b816000815181106117a857fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106117d157fe5b60200101906001600160f81b031916908160001a90535060005b84518110156118bc5782600486838151811061180357fe5b016020015182516001600160f81b031990911690911c60f81c90811061182557fe5b602001015160f81c60f81b82826002026002018151811061184257fe5b60200101906001600160f81b031916908160001a9053508285828151811061186657fe5b602091010151815160f89190911c600f1690811061188057fe5b602001015160f81c60f81b82826002026003018151811061189d57fe5b60200101906001600160f81b031916908160001a9053506001016117eb565b509392505050565b60036020526000908152604090205481565b6000806119198585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5692505050565b95945050505050565b6004546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610a4f90613ee8565b6006546040516302195d7960e61b81526101009091046001600160a01b03169081906386575e4090611988908890889088908890600401613e25565b600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505050505050505050565b6004546001600160a01b031690565b6004546001600160a01b031633146119fa5760405162461bcd60e51b8152600401610a4f90613ee8565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6004546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610a4f90613ee8565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611a766132f2565b6000838152600e602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f81018490049093028101608090810190945260608101838152909391928492849190840182828015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050509183525050600182015460208201526002909101546001600160a01b03166040909101529392505050565b60008060005b6020811015611b9b5760ff6008820285901c1660308110801590611b75575060398111155b15611b8c5781600a0a603082030283019250611b92565b50611b9b565b50600101611b50565b5092915050565b6004546001600160a01b03163314611bcc5760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b0382166000908152600b60209081526040808320600c8352818420548452909152812090611c018282613312565b50600060019182018190556001600160a01b0384168152600c6020526040902054611c2b91612cc9565b6001600160a01b0383166000908152600c6020908152604080832093909355600a8152828220848352905290812090611c648282613312565b600182016000905550505050565b60008281526014602052604081205460ff1615611c8e57600080fd5b6000611ca5611c9c86612e50565b61114886612e50565b604051602001611cb59190613c37565b6040516020818303038152906040528051906020012090506000611cd98285612f56565b9695505050505050565b60085481565b6000908152600f602052604090205490565b6004546001600160a01b03163314611d255760405162461bcd60e51b8152600401610a4f90613ee8565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da29190613b9a565b60ff16600a0a9190910260085550565b611dba61344c565b6001600160a01b0383166000908152600b602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f8101849004909302810160609081018552938101838152909391928492849190840182828015611e685780601f10611e3d57610100808354040283529160200191611e68565b820191906000526020600020905b815481529060010190602001808311611e4b57829003601f168201915b50505050508152602001600182015481525050905092915050565b6004546001600160a01b03163314611ead5760405162461bcd60e51b8152600401610a4f90613ee8565b611eb960058383613464565b505050565b6004546000906001600160a01b03163314611eeb5760405162461bcd60e51b8152600401610a4f90613ee8565b611370826130f7565b6004546001600160a01b03163314611f1e5760405162461bcd60e51b8152600401610a4f90613ee8565b600654604051634d6ca91960e11b81526101009091046001600160a01b031690639ad9523290611f52908590600401613c2e565b60006040518083038186803b158015611f6a57600080fd5b505afa925050508015611f9f57506040513d6000823e601f3d908101601f19168201604052611f9c9190810190613938565b60015b6120f857611fad8583613112565b15611fca5760405162461bcd60e51b8152600401610a4f906140e2565b6001600160a01b0385166000908152600c6020526040902054611fee9060016130af565b6001600160a01b0386166000908152600c6020908152604091829020929092558051601f860183900490920282016060908101825290820185815282918790879081908501838280828437600092018290525093855250505060209182018490526001600160a01b0388168152600a825260408082208683528352902082518051919261208092849290910190613359565b506020918201516001918201556001600160a01b0387166000818152600a845260408082208783528552808220928252600b8552808220600c865281832054835290945292909220825490916120e99183918591600291811615610100026000190116046133d7565b50600191820154910155612110565b60405162461bcd60e51b8152600401610a4f90613fb3565b5050505050565b6001600160a01b03166000908152600c602052604090205490565b6001546040805163313ce56760e01b815290516000926001600160a01b031691829163313ce56791600480820192602092909190829003018186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b29190613b9a565b91505090565b6004546001600160a01b031633146121e25760405162461bcd60e51b8152600401610a4f90613ee8565b6006546040516334c6bd2160e21b81526101009091046001600160a01b031690819063d31af4849061221a90869086906004016141ca565b600060405180830381600087803b15801561223457600080fd5b505af1158015612248573d6000803e3d6000fd5b50505050505050565b6000818152600d60205260409020600201546001600160a01b0316331461228a5760405162461bcd60e51b8152600401610a4f9061409d565b6000818152600e60209081526040808320600f83528184205484529091528120906122b58282613312565b5060006001828101829055600290920180546001600160a01b0319169055828152600f60205260409020546122e991612cc9565b6000828152600f6020908152604080832093909355600d9052908120906123108282613312565b506000600182015560020180546001600160a01b031916905550565b6001546006546009546001600160a01b03928316926101009092049091169060ff161561245b576008546040516323b872dd60e01b81526001600160a01b038416916323b872dd91612385913391309190600401613ce2565b602060405180830381600087803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d791906137d2565b6123f35760405162461bcd60e51b8152600401610a4f90614048565b600154600854604051630852cd8d60e31b81526001600160a01b03909216916342966c689161242491600401613c2e565b600060405180830381600087803b15801561243e57600080fd5b505af1158015612452573d6000803e3d6000fd5b50505050612500565b6007546008546040516323b872dd60e01b81526001600160a01b03858116936323b872dd9361249293339390921691600401613ce2565b602060405180830381600087803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e491906137d2565b6125005760405162461bcd60e51b8152600401610a4f90614048565b600061254589878a8a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110d192505050565b6001600160a01b03811660009081526013602052604090205490915060ff166125805760405162461bcd60e51b8152600401610a4f90614021565b600086815260146020908152604091829020805460ff19166001908117909155600580548451601f6002600019958416156101000295909501909216939093049081018490048402830184019094528382526060936126389383018282801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050506111488c612e50565b604051632fb102cf60e01b81529091506001600160a01b03841690632fb102cf9061266f908e908e9086908f908f90600401613d5a565b600060405180830381600087803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b505050505050505050505050505050565b6004546001600160a01b031633146126d85760405162461bcd60e51b8152600401610a4f90613ee8565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6004546001600160a01b031633146127235760405162461bcd60e51b8152600401610a4f90613ee8565b6004546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546006546001600160a01b0391821691610100909104166127a061344c565b336000908152600a602090815260408083208984528252918290208251815460026001821615610100026000190190911604601f81018490049093028101606090810185529381018381529093919284928491908401828280156128455780601f1061281a57610100808354040283529160200191612845565b820191906000526020600020905b81548152906001019060200180831161282857829003601f168201915b5050505050815260200160018201548152505090506002858560405160200161286f929190613c75565b60408051601f198184030181529082905261288991613c37565b602060405180830381855afa1580156128a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906128c9919061380a565b8160200151146128eb5760405162461bcd60e51b8152600401610a4f90613f83565b60095460ff16156129fe576008546040516323b872dd60e01b81526001600160a01b038516916323b872dd91612928913391309190600401613ce2565b602060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a91906137d2565b6129965760405162461bcd60e51b8152600401610a4f90614048565b600154600854604051630852cd8d60e31b81526001600160a01b03909216916342966c68916129c791600401613c2e565b600060405180830381600087803b1580156129e157600080fd5b505af11580156129f5573d6000803e3d6000fd5b50505050612aa3565b6007546008546040516323b872dd60e01b81526001600160a01b03868116936323b872dd93612a3593339390921691600401613ce2565b602060405180830381600087803b158015612a4f57600080fd5b505af1158015612a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8791906137d2565b612aa35760405162461bcd60e51b8152600401610a4f90614048565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152606093612b409391929091830182828015612b325780601f10612b0757610100808354040283529160200191612b32565b820191906000526020600020905b815481529060010190602001808311612b1557829003601f168201915b505050505061114889612e50565b8251604051632fb102cf60e01b81529192506001600160a01b03851691632fb102cf91612b76918c918c91879190600401613da0565b600060405180830381600087803b158015612b9057600080fd5b505af1158015612ba4573d6000803e3d6000fd5b5050336000908152600b60209081526040808320600c8352818420548452909152812092509050612bd58282613312565b506000600191909101819055338152600a602090815260408083208a8452909152812090612c038282613312565b5060006001918201819055338152600c6020526040902054612c2491612cc9565b336000908152600c60205260409020555050505050505050565b612c4661344c565b6001600160a01b0383166000908152600a602090815260408083208584528252918290208251815460026001821615610100026000190190911604601f8101849004909302810160609081018552938101838152909391928492849190840182828015611e685780601f10611e3d57610100808354040283529160200191611e68565b6000612d0b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ff565b9392505050565b600082815260036020526040812054821115612d405760405162461bcd60e51b8152600401610a4f9061410d565b60008381526002602052604090205460ff16612d6e5760405162461bcd60e51b8152600401610a4f90613e5f565b6001546040516340c10f1960e01b81526001600160a01b039091169081906340c10f1990612da29088908790600401613d06565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050600085815260036020526040902054612ded915084612cc9565b60008581526003602052604090205582612e056130f3565b6001600160a01b03167fdfb36617677d4721feefea07d11b2d1aca3d4ea49facf2bae87fbc8db4ecc91386604051612e3d9190613c2e565b60405180910390a3506001949350505050565b60608180612e775750506040805180820190915260018152600360fc1b6020820152610f5c565b8060005b8115612e8f57600101600a82049150612e7b565b6060816001600160401b0381118015612ea757600080fd5b506040519080825280601f01601f191660200182016040528015612ed2576020820181803683370190505b50905060001982015b8415612f2057600a850660300160f81b82828060019003935081518110612efe57fe5b60200101906001600160f81b031916908160001a905350600a85049450612edb565b5095945050505050565b60608282604051602001612f3f929190613c85565b604051602081830303815290604052905092915050565b60008151604114612f795760405162461bcd60e51b8152600401610a4f90613eb8565b60208201516040830151606084015160001a601b811015612f9857601b015b8060ff16601b1480612fad57508060ff16601c145b612fc95760405162461bcd60e51b8152600401610a4f90613f4c565b611cd98682858561322b565b6000818152600d6020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060938301828280156130685780601f1061303d57610100808354040283529160200191613068565b820191906000526020600020905b81548152906001019060200180831161304b57829003601f168201915b50506040805160208082019092526000905284519401939093207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47014159695505050505050565b600082820183811015612d0b5760405162461bcd60e51b8152600401610a4f90613f15565b6000908152600260205260409020805460ff1916600190811790915590565b3390565b6000908152600260205260409020805460ff19169055600190565b6001600160a01b0382166000908152600a60209081526040808320848452825280832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060938301828280156131b75780601f1061318c576101008083540402835291602001916131b7565b820191906000526020600020905b81548152906001019060200180831161319a57829003601f168201915b50506040805160208082019092526000905284519401939093207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701415979650505050505050565b600081848411156132235760405162461bcd60e51b8152600401610a4f9190613e4c565b505050900390565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818760405160200161327c929190613c53565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516132b99493929190613e07565b6020604051602081039080840390855afa1580156132db573d6000803e3d6000fd5b5050604051601f1901519998505050505050505050565b604080516060808201835281526000602082018190529181019190915290565b50805460018160011615610100020316600290046000825580601f106133385750613356565b601f01602090049060005260206000209081019061335691906134d2565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061339a57805160ff19168380011785556133c7565b828001600101855582156133c7579182015b828111156133c75782518255916020019190600101906133ac565b506133d39291506134d2565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061341057805485556133c7565b828001600101855582156133c757600052602060002091601f016020900482015b828111156133c7578254825591600101919060010190613431565b60408051808201909152606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134a55782800160ff198235161785556133c7565b828001600101855582156133c7579182015b828111156133c75782358255916020019190600101906134b7565b5b808211156133d357600081556001016134d3565b60008083601f8401126134f8578182fd5b5081356001600160401b0381111561350e578182fd5b60208301915083602082850101111561352657600080fd5b9250929050565b600082601f83011261353d578081fd5b813561355061354b82614217565b6141f1565b915080825283602082850101111561356757600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215613591578081fd5b8135612d0b8161426a565b6000806000806000608086880312156135b3578081fd5b85356135be8161426a565b945060208601356001600160401b038111156135d8578182fd5b6135e4888289016134e7565b9699909850959660408101359660609091013595509350505050565b60008060408385031215613612578182fd5b823561361d8161426a565b946020939093013593505050565b60008060008060608587031215613640578384fd5b843561364b8161426a565b93506020850135925060408501356001600160401b0381111561366c578283fd5b613678878288016134e7565b95989497509550505050565b6000806000806000806080878903121561369c578081fd5b86356136a78161426a565b95506020870135945060408701356001600160401b03808211156136c9578283fd5b6136d58a838b016134e7565b909650945060608901359150808211156136ed578283fd5b506136fa89828a016134e7565b979a9699509497509295939492505050565b600080600080600080600060a0888a031215613726578081fd5b87356137318161426a565b96506020880135955060408801356001600160401b0380821115613753578283fd5b61375f8b838c016134e7565b909750955060608a0135945060808a013591508082111561377e578283fd5b5061378b8a828b016134e7565b989b979a50959850939692959293505050565b6000806000606084860312156137b2578283fd5b83356137bd8161426a565b95602085013595506040909401359392505050565b6000602082840312156137e3578081fd5b81518015158114612d0b578182fd5b600060208284031215613803578081fd5b5035919050565b60006020828403121561381b578081fd5b5051919050565b600080600060408486031215613836578081fd5b8335925060208401356001600160401b03811115613852578182fd5b61385e868287016134e7565b9497909650939450505050565b60006020828403121561387c578081fd5b81356001600160401b03811115613891578182fd5b610dd48482850161352d565b600080602083850312156138af578182fd5b82356001600160401b038111156138c4578283fd5b6138d0858286016134e7565b90969095509350505050565b600080600080604085870312156138f1578182fd5b84356001600160401b0380821115613907578384fd5b613913888389016134e7565b9096509450602087013591508082111561392b578384fd5b50613678878288016134e7565b600060208284031215613949578081fd5b81516001600160401b0381111561395e578182fd5b8201601f8101841361396e578182fd5b805161397c61354b82614217565b818152856020838501011115613990578384fd5b61191982602083016020860161423a565b600080604083850312156139b3578182fd5b82356001600160401b038111156139c8578283fd5b6139d48582860161352d565b95602094909401359450505050565b600080604083850312156139f5578182fd5b50508035926020909101359150565b60008060008060008060a08789031215613a1c578384fd5b8635955060208701356001600160401b0380821115613a39578586fd5b613a458a838b016134e7565b909750955060408901359150613a5a8261426a565b9093506060880135925060808801359080821115613a76578283fd5b50613a8389828a0161352d565b9150509295509295509295565b60008060408385031215613aa2578182fd5b8235915060208301356001600160401b03811115613abe578182fd5b613aca8582860161352d565b9150509250929050565b600080600060608486031215613ae8578081fd5b833592506020840135915060408401356001600160401b03811115613b0b578182fd5b613b178682870161352d565b9150509250925092565b600080600080600060808688031215613b38578283fd5b853594506020860135935060408601356001600160401b0380821115613b5c578485fd5b613b6889838a016134e7565b90955093506060880135915080821115613b80578283fd5b50613b8d8882890161352d565b9150509295509295909350565b600060208284031215613bab578081fd5b815160ff81168114612d0b578182fd5b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613bfd81602086016020860161423a565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b90815260200190565b60008251613c4981846020870161423a565b9190910192915050565b60008351613c6581846020880161423a565b9190910191825250602001919050565b6000828483379101908152919050565b60008351613c9781846020880161423a565b835190830190613cab81836020880161423a565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260806040830152613d47608083018688613bbb565b8281036060840152611181818587613bbb565b600060018060a01b038716825285602083015260806040830152613d816080830186613be5565b8281036060840152613d94818587613bbb565b98975050505050505050565b600060018060a01b038616825284602083015260806040830152613dc76080830185613be5565b8281036060840152613dd98185613be5565b979650505050505050565b901515815260200190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060408252613e39604083018688613bbb565b8281036020840152613dd9818587613bbb565b600060208252612d0b6020830184613be5565b60208082526010908201526f125b9d985b1a590810da185a5b88125160821b604082015260600190565b602080825260159082015274223ab83634b1b0ba3290283932aa3930b739b332b960591b604082015260600190565b6020808252601690820152750a4cae2ead2e4ca40c6dee4e4cac6e840d8cadccee8d60531b604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601b908201527f5369676e61747572652076657273696f6e206e6f74206d617463680000000000604082015260600190565b6020808252601690820152750a0c2f2d8dec2c840c8decae640dcdee840dac2e8c6d60531b604082015260600190565b60208082526017908201527f4e46542045786973747320776974682074686973204944000000000000000000604082015260600190565b60208082526018908201527f48616e646c657220756e61626c6520746f207370656e64200000000000000000604082015260600190565b6020808252600d908201526c139bdd0815da5d1b995cdcd959609a1b604082015260600190565b6020808252600e908201526d2a3930b739b332b91022a92927a960911b604082015260600190565b602080825260139082015272086dec8ca40c8decae640dcdee840dac2e8c6d606b1b604082015260600190565b60208082526025908201527f5072655472616e7366657220646f6573206e6f742062656c6f6e6720746f207360408201526432b73232b960d91b606082015260800190565b602080825260119082015270111d5c1b1a58d85d1948141c99535a5b9d607a1b604082015260600190565b60208082526024908201527f43616e206e6f74207472616e73666572206d6f7265207468616e206465706f736040820152631a5d195960e21b606082015260800190565b60006020825282516040602084015261416d6060840182613be5565b9050602084015160408401528091505092915050565b60006020825282516060602084015261419f6080840182613be5565b6020850151604085810191909152909401516001600160a01b03166060909301929092525090919050565b600083825260406020830152610dd46040830184613be5565b60ff91909116815260200190565b6040518181016001600160401b038111828210171561420f57600080fd5b604052919050565b60006001600160401b0382111561422c578081fd5b50601f01601f191660200190565b60005b8381101561425557818101518382015260200161423d565b83811115614264576000848401525b50505050565b6001600160a01b038116811461335657600080fdfea2646970667358221220df0a71af19a3779eec6b00292761fb6798319030f62f7b2b752b25bb20df44ac64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000082c7a8f707110f5fbb16184a5933e9f78a34c6ab0000000000000000000000003d658390460295fb963f54dc0899cfb1c30776df0000000000000000000000002272ecf43a7481088fa2d4ba9109804ed5a31901000000000000000000000000000000000000000000000000000000000000012c
-----Decoded View---------------
Arg [0] : _nftAddress (address): 0x82C7a8f707110f5FBb16184A5933E9F78a34c6ab
Arg [1] : _paymentAddress (address): 0x3D658390460295FB963f54dC0899cfb1c30776Df
Arg [2] : _recipientAddress (address): 0x2272ECf43A7481088FA2d4Ba9109804ED5A31901
Arg [3] : _price (uint256): 300
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000082c7a8f707110f5fbb16184a5933e9f78a34c6ab
Arg [1] : 0000000000000000000000003d658390460295fb963f54dc0899cfb1c30776df
Arg [2] : 0000000000000000000000002272ecf43a7481088fa2d4ba9109804ed5a31901
Arg [3] : 000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode Sourcemap
13879:18394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21209:78;;;;;;;;;;;;;:::i;:::-;;14080:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11616:37;;;;;;;;;;-1:-1:-1;11616:37:0;;;;;:::i;:::-;;:::i;22794:773::-;;;;;;:::i;:::-;;:::i;25876:223::-;;;;;;;;;;-1:-1:-1;25876:223:0;;;;;:::i;:::-;;:::i;27741:166::-;;;;;;;;;;-1:-1:-1;27741:166:0;;;;;:::i;:::-;;:::i;25498:185::-;;;;;;;;;;-1:-1:-1;25498:185:0;;;;;:::i;:::-;;:::i;14374:30::-;;;;;;;;;;;;;:::i;15250:41::-;;;;;;;;;;-1:-1:-1;15250:41:0;;;;;:::i;:::-;;:::i;24612:131::-;;;;;;;;;;-1:-1:-1;24612:131:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14044:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17118:131::-;;;;;;;;;;-1:-1:-1;17118:131:0;;;;;:::i;:::-;;:::i;24755:288::-;;;;;;;;;;-1:-1:-1;24755:288:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;21928:453::-;;;;;;;;;;-1:-1:-1;21928:453:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25695:169::-;;;;;;;;;;-1:-1:-1;25695:169:0;;;;;:::i;:::-;;:::i;23579:401::-;;;;;;;;;;-1:-1:-1;23579:401:0;;;;;:::i;:::-;;:::i;31386:131::-;;;;;;;;;;-1:-1:-1;31386:131:0;;;;;:::i;:::-;;:::i;27487:112::-;;;;;;;;;;-1:-1:-1;27487:112:0;;;;;:::i;:::-;;:::i;21329:98::-;;;;;;;;;;-1:-1:-1;21329:98:0;;;;;:::i;:::-;;:::i;26671:97::-;;;;;;;;;;-1:-1:-1;26671:97:0;;;;;:::i;:::-;;:::i;14142:31::-;;;;;;;;;;;;;:::i;22616:166::-;;;;;;;;;;-1:-1:-1;22616:166:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14110:25::-;;;;;;;;;;;;;:::i;12244:628::-;;;;;;;;;;-1:-1:-1;12244:628:0;;;;;:::i;:::-;;:::i;11574:29::-;;;;;;;;;;;;;:::i;31529:127::-;;;;;;;;;;-1:-1:-1;31529:127:0;;;;;:::i;:::-;;:::i;31807:463::-;;;;;;;;;;-1:-1:-1;31807:463:0;;;;;:::i;:::-;;:::i;11660:45::-;;;;;;;;;;-1:-1:-1;11660:45:0;;;;;:::i;:::-;;:::i;22393:211::-;;;;;;;;;;-1:-1:-1;22393:211:0;;;;;:::i;:::-;;:::i;26111:184::-;;;;;;;;;;-1:-1:-1;26111:184:0;;;;;:::i;:::-;;:::i;16380:83::-;;;;;;;;;;;;;:::i;27012:86::-;;;;;;;;;;-1:-1:-1;27012:86:0;;;;;:::i;:::-;;:::i;26893:107::-;;;;;;;;;;-1:-1:-1;26893:107:0;;;;;:::i;:::-;;:::i;25201:164::-;;;;;;;;;;-1:-1:-1;25201:164:0;;;;;:::i;:::-;;:::i;31035:345::-;;;;;;;;;;-1:-1:-1;31035:345:0;;;;;:::i;:::-;;:::i;20225:239::-;;;;;;;;;;-1:-1:-1;20225:239:0;;;;;:::i;:::-;;:::i;21549:367::-;;;;;;;;;;-1:-1:-1;21549:367:0;;;;;:::i;:::-;;:::i;14218:20::-;;;;;;;;;;;;;:::i;25055:134::-;;;;;;;;;;-1:-1:-1;25055:134:0;;;;;:::i;:::-;;:::i;27110:166::-;;;;;;;;;;-1:-1:-1;27110:166:0;;;;;:::i;:::-;;:::i;21053:144::-;;;;;;;;;;-1:-1:-1;21053:144:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25377:109::-;;;;;;;;;;-1:-1:-1;25377:109:0;;;;;:::i;:::-;;:::i;27611:118::-;;;;;;;;;;-1:-1:-1;27611:118:0;;;;;:::i;:::-;;:::i;19373:574::-;;;;;;;;;;-1:-1:-1;19373:574:0;;;;;:::i;:::-;;:::i;20923:118::-;;;;;;;;;;-1:-1:-1;20923:118:0;;;;;:::i;:::-;;:::i;26504:155::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26307:185::-;;;;;;;;;;-1:-1:-1;26307:185:0;;;;;:::i;:::-;;:::i;24246:354::-;;;;;;;;;;-1:-1:-1;24246:354:0;;;;;:::i;:::-;;:::i;18389:966::-;;;;;;:::i;:::-;;:::i;21435:102::-;;;;;;;;;;-1:-1:-1;21435:102:0;;;;;:::i;:::-;;:::i;16138:144::-;;;;;;;;;;-1:-1:-1;16138:144:0;;;;;:::i;:::-;;:::i;17261:1116::-;;;;;;:::i;:::-;;:::i;20476:139::-;;;;;;;;;;-1:-1:-1;20476:139:0;;;;;:::i;:::-;;:::i;21209:78::-;21269:10;;;-1:-1:-1;;21255:24:0;;21269:10;;;;21268:11;21255:24;;;21209:78::o;14080:23::-;;;;;;:::o;11616:37::-;;;;;;;;;;;;;;;:::o;22794:773::-;22948:9;:63;22958:52;22982:8;22992:6;23000:9;22958:23;:52::i;:::-;-1:-1:-1;;;;;22948:63:0;;;;;;;;;;;;-1:-1:-1;22948:63:0;;;;22940:89;;;;-1:-1:-1;;;22940:89:0;;;;;;;:::i;:::-;;;;;;;;;23067:10;;;;;-1:-1:-1;;;;;23067:10:0;23089:30;;:::i;:::-;23122:22;;;;:12;:22;;;;;;;;;23089:55;;;;;;;;;;;-1:-1:-1;;23089:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23122:22;;23089:55;;23122:22;;23089:55;;;23122:22;23089:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23089:55:0;;;-1:-1:-1;;23089:55:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23089:55:0;;;;;;23194:22;;23089:55;;-1:-1:-1;23089:55:0;;23194:22;;23211:4;;;;23194:22;;:::i;:::-;;;;-1:-1:-1;;23194:22:0;;;;;;;;;;23187:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23163:11;:20;;;:54;23155:86;;;;-1:-1:-1;;;23155:86:0;;;;;;;:::i;:::-;23298:17;;;;;23276:56;;-1:-1:-1;;;23276:56:0;;-1:-1:-1;;;;;23276:21:0;;;;;:56;;23298:17;23317:3;;23323:8;;23276:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23350:22:0;;;;:12;:22;;;;;;-1:-1:-1;23343:29:0;23350:22;;23343:29;:::i;:::-;-1:-1:-1;23343:29:0;;;;;;;;;;;;;-1:-1:-1;;;;;;23343:29:0;;;23390;;;:19;:29;;;;;;;;23420:17;:27;;;;;;23390:58;;;;;;;;23383:65;23390:58;23343:29;23383:65;:::i;:::-;-1:-1:-1;23383:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;23383:65:0;;;23489:27;;;:17;:27;;;;;;:34;;:31;:34::i;:::-;23459:27;;;;:17;:27;;;;;;;;:64;;;;23534:18;;;:10;:18;;;-1:-1:-1;;;23534:18:0;;;:25;;-1:-1:-1;;23534:25:0;23555:4;23534:25;;;-1:-1:-1;;;22794:773:0:o;25876:223::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;26025:10:::1;::::0;26047:44:::1;::::0;-1:-1:-1;;;26047:44:0;;26025:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;26025:10:0::1;::::0;;;26047:13:::1;::::0;:44:::1;::::0;26061:3;;26066:8;;26076:4;;;;26082:8;;;;26047:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16028:1;25876:223:::0;;;;;;:::o;27741:166::-;15988:5;;27835:4;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;27859:40:::1;27878:3;27883:7;27892:6;27859:18;:40::i;:::-;27852:47:::0;27741:166;-1:-1:-1;;;;27741:166:0:o;25498:185::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;25609:14:::1;::::0;25635:40:::1;::::0;-1:-1:-1;;;25635:40:0;;-1:-1:-1;;;;;25609:14:0;;::::1;::::0;;;25635:30:::1;::::0;:40:::1;::::0;25666:8;;25635:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16028:1;25498:185:::0;:::o;14374:30::-;;;;;;:::o;15250:41::-;;;;;;;;;;;;;;;:::o;24612:131::-;24675:18;;:::i;:::-;24713:22;;;;:12;:22;;;;;;;;;24706:29;;;;;;;;;;;-1:-1:-1;;24706:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24713:22;;24706:29;;24713:22;;24706:29;;;24713:22;24706:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24706:29:0;;;-1:-1:-1;;24706:29:0;;;;;;;;;;;;;-1:-1:-1;;;;;24706:29:0;;;;;;;-1:-1:-1;24612:131:0;;;;:::o;14044:29::-;;;;;;;;;;;;;;;-1:-1:-1;;14044:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17118:131::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;17200:10:::1;::::0;17222:19:::1;::::0;-1:-1:-1;;;17222:19:0;;17200:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;17200:10:0::1;::::0;;;17222::::1;::::0;:19:::1;::::0;17233:7;;17222:19:::1;;;:::i;24755:288::-:0;24846:7;24855;24864:4;24881:18;24902:31;24926:5;24909:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24909:23:0;;;;;;;;;;24902:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24881:52;24963:8;;-1:-1:-1;;;25012:22:0;;;;24755:288;-1:-1:-1;;24755:288:0:o;21928:453::-;22065:7;22094:18;;;:10;:18;;;;;;;;22093:19;22085:28;;;;;;22124:22;22149:36;22156:19;22166:8;22156:9;:19::i;:::-;22177:7;;22149:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22149:6:0;;-1:-1:-1;;;22149:36:0:i;:::-;22124:61;;22196:12;22238:35;22245:8;22255:17;22265:6;22255:9;:17::i;:::-;22238:6;:35::i;:::-;22221:53;;;;;;;;:::i;:::-;;;;;;;;;;;;;22211:64;;;;;;22196:79;;22286:22;22311:30;22325:4;22331:9;22311:13;:30::i;:::-;22286:55;21928:453;-1:-1:-1;;;;;;;;;21928:453:0:o;25695:169::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;25798:10:::1;::::0;25820:36:::1;::::0;-1:-1:-1;;;25820:36:0;;25798:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;25798:10:0::1;::::0;;;25820:26:::1;::::0;:36:::1;::::0;25847:8;;25820:36:::1;;;:::i;23579:401::-:0;23666:31;23688:8;23666:21;:31::i;:::-;23665:32;23657:66;;;;-1:-1:-1;;;23657:66:0;;;;;;;:::i;:::-;23764:27;;;;:17;:27;;;;;;:34;;23796:1;23764:31;:34::i;:::-;23734:27;;;;:17;:27;;;;;;;;:64;;;;23834:44;;;;;;;;;;;;;;-1:-1:-1;;;23834:44:0;;;;;;;;;;;;23867:10;23834:44;;;;23809:22;;;:12;:22;;;;;;:69;;;;:22;;:69;;:22;;:69;;;;;:::i;:::-;-1:-1:-1;23809:69:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23809:69:0;;;-1:-1:-1;;;;;;23809:69:0;;;;;;;;;;23950:22;;;:12;:22;;;;;23889:19;:29;;;;;23919:17;:27;;;;;;23889:58;;;;;;;;;:83;;23950:22;;23889:58;;:83;;:58;;23950:22;;23889:83;;;;23809:69;23889:83;-1:-1:-1;;23889:83:0;;;;;;:::i;:::-;-1:-1:-1;23889:83:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23889:83:0;-1:-1:-1;;;;;23889:83:0;;;;;;;;;-1:-1:-1;;23579:401:0:o;31386:131::-;31441:13;31474:35;31500:7;31483:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;31474:8;:35::i;:::-;31467:42;31386:131;-1:-1:-1;;31386:131:0:o;27487:112::-;15988:5;;27545:4;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;27570:20:::1;27582:7;27570:11;:20::i;21329:98::-:0;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21393:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;21393:26:0::1;21415:4;21393:26;::::0;;21329:98::o;26671:97::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;26736:14:::1;:24:::0;;-1:-1:-1;;;;;;26736:24:0::1;-1:-1:-1::0;;;;;26736:24:0;;;::::1;::::0;;;::::1;::::0;;26671:97::o;14142:31::-;;;-1:-1:-1;;;;;14142:31:0;;:::o;22616:166::-;22680:7;22700:12;22742:8;;22725:26;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;22725:26:0;;;;;;22715:37;;22725:26;22715:37;;;;;22616:166;-1:-1:-1;;;;22616:166:0:o;14110:25::-;;;;;;-1:-1:-1;;;;;14110:25:0;;:::o;12244:628::-;12315:4;12340:17;;;:8;:17;;;;;;;;12332:46;;;;-1:-1:-1;;;12332:46:0;;;;;;;:::i;:::-;12428:14;;-1:-1:-1;;;;;12428:14:0;12517:6;12428:14;12462:22;12485:12;:10;:12::i;:::-;12507:4;12462:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;12454:98;;;;-1:-1:-1;;;12454:98:0;;;;;;;:::i;:::-;12571:12;-1:-1:-1;;;;;12571:25:0;;12597:12;:10;:12::i;:::-;12619:4;12626:6;12571:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12563:89;;;;-1:-1:-1;;;12563:89:0;;;;;;;:::i;:::-;12674:14;;12663:39;;-1:-1:-1;;;12663:39:0;;-1:-1:-1;;;;;12674:14:0;;;;12663:31;;:39;;12695:6;;12663:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12738:22:0;;;;:13;:22;;;;;;:34;;-1:-1:-1;12765:6:0;12738:26;:34::i;:::-;12713:22;;;;:13;:22;;;;;:59;12816:6;12802:12;:10;:12::i;:::-;-1:-1:-1;;;;;12788:44:0;;12824:7;12788:44;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;12860:4:0;;12244:628;-1:-1:-1;;;12244:628:0:o;11574:29::-;;;-1:-1:-1;;;;;11574:29:0;;:::o;31529:127::-;31582:13;31615:33;31641:5;31624:23;;;;;;;;:::i;31807:463::-;31864:13;31890:21;:42;;;;;;;;;;;;;-1:-1:-1;;;31890:42:0;;;;;31949:16;31982:4;:11;31996:1;31982:15;31978:1;:19;-1:-1:-1;;;;;31968:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31968:30:0;;31949:49;;-1:-1:-1;;;32009:3:0;32013:1;32009:6;;;;;;;;;;;:12;-1:-1:-1;;;;;32009:12:0;;;;;;;;;-1:-1:-1;;;32032:3:0;32036:1;32032:6;;;;;;;;;;;:12;-1:-1:-1;;;;;32032:12:0;;;;;;;;;32060:6;32055:179;32076:4;:11;32072:1;:15;32055:179;;;32122:8;32153:1;32142:4;32147:1;32142:7;;;;;;;;;;;;32122:35;;-1:-1:-1;;;;;;32142:7:0;;;:12;;;:7;32136:19;;32122:35;;;;;;;;;;;;;;32109:3;32115:1;32117;32115:3;32113:1;:5;32109:10;;;;;;;;;;;:48;-1:-1:-1;;;;;32109:48:0;;;;;;;;;32185:8;32205:4;32210:1;32205:7;;;;;;;;;;;;;32185:37;;32205:7;;;;;32215:4;32199:21;;32185:37;;;;;;;;;;;;;;32172:3;32178:1;32180;32178:3;32176:1;:5;32172:10;;;;;;;;;;;:50;-1:-1:-1;;;;;32172:50:0;;;;;;;;-1:-1:-1;32089:3:0;;32055:179;;;-1:-1:-1;32258:3:0;31807:463;-1:-1:-1;;;31807:463:0:o;11660:45::-;;;;;;;;;;;;;:::o;22393:211::-;22488:7;22508:22;22533:31;22547:5;22554:9;;22533:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22533:13:0;;-1:-1:-1;;;22533:31:0:i;:::-;22508:56;22393:211;-1:-1:-1;;;;;22393:211:0:o;26111:184::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;26232:10:::1;::::0;26254:33:::1;::::0;-1:-1:-1;;;26254:33:0;;26232:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;26232:10:0::1;::::0;;;26254:19:::1;::::0;:33:::1;::::0;26274:4;;;;26280:6;;;;26254:33:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16028:1;26111:184:::0;;;;:::o;16380:83::-;16450:5;;-1:-1:-1;;;;;16450:5:0;16380:83;:::o;27012:86::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;27072:10:::1;:18:::0;;-1:-1:-1;;;;;27072:18:0;;::::1;;;-1:-1:-1::0;;;;;;27072:18:0;;::::1;::::0;;;::::1;::::0;;27012:86::o;26893:107::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;26963:16:::1;:29:::0;;-1:-1:-1;;;;;;26963:29:0::1;-1:-1:-1::0;;;;;26963:29:0;;;::::1;::::0;;;::::1;::::0;;26893:107::o;25201:164::-;25283:18;;:::i;:::-;25321:29;;;;:19;:29;;;;;;;;:36;;;;;;;;;25314:43;;;;;;;;;;;-1:-1:-1;;25314:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25321:36;;25314:43;;25321:36;;25314:43;;;25321:36;25314:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25314:43:0;;;-1:-1:-1;;25314:43:0;;;;;;;;;;;;;-1:-1:-1;;;;;25314:43:0;;;;;;;25201:164;-1:-1:-1;;;25201:164:0:o;31035:345::-;31091:7;31111:9;31136;31131:223;31155:2;31151:1;:6;31131:223;;;31217:4;31211:1;31207:5;;31192:21;;;31191:30;31240:2;:7;-1:-1:-1;31240:7:0;;;:18;;;31256:2;31251:1;:7;;31240:18;31236:106;;;31299:1;31293:2;:7;31287:2;31283:1;:6;31282:18;31277:23;;;;31236:106;;;31337:5;;;31236:106;-1:-1:-1;31159:3:0;;31131:223;;;-1:-1:-1;31371:1:0;31035:345;-1:-1:-1;;31035:345:0:o;20225:239::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20313:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;20335:13:::1;:19:::0;;;;;;20313:42;;;;;;;;20306:49:::1;20313:42:::0;:21;20306:49:::1;:::i;:::-;-1:-1:-1::0;20306:49:0::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;20388:19:0;::::1;::::0;;:13:::1;:19;::::0;;;;;:26:::1;::::0;:23:::1;:26::i;:::-;-1:-1:-1::0;;;;;20366:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;:48;;;;20432:8:::1;:14:::0;;;;;:24;;;;;;;;;20425:31:::1;20432:24:::0;20366:19;20425:31:::1;:::i;:::-;;;;;;;;;20225:239:::0;;:::o;21549:367::-;21661:7;21690:18;;;:10;:18;;;;;;;;21689:19;21681:28;;;;;;21720:12;21762:46;21769:19;21779:8;21769:9;:19::i;:::-;21790:17;21800:6;21790:9;:17::i;21762:46::-;21745:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;21735:75;;;;;;21720:90;;21821:22;21846:30;21860:4;21866:9;21846:13;:30::i;:::-;21821:55;21549:367;-1:-1:-1;;;;;;21549:367:0:o;14218:20::-;;;;:::o;25055:134::-;25123:11;25154:27;;;:17;:27;;;;;;;25055:134::o;27110:166::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;27200:14:::1;::::0;27189:37:::1;::::0;;-1:-1:-1;;;27189:37:0;;;;27173:13:::1;::::0;-1:-1:-1;;;;;27200:14:0::1;::::0;27189:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;27200:14;27189:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27173:53;;27254:2;:14;27245:23:::0;;;::::1;27237:5;:31:::0;-1:-1:-1;27110:166:0:o;21053:144::-;21127:14;;:::i;:::-;-1:-1:-1;;;;;21161:21:0;;;;;;:15;:21;;;;;;;;:28;;;;;;;;;21154:35;;;;;;;;;;;-1:-1:-1;;21154:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21161:28;;21154:35;;21161:28;;21154:35;;;21161:28;21154:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21053:144;;;;:::o;25377:109::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;25456:22:::1;:15;25474:4:::0;;25456:22:::1;:::i;:::-;;25377:109:::0;;:::o;27611:118::-;15988:5;;27672:4;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;27697:23:::1;27712:7;27697:14;:23::i;19373:574::-:0;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;19507:10:::1;::::0;19499:42:::1;::::0;-1:-1:-1;;;19499:42:0;;19507:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;19507:10:0::1;::::0;19499:32:::1;::::0;:42:::1;::::0;19532:8;;19499:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;19499:42:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;19495:445;;19657:33;19675:4;19681:8;19657:17;:33::i;:::-;19656:34;19648:64;;;;-1:-1:-1::0;;;19648:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19749:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:26:::1;::::0;19773:1:::1;19749:23;:26::i;:::-;-1:-1:-1::0;;;;;19727:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;;:48;;;;19817:27;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;;19825:8;;19817:27;;;;;;19825:8;19817:27;;19825:8;19817:27;::::1;;::::0;::::1;::::0;;;-1:-1:-1;19817:27:0;;;-1:-1:-1;;;19817:27:0::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;19790:14:0;::::1;::::0;;:8:::1;:14:::0;;;;;;:24;;;;;;;:54;;;;:24;;:54:::1;::::0;:24;;:54;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19790:54:0::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;19904:14:0;::::1;;::::0;;;:8:::1;:14:::0;;;;;;:24;;;;;;;;19859:21;;;:15:::1;:21:::0;;;;;19881:13:::1;:19:::0;;;;;;19859:42;;;;;;;;;:69;;:42;;:69:::1;::::0;:42;;19904:24;;19859:69:::1;::::0;;::::1;;;;-1:-1:-1::0;;19859:69:0;::::1;;;:::i;:::-;-1:-1:-1::0;19859:69:0::1;::::0;;::::1;::::0;;::::1;::::0;19495:445:::1;;;19581:33;;-1:-1:-1::0;;;19581:33:0::1;;;;;;;:::i;19495:445::-;19373:574:::0;;;;;:::o;20923:118::-;-1:-1:-1;;;;;21014:19:0;20983:11;21014:19;;;:13;:19;;;;;;;20923:118::o;26504:155::-;26602:14;;26635:16;;;-1:-1:-1;;;26635:16:0;;;;26555:5;;-1:-1:-1;;;;;26602:14:0;;;;26635;;:16;;;;;;;;;;;;;;;26602:14;26635:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26628:23;;;26504:155;:::o;26307:185::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;26423:10:::1;::::0;26445:39:::1;::::0;-1:-1:-1;;;26445:39:0;;26423:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;26423:10:0::1;::::0;;;26445:23:::1;::::0;:39:::1;::::0;26469:8;;26479:4;;26445:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16028:1;26307:185:::0;;:::o;24246:354::-;24317:22;;;;:12;:22;;;;;:28;;;-1:-1:-1;;;;;24317:28:0;24349:10;24317:42;24309:92;;;;-1:-1:-1;;;24309:92:0;;;;;;;:::i;:::-;24419:29;;;;:19;:29;;;;;;;;24449:17;:27;;;;;;24419:58;;;;;;;;24412:65;24419:58;:29;24412:65;:::i;:::-;-1:-1:-1;24412:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;24412:65:0;;;24518:27;;;:17;:27;;;;;;:34;;:31;:34::i;:::-;24488:27;;;;:17;:27;;;;;;;;:64;;;;24570:12;:22;;;;;;24563:29;24570:22;24488:27;24563:29;:::i;:::-;-1:-1:-1;24563:29:0;;;;;;;;;-1:-1:-1;;;;;;24563:29:0;;;-1:-1:-1;24246:354:0:o;18389:966::-;18580:14;;18633:10;;18659;;-1:-1:-1;;;;;18580:14:0;;;;;18633:10;;;;;;;18659;;18655:371;;;18747:5;;18694:59;;-1:-1:-1;;;18694:59:0;;-1:-1:-1;;;;;18694:25:0;;;;;:59;;18720:10;;18740:4;;18747:5;18694:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18686:86;;;;-1:-1:-1;;;18686:86:0;;;;;;;:::i;:::-;18827:14;;18848:5;;18816:38;;-1:-1:-1;;;18816:38:0;;-1:-1:-1;;;;;18827:14:0;;;;18816:31;;:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18655:371;;;18941:16;;18960:5;;18895:71;;-1:-1:-1;;;18895:71:0;;-1:-1:-1;;;;;18895:25:0;;;;;;:71;;18921:10;;18941:16;;;;18895:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18887:98;;;;-1:-1:-1;;;18887:98:0;;;;;;;:::i;:::-;19046:14;19063:63;19087:8;19097:6;19105:8;;19115:10;;19063:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19063:23:0;;-1:-1:-1;;;19063:63:0:i;:::-;-1:-1:-1;;;;;19145:17:0;;;;;;:9;:17;;;;;;19046:80;;-1:-1:-1;19145:17:0;;19137:43;;;;-1:-1:-1;;;19137:43:0;;;;;;;:::i;:::-;19191:18;;;;:10;:18;;;;;;;;;:25;;-1:-1:-1;;19191:25:0;19212:4;19191:25;;;;;;19255:15;19248:44;;;;;;-1:-1:-1;;19248:44:0;;;;19191:25;19248:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19227:18;;19248:44;;;;19255:15;19248:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19272:19;19282:8;19272:9;:19::i;19248:44::-;19303;;-1:-1:-1;;;19303:44:0;;19227:65;;-1:-1:-1;;;;;;19303:13:0;;;;;:44;;19317:3;;19322:8;;19227:65;;19338:8;;;;19303:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18389:966;;;;;;;;;;;:::o;21435:102::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21502:19:0::1;21524:5;21502:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;21502:27:0::1;::::0;;21435:102::o;16138:144::-;15988:5;;-1:-1:-1;;;;;15988:5:0;15974:10;:19;15966:51;;;;-1:-1:-1;;;15966:51:0;;;;;;;:::i;:::-;16231:5:::1;::::0;16222:25:::1;::::0;-1:-1:-1;;;;;16222:25:0;;::::1;::::0;16231:5:::1;::::0;16222:25:::1;::::0;16231:5:::1;::::0;16222:25:::1;16258:5;:16:::0;;-1:-1:-1;;;;;;16258:16:0::1;-1:-1:-1::0;;;;;16258:16:0;;;::::1;::::0;;;::::1;::::0;;16138:144::o;17261:1116::-;17408:14;;17461:10;;-1:-1:-1;;;;;17408:14:0;;;;;17461:10;;;;17483:22;;:::i;:::-;17517:10;17508:20;;;;:8;:20;;;;;;;;:30;;;;;;;;;17483:55;;;;;;;;;;;-1:-1:-1;;17483:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17508:30;;17483:55;;17508:30;;17483:55;;;17508:30;17483:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17577:31;17601:5;;17584:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;17584:23:0;;;;;;;;;;17577:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17557:7;:16;;;:51;17549:86;;;;-1:-1:-1;;;17549:86:0;;;;;;;:::i;:::-;17674:10;;;;17670:371;;;17762:5;;17709:59;;-1:-1:-1;;;17709:59:0;;-1:-1:-1;;;;;17709:25:0;;;;;:59;;17735:10;;17755:4;;17762:5;17709:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17701:86;;;;-1:-1:-1;;;17701:86:0;;;;;;;:::i;:::-;17842:14;;17863:5;;17831:38;;-1:-1:-1;;;17831:38:0;;-1:-1:-1;;;;;17842:14:0;;;;17831:31;;:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17670:371;;;17956:16;;17975:5;;17910:71;;-1:-1:-1;;;17910:71:0;;-1:-1:-1;;;;;17910:25:0;;;;;;:71;;17936:10;;17956:16;;;;17910:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17902:98;;;;-1:-1:-1;;;17902:98:0;;;;;;;:::i;:::-;18079:15;18072:44;;;;;;;;;;;;;-1:-1:-1;;18072:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;18051:18;;18072:44;;;;18079:15;;18072:44;;18079:15;18072:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18096:19;18106:8;18096:9;:19::i;18072:44::-;18162:15;;18127:51;;-1:-1:-1;;;18127:51:0;;18051:65;;-1:-1:-1;;;;;;18127:13:0;;;;;:51;;18141:3;;18146:8;;18051:65;;18162:15;18127:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18212:10:0;18196:27;;;;:15;:27;;;;;;;;18224:13;:25;;;;;;18196:54;;;;;;;;-1:-1:-1;18196:27:0;-1:-1:-1;18189:61:0;18196:54;:27;18189:61;:::i;:::-;-1:-1:-1;18189:61:0;;;;;;;;;18277:10;18268:20;;:8;:20;;;;;;;;:30;;;;;;;;;18261:37;18268:30;18189:61;18261:37;:::i;:::-;-1:-1:-1;18261:37:0;;;;;;;;18351:10;18337:25;;:13;:25;;;;;;:32;;:29;:32::i;:::-;18323:10;18309:25;;;;:13;:25;;;;;:60;-1:-1:-1;;;;;;;;17261:1116:0:o;20476:139::-;20549:14;;:::i;:::-;-1:-1:-1;;;;;20583:14:0;;;;;;:8;:14;;;;;;;;:24;;;;;;;;;20576:31;;;;;;;;;;;-1:-1:-1;;20576:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20583:24;;20576:31;;20583:24;;20576:31;;;20583:24;20576:31;;;;;;;;;;;;;;;;;;;;;;;;6111:136;6169:7;6196:43;6200:1;6203;6196:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6189:50;6111:136;-1:-1:-1;;;6111:136:0:o;12884:521::-;12973:4;12998:22;;;:13;:22;;;;;;:32;-1:-1:-1;12998:32:0;12990:81;;;;-1:-1:-1;;;12990:81:0;;;;;;;:::i;:::-;13090:17;;;;:8;:17;;;;;;;;13082:46;;;;-1:-1:-1;;;13082:46:0;;;;;;;:::i;:::-;13176:14;;13202:30;;-1:-1:-1;;;13202:30:0;;-1:-1:-1;;;;;13176:14:0;;;;;;13202:17;;:30;;13220:3;;13225:6;;13202:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13268:22:0;;;;:13;:22;;;;;;:34;;-1:-1:-1;13295:6:0;13268:26;:34::i;:::-;13243:22;;;;:13;:22;;;;;:59;13349:6;13335:12;:10;:12::i;:::-;-1:-1:-1;;;;;13318:47:0;;13357:7;13318:47;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;13393:4:0;;12884:521;-1:-1:-1;;;;12884:521:0:o;29640:530::-;29691:27;29745:2;29762:11;29758:54;;-1:-1:-1;;29790:10:0;;;;;;;;;;;;-1:-1:-1;;;29790:10:0;;;;;;29758:54;29831:6;29822;29867:69;29874:6;;29867:69;;29897:5;;29922:2;29917:7;;;;29867:69;;;29946:17;29976:3;-1:-1:-1;;;;;29966:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29966:14:0;-1:-1:-1;29946:34:0;-1:-1:-1;;;30000:7:0;;30018:115;30025:11;;30018:115;;30090:2;30081:6;:11;30076:2;:16;30065:29;;30053:4;30058:3;;;;;;;30053:9;;;;;;;;;;;:41;-1:-1:-1;;;;;30053:41:0;;;;;;;;-1:-1:-1;30119:2:0;30109:12;;;;30018:115;;;-1:-1:-1;30157:4:0;29640:530;-1:-1:-1;;;;;29640:530:0:o;27919:144::-;27992:13;28049:1;28052;28032:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28018:37;;27919:144;;;;:::o;28373:700::-;28451:7;28479:3;:10;28493:2;28479:16;28471:51;;;;-1:-1:-1;;;28471:51:0;;;;;;;:::i;:::-;28696:2;28687:12;;28681:19;28734:2;28725:12;;28719:19;28780:2;28771:12;;28765:19;28535:9;28757:28;28908:2;28904:6;;28900:46;;;28932:2;28927:7;28900:46;28966:1;:7;;28971:2;28966:7;:18;;;;28977:1;:7;;28982:2;28977:7;28966:18;28958:58;;;;-1:-1:-1;;;28958:58:0;;;;;;;:::i;:::-;29036:29;29051:4;29057:1;29060;29063;29036:14;:29::i;23992:242::-;24064:4;24102:22;;;:12;:22;;;;;;;;24081:51;;;;;;-1:-1:-1;;24081:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;:51;;24102:22;24081:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24168:9:0;;;;;;;;;;-1:-1:-1;24168:9:0;;24196:22;;;;;;;;24158:20;24196:30;;;23992:242;-1:-1:-1;;;;;;23992:242:0:o;5647:181::-;5705:7;5737:5;;;5761:6;;;;5753:46;;;;-1:-1:-1;;;5753:46:0;;;;;;;:::i;13602:124::-;13655:4;13672:17;;;:8;:17;;;;;:24;;-1:-1:-1;;13672:24:0;13692:4;13672:24;;;;;;13692:4;13602:124::o;11336:98::-;11416:10;11336:98;:::o;13738:128::-;13794:4;13811:17;;;:8;:17;;;;;:25;;-1:-1:-1;;13811:25:0;;;-1:-1:-1;;13738:128:0:o;19959:254::-;-1:-1:-1;;;;;20079:14:0;;20041:4;20079:14;;;:8;:14;;;;;;;;:24;;;;;;;;20058:53;;;;;;-1:-1:-1;;20058:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;:53;;20079:24;20058:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20147:9:0;;;;;;;;;;-1:-1:-1;20147:9:0;;20175:22;;;;;;;;20137:20;20175:30;;;19959:254;-1:-1:-1;;;;;;;19959:254:0:o;6550:192::-;6636:7;6672:12;6664:6;;;;6656:29;;;;-1:-1:-1;;;6656:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6708:5:0;;;6550:192::o;29081:327::-;29170:7;29190:19;:56;;;;;;;;;;;;;;;;;;;29257:20;29307:6;29315:1;29290:27;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29280:38;;;;;;29257:61;;29329:12;29344:32;29354:12;29368:1;29371;29374;29344:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29344:32:0;;-1:-1:-1;;29344:32:0;;;29081:327;-1:-1:-1;;;;;;;;;29081:327:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;722:336;;;836:3;829:4;821:6;817:17;813:27;803:2;;-1:-1;;844:12;803:2;-1:-1;874:20;;-1:-1;;;;;903:30;;900:2;;;-1:-1;;936:12;900:2;980:4;972:6;968:17;956:29;;1031:3;980:4;1011:17;972:6;997:32;;994:41;991:2;;;1048:1;;1038:12;991:2;796:262;;;;;:::o;1067:440::-;;1168:3;1161:4;1153:6;1149:17;1145:27;1135:2;;-1:-1;;1176:12;1135:2;1223:6;1210:20;1245:64;1260:48;1301:6;1260:48;:::i;:::-;1245:64;:::i;:::-;1236:73;;1329:6;1322:5;1315:21;1433:3;1365:4;1424:6;1357;1415:16;;1412:25;1409:2;;;1450:1;;1440:12;1409:2;45668:6;1365:4;1357:6;1353:17;1365:4;1391:5;1387:16;45645:30;45724:1;45706:16;;;1365:4;45706:16;45699:27;1391:5;1128:379;-1:-1;;1128:379::o;3194:241::-;;3298:2;3286:9;3277:7;3273:23;3269:32;3266:2;;;-1:-1;;3304:12;3266:2;85:6;72:20;97:33;124:5;97:33;:::i;3706:743::-;;;;;;3881:3;3869:9;3860:7;3856:23;3852:33;3849:2;;;-1:-1;;3888:12;3849:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3940:63;-1:-1;4068:2;4053:18;;4040:32;-1:-1;;;;;4081:30;;4078:2;;;-1:-1;;4114:12;4078:2;4152:65;4209:7;4200:6;4189:9;4185:22;4152:65;:::i;:::-;3843:606;;4134:83;;-1:-1;4134:83;;4254:2;4293:22;;2846:20;;4362:2;4401:22;;;497:20;;-1:-1;3843:606;-1:-1;;;;3843:606::o;4456:366::-;;;4577:2;4565:9;4556:7;4552:23;4548:32;4545:2;;;-1:-1;;4583:12;4545:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4635:63;4735:2;4774:22;;;;2846:20;;-1:-1;;;4539:283::o;4829:617::-;;;;;4987:2;4975:9;4966:7;4962:23;4958:32;4955:2;;;-1:-1;;4993:12;4955:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5045:63;-1:-1;5145:2;5184:22;;2846:20;;-1:-1;5281:2;5266:18;;5253:32;-1:-1;;;;;5294:30;;5291:2;;;-1:-1;;5327:12;5291:2;5365:65;5422:7;5413:6;5402:9;5398:22;5365:65;:::i;:::-;4949:497;;;;-1:-1;5347:83;-1:-1;;;;4949:497::o;5453:869::-;;;;;;;5648:3;5636:9;5627:7;5623:23;5619:33;5616:2;;;-1:-1;;5655:12;5616:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5707:63;-1:-1;5807:2;5846:22;;2846:20;;-1:-1;5943:2;5928:18;;5915:32;-1:-1;;;;;5956:30;;;5953:2;;;-1:-1;;5989:12;5953:2;6027:65;6084:7;6075:6;6064:9;6060:22;6027:65;:::i;:::-;6009:83;;-1:-1;6009:83;-1:-1;6157:2;6142:18;;6129:32;;-1:-1;6170:30;;;6167:2;;;-1:-1;;6203:12;6167:2;;6241:65;6298:7;6289:6;6278:9;6274:22;6241:65;:::i;:::-;5610:712;;;;-1:-1;5610:712;;-1:-1;5610:712;;6223:83;;5610:712;-1:-1;;;5610:712::o;6329:993::-;;;;;;;;6540:3;6528:9;6519:7;6515:23;6511:33;6508:2;;;-1:-1;;6547:12;6508:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;6599:63;-1:-1;6699:2;6738:22;;2846:20;;-1:-1;6835:2;6820:18;;6807:32;-1:-1;;;;;6848:30;;;6845:2;;;-1:-1;;6881:12;6845:2;6919:65;6976:7;6967:6;6956:9;6952:22;6919:65;:::i;:::-;6901:83;;-1:-1;6901:83;-1:-1;7021:2;7060:22;;2846:20;;-1:-1;7157:3;7142:19;;7129:33;;-1:-1;7171:30;;;7168:2;;;-1:-1;;7204:12;7168:2;;7242:64;7298:7;7289:6;7278:9;7274:22;7242:64;:::i;:::-;6502:820;;;;-1:-1;6502:820;;-1:-1;6502:820;;;;7224:82;;-1:-1;;;6502:820::o;7329:491::-;;;;7467:2;7455:9;7446:7;7442:23;7438:32;7435:2;;;-1:-1;;7473:12;7435:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7525:63;7625:2;7664:22;;2846:20;;-1:-1;7733:2;7772:22;;;2846:20;;7429:391;-1:-1;;;7429:391::o;7827:257::-;;7939:2;7927:9;7918:7;7914:23;7910:32;7907:2;;;-1:-1;;7945:12;7907:2;376:6;370:13;46929:5;44807:13;44800:21;46907:5;46904:32;46894:2;;-1:-1;;46940:12;8091:241;;8195:2;8183:9;8174:7;8170:23;8166:32;8163:2;;;-1:-1;;8201:12;8163:2;-1:-1;497:20;;8157:175;-1:-1;8157:175::o;8339:263::-;;8454:2;8442:9;8433:7;8429:23;8425:32;8422:2;;;-1:-1;;8460:12;8422:2;-1:-1;645:13;;8416:186;-1:-1;8416:186::o;8609:490::-;;;;8749:2;8737:9;8728:7;8724:23;8720:32;8717:2;;;-1:-1;;8755:12;8717:2;510:6;497:20;8807:63;;8935:2;8924:9;8920:18;8907:32;-1:-1;;;;;8951:6;8948:30;8945:2;;;-1:-1;;8981:12;8945:2;9019:64;9075:7;9066:6;9055:9;9051:22;9019:64;:::i;:::-;8711:388;;9001:82;;-1:-1;9001:82;;-1:-1;;;;8711:388::o;9106:345::-;;9219:2;9207:9;9198:7;9194:23;9190:32;9187:2;;;-1:-1;;9225:12;9187:2;9283:17;9270:31;-1:-1;;;;;9313:6;9310:30;9307:2;;;-1:-1;;9343:12;9307:2;9373:62;9427:7;9418:6;9407:9;9403:22;9373:62;:::i;9458:367::-;;;9582:2;9570:9;9561:7;9557:23;9553:32;9550:2;;;-1:-1;;9588:12;9550:2;9646:17;9633:31;-1:-1;;;;;9676:6;9673:30;9670:2;;;-1:-1;;9706:12;9670:2;9744:65;9801:7;9792:6;9781:9;9777:22;9744:65;:::i;:::-;9726:83;;;;-1:-1;9544:281;-1:-1;;;;9544:281::o;9832:618::-;;;;;9993:2;9981:9;9972:7;9968:23;9964:32;9961:2;;;-1:-1;;9999:12;9961:2;10057:17;10044:31;-1:-1;;;;;10095:18;10087:6;10084:30;10081:2;;;-1:-1;;10117:12;10081:2;10155:65;10212:7;10203:6;10192:9;10188:22;10155:65;:::i;:::-;10137:83;;-1:-1;10137:83;-1:-1;10285:2;10270:18;;10257:32;;-1:-1;10298:30;;;10295:2;;;-1:-1;;10331:12;10295:2;;10369:65;10426:7;10417:6;10406:9;10402:22;10369:65;:::i;10457:362::-;;10582:2;10570:9;10561:7;10557:23;10553:32;10550:2;;;-1:-1;;10588:12;10550:2;10639:17;10633:24;-1:-1;;;;;10669:6;10666:30;10663:2;;;-1:-1;;10699:12;10663:2;10771:22;;2433:4;2421:17;;2417:27;-1:-1;2407:2;;-1:-1;;2448:12;2407:2;2488:6;2482:13;2510:65;2525:49;2567:6;2525:49;:::i;2510:65::-;2595:6;2588:5;2581:21;2699:3;10582:2;2690:6;2623;2681:16;;2678:25;2675:2;;;-1:-1;;2706:12;2675:2;2726:39;2758:6;10582:2;2657:5;2653:16;10582:2;2623:6;2619:17;2726:39;:::i;10826:472::-;;;10957:2;10945:9;10936:7;10932:23;10928:32;10925:2;;;-1:-1;;10963:12;10925:2;11021:17;11008:31;-1:-1;;;;;11051:6;11048:30;11045:2;;;-1:-1;;11081:12;11045:2;11111:63;11166:7;11157:6;11146:9;11142:22;11111:63;:::i;:::-;11101:73;11211:2;11250:22;;;;497:20;;-1:-1;;;;10919:379::o;11823:366::-;;;11944:2;11932:9;11923:7;11919:23;11915:32;11912:2;;;-1:-1;;11950:12;11912:2;-1:-1;;2846:20;;;12102:2;12141:22;;;497:20;;-1:-1;11906:283::o;12196:973::-;;;;;;;12397:3;12385:9;12376:7;12372:23;12368:33;12365:2;;;-1:-1;;12404:12;12365:2;2859:6;2846:20;12456:63;;12584:2;12573:9;12569:18;12556:32;-1:-1;;;;;12608:18;12600:6;12597:30;12594:2;;;-1:-1;;12630:12;12594:2;12668:65;12725:7;12716:6;12705:9;12701:22;12668:65;:::i;:::-;12650:83;;-1:-1;12650:83;-1:-1;12770:2;12809:22;;72:20;;-1:-1;97:33;72:20;97:33;:::i;:::-;12778:63;;-1:-1;12878:2;12917:22;;2846:20;;-1:-1;13014:3;12999:19;;12986:33;;13028:30;;;13025:2;;;-1:-1;;13061:12;13025:2;;13091:62;13145:7;13136:6;13125:9;13121:22;13091:62;:::i;:::-;13081:72;;;12359:810;;;;;;;;:::o;13176:472::-;;;13307:2;13295:9;13286:7;13282:23;13278:32;13275:2;;;-1:-1;;13313:12;13275:2;2859:6;2846:20;13365:63;;13493:2;13482:9;13478:18;13465:32;-1:-1;;;;;13509:6;13506:30;13503:2;;;-1:-1;;13539:12;13503:2;13569:63;13624:7;13615:6;13604:9;13600:22;13569:63;:::i;:::-;13559:73;;;13269:379;;;;;:::o;14028:595::-;;;;14175:2;14163:9;14154:7;14150:23;14146:32;14143:2;;;-1:-1;;14181:12;14143:2;2859:6;2846:20;14233:63;;14333:2;14376:9;14372:22;2846:20;14341:63;;14469:2;14458:9;14454:18;14441:32;-1:-1;;;;;14485:6;14482:30;14479:2;;;-1:-1;;14515:12;14479:2;14545:62;14599:7;14590:6;14579:9;14575:22;14545:62;:::i;:::-;14535:72;;;14137:486;;;;;:::o;14630:847::-;;;;;;14814:3;14802:9;14793:7;14789:23;14785:33;14782:2;;;-1:-1;;14821:12;14782:2;2859:6;2846:20;14873:63;;14973:2;15016:9;15012:22;2846:20;14981:63;;15109:2;15098:9;15094:18;15081:32;-1:-1;;;;;15133:18;15125:6;15122:30;15119:2;;;-1:-1;;15155:12;15119:2;15193:65;15250:7;15241:6;15230:9;15226:22;15193:65;:::i;:::-;15175:83;;-1:-1;15175:83;-1:-1;15323:2;15308:18;;15295:32;;-1:-1;15336:30;;;15333:2;;;-1:-1;;15369:12;15333:2;;15399:62;15453:7;15444:6;15433:9;15429:22;15399:62;:::i;:::-;15389:72;;;14776:701;;;;;;;;:::o;15484:259::-;;15597:2;15585:9;15576:7;15572:23;15568:32;15565:2;;;-1:-1;;15603:12;15565:2;3139:6;3133:13;45190:4;47297:5;45179:16;47274:5;47271:33;47261:2;;-1:-1;;47308:12;17176:300;;44155:6;44150:3;44143:19;45668:6;45663:3;44192:4;44187:3;44183:14;45645:30;-1:-1;44192:4;45715:6;44187:3;45706:16;;45699:27;44192:4;46461:7;;46465:2;17462:6;46445:14;46441:28;44187:3;17431:39;;17424:46;;17278:198;;;;;:::o;17830:327::-;;17965:5;43726:12;44155:6;44150:3;44143:19;18049:52;18094:6;44192:4;44187:3;44183:14;44192:4;18075:5;18071:16;18049:52;:::i;:::-;46461:7;46445:14;-1:-1;;46441:28;18113:39;;;;44192:4;18113:39;;17912:245;-1:-1;;17912:245::o;25799:253::-;46556:2;46552:14;;;;-1:-1;;46552:14;16218:58;;26024:2;26015:12;;25915:137::o;26059:253::-;16460:37;;;26284:2;26275:12;;26175:137::o;26319:271::-;;16948:5;43726:12;17059:52;17104:6;17099:3;17092:4;17085:5;17081:16;17059:52;:::i;:::-;17123:16;;;;;26453:137;-1:-1;;26453:137::o;26597:410::-;;16948:5;43726:12;17059:52;17104:6;17099:3;17092:4;17085:5;17081:16;17059:52;:::i;:::-;17123:16;;;;16460:37;;;-1:-1;17092:4;26970:12;;26759:248;-1:-1;26759:248::o;27014:295::-;;45668:6;45663:3;45658;45645:30;45706:16;;45699:27;;;45706:16;27160:149;-1:-1;27160:149::o;27598:436::-;;16948:5;43726:12;17059:52;17104:6;17099:3;17092:4;17085:5;17081:16;17059:52;:::i;:::-;43726:12;;17123:16;;;;17059:52;43726:12;17123:16;17092:4;17081:16;;17059:52;:::i;:::-;17123:16;;27782:252;-1:-1;;;;27782:252::o;28301:222::-;-1:-1;;;;;44974:54;;;;15960:37;;28428:2;28413:18;;28399:124::o;28530:349::-;-1:-1;;;;;44974:54;;;15829:58;;44974:54;;28865:2;28850:18;;15960:37;28693:2;28678:18;;28664:215::o;28886:460::-;-1:-1;;;;;44974:54;;;15829:58;;44974:54;;;;29249:2;29234:18;;15960:37;29332:2;29317:18;;16460:37;;;;29077:2;29062:18;;29048:298::o;29804:333::-;-1:-1;;;;;44974:54;;;;15960:37;;30123:2;30108:18;;16460:37;29959:2;29944:18;;29930:207::o;30144:772::-;;914:18;;46552:14;;;15990:5;44974:54;15967:3;15960:37;16490:5;30580:2;30569:9;30565:18;16460:37;30415:3;30617:2;30606:9;30602:18;30595:48;30657:88;30415:3;30404:9;30400:19;30731:6;30723;30657:88;:::i;:::-;30793:9;30787:4;30783:20;30778:2;30767:9;30763:18;30756:48;30818:88;30901:4;30892:6;30884;30818:88;:::i;30923:752::-;;914:18;;46552:14;;;15990:5;44974:54;15967:3;15960:37;16490:5;31349:2;31338:9;31334:18;16460:37;31184:3;31386:2;31375:9;31371:18;31364:48;31426:78;31184:3;31173:9;31169:19;31490:6;31426:78;:::i;:::-;31552:9;31546:4;31542:20;31537:2;31526:9;31522:18;31515:48;31577:88;31660:4;31651:6;31643;31577:88;:::i;:::-;31569:96;31155:520;-1:-1;;;;;;;;31155:520::o;31682:732::-;;914:18;;46552:14;;;44978:5;44974:54;15967:3;15960:37;16490:5;32098:2;32087:9;32083:18;16460:37;31933:3;32135:2;32124:9;32120:18;32113:48;32175:78;31933:3;31922:9;31918:19;32239:6;32175:78;:::i;:::-;32301:9;32295:4;32291:20;32286:2;32275:9;32271:18;32264:48;32326:78;32399:4;32390:6;32326:78;:::i;:::-;32318:86;31904:510;-1:-1;;;;;;;31904:510::o;32421:210::-;44807:13;;44800:21;16353:34;;32542:2;32527:18;;32513:118::o;32867:432::-;16460:37;;;33208:2;33193:18;;16460:37;;;;44807:13;44800:21;33285:2;33270:18;;16353:34;33044:2;33029:18;;33015:284::o;33306:548::-;16460:37;;;45190:4;45179:16;;;;33674:2;33659:18;;25752:35;33757:2;33742:18;;16460:37;33840:2;33825:18;;16460:37;33513:3;33498:19;;33484:370::o;33861:549::-;;34076:2;34097:17;34090:47;34151:88;34076:2;34065:9;34061:18;34225:6;34217;34151:88;:::i;:::-;34287:9;34281:4;34277:20;34272:2;34261:9;34257:18;34250:48;34312:88;34395:4;34386:6;34378;34312:88;:::i;34417:310::-;;34564:2;34585:17;34578:47;34639:78;34564:2;34553:9;34549:18;34703:6;34639:78;:::i;34734:416::-;34934:2;34948:47;;;19110:2;34919:18;;;44143:19;-1:-1;;;44183:14;;;19126:39;19184:12;;;34905:245::o;35157:416::-;35357:2;35371:47;;;19435:2;35342:18;;;44143:19;-1:-1;;;44183:14;;;19451:44;19514:12;;;35328:245::o;35580:416::-;35780:2;35794:47;;;19765:2;35765:18;;;44143:19;-1:-1;;;44183:14;;;19781:45;19845:12;;;35751:245::o;36003:416::-;36203:2;36217:47;;;20096:2;36188:18;;;44143:19;-1:-1;;;44183:14;;;20112:42;20173:12;;;36174:245::o;36426:416::-;36626:2;36640:47;;;20424:2;36611:18;;;44143:19;20460:29;44183:14;;;20440:50;20509:12;;;36597:245::o;36849:416::-;37049:2;37063:47;;;20760:2;37034:18;;;44143:19;20796:29;44183:14;;;20776:50;20845:12;;;37020:245::o;37272:416::-;37472:2;37486:47;;;21096:2;37457:18;;;44143:19;-1:-1;;;44183:14;;;21112:45;21176:12;;;37443:245::o;37695:416::-;37895:2;37909:47;;;21427:2;37880:18;;;44143:19;21463:25;44183:14;;;21443:46;21508:12;;;37866:245::o;38118:416::-;38318:2;38332:47;;;21759:2;38303:18;;;44143:19;21795:26;44183:14;;;21775:47;21841:12;;;38289:245::o;38541:416::-;38741:2;38755:47;;;22092:2;38726:18;;;44143:19;-1:-1;;;44183:14;;;22108:36;22163:12;;;38712:245::o;38964:416::-;39164:2;39178:47;;;22414:2;39149:18;;;44143:19;-1:-1;;;44183:14;;;22430:37;22486:12;;;39135:245::o;39387:416::-;39587:2;39601:47;;;22737:2;39572:18;;;44143:19;-1:-1;;;44183:14;;;22753:42;22814:12;;;39558:245::o;39810:416::-;40010:2;40024:47;;;23065:2;39995:18;;;44143:19;23101:34;44183:14;;;23081:55;-1:-1;;;23156:12;;;23149:29;23197:12;;;39981:245::o;40233:416::-;40433:2;40447:47;;;23448:2;40418:18;;;44143:19;-1:-1;;;44183:14;;;23464:40;23523:12;;;40404:245::o;40656:416::-;40856:2;40870:47;;;23774:2;40841:18;;;44143:19;23810:34;44183:14;;;23790:55;-1:-1;;;23865:12;;;23858:28;23905:12;;;40827:245::o;41079:366::-;;41254:2;41275:17;41268:47;24224:16;24218:23;24149:4;41254:2;41243:9;41239:18;24254:38;24307:73;24140:14;41243:9;24140:14;24361:12;24307:73;:::i;:::-;24299:81;;41254:2;24462:5;24458:16;24452:23;24149:4;41243:9;24529:14;16460:37;41321:114;;;;41225:220;;;;:::o;41452:382::-;;41635:2;41656:17;41649:47;24892:16;24886:23;24817:4;41635:2;41624:9;41620:18;24922:38;24975:73;24808:14;41624:9;24808:14;25029:12;24975:73;:::i;:::-;41635:2;25126:16;;25120:23;25197:14;;;;16460:37;;;;25281:16;;;25275:23;-1:-1;;;;;44974:54;24817:4;25352:14;;;15960:37;;;;-1:-1;24967:81;;41606:228;-1:-1;41606:228::o;42070:421::-;;16490:5;16467:3;16460:37;42245:2;42363;42352:9;42348:18;42341:48;42403:78;42245:2;42234:9;42230:18;42467:6;42403:78;:::i;42498:214::-;45190:4;45179:16;;;;25752:35;;42621:2;42606:18;;42592:120::o;42719:256::-;42781:2;42775:9;42807:17;;;-1:-1;;;;;42867:34;;42903:22;;;42864:62;42861:2;;;42939:1;;42929:12;42861:2;42781;42948:22;42759:216;;-1:-1;42759:216::o;42982:321::-;;-1:-1;;;;;43117:6;43114:30;43111:2;;;-1:-1;;43147:12;43111:2;-1:-1;46461:7;43201:17;-1:-1;;43197:33;43288:4;43278:15;;43048:255::o;45741:268::-;45806:1;45813:101;45827:6;45824:1;45821:13;45813:101;;;45894:11;;;45888:18;45875:11;;;45868:39;45849:2;45842:10;45813:101;;;45929:6;45926:1;45923:13;45920:2;;;45806:1;45985:6;45980:3;45976:16;45969:27;45920:2;;45790:219;;;:::o;46584:117::-;-1:-1;;;;;44974:54;;46643:35;;46633:2;;46692:1;;46682:12
Swarm Source
ipfs://df0a71af19a3779eec6b00292761fb6798319030f62f7b2b752b25bb20df44ac
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.