Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
366 UP
Holders
85
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 UPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
UnlistedPunks
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; // imports import "./IERC165.sol"; import "./IERC721.sol"; import "./IERC721Metadata.sol"; import "./IERC721Enumerable.sol"; import "./IERC721TokenReceiver.sol"; // contract contract UnlistedPunks is ERC165, ERC721, ERC721Enumerable, ERC721Metadata { /** * @dev Types */ struct MintRequest { uint256 id; bytes32 cid; uint256 price; uint8 v; bytes32 r; bytes32 s; } /** * @dev Constants */ // base58 alphabet bytes constant private ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; // owner address address constant private _owner = 0x52678E3BfCC41833F3D8629DBa43814A716B2eDC; // token name string constant private _name = "UnlistedPunks"; // token symbol string constant private _symbol = "UP"; // contract metadata string constant private _metadata = "https://unlistedpunks.com/metadata.json"; // address who signs mint requests address constant private SIGNER_PUBLIC_ADDRESS = 0xDFC007450C78c510e597b7281938A9595E988AA4; // base URI string constant private BASE_URI = "ipfs://"; /** * @dev State */ // mapping from token ID to owner address mapping(uint256 => address) private _owners; // mapping owner address to token count mapping(address => uint256) private _balances; // mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // mapping from tokenId to its partial CID mapping(uint256 => bytes32) private _cids; // mapping from index to tokenId mapping(uint256 => uint256) private _tokens; // total supply counter uint256 private _totalSupply = 0; /** * @dev UnlistedPunks (Private) */ function _toBase58(bytes memory source) private pure returns (bytes memory) { if (source.length == 0) return new bytes(0); uint8[] memory digits = new uint8[](64); uint8 digitlength = 1; digits[0] = 0; for (uint256 i = 0; i<source.length; ++i) { uint carry = uint8(source[i]); for (uint256 j = 0; j<digitlength; ++j) { carry += uint(digits[j]) * 256; digits[j] = uint8(carry % 58); carry = carry / 58; } while (carry > 0) { digits[digitlength] = uint8(carry % 58); digitlength++; carry = carry / 58; } } // truncate uint8[] memory outputTruncate = new uint8[](digitlength); for (uint256 i = 0; i<digitlength; i++) { outputTruncate[i] = digits[i]; } // reverse uint8[] memory outputReverse = new uint8[](outputTruncate.length); for (uint256 i = 0; i<outputTruncate.length; i++) { outputReverse[i] = outputTruncate[outputTruncate.length-1-i]; } // to Alphabet bytes memory outputAlphabet = new bytes(outputReverse.length); for (uint256 i = 0; i<outputReverse.length; i++) { outputAlphabet[i] = ALPHABET[outputReverse[i]]; } // return return outputAlphabet; } /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if(to.code.length > 0){ // to is contract bytes4 retval = ERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, _data); return retval == ERC721TokenReceiver.onERC721Received.selector; } else { return true; } } /** * @dev UnlistedPunks (Public) */ function isMintable(uint256 tokenId) public view returns(bool){ return _owners[tokenId] == address(0); } function mint(MintRequest[] calldata request) public payable returns (uint256){ uint arrayLength = request.length; for (uint i = 0; i < arrayLength; i++) { require(_owners[request[i].id] == address(0), "already minted tokenId"); bytes32 documentHash = keccak256(abi.encode(request[i].id, request[i].cid, request[i].price)); bytes32 prefixedProof = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", documentHash)); address recovered = ecrecover(prefixedProof, request[i].v, request[i].r, request[i].s); require(recovered == SIGNER_PUBLIC_ADDRESS, "invalid signature on mint request"); _cids[request[i].id] = request[i].cid; _owners[request[i].id] = msg.sender; _tokens[_totalSupply + i] = request[i].id; emit Transfer(address(0), msg.sender, request[i].id); } _balances[msg.sender] += arrayLength; _totalSupply += arrayLength; return _totalSupply; } function withdraw() public { require(msg.sender == _owner, "only owner allowed"); payable(address(_owner)).transfer(address(this).balance); } function close() public { require(msg.sender == _owner, "only owner allowed"); selfdestruct(payable(_owner)); } /** * @dev Open Sea * https://docs.opensea.io/docs/contract-level-metadata */ function contractURI() public pure returns (string memory) { return "https://unlistedpunks.com/metadata.json"; } function owner() public pure returns (address) { return _owner; } /** * @dev IERC165 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) { return interfaceId == type(ERC165).interfaceId || interfaceId == type(ERC721).interfaceId || interfaceId == type(ERC721Metadata).interfaceId || interfaceId == type(ERC721Enumerable).interfaceId; } /** * @dev IERC721 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address tokenOwner) public view virtual override returns (uint256) { require(tokenOwner != address(0), "ERC721: balance query for the zero address"); return _balances[tokenOwner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address tokenOwner = _owners[tokenId]; require(tokenOwner != address(0), "ERC721: owner query for nonexistent token"); return tokenOwner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual payable override { address tokenOwner = _owners[tokenId]; require(to != tokenOwner, "ERC721: approval to current owner"); require(msg.sender == tokenOwner || isApprovedForAll(tokenOwner, msg.sender), "ERC721: approve caller is not owner nor approved for all"); _tokenApprovals[tokenId] = to; emit Approval(tokenOwner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_owners[tokenId] != address(0), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(msg.sender != operator, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address tokenOwner, address operator) public view virtual override returns (bool) { return _operatorApprovals[tokenOwner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual payable override { address tokenOwner = _owners[tokenId]; require(tokenOwner != address(0), "ERC721: operator query for nonexistent token"); require(msg.sender == tokenOwner || getApproved(tokenId) == msg.sender || isApprovedForAll(tokenOwner, msg.sender), "ERC721: transfer caller is not owner nor approved"); require(tokenOwner == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _tokenApprovals[tokenId] = address(0); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual payable override { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual payable override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev IERC721Metadata * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_owners[tokenId] != address(0), "ERC721Metadata: URI query for nonexistent token"); bytes memory cid = abi.encodePacked(bytes2(0x1220),_cids[tokenId]); return string(abi.encodePacked(BASE_URI, _toBase58(cid))); } /** * @dev IERC721Enumerable * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _totalSupply, "ERC721Enumerable: global index out of bounds"); return _tokens[index]; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address tokenOwner, uint256 index) public view virtual override returns (uint256) { uint256 currentIndex = 0; for(uint i=0; i<_totalSupply; i++){ if(_owners[_tokens[i]] == tokenOwner){ if(currentIndex == index){ return _tokens[i]; } else { currentIndex = currentIndex + 1; } } } revert("ERC721Enumerable: owner index out of bounds"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface ERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); }
// SPDX-License-Identifier: MIT /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. pragma solidity ^0.8.12; interface ERC721 /* is ERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external payable; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x780e9d63. interface ERC721Enumerable /* is ERC721 */ { /// @notice Count NFTs tracked by this contract /// @return A count of valid NFTs tracked by this contract, where each one of /// them has an assigned and queryable owner not equal to the zero address function totalSupply() external view returns (uint256); /// @notice Enumerate valid NFTs /// @dev Throws if `_index` >= `totalSupply()`. /// @param _index A counter less than `totalSupply()` /// @return The token identifier for the `_index`th NFT, /// (sort order not specified) function tokenByIndex(uint256 _index) external view returns (uint256); /// @notice Enumerate NFTs assigned to an owner /// @dev Throws if `_index` >= `balanceOf(_owner)` or if /// `_owner` is the zero address, representing invalid NFTs. /// @param _owner An address where we are interested in NFTs owned by them /// @param _index A counter less than `balanceOf(_owner)` /// @return The token identifier for the `_index`th NFT assigned to `_owner`, /// (sort order not specified) function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); }
// SPDX-License-Identifier: MIT /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x5b5e139f. pragma solidity ^0.8.12; interface ERC721Metadata /* is ERC721 */ { /// @notice A descriptive name for a collection of NFTs in this contract function name() external view returns (string memory _name); /// @notice An abbreviated name for NFTs in this contract function symbol() external view returns (string memory _symbol); /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. pragma solidity ^0.8.12; interface ERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. Return of other than the magic value MUST result in the /// transaction being reverted. /// Note: the contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"close","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes32","name":"cid","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct UnlistedPunks.MintRequest[]","name":"request","type":"tuple[]"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060065534801561001557600080fd5b5061376e806100256000396000f3fe6080604052600436106101355760003560e01c80634f6ccce7116100ab57806395d89b411161006f57806395d89b4114610418578063a22cb46514610443578063b88d4fde1461046c578063c87b56dd14610488578063e8a3d485146104c5578063e985e9c5146104f057610135565b80634f6ccce7146102f95780635b31cb36146103365780636352211e1461037357806370a08231146103b05780638da5cb5b146103ed57610135565b806323b872dd116100fd57806323b872dd146102265780632f745c5914610242578063358f7a751461027f5780633ccfd60b146102af57806342842e0e146102c657806343d726d6146102e257610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806318160ddd146101fb575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906121b8565b61052d565b60405161016e9190612200565b60405180910390f35b34801561018357600080fd5b5061018c6106cf565b60405161019991906122b4565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c4919061230c565b61070c565b6040516101d6919061237a565b60405180910390f35b6101f960048036038101906101f491906123c1565b6107ea565b005b34801561020757600080fd5b506102106109c1565b60405161021d9190612410565b60405180910390f35b610240600480360381019061023b919061242b565b6109cb565b005b34801561024e57600080fd5b50610269600480360381019061026491906123c1565b610dbe565b6040516102769190612410565b60405180910390f35b610299600480360381019061029491906124e3565b610ed5565b6040516102a69190612410565b60405180910390f35b3480156102bb57600080fd5b506102c4611393565b005b6102e060048036038101906102db919061242b565b611472565b005b3480156102ee57600080fd5b506102f7611492565b005b34801561030557600080fd5b50610320600480360381019061031b919061230c565b611541565b60405161032d9190612410565b60405180910390f35b34801561034257600080fd5b5061035d6004803603810190610358919061230c565b6115a2565b60405161036a9190612200565b60405180910390f35b34801561037f57600080fd5b5061039a6004803603810190610395919061230c565b61160c565b6040516103a7919061237a565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190612530565b6116bd565b6040516103e49190612410565b60405180910390f35b3480156103f957600080fd5b50610402611775565b60405161040f919061237a565b60405180910390f35b34801561042457600080fd5b5061042d611791565b60405161043a91906122b4565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612589565b6117ce565b005b610486600480360381019061048191906126f9565b61193a565b005b34801561049457600080fd5b506104af60048036038101906104aa919061230c565b611996565b6040516104bc91906122b4565b60405180910390f35b3480156104d157600080fd5b506104da611adf565b6040516104e791906122b4565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061277c565b611aff565b6040516105249190612200565b60405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f857507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600d81526020017f556e6c697374656450756e6b7300000000000000000000000000000000000000815250905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a69061282e565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610887906128c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108d057506108cf8133611aff565b5b61090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090690612952565b60405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600654905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906129e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610adf57503373ffffffffffffffffffffffffffffffffffffffff16610ac78361070c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af05750610aef8133611aff565b5b610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612a76565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490612b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0490612b9a565b60405180910390fd5b60006002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610caf9190612be9565b9250508190555060018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d059190612c1d565b925050819055508260008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000806000905060005b600654811015610e93578473ffffffffffffffffffffffffffffffffffffffff166000806005600085815260200190815260200160002054815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e805783821415610e7057600560008281526020019081526020016000205492505050610ecf565b600182610e7d9190612c1d565b91505b8080610e8b90612c73565b915050610dc8565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690612d2e565b60405180910390fd5b92915050565b60008083839050905060005b8181101561131757600073ffffffffffffffffffffffffffffffffffffffff16600080878785818110610f1757610f16612d4e565b5b905060c0020160000135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612dc9565b60405180910390fd5b6000858583818110610fbb57610fba612d4e565b5b905060c0020160000135868684818110610fd857610fd7612d4e565b5b905060c0020160200135878785818110610ff557610ff4612d4e565b5b905060c002016040013560405160200161101193929190612e02565b60405160208183030381529060405280519060200120905060008160405160200161103c9190612eb1565b604051602081830303815290604052805190602001209050600060018289898781811061106c5761106b612d4e565b5b905060c0020160600160208101906110849190612f10565b8a8a8881811061109757611096612d4e565b5b905060c00201608001358b8b898181106110b4576110b3612d4e565b5b905060c0020160a00135604051600081526020016040526040516110db9493929190612f4c565b6020604051602081039080840390855afa1580156110fd573d6000803e3d6000fd5b50505060206040510351905073dfc007450c78c510e597b7281938a9595e988aa473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613003565b60405180910390fd5b87878581811061119e5761119d612d4e565b5b905060c0020160200135600460008a8a888181106111bf576111be612d4e565b5b905060c0020160000135815260200190815260200160002081905550336000808a8a888181106111f2576111f1612d4e565b5b905060c0020160000135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087878581811061125b5761125a612d4e565b5b905060c002016000013560056000866006546112779190612c1d565b81526020019081526020016000208190555087878581811061129c5761129b612d4e565b5b905060c00201600001353373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050808061130f90612c73565b915050610ee1565b5080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113679190612c1d565b9250508190555080600660008282546113809190612c1d565b9250508190555060065491505092915050565b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c9061306f565b60405180910390fd5b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561146f573d6000803e3d6000fd5b50565b61148d8383836040518060200160405280600081525061193a565b505050565b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b9061306f565b60405180910390fd5b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff16ff5b60006006548210611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90613101565b60405180910390fd5b60056000838152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613193565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613225565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007352678e3bfcc41833f3d8629dba43814a716b2edc905090565b60606040518060400160405280600281526020017f5550000000000000000000000000000000000000000000000000000000000000815250905090565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490613291565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161192e9190612200565b60405180910390a35050565b6119458484846109cb565b61195184848484611b93565b611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613323565b60405180910390fd5b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a31906133b5565b60405180910390fd5b600061122060f01b6004600085815260200190815260200160002054604051602001611a67929190613422565b60405160208183030381529060405290506040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250611ab782611c97565b604051602001611ac89291906134c6565b604051602081830303815290604052915050919050565b60606040518060600160405280602781526020016136d860279139905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff163b1115611c8a5760008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401611bf59493929190613534565b6020604051808303816000875af1158015611c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c389190613595565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c8f565b600190505b949350505050565b6060600082511415611cf857600067ffffffffffffffff811115611cbe57611cbd6125ce565b5b6040519080825280601f01601f191660200182016040528015611cf05781602001600182028036833780820191505090505b509050612147565b6000604067ffffffffffffffff811115611d1557611d146125ce565b5b604051908082528060200260200182016040528015611d435781602001602082028036833780820191505090505b509050600060019050600082600081518110611d6257611d61612d4e565b5b602002602001019060ff16908160ff168152505060005b8451811015611eba576000858281518110611d9757611d96612d4e565b5b602001015160f81c60f81b60f81c60ff16905060005b8360ff16811015611e4457610100858281518110611dce57611dcd612d4e565b5b602002602001015160ff16611de391906135c2565b82611dee9190612c1d565b9150603a82611dfd919061364b565b858281518110611e1057611e0f612d4e565b5b602002602001019060ff16908160ff1681525050603a82611e31919061367c565b915080611e3d90612c73565b9050611dad565b505b6000811115611ea857603a81611e5c919061364b565b848460ff1681518110611e7257611e71612d4e565b5b602002602001019060ff16908160ff16815250508280611e91906136ad565b935050603a81611ea1919061367c565b9050611e46565b5080611eb390612c73565b9050611d79565b5060008160ff1667ffffffffffffffff811115611eda57611ed96125ce565b5b604051908082528060200260200182016040528015611f085781602001602082028036833780820191505090505b50905060005b8260ff16811015611f6e57838181518110611f2c57611f2b612d4e565b5b6020026020010151828281518110611f4757611f46612d4e565b5b602002602001019060ff16908160ff16815250508080611f6690612c73565b915050611f0e565b506000815167ffffffffffffffff811115611f8c57611f8b6125ce565b5b604051908082528060200260200182016040528015611fba5781602001602082028036833780820191505090505b50905060005b825181101561203657828160018551611fd99190612be9565b611fe39190612be9565b81518110611ff457611ff3612d4e565b5b602002602001015182828151811061200f5761200e612d4e565b5b602002602001019060ff16908160ff1681525050808061202e90612c73565b915050611fc0565b506000815167ffffffffffffffff811115612054576120536125ce565b5b6040519080825280601f01601f1916602001820160405280156120865781602001600182028036833780820191505090505b50905060005b825181101561213d576040518060600160405280603a81526020016136ff603a91398382815181106120c1576120c0612d4e565b5b602002602001015160ff16815181106120dd576120dc612d4e565b5b602001015160f81c60f81b8282815181106120fb576120fa612d4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061213590612c73565b91505061208c565b5080955050505050505b919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61219581612160565b81146121a057600080fd5b50565b6000813590506121b28161218c565b92915050565b6000602082840312156121ce576121cd612156565b5b60006121dc848285016121a3565b91505092915050565b60008115159050919050565b6121fa816121e5565b82525050565b600060208201905061221560008301846121f1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225557808201518184015260208101905061223a565b83811115612264576000848401525b50505050565b6000601f19601f8301169050919050565b60006122868261221b565b6122908185612226565b93506122a0818560208601612237565b6122a98161226a565b840191505092915050565b600060208201905081810360008301526122ce818461227b565b905092915050565b6000819050919050565b6122e9816122d6565b81146122f457600080fd5b50565b600081359050612306816122e0565b92915050565b60006020828403121561232257612321612156565b5b6000612330848285016122f7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061236482612339565b9050919050565b61237481612359565b82525050565b600060208201905061238f600083018461236b565b92915050565b61239e81612359565b81146123a957600080fd5b50565b6000813590506123bb81612395565b92915050565b600080604083850312156123d8576123d7612156565b5b60006123e6858286016123ac565b92505060206123f7858286016122f7565b9150509250929050565b61240a816122d6565b82525050565b60006020820190506124256000830184612401565b92915050565b60008060006060848603121561244457612443612156565b5b6000612452868287016123ac565b9350506020612463868287016123ac565b9250506040612474868287016122f7565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126124a3576124a261247e565b5b8235905067ffffffffffffffff8111156124c0576124bf612483565b5b6020830191508360c08202830111156124dc576124db612488565b5b9250929050565b600080602083850312156124fa576124f9612156565b5b600083013567ffffffffffffffff8111156125185761251761215b565b5b6125248582860161248d565b92509250509250929050565b60006020828403121561254657612545612156565b5b6000612554848285016123ac565b91505092915050565b612566816121e5565b811461257157600080fd5b50565b6000813590506125838161255d565b92915050565b600080604083850312156125a05761259f612156565b5b60006125ae858286016123ac565b92505060206125bf85828601612574565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126068261226a565b810181811067ffffffffffffffff82111715612625576126246125ce565b5b80604052505050565b600061263861214c565b905061264482826125fd565b919050565b600067ffffffffffffffff821115612664576126636125ce565b5b61266d8261226a565b9050602081019050919050565b82818337600083830152505050565b600061269c61269784612649565b61262e565b9050828152602081018484840111156126b8576126b76125c9565b5b6126c384828561267a565b509392505050565b600082601f8301126126e0576126df61247e565b5b81356126f0848260208601612689565b91505092915050565b6000806000806080858703121561271357612712612156565b5b6000612721878288016123ac565b9450506020612732878288016123ac565b9350506040612743878288016122f7565b925050606085013567ffffffffffffffff8111156127645761276361215b565b5b612770878288016126cb565b91505092959194509250565b6000806040838503121561279357612792612156565b5b60006127a1858286016123ac565b92505060206127b2858286016123ac565b9150509250929050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612818602c83612226565b9150612823826127bc565b604082019050919050565b600060208201905081810360008301526128478161280b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006128aa602183612226565b91506128b58261284e565b604082019050919050565b600060208201905081810360008301526128d98161289d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061293c603883612226565b9150612947826128e0565b604082019050919050565b6000602082019050818103600083015261296b8161292f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129ce602c83612226565b91506129d982612972565b604082019050919050565b600060208201905081810360008301526129fd816129c1565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612a60603183612226565b9150612a6b82612a04565b604082019050919050565b60006020820190508181036000830152612a8f81612a53565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612af2602583612226565b9150612afd82612a96565b604082019050919050565b60006020820190508181036000830152612b2181612ae5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612b84602483612226565b9150612b8f82612b28565b604082019050919050565b60006020820190508181036000830152612bb381612b77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bf4826122d6565b9150612bff836122d6565b925082821015612c1257612c11612bba565b5b828203905092915050565b6000612c28826122d6565b9150612c33836122d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6857612c67612bba565b5b828201905092915050565b6000612c7e826122d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cb157612cb0612bba565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612d18602b83612226565b9150612d2382612cbc565b604082019050919050565b60006020820190508181036000830152612d4781612d0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c7265616479206d696e74656420746f6b656e496400000000000000000000600082015250565b6000612db3601683612226565b9150612dbe82612d7d565b602082019050919050565b60006020820190508181036000830152612de281612da6565b9050919050565b6000819050919050565b612dfc81612de9565b82525050565b6000606082019050612e176000830186612401565b612e246020830185612df3565b612e316040830184612401565b949350505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612e7a601c83612e39565b9150612e8582612e44565b601c82019050919050565b6000819050919050565b612eab612ea682612de9565b612e90565b82525050565b6000612ebc82612e6d565b9150612ec88284612e9a565b60208201915081905092915050565b600060ff82169050919050565b612eed81612ed7565b8114612ef857600080fd5b50565b600081359050612f0a81612ee4565b92915050565b600060208284031215612f2657612f25612156565b5b6000612f3484828501612efb565b91505092915050565b612f4681612ed7565b82525050565b6000608082019050612f616000830187612df3565b612f6e6020830186612f3d565b612f7b6040830185612df3565b612f886060830184612df3565b95945050505050565b7f696e76616c6964207369676e6174757265206f6e206d696e742072657175657360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fed602183612226565b9150612ff882612f91565b604082019050919050565b6000602082019050818103600083015261301c81612fe0565b9050919050565b7f6f6e6c79206f776e657220616c6c6f7765640000000000000000000000000000600082015250565b6000613059601283612226565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006130eb602c83612226565b91506130f68261308f565b604082019050919050565b6000602082019050818103600083015261311a816130de565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061317d602983612226565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061320f602a83612226565b915061321a826131b3565b604082019050919050565b6000602082019050818103600083015261323e81613202565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061327b601983612226565b915061328682613245565b602082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061330d603283612226565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061339f602f83612226565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b61341c613417826133d5565b613401565b82525050565b600061342e828561340b565b60028201915061343e8284612e9a565b6020820191508190509392505050565b60006134598261221b565b6134638185612e39565b9350613473818560208601612237565b80840191505092915050565b600081519050919050565b600081905092915050565b60006134a08261347f565b6134aa818561348a565b93506134ba818560208601612237565b80840191505092915050565b60006134d2828561344e565b91506134de8284613495565b91508190509392505050565b600082825260208201905092915050565b60006135068261347f565b61351081856134ea565b9350613520818560208601612237565b6135298161226a565b840191505092915050565b6000608082019050613549600083018761236b565b613556602083018661236b565b6135636040830185612401565b818103606083015261357581846134fb565b905095945050505050565b60008151905061358f8161218c565b92915050565b6000602082840312156135ab576135aa612156565b5b60006135b984828501613580565b91505092915050565b60006135cd826122d6565b91506135d8836122d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561361157613610612bba565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613656826122d6565b9150613661836122d6565b9250826136715761367061361c565b5b828206905092915050565b6000613687826122d6565b9150613692836122d6565b9250826136a2576136a161361c565b5b828204905092915050565b60006136b882612ed7565b915060ff8214156136cc576136cb612bba565b5b60018201905091905056fe68747470733a2f2f756e6c697374656470756e6b732e636f6d2f6d657461646174612e6a736f6e31323334353637383941424344454647484a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f707172737475767778797aa2646970667358221220107bcfd5e9279aa3f7edc768941a41713ee0e59177db61ed3f3e80d88dd0443264736f6c634300080c0033
Deployed Bytecode
0x6080604052600436106101355760003560e01c80634f6ccce7116100ab57806395d89b411161006f57806395d89b4114610418578063a22cb46514610443578063b88d4fde1461046c578063c87b56dd14610488578063e8a3d485146104c5578063e985e9c5146104f057610135565b80634f6ccce7146102f95780635b31cb36146103365780636352211e1461037357806370a08231146103b05780638da5cb5b146103ed57610135565b806323b872dd116100fd57806323b872dd146102265780632f745c5914610242578063358f7a751461027f5780633ccfd60b146102af57806342842e0e146102c657806343d726d6146102e257610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806318160ddd146101fb575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c91906121b8565b61052d565b60405161016e9190612200565b60405180910390f35b34801561018357600080fd5b5061018c6106cf565b60405161019991906122b4565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c4919061230c565b61070c565b6040516101d6919061237a565b60405180910390f35b6101f960048036038101906101f491906123c1565b6107ea565b005b34801561020757600080fd5b506102106109c1565b60405161021d9190612410565b60405180910390f35b610240600480360381019061023b919061242b565b6109cb565b005b34801561024e57600080fd5b50610269600480360381019061026491906123c1565b610dbe565b6040516102769190612410565b60405180910390f35b610299600480360381019061029491906124e3565b610ed5565b6040516102a69190612410565b60405180910390f35b3480156102bb57600080fd5b506102c4611393565b005b6102e060048036038101906102db919061242b565b611472565b005b3480156102ee57600080fd5b506102f7611492565b005b34801561030557600080fd5b50610320600480360381019061031b919061230c565b611541565b60405161032d9190612410565b60405180910390f35b34801561034257600080fd5b5061035d6004803603810190610358919061230c565b6115a2565b60405161036a9190612200565b60405180910390f35b34801561037f57600080fd5b5061039a6004803603810190610395919061230c565b61160c565b6040516103a7919061237a565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190612530565b6116bd565b6040516103e49190612410565b60405180910390f35b3480156103f957600080fd5b50610402611775565b60405161040f919061237a565b60405180910390f35b34801561042457600080fd5b5061042d611791565b60405161043a91906122b4565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612589565b6117ce565b005b610486600480360381019061048191906126f9565b61193a565b005b34801561049457600080fd5b506104af60048036038101906104aa919061230c565b611996565b6040516104bc91906122b4565b60405180910390f35b3480156104d157600080fd5b506104da611adf565b6040516104e791906122b4565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061277c565b611aff565b6040516105249190612200565b60405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f857507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600d81526020017f556e6c697374656450756e6b7300000000000000000000000000000000000000815250905090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a69061282e565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610887906128c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108d057506108cf8133611aff565b5b61090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090690612952565b60405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600654905090565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906129e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610adf57503373ffffffffffffffffffffffffffffffffffffffff16610ac78361070c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af05750610aef8133611aff565b5b610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612a76565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490612b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0490612b9a565b60405180910390fd5b60006002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610caf9190612be9565b9250508190555060018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d059190612c1d565b925050819055508260008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000806000905060005b600654811015610e93578473ffffffffffffffffffffffffffffffffffffffff166000806005600085815260200190815260200160002054815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e805783821415610e7057600560008281526020019081526020016000205492505050610ecf565b600182610e7d9190612c1d565b91505b8080610e8b90612c73565b915050610dc8565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690612d2e565b60405180910390fd5b92915050565b60008083839050905060005b8181101561131757600073ffffffffffffffffffffffffffffffffffffffff16600080878785818110610f1757610f16612d4e565b5b905060c0020160000135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612dc9565b60405180910390fd5b6000858583818110610fbb57610fba612d4e565b5b905060c0020160000135868684818110610fd857610fd7612d4e565b5b905060c0020160200135878785818110610ff557610ff4612d4e565b5b905060c002016040013560405160200161101193929190612e02565b60405160208183030381529060405280519060200120905060008160405160200161103c9190612eb1565b604051602081830303815290604052805190602001209050600060018289898781811061106c5761106b612d4e565b5b905060c0020160600160208101906110849190612f10565b8a8a8881811061109757611096612d4e565b5b905060c00201608001358b8b898181106110b4576110b3612d4e565b5b905060c0020160a00135604051600081526020016040526040516110db9493929190612f4c565b6020604051602081039080840390855afa1580156110fd573d6000803e3d6000fd5b50505060206040510351905073dfc007450c78c510e597b7281938a9595e988aa473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613003565b60405180910390fd5b87878581811061119e5761119d612d4e565b5b905060c0020160200135600460008a8a888181106111bf576111be612d4e565b5b905060c0020160000135815260200190815260200160002081905550336000808a8a888181106111f2576111f1612d4e565b5b905060c0020160000135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087878581811061125b5761125a612d4e565b5b905060c002016000013560056000866006546112779190612c1d565b81526020019081526020016000208190555087878581811061129c5761129b612d4e565b5b905060c00201600001353373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050808061130f90612c73565b915050610ee1565b5080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113679190612c1d565b9250508190555080600660008282546113809190612c1d565b9250508190555060065491505092915050565b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c9061306f565b60405180910390fd5b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561146f573d6000803e3d6000fd5b50565b61148d8383836040518060200160405280600081525061193a565b505050565b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b9061306f565b60405180910390fd5b7352678e3bfcc41833f3d8629dba43814a716b2edc73ffffffffffffffffffffffffffffffffffffffff16ff5b60006006548210611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90613101565b60405180910390fd5b60056000838152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613193565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613225565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007352678e3bfcc41833f3d8629dba43814a716b2edc905090565b60606040518060400160405280600281526020017f5550000000000000000000000000000000000000000000000000000000000000815250905090565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490613291565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161192e9190612200565b60405180910390a35050565b6119458484846109cb565b61195184848484611b93565b611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613323565b60405180910390fd5b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a31906133b5565b60405180910390fd5b600061122060f01b6004600085815260200190815260200160002054604051602001611a67929190613422565b60405160208183030381529060405290506040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250611ab782611c97565b604051602001611ac89291906134c6565b604051602081830303815290604052915050919050565b60606040518060600160405280602781526020016136d860279139905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff163b1115611c8a5760008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401611bf59493929190613534565b6020604051808303816000875af1158015611c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c389190613595565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c8f565b600190505b949350505050565b6060600082511415611cf857600067ffffffffffffffff811115611cbe57611cbd6125ce565b5b6040519080825280601f01601f191660200182016040528015611cf05781602001600182028036833780820191505090505b509050612147565b6000604067ffffffffffffffff811115611d1557611d146125ce565b5b604051908082528060200260200182016040528015611d435781602001602082028036833780820191505090505b509050600060019050600082600081518110611d6257611d61612d4e565b5b602002602001019060ff16908160ff168152505060005b8451811015611eba576000858281518110611d9757611d96612d4e565b5b602001015160f81c60f81b60f81c60ff16905060005b8360ff16811015611e4457610100858281518110611dce57611dcd612d4e565b5b602002602001015160ff16611de391906135c2565b82611dee9190612c1d565b9150603a82611dfd919061364b565b858281518110611e1057611e0f612d4e565b5b602002602001019060ff16908160ff1681525050603a82611e31919061367c565b915080611e3d90612c73565b9050611dad565b505b6000811115611ea857603a81611e5c919061364b565b848460ff1681518110611e7257611e71612d4e565b5b602002602001019060ff16908160ff16815250508280611e91906136ad565b935050603a81611ea1919061367c565b9050611e46565b5080611eb390612c73565b9050611d79565b5060008160ff1667ffffffffffffffff811115611eda57611ed96125ce565b5b604051908082528060200260200182016040528015611f085781602001602082028036833780820191505090505b50905060005b8260ff16811015611f6e57838181518110611f2c57611f2b612d4e565b5b6020026020010151828281518110611f4757611f46612d4e565b5b602002602001019060ff16908160ff16815250508080611f6690612c73565b915050611f0e565b506000815167ffffffffffffffff811115611f8c57611f8b6125ce565b5b604051908082528060200260200182016040528015611fba5781602001602082028036833780820191505090505b50905060005b825181101561203657828160018551611fd99190612be9565b611fe39190612be9565b81518110611ff457611ff3612d4e565b5b602002602001015182828151811061200f5761200e612d4e565b5b602002602001019060ff16908160ff1681525050808061202e90612c73565b915050611fc0565b506000815167ffffffffffffffff811115612054576120536125ce565b5b6040519080825280601f01601f1916602001820160405280156120865781602001600182028036833780820191505090505b50905060005b825181101561213d576040518060600160405280603a81526020016136ff603a91398382815181106120c1576120c0612d4e565b5b602002602001015160ff16815181106120dd576120dc612d4e565b5b602001015160f81c60f81b8282815181106120fb576120fa612d4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061213590612c73565b91505061208c565b5080955050505050505b919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61219581612160565b81146121a057600080fd5b50565b6000813590506121b28161218c565b92915050565b6000602082840312156121ce576121cd612156565b5b60006121dc848285016121a3565b91505092915050565b60008115159050919050565b6121fa816121e5565b82525050565b600060208201905061221560008301846121f1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225557808201518184015260208101905061223a565b83811115612264576000848401525b50505050565b6000601f19601f8301169050919050565b60006122868261221b565b6122908185612226565b93506122a0818560208601612237565b6122a98161226a565b840191505092915050565b600060208201905081810360008301526122ce818461227b565b905092915050565b6000819050919050565b6122e9816122d6565b81146122f457600080fd5b50565b600081359050612306816122e0565b92915050565b60006020828403121561232257612321612156565b5b6000612330848285016122f7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061236482612339565b9050919050565b61237481612359565b82525050565b600060208201905061238f600083018461236b565b92915050565b61239e81612359565b81146123a957600080fd5b50565b6000813590506123bb81612395565b92915050565b600080604083850312156123d8576123d7612156565b5b60006123e6858286016123ac565b92505060206123f7858286016122f7565b9150509250929050565b61240a816122d6565b82525050565b60006020820190506124256000830184612401565b92915050565b60008060006060848603121561244457612443612156565b5b6000612452868287016123ac565b9350506020612463868287016123ac565b9250506040612474868287016122f7565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126124a3576124a261247e565b5b8235905067ffffffffffffffff8111156124c0576124bf612483565b5b6020830191508360c08202830111156124dc576124db612488565b5b9250929050565b600080602083850312156124fa576124f9612156565b5b600083013567ffffffffffffffff8111156125185761251761215b565b5b6125248582860161248d565b92509250509250929050565b60006020828403121561254657612545612156565b5b6000612554848285016123ac565b91505092915050565b612566816121e5565b811461257157600080fd5b50565b6000813590506125838161255d565b92915050565b600080604083850312156125a05761259f612156565b5b60006125ae858286016123ac565b92505060206125bf85828601612574565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126068261226a565b810181811067ffffffffffffffff82111715612625576126246125ce565b5b80604052505050565b600061263861214c565b905061264482826125fd565b919050565b600067ffffffffffffffff821115612664576126636125ce565b5b61266d8261226a565b9050602081019050919050565b82818337600083830152505050565b600061269c61269784612649565b61262e565b9050828152602081018484840111156126b8576126b76125c9565b5b6126c384828561267a565b509392505050565b600082601f8301126126e0576126df61247e565b5b81356126f0848260208601612689565b91505092915050565b6000806000806080858703121561271357612712612156565b5b6000612721878288016123ac565b9450506020612732878288016123ac565b9350506040612743878288016122f7565b925050606085013567ffffffffffffffff8111156127645761276361215b565b5b612770878288016126cb565b91505092959194509250565b6000806040838503121561279357612792612156565b5b60006127a1858286016123ac565b92505060206127b2858286016123ac565b9150509250929050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612818602c83612226565b9150612823826127bc565b604082019050919050565b600060208201905081810360008301526128478161280b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006128aa602183612226565b91506128b58261284e565b604082019050919050565b600060208201905081810360008301526128d98161289d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061293c603883612226565b9150612947826128e0565b604082019050919050565b6000602082019050818103600083015261296b8161292f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129ce602c83612226565b91506129d982612972565b604082019050919050565b600060208201905081810360008301526129fd816129c1565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612a60603183612226565b9150612a6b82612a04565b604082019050919050565b60006020820190508181036000830152612a8f81612a53565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612af2602583612226565b9150612afd82612a96565b604082019050919050565b60006020820190508181036000830152612b2181612ae5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612b84602483612226565b9150612b8f82612b28565b604082019050919050565b60006020820190508181036000830152612bb381612b77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bf4826122d6565b9150612bff836122d6565b925082821015612c1257612c11612bba565b5b828203905092915050565b6000612c28826122d6565b9150612c33836122d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6857612c67612bba565b5b828201905092915050565b6000612c7e826122d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cb157612cb0612bba565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612d18602b83612226565b9150612d2382612cbc565b604082019050919050565b60006020820190508181036000830152612d4781612d0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c7265616479206d696e74656420746f6b656e496400000000000000000000600082015250565b6000612db3601683612226565b9150612dbe82612d7d565b602082019050919050565b60006020820190508181036000830152612de281612da6565b9050919050565b6000819050919050565b612dfc81612de9565b82525050565b6000606082019050612e176000830186612401565b612e246020830185612df3565b612e316040830184612401565b949350505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612e7a601c83612e39565b9150612e8582612e44565b601c82019050919050565b6000819050919050565b612eab612ea682612de9565b612e90565b82525050565b6000612ebc82612e6d565b9150612ec88284612e9a565b60208201915081905092915050565b600060ff82169050919050565b612eed81612ed7565b8114612ef857600080fd5b50565b600081359050612f0a81612ee4565b92915050565b600060208284031215612f2657612f25612156565b5b6000612f3484828501612efb565b91505092915050565b612f4681612ed7565b82525050565b6000608082019050612f616000830187612df3565b612f6e6020830186612f3d565b612f7b6040830185612df3565b612f886060830184612df3565b95945050505050565b7f696e76616c6964207369676e6174757265206f6e206d696e742072657175657360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fed602183612226565b9150612ff882612f91565b604082019050919050565b6000602082019050818103600083015261301c81612fe0565b9050919050565b7f6f6e6c79206f776e657220616c6c6f7765640000000000000000000000000000600082015250565b6000613059601283612226565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006130eb602c83612226565b91506130f68261308f565b604082019050919050565b6000602082019050818103600083015261311a816130de565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061317d602983612226565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061320f602a83612226565b915061321a826131b3565b604082019050919050565b6000602082019050818103600083015261323e81613202565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061327b601983612226565b915061328682613245565b602082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061330d603283612226565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061339f602f83612226565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b61341c613417826133d5565b613401565b82525050565b600061342e828561340b565b60028201915061343e8284612e9a565b6020820191508190509392505050565b60006134598261221b565b6134638185612e39565b9350613473818560208601612237565b80840191505092915050565b600081519050919050565b600081905092915050565b60006134a08261347f565b6134aa818561348a565b93506134ba818560208601612237565b80840191505092915050565b60006134d2828561344e565b91506134de8284613495565b91508190509392505050565b600082825260208201905092915050565b60006135068261347f565b61351081856134ea565b9350613520818560208601612237565b6135298161226a565b840191505092915050565b6000608082019050613549600083018761236b565b613556602083018661236b565b6135636040830185612401565b818103606083015261357581846134fb565b905095945050505050565b60008151905061358f8161218c565b92915050565b6000602082840312156135ab576135aa612156565b5b60006135b984828501613580565b91505092915050565b60006135cd826122d6565b91506135d8836122d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561361157613610612bba565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613656826122d6565b9150613661836122d6565b9250826136715761367061361c565b5b828206905092915050565b6000613687826122d6565b9150613692836122d6565b9250826136a2576136a161361c565b5b828204905092915050565b60006136b882612ed7565b915060ff8214156136cc576136cb612bba565b5b60018201905091905056fe68747470733a2f2f756e6c697374656470756e6b732e636f6d2f6d657461646174612e6a736f6e31323334353637383941424344454647484a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f707172737475767778797aa2646970667358221220107bcfd5e9279aa3f7edc768941a41713ee0e59177db61ed3f3e80d88dd0443264736f6c634300080c0033
Deployed Bytecode Sourcemap
236:11365:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5763:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9761:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7371:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10618:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8254:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11086:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3953:1021;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4980:161;;;;;;;;;;;;;:::i;:::-;;9427:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5147:132;;;;;;;;;;;;;:::i;:::-;;10797:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3831:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6563:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6285:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5513:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9924:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7669:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9072:288;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10093:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5383:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8019:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5763:357;5856:4;5906:24;5891:39;;;:11;:39;;;;:94;;;;5961:24;5946:39;;;:11;:39;;;;5891:94;:157;;;;6016:32;6001:47;;;:11;:47;;;;5891:157;:222;;;;6079:34;6064:49;;;:11;:49;;;;5891:222;5872:241;;5763:357;;;:::o;9761:98::-;9815:13;9847:5;;;;;;;;;;;;;;;;;9840:12;;9761:98;:::o;7371:230::-;7447:7;7502:1;7474:30;;:7;:16;7482:7;7474:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7466:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;7570:15;:24;7586:7;7570:24;;;;;;;;;;;;;;;;;;;;;7563:31;;7371:230;;;:::o;6871:438::-;6959:18;6980:7;:16;6988:7;6980:16;;;;;;;;;;;;;;;;;;;;;6959:37;;7020:10;7014:16;;:2;:16;;;;7006:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;7100:10;7086:24;;:10;:24;;;:68;;;;7114:40;7131:10;7143;7114:16;:40::i;:::-;7086:68;7078:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;7252:2;7225:15;:24;7241:7;7225:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;7294:7;7290:2;7269:33;;7278:10;7269:33;;;;;;;;;;;;6949:360;6871:438;;:::o;10618:106::-;10679:7;10705:12;;10698:19;;10618:106;:::o;8254:751::-;8361:18;8382:7;:16;8390:7;8382:16;;;;;;;;;;;;;;;;;;;;;8361:37;;8438:1;8416:24;;:10;:24;;;;8408:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8521:10;8507:24;;:10;:24;;;:62;;;;8559:10;8535:34;;:20;8547:7;8535:11;:20::i;:::-;:34;;;8507:62;:106;;;;8573:40;8590:10;8602;8573:16;:40::i;:::-;8507:106;8499:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;8699:4;8685:18;;:10;:18;;;8677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8777:1;8763:16;;:2;:16;;;;8755:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8865:1;8830:15;:24;8846:7;8830:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8896:1;8877:9;:15;8887:4;8877:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;8924:1;8907:9;:13;8917:2;8907:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;8954:2;8935:7;:16;8943:7;8935:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8990:7;8986:2;8971:27;;8980:4;8971:27;;;;;;;;;;;;8351:654;8254:751;;;:::o;11086:512::-;11188:7;11207:20;11230:1;11207:24;;11245:6;11241:288;11257:12;;11255:1;:14;11241:288;;;11315:10;11292:33;;:7;:19;11300:7;:10;11308:1;11300:10;;;;;;;;;;;;11292:19;;;;;;;;;;;;;;;;;;;;;:33;;;11289:230;;;11363:5;11347:12;:21;11344:161;;;11398:7;:10;11406:1;11398:10;;;;;;;;;;;;11391:17;;;;;;11344:161;11485:1;11470:12;:16;;;;:::i;:::-;11455:31;;11289:230;11271:3;;;;;:::i;:::-;;;;11241:288;;;;11538:53;;;;;;;;;;:::i;:::-;;;;;;;;11086:512;;;;;:::o;3953:1021::-;4023:7;4041:16;4060:7;;:14;;4041:33;;4089:6;4084:772;4105:11;4101:1;:15;4084:772;;;4179:1;4145:36;;:7;:22;4153:7;;4161:1;4153:10;;;;;;;:::i;:::-;;;;;;;:13;;;4145:22;;;;;;;;;;;;;;;;;;;;;:36;;;4137:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4222:20;4266:7;;4274:1;4266:10;;;;;;;:::i;:::-;;;;;;;:13;;;4281:7;;4289:1;4281:10;;;;;;;:::i;:::-;;;;;;;:14;;;4297:7;;4305:1;4297:10;;;;;;;:::i;:::-;;;;;;;:16;;;4255:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4245:70;;;;;;4222:93;;4329:21;4416:12;4363:66;;;;;;;;:::i;:::-;;;;;;;;;;;;;4353:77;;;;;;4329:101;;4444:17;4464:66;4474:13;4489:7;;4497:1;4489:10;;;;;;;:::i;:::-;;;;;;;:12;;;;;;;;;;:::i;:::-;4503:7;;4511:1;4503:10;;;;;;;:::i;:::-;;;;;;;:12;;;4517:7;;4525:1;4517:10;;;;;;;:::i;:::-;;;;;;;:12;;;4464:66;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4444:86;;1053:42;4552:34;;:9;:34;;;4544:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;4661:7;;4669:1;4661:10;;;;;;;:::i;:::-;;;;;;;:14;;;4638:5;:20;4644:7;;4652:1;4644:10;;;;;;;:::i;:::-;;;;;;;:13;;;4638:20;;;;;;;;;;;:37;;;;4714:10;4689:7;:22;4697:7;;4705:1;4697:10;;;;;;;:::i;:::-;;;;;;;:13;;;4689:22;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;4766:7;;4774:1;4766:10;;;;;;;:::i;:::-;;;;;;;:13;;;4738:7;:25;4761:1;4746:12;;:16;;;;:::i;:::-;4738:25;;;;;;;;;;;:41;;;;4831:7;;4839:1;4831:10;;;;;;;:::i;:::-;;;;;;;:13;;;4819:10;4798:47;;4815:1;4798:47;;;;;;;;;;;;4123:733;;;4118:3;;;;;:::i;:::-;;;;4084:772;;;;4890:11;4865:9;:21;4875:10;4865:21;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;4927:11;4911:12;;:27;;;;;;;:::i;:::-;;;;;;;;4955:12;;4948:19;;;3953:1021;;;;:::o;4980:161::-;670:42;5025:20;;:10;:20;;;5017:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:42;5078:33;;:56;5112:21;5078:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:161::o;9427:157::-;9538:39;9555:4;9561:2;9565:7;9538:39;;;;;;;;;;;;:16;:39::i;:::-;9427:157;;;:::o;5147:132::-;670:42;5189:20;;:10;:20;;;5181:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:42;5242:29;;;10797:209;10872:7;10907:12;;10899:5;:20;10891:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;10985:7;:14;10993:5;10985:14;;;;;;;;;;;;10978:21;;10797:209;;;:::o;3831:116::-;3888:4;3938:1;3910:30;;:7;:16;3918:7;3910:16;;;;;;;;;;;;;;;;;;;;;:30;;;3903:37;;3831:116;;;:::o;6563:250::-;6635:7;6654:18;6675:7;:16;6683:7;6675:16;;;;;;;;;;;;;;;;;;;;;6654:37;;6731:1;6709:24;;:10;:24;;;;6701:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6796:10;6789:17;;;6563:250;;;:::o;6285:220::-;6362:7;6411:1;6389:24;;:10;:24;;;;6381:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6477:9;:21;6487:10;6477:21;;;;;;;;;;;;;;;;6470:28;;6285:220;;;:::o;5513:77::-;5551:7;670:42;5570:13;;5513:77;:::o;9924:102::-;9980:13;10012:7;;;;;;;;;;;;;;;;;10005:14;;9924:102;:::o;7669:283::-;7785:8;7771:22;;:10;:22;;;;7763:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7876:8;7833:18;:30;7852:10;7833:30;;;;;;;;;;;;;;;:40;7864:8;7833:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;7926:8;7899:46;;7914:10;7899:46;;;7936:8;7899:46;;;;;;:::i;:::-;;;;;;;;7669:283;;:::o;9072:288::-;9202:31;9215:4;9221:2;9225:7;9202:12;:31::i;:::-;9251:47;9274:4;9280:2;9284:7;9293:4;9251:22;:47::i;:::-;9243:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;9072:288;;;;:::o;10093:338::-;10166:13;10227:1;10199:30;;:7;:16;10207:7;10199:16;;;;;;;;;;;;;;;;;;;;;:30;;;;10191:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;10291:16;10334:6;10327:14;;10342:5;:14;10348:7;10342:14;;;;;;;;;;;;10310:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10291:66;;10398:8;;;;;;;;;;;;;;;;;10408:14;10418:3;10408:9;:14::i;:::-;10381:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10367:57;;;10093:338;;;:::o;5383:124::-;5427:13;5452:48;;;;;;;;;;;;;;;;;;;5383:124;:::o;8019:172::-;8121:4;8144:18;:30;8163:10;8144:30;;;;;;;;;;;;;;;:40;8175:8;8144:40;;;;;;;;;;;;;;;;;;;;;;;;;8137:47;;8019:172;;;;:::o;3354:419::-;3466:4;3502:1;3485:2;:14;;;:18;3482:285;;;3548:13;3584:2;3564:40;;;3605:10;3617:4;3623:7;3632:5;3564:74;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3548:90;;3669:45;;;3659:55;;;:6;:55;;;;3652:62;;;;;3482:285;3752:4;3745:11;;3354:419;;;;;;;:::o;1931:1232::-;1993:12;2038:1;2021:6;:13;:18;2017:43;;;2058:1;2048:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:19;;;;2017:43;2070:21;2106:2;2094:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2070:39;;2119:17;2139:1;2119:21;;2162:1;2150:6;2157:1;2150:9;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;2178:9;2173:345;2195:6;:13;2193:1;:15;2173:345;;;2229:10;2248:6;2255:1;2248:9;;;;;;;;:::i;:::-;;;;;;;;;;2242:16;;2229:29;;;;2277:9;2272:126;2294:11;2292:13;;:1;:13;2272:126;;;2341:3;2328:6;2335:1;2328:9;;;;;;;;:::i;:::-;;;;;;;;2323:15;;:21;;;;:::i;:::-;2314:30;;;;;:::i;:::-;;;2372:2;2364:5;:10;;;;:::i;:::-;2346:6;2353:1;2346:9;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;;;2393:2;2385:5;:10;;;;:::i;:::-;2377:18;;2307:3;;;;:::i;:::-;;;2272:126;;;;2411:97;2426:1;2418:5;:9;2411:97;;;2467:2;2459:5;:10;;;;:::i;:::-;2431:6;2438:11;2431:19;;;;;;;;;;:::i;:::-;;;;;;;:39;;;;;;;;;;;2472:13;;;;;:::i;:::-;;;;2503:2;2495:5;:10;;;;:::i;:::-;2487:18;;2411:97;;;2215:303;2210:3;;;;:::i;:::-;;;2173:345;;;;2547:29;2591:11;2579:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2547:56;;2618:9;2613:74;2635:11;2633:13;;:1;:13;2613:74;;;2675:6;2682:1;2675:9;;;;;;;;:::i;:::-;;;;;;;;2655:14;2670:1;2655:17;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;;;2648:3;;;;;:::i;:::-;;;;2613:74;;;;2715:28;2758:14;:21;2746:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2715:65;;2795:9;2790:115;2812:14;:21;2810:1;:23;2790:115;;;2861:14;2900:1;2898;2876:14;:21;:23;;;;:::i;:::-;:25;;;;:::i;:::-;2861:41;;;;;;;;:::i;:::-;;;;;;;;2842:13;2856:1;2842:16;;;;;;;;:::i;:::-;;;;;;;:60;;;;;;;;;;;2835:3;;;;;:::i;:::-;;;;2790:115;;;;2937:27;2977:13;:20;2967:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2937:61;;3013:9;3008:100;3030:13;:20;3028:1;:22;3008:100;;;3079:8;;;;;;;;;;;;;;;;;3088:13;3102:1;3088:16;;;;;;;;:::i;:::-;;;;;;;;3079:26;;;;;;;;;;:::i;:::-;;;;;;;;;;3059:14;3074:1;3059:17;;;;;;;;:::i;:::-;;;;;:46;;;;;;;;;;;3052:3;;;;;:::i;:::-;;;;3008:100;;;;3142:14;3135:21;;;;;;;1931:1232;;;;:::o;7:75:6:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6326:598;6429:8;6439:6;6489:3;6482:4;6474:6;6470:17;6466:27;6456:122;;6497:79;;:::i;:::-;6456:122;6610:6;6597:20;6587:30;;6640:18;6632:6;6629:30;6626:117;;;6662:79;;:::i;:::-;6626:117;6776:4;6768:6;6764:17;6752:29;;6830:3;6822:4;6814:6;6810:17;6800:8;6796:32;6793:41;6790:128;;;6837:79;;:::i;:::-;6790:128;6326:598;;;;;:::o;6930:619::-;7046:6;7054;7103:2;7091:9;7082:7;7078:23;7074:32;7071:119;;;7109:79;;:::i;:::-;7071:119;7257:1;7246:9;7242:17;7229:31;7287:18;7279:6;7276:30;7273:117;;;7309:79;;:::i;:::-;7273:117;7422:110;7524:7;7515:6;7504:9;7500:22;7422:110;:::i;:::-;7404:128;;;;7200:342;6930:619;;;;;:::o;7555:329::-;7614:6;7663:2;7651:9;7642:7;7638:23;7634:32;7631:119;;;7669:79;;:::i;:::-;7631:119;7789:1;7814:53;7859:7;7850:6;7839:9;7835:22;7814:53;:::i;:::-;7804:63;;7760:117;7555:329;;;;:::o;7890:116::-;7960:21;7975:5;7960:21;:::i;:::-;7953:5;7950:32;7940:60;;7996:1;7993;7986:12;7940:60;7890:116;:::o;8012:133::-;8055:5;8093:6;8080:20;8071:29;;8109:30;8133:5;8109:30;:::i;:::-;8012:133;;;;:::o;8151:468::-;8216:6;8224;8273:2;8261:9;8252:7;8248:23;8244:32;8241:119;;;8279:79;;:::i;:::-;8241:119;8399:1;8424:53;8469:7;8460:6;8449:9;8445:22;8424:53;:::i;:::-;8414:63;;8370:117;8526:2;8552:50;8594:7;8585:6;8574:9;8570:22;8552:50;:::i;:::-;8542:60;;8497:115;8151:468;;;;;:::o;8625:117::-;8734:1;8731;8724:12;8748:180;8796:77;8793:1;8786:88;8893:4;8890:1;8883:15;8917:4;8914:1;8907:15;8934:281;9017:27;9039:4;9017:27;:::i;:::-;9009:6;9005:40;9147:6;9135:10;9132:22;9111:18;9099:10;9096:34;9093:62;9090:88;;;9158:18;;:::i;:::-;9090:88;9198:10;9194:2;9187:22;8977:238;8934:281;;:::o;9221:129::-;9255:6;9282:20;;:::i;:::-;9272:30;;9311:33;9339:4;9331:6;9311:33;:::i;:::-;9221:129;;;:::o;9356:307::-;9417:4;9507:18;9499:6;9496:30;9493:56;;;9529:18;;:::i;:::-;9493:56;9567:29;9589:6;9567:29;:::i;:::-;9559:37;;9651:4;9645;9641:15;9633:23;;9356:307;;;:::o;9669:154::-;9753:6;9748:3;9743;9730:30;9815:1;9806:6;9801:3;9797:16;9790:27;9669:154;;;:::o;9829:410::-;9906:5;9931:65;9947:48;9988:6;9947:48;:::i;:::-;9931:65;:::i;:::-;9922:74;;10019:6;10012:5;10005:21;10057:4;10050:5;10046:16;10095:3;10086:6;10081:3;10077:16;10074:25;10071:112;;;10102:79;;:::i;:::-;10071:112;10192:41;10226:6;10221:3;10216;10192:41;:::i;:::-;9912:327;9829:410;;;;;:::o;10258:338::-;10313:5;10362:3;10355:4;10347:6;10343:17;10339:27;10329:122;;10370:79;;:::i;:::-;10329:122;10487:6;10474:20;10512:78;10586:3;10578:6;10571:4;10563:6;10559:17;10512:78;:::i;:::-;10503:87;;10319:277;10258:338;;;;:::o;10602:943::-;10697:6;10705;10713;10721;10770:3;10758:9;10749:7;10745:23;10741:33;10738:120;;;10777:79;;:::i;:::-;10738:120;10897:1;10922:53;10967:7;10958:6;10947:9;10943:22;10922:53;:::i;:::-;10912:63;;10868:117;11024:2;11050:53;11095:7;11086:6;11075:9;11071:22;11050:53;:::i;:::-;11040:63;;10995:118;11152:2;11178:53;11223:7;11214:6;11203:9;11199:22;11178:53;:::i;:::-;11168:63;;11123:118;11308:2;11297:9;11293:18;11280:32;11339:18;11331:6;11328:30;11325:117;;;11361:79;;:::i;:::-;11325:117;11466:62;11520:7;11511:6;11500:9;11496:22;11466:62;:::i;:::-;11456:72;;11251:287;10602:943;;;;;;;:::o;11551:474::-;11619:6;11627;11676:2;11664:9;11655:7;11651:23;11647:32;11644:119;;;11682:79;;:::i;:::-;11644:119;11802:1;11827:53;11872:7;11863:6;11852:9;11848:22;11827:53;:::i;:::-;11817:63;;11773:117;11929:2;11955:53;12000:7;11991:6;11980:9;11976:22;11955:53;:::i;:::-;11945:63;;11900:118;11551:474;;;;;:::o;12031:231::-;12171:34;12167:1;12159:6;12155:14;12148:58;12240:14;12235:2;12227:6;12223:15;12216:39;12031:231;:::o;12268:366::-;12410:3;12431:67;12495:2;12490:3;12431:67;:::i;:::-;12424:74;;12507:93;12596:3;12507:93;:::i;:::-;12625:2;12620:3;12616:12;12609:19;;12268:366;;;:::o;12640:419::-;12806:4;12844:2;12833:9;12829:18;12821:26;;12893:9;12887:4;12883:20;12879:1;12868:9;12864:17;12857:47;12921:131;13047:4;12921:131;:::i;:::-;12913:139;;12640:419;;;:::o;13065:220::-;13205:34;13201:1;13193:6;13189:14;13182:58;13274:3;13269:2;13261:6;13257:15;13250:28;13065:220;:::o;13291:366::-;13433:3;13454:67;13518:2;13513:3;13454:67;:::i;:::-;13447:74;;13530:93;13619:3;13530:93;:::i;:::-;13648:2;13643:3;13639:12;13632:19;;13291:366;;;:::o;13663:419::-;13829:4;13867:2;13856:9;13852:18;13844:26;;13916:9;13910:4;13906:20;13902:1;13891:9;13887:17;13880:47;13944:131;14070:4;13944:131;:::i;:::-;13936:139;;13663:419;;;:::o;14088:243::-;14228:34;14224:1;14216:6;14212:14;14205:58;14297:26;14292:2;14284:6;14280:15;14273:51;14088:243;:::o;14337:366::-;14479:3;14500:67;14564:2;14559:3;14500:67;:::i;:::-;14493:74;;14576:93;14665:3;14576:93;:::i;:::-;14694:2;14689:3;14685:12;14678:19;;14337:366;;;:::o;14709:419::-;14875:4;14913:2;14902:9;14898:18;14890:26;;14962:9;14956:4;14952:20;14948:1;14937:9;14933:17;14926:47;14990:131;15116:4;14990:131;:::i;:::-;14982:139;;14709:419;;;:::o;15134:231::-;15274:34;15270:1;15262:6;15258:14;15251:58;15343:14;15338:2;15330:6;15326:15;15319:39;15134:231;:::o;15371:366::-;15513:3;15534:67;15598:2;15593:3;15534:67;:::i;:::-;15527:74;;15610:93;15699:3;15610:93;:::i;:::-;15728:2;15723:3;15719:12;15712:19;;15371:366;;;:::o;15743:419::-;15909:4;15947:2;15936:9;15932:18;15924:26;;15996:9;15990:4;15986:20;15982:1;15971:9;15967:17;15960:47;16024:131;16150:4;16024:131;:::i;:::-;16016:139;;15743:419;;;:::o;16168:236::-;16308:34;16304:1;16296:6;16292:14;16285:58;16377:19;16372:2;16364:6;16360:15;16353:44;16168:236;:::o;16410:366::-;16552:3;16573:67;16637:2;16632:3;16573:67;:::i;:::-;16566:74;;16649:93;16738:3;16649:93;:::i;:::-;16767:2;16762:3;16758:12;16751:19;;16410:366;;;:::o;16782:419::-;16948:4;16986:2;16975:9;16971:18;16963:26;;17035:9;17029:4;17025:20;17021:1;17010:9;17006:17;16999:47;17063:131;17189:4;17063:131;:::i;:::-;17055:139;;16782:419;;;:::o;17207:224::-;17347:34;17343:1;17335:6;17331:14;17324:58;17416:7;17411:2;17403:6;17399:15;17392:32;17207:224;:::o;17437:366::-;17579:3;17600:67;17664:2;17659:3;17600:67;:::i;:::-;17593:74;;17676:93;17765:3;17676:93;:::i;:::-;17794:2;17789:3;17785:12;17778:19;;17437:366;;;:::o;17809:419::-;17975:4;18013:2;18002:9;17998:18;17990:26;;18062:9;18056:4;18052:20;18048:1;18037:9;18033:17;18026:47;18090:131;18216:4;18090:131;:::i;:::-;18082:139;;17809:419;;;:::o;18234:223::-;18374:34;18370:1;18362:6;18358:14;18351:58;18443:6;18438:2;18430:6;18426:15;18419:31;18234:223;:::o;18463:366::-;18605:3;18626:67;18690:2;18685:3;18626:67;:::i;:::-;18619:74;;18702:93;18791:3;18702:93;:::i;:::-;18820:2;18815:3;18811:12;18804:19;;18463:366;;;:::o;18835:419::-;19001:4;19039:2;19028:9;19024:18;19016:26;;19088:9;19082:4;19078:20;19074:1;19063:9;19059:17;19052:47;19116:131;19242:4;19116:131;:::i;:::-;19108:139;;18835:419;;;:::o;19260:180::-;19308:77;19305:1;19298:88;19405:4;19402:1;19395:15;19429:4;19426:1;19419:15;19446:191;19486:4;19506:20;19524:1;19506:20;:::i;:::-;19501:25;;19540:20;19558:1;19540:20;:::i;:::-;19535:25;;19579:1;19576;19573:8;19570:34;;;19584:18;;:::i;:::-;19570:34;19629:1;19626;19622:9;19614:17;;19446:191;;;;:::o;19643:305::-;19683:3;19702:20;19720:1;19702:20;:::i;:::-;19697:25;;19736:20;19754:1;19736:20;:::i;:::-;19731:25;;19890:1;19822:66;19818:74;19815:1;19812:81;19809:107;;;19896:18;;:::i;:::-;19809:107;19940:1;19937;19933:9;19926:16;;19643:305;;;;:::o;19954:233::-;19993:3;20016:24;20034:5;20016:24;:::i;:::-;20007:33;;20062:66;20055:5;20052:77;20049:103;;;20132:18;;:::i;:::-;20049:103;20179:1;20172:5;20168:13;20161:20;;19954:233;;;:::o;20193:230::-;20333:34;20329:1;20321:6;20317:14;20310:58;20402:13;20397:2;20389:6;20385:15;20378:38;20193:230;:::o;20429:366::-;20571:3;20592:67;20656:2;20651:3;20592:67;:::i;:::-;20585:74;;20668:93;20757:3;20668:93;:::i;:::-;20786:2;20781:3;20777:12;20770:19;;20429:366;;;:::o;20801:419::-;20967:4;21005:2;20994:9;20990:18;20982:26;;21054:9;21048:4;21044:20;21040:1;21029:9;21025:17;21018:47;21082:131;21208:4;21082:131;:::i;:::-;21074:139;;20801:419;;;:::o;21226:180::-;21274:77;21271:1;21264:88;21371:4;21368:1;21361:15;21395:4;21392:1;21385:15;21412:172;21552:24;21548:1;21540:6;21536:14;21529:48;21412:172;:::o;21590:366::-;21732:3;21753:67;21817:2;21812:3;21753:67;:::i;:::-;21746:74;;21829:93;21918:3;21829:93;:::i;:::-;21947:2;21942:3;21938:12;21931:19;;21590:366;;;:::o;21962:419::-;22128:4;22166:2;22155:9;22151:18;22143:26;;22215:9;22209:4;22205:20;22201:1;22190:9;22186:17;22179:47;22243:131;22369:4;22243:131;:::i;:::-;22235:139;;21962:419;;;:::o;22387:77::-;22424:7;22453:5;22442:16;;22387:77;;;:::o;22470:118::-;22557:24;22575:5;22557:24;:::i;:::-;22552:3;22545:37;22470:118;;:::o;22594:442::-;22743:4;22781:2;22770:9;22766:18;22758:26;;22794:71;22862:1;22851:9;22847:17;22838:6;22794:71;:::i;:::-;22875:72;22943:2;22932:9;22928:18;22919:6;22875:72;:::i;:::-;22957;23025:2;23014:9;23010:18;23001:6;22957:72;:::i;:::-;22594:442;;;;;;:::o;23042:148::-;23144:11;23181:3;23166:18;;23042:148;;;;:::o;23196:214::-;23336:66;23332:1;23324:6;23320:14;23313:90;23196:214;:::o;23416:402::-;23576:3;23597:85;23679:2;23674:3;23597:85;:::i;:::-;23590:92;;23691:93;23780:3;23691:93;:::i;:::-;23809:2;23804:3;23800:12;23793:19;;23416:402;;;:::o;23824:79::-;23863:7;23892:5;23881:16;;23824:79;;;:::o;23909:157::-;24014:45;24034:24;24052:5;24034:24;:::i;:::-;24014:45;:::i;:::-;24009:3;24002:58;23909:157;;:::o;24072:522::-;24285:3;24307:148;24451:3;24307:148;:::i;:::-;24300:155;;24465:75;24536:3;24527:6;24465:75;:::i;:::-;24565:2;24560:3;24556:12;24549:19;;24585:3;24578:10;;24072:522;;;;:::o;24600:86::-;24635:7;24675:4;24668:5;24664:16;24653:27;;24600:86;;;:::o;24692:118::-;24763:22;24779:5;24763:22;:::i;:::-;24756:5;24753:33;24743:61;;24800:1;24797;24790:12;24743:61;24692:118;:::o;24816:135::-;24860:5;24898:6;24885:20;24876:29;;24914:31;24939:5;24914:31;:::i;:::-;24816:135;;;;:::o;24957:325::-;25014:6;25063:2;25051:9;25042:7;25038:23;25034:32;25031:119;;;25069:79;;:::i;:::-;25031:119;25189:1;25214:51;25257:7;25248:6;25237:9;25233:22;25214:51;:::i;:::-;25204:61;;25160:115;24957:325;;;;:::o;25288:112::-;25371:22;25387:5;25371:22;:::i;:::-;25366:3;25359:35;25288:112;;:::o;25406:545::-;25579:4;25617:3;25606:9;25602:19;25594:27;;25631:71;25699:1;25688:9;25684:17;25675:6;25631:71;:::i;:::-;25712:68;25776:2;25765:9;25761:18;25752:6;25712:68;:::i;:::-;25790:72;25858:2;25847:9;25843:18;25834:6;25790:72;:::i;:::-;25872;25940:2;25929:9;25925:18;25916:6;25872:72;:::i;:::-;25406:545;;;;;;;:::o;25957:220::-;26097:34;26093:1;26085:6;26081:14;26074:58;26166:3;26161:2;26153:6;26149:15;26142:28;25957:220;:::o;26183:366::-;26325:3;26346:67;26410:2;26405:3;26346:67;:::i;:::-;26339:74;;26422:93;26511:3;26422:93;:::i;:::-;26540:2;26535:3;26531:12;26524:19;;26183:366;;;:::o;26555:419::-;26721:4;26759:2;26748:9;26744:18;26736:26;;26808:9;26802:4;26798:20;26794:1;26783:9;26779:17;26772:47;26836:131;26962:4;26836:131;:::i;:::-;26828:139;;26555:419;;;:::o;26980:168::-;27120:20;27116:1;27108:6;27104:14;27097:44;26980:168;:::o;27154:366::-;27296:3;27317:67;27381:2;27376:3;27317:67;:::i;:::-;27310:74;;27393:93;27482:3;27393:93;:::i;:::-;27511:2;27506:3;27502:12;27495:19;;27154:366;;;:::o;27526:419::-;27692:4;27730:2;27719:9;27715:18;27707:26;;27779:9;27773:4;27769:20;27765:1;27754:9;27750:17;27743:47;27807:131;27933:4;27807:131;:::i;:::-;27799:139;;27526:419;;;:::o;27951:231::-;28091:34;28087:1;28079:6;28075:14;28068:58;28160:14;28155:2;28147:6;28143:15;28136:39;27951:231;:::o;28188:366::-;28330:3;28351:67;28415:2;28410:3;28351:67;:::i;:::-;28344:74;;28427:93;28516:3;28427:93;:::i;:::-;28545:2;28540:3;28536:12;28529:19;;28188:366;;;:::o;28560:419::-;28726:4;28764:2;28753:9;28749:18;28741:26;;28813:9;28807:4;28803:20;28799:1;28788:9;28784:17;28777:47;28841:131;28967:4;28841:131;:::i;:::-;28833:139;;28560:419;;;:::o;28985:228::-;29125:34;29121:1;29113:6;29109:14;29102:58;29194:11;29189:2;29181:6;29177:15;29170:36;28985:228;:::o;29219:366::-;29361:3;29382:67;29446:2;29441:3;29382:67;:::i;:::-;29375:74;;29458:93;29547:3;29458:93;:::i;:::-;29576:2;29571:3;29567:12;29560:19;;29219:366;;;:::o;29591:419::-;29757:4;29795:2;29784:9;29780:18;29772:26;;29844:9;29838:4;29834:20;29830:1;29819:9;29815:17;29808:47;29872:131;29998:4;29872:131;:::i;:::-;29864:139;;29591:419;;;:::o;30016:229::-;30156:34;30152:1;30144:6;30140:14;30133:58;30225:12;30220:2;30212:6;30208:15;30201:37;30016:229;:::o;30251:366::-;30393:3;30414:67;30478:2;30473:3;30414:67;:::i;:::-;30407:74;;30490:93;30579:3;30490:93;:::i;:::-;30608:2;30603:3;30599:12;30592:19;;30251:366;;;:::o;30623:419::-;30789:4;30827:2;30816:9;30812:18;30804:26;;30876:9;30870:4;30866:20;30862:1;30851:9;30847:17;30840:47;30904:131;31030:4;30904:131;:::i;:::-;30896:139;;30623:419;;;:::o;31048:175::-;31188:27;31184:1;31176:6;31172:14;31165:51;31048:175;:::o;31229:366::-;31371:3;31392:67;31456:2;31451:3;31392:67;:::i;:::-;31385:74;;31468:93;31557:3;31468:93;:::i;:::-;31586:2;31581:3;31577:12;31570:19;;31229:366;;;:::o;31601:419::-;31767:4;31805:2;31794:9;31790:18;31782:26;;31854:9;31848:4;31844:20;31840:1;31829:9;31825:17;31818:47;31882:131;32008:4;31882:131;:::i;:::-;31874:139;;31601:419;;;:::o;32026:237::-;32166:34;32162:1;32154:6;32150:14;32143:58;32235:20;32230:2;32222:6;32218:15;32211:45;32026:237;:::o;32269:366::-;32411:3;32432:67;32496:2;32491:3;32432:67;:::i;:::-;32425:74;;32508:93;32597:3;32508:93;:::i;:::-;32626:2;32621:3;32617:12;32610:19;;32269:366;;;:::o;32641:419::-;32807:4;32845:2;32834:9;32830:18;32822:26;;32894:9;32888:4;32884:20;32880:1;32869:9;32865:17;32858:47;32922:131;33048:4;32922:131;:::i;:::-;32914:139;;32641:419;;;:::o;33066:234::-;33206:34;33202:1;33194:6;33190:14;33183:58;33275:17;33270:2;33262:6;33258:15;33251:42;33066:234;:::o;33306:366::-;33448:3;33469:67;33533:2;33528:3;33469:67;:::i;:::-;33462:74;;33545:93;33634:3;33545:93;:::i;:::-;33663:2;33658:3;33654:12;33647:19;;33306:366;;;:::o;33678:419::-;33844:4;33882:2;33871:9;33867:18;33859:26;;33931:9;33925:4;33921:20;33917:1;33906:9;33902:17;33895:47;33959:131;34085:4;33959:131;:::i;:::-;33951:139;;33678:419;;;:::o;34103:149::-;34139:7;34179:66;34172:5;34168:78;34157:89;;34103:149;;;:::o;34258:78::-;34296:7;34325:5;34314:16;;34258:78;;;:::o;34342:153::-;34445:43;34464:23;34481:5;34464:23;:::i;:::-;34445:43;:::i;:::-;34440:3;34433:56;34342:153;;:::o;34501:392::-;34639:3;34654:73;34723:3;34714:6;34654:73;:::i;:::-;34752:1;34747:3;34743:11;34736:18;;34764:75;34835:3;34826:6;34764:75;:::i;:::-;34864:2;34859:3;34855:12;34848:19;;34884:3;34877:10;;34501:392;;;;;:::o;34899:377::-;35005:3;35033:39;35066:5;35033:39;:::i;:::-;35088:89;35170:6;35165:3;35088:89;:::i;:::-;35081:96;;35186:52;35231:6;35226:3;35219:4;35212:5;35208:16;35186:52;:::i;:::-;35263:6;35258:3;35254:16;35247:23;;35009:267;34899:377;;;;:::o;35282:98::-;35333:6;35367:5;35361:12;35351:22;;35282:98;;;:::o;35386:147::-;35487:11;35524:3;35509:18;;35386:147;;;;:::o;35539:373::-;35643:3;35671:38;35703:5;35671:38;:::i;:::-;35725:88;35806:6;35801:3;35725:88;:::i;:::-;35718:95;;35822:52;35867:6;35862:3;35855:4;35848:5;35844:16;35822:52;:::i;:::-;35899:6;35894:3;35890:16;35883:23;;35647:265;35539:373;;;;:::o;35918:431::-;36096:3;36118:95;36209:3;36200:6;36118:95;:::i;:::-;36111:102;;36230:93;36319:3;36310:6;36230:93;:::i;:::-;36223:100;;36340:3;36333:10;;35918:431;;;;;:::o;36355:168::-;36438:11;36472:6;36467:3;36460:19;36512:4;36507:3;36503:14;36488:29;;36355:168;;;;:::o;36529:360::-;36615:3;36643:38;36675:5;36643:38;:::i;:::-;36697:70;36760:6;36755:3;36697:70;:::i;:::-;36690:77;;36776:52;36821:6;36816:3;36809:4;36802:5;36798:16;36776:52;:::i;:::-;36853:29;36875:6;36853:29;:::i;:::-;36848:3;36844:39;36837:46;;36619:270;36529:360;;;;:::o;36895:640::-;37090:4;37128:3;37117:9;37113:19;37105:27;;37142:71;37210:1;37199:9;37195:17;37186:6;37142:71;:::i;:::-;37223:72;37291:2;37280:9;37276:18;37267:6;37223:72;:::i;:::-;37305;37373:2;37362:9;37358:18;37349:6;37305:72;:::i;:::-;37424:9;37418:4;37414:20;37409:2;37398:9;37394:18;37387:48;37452:76;37523:4;37514:6;37452:76;:::i;:::-;37444:84;;36895:640;;;;;;;:::o;37541:141::-;37597:5;37628:6;37622:13;37613:22;;37644:32;37670:5;37644:32;:::i;:::-;37541:141;;;;:::o;37688:349::-;37757:6;37806:2;37794:9;37785:7;37781:23;37777:32;37774:119;;;37812:79;;:::i;:::-;37774:119;37932:1;37957:63;38012:7;38003:6;37992:9;37988:22;37957:63;:::i;:::-;37947:73;;37903:127;37688:349;;;;:::o;38043:348::-;38083:7;38106:20;38124:1;38106:20;:::i;:::-;38101:25;;38140:20;38158:1;38140:20;:::i;:::-;38135:25;;38328:1;38260:66;38256:74;38253:1;38250:81;38245:1;38238:9;38231:17;38227:105;38224:131;;;38335:18;;:::i;:::-;38224:131;38383:1;38380;38376:9;38365:20;;38043:348;;;;:::o;38397:180::-;38445:77;38442:1;38435:88;38542:4;38539:1;38532:15;38566:4;38563:1;38556:15;38583:176;38615:1;38632:20;38650:1;38632:20;:::i;:::-;38627:25;;38666:20;38684:1;38666:20;:::i;:::-;38661:25;;38705:1;38695:35;;38710:18;;:::i;:::-;38695:35;38751:1;38748;38744:9;38739:14;;38583:176;;;;:::o;38765:185::-;38805:1;38822:20;38840:1;38822:20;:::i;:::-;38817:25;;38856:20;38874:1;38856:20;:::i;:::-;38851:25;;38895:1;38885:35;;38900:18;;:::i;:::-;38885:35;38942:1;38939;38935:9;38930:14;;38765:185;;;;:::o;38956:167::-;38993:3;39016:22;39032:5;39016:22;:::i;:::-;39007:31;;39060:4;39053:5;39050:15;39047:41;;;39068:18;;:::i;:::-;39047:41;39115:1;39108:5;39104:13;39097:20;;38956:167;;;:::o
Swarm Source
ipfs://107bcfd5e9279aa3f7edc768941a41713ee0e59177db61ed3f3e80d88dd04432
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.