[ { "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMintFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newUpdateFee", "type": "uint256" } ], "name": "FeesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "string", "name": "entity", "type": "string" }, { "indexed": false, "internalType": "uint8", "name": "rank", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "metadataUrl", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "RankUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCode", "type": "uint8" }, { "indexed": false, "internalType": "uint64", "name": "newDiscount", "type": "uint64" } ], "name": "ReferralCodeDiscountUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" } ], "name": "ReferralCodeUsed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum Tiers.Tier", "name": "tier", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "TierPriceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" } ], "name": "TierUpgraded", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "addFeeFree", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "addIntegrator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "addSigner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" } ], "name": "applyReferralCodeDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "string", "name": "", "type": "string" } ], "name": "entityNFTs", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "string", "name": "", "type": "string" } ], "name": "entityRanks", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "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": "integrator", "type": "address" } ], "name": "getClaimedRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "string", "name": "entity", "type": "string" } ], "name": "getEntityNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "string", "name": "entity", "type": "string" } ], "name": "getEntityRank", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "isMinting", "type": "bool" }, { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "currentTier", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" }, { "internalType": "uint64", "name": "discount", "type": "uint64" } ], "name": "getFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getIntegrators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" } ], "name": "getMintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" } ], "name": "getReferralCodeDiscount", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" } ], "name": "getReferralCodeNfts", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "integrator", "type": "address" } ], "name": "getRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSigners", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum Tiers.Tier", "name": "tier", "type": "uint8" } ], "name": "getTierPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" } ], "name": "getUpdateFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserRank", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserTier", "outputs": [ { "internalType": "enum Tiers.Tier", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_updateFee", "type": "uint256" }, { "internalType": "uint256", "name": "_bronzePrice", "type": "uint256" }, { "internalType": "uint256", "name": "_silverPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_goldPrice", "type": "uint256" }, { "internalType": "uint64", "name": "_integratorShare", "type": "uint64" }, { "internalType": "uint64", "name": "_kolDiscount", "type": "uint64" }, { "internalType": "uint64", "name": "_vipDiscount", "type": "uint64" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint8", "name": "rank", "type": "uint8" }, { "internalType": "string", "name": "metadataUrl", "type": "string" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "enum Tiers.Tier", "name": "currentTier", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "string", "name": "entity", "type": "string" }, { "internalType": "uint64", "name": "discount", "type": "uint64" } ], "internalType": "struct NftCollection.RankParams", "name": "params", "type": "tuple" } ], "name": "integratorSetRank", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint8", "name": "rank", "type": "uint8" }, { "internalType": "string", "name": "metadataUrl", "type": "string" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "enum Tiers.Tier", "name": "currentTier", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "string", "name": "entity", "type": "string" }, { "internalType": "uint64", "name": "discount", "type": "uint64" } ], "internalType": "struct NftCollection.RankParams", "name": "params", "type": "tuple" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "integratorUpdateRank", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "isFeeFree", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "isIntegrator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "isSigner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "removeFeeFree", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "removeIntegrator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "removeSigner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "nonpayable", "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_updateFee", "type": "uint256" } ], "name": "setFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "integratorShare", "type": "uint64" } ], "name": "setIntegratorShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint8", "name": "rank", "type": "uint8" }, { "internalType": "string", "name": "metadataUrl", "type": "string" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "enum Tiers.Tier", "name": "currentTier", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "string", "name": "entity", "type": "string" }, { "internalType": "uint64", "name": "discount", "type": "uint64" } ], "internalType": "struct NftCollection.RankParams", "name": "params", "type": "tuple" } ], "name": "setRank", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "uint64", "name": "newDiscount", "type": "uint64" } ], "name": "setReferralCodeDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum Tiers.Tier", "name": "tier", "type": "uint8" }, { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "setTierPrice", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint8", "name": "rank", "type": "uint8" }, { "internalType": "string", "name": "metadataUrl", "type": "string" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "enum Tiers.Tier", "name": "currentTier", "type": "uint8" }, { "internalType": "enum Tiers.Tier", "name": "newTier", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes8", "name": "referralCode", "type": "bytes8" }, { "internalType": "enum ReferralCodes.ReferralCodeType", "name": "referralCodeType", "type": "uint8" }, { "internalType": "string", "name": "entity", "type": "string" }, { "internalType": "uint64", "name": "discount", "type": "uint64" } ], "internalType": "struct NftCollection.RankParams", "name": "params", "type": "tuple" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "updateRank", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60806040523461001a5760405161526f610020823961526f90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146103b257806306fdde03146103ad578063081812fc146103a8578063086ac22b146103a357806308e308ac1461039e578063095ea7b3146103995780630b78f9c0146103945780630e316ab71461038f57806313966db51461038a57806313b5627e1461038557806323b872dd146103805780632d0335ab1461037b5780633269282014610376578063372500ab14610371578063374f3e551461036c578063426969771461036757806342842e0e1461036257806348536b1b1461035d5780634a5c6f8c146103585780635586402d1461035357806358f67bdf1461034e5780635a69e24a146103495780635b470b7e146103445780635c975abb1461033f57806360219c5a1461033a5780636352211e1461033557806370a0823114610330578063715018a61461032b5780637404b17714610326578063758cdcf01461032157806379ca00e31461031c57806379ee54f7146103175780637df73e271461031257806384b0196e1461030d57806387315a93146103085780638da5cb5b1461030357806394cf795e146102fe57806395d89b41146102f957806397a6d274146102f45780639e36eda6146102ef578063a22cb465146102ea578063b07986b9146102e5578063b1b387d8146102e0578063b296adc4146102db578063b2d1573f146102d6578063b88d4fde146102d1578063b9e35db0146102cc578063baa7825d146102c7578063c87b56dd146102c2578063e19590ee146102bd578063e4d2620e146102b8578063e5dc64ff146102b3578063e931e868146102ae578063e985e9c5146102a9578063eb12d61e146102a4578063eb4371161461029f578063f2fde38b1461029a5763fe59d554036103ca57611295565b61127d565b611264565b61122d565b611211565b6111d3565b6111b7565b61115b565b6110e8565b61105d565b611045565b61102a565b61100e565b610fa4565b610f88565b610f70565b610f55565b610f3c565b610efe565b610ee3565b610ec8565b610ea1565b610e2e565b610e12565b610d27565b610c90565b610c75565b610c53565b610bbd565b610b94565b610b59565b610b3e565b610b23565b610aee565b610aa8565b610a94565b610a78565b610a3c565b6109f3565b6109c6565b61096c565b6108bb565b6108a0565b610888565b610840565b61082d565b6107de565b6107c5565b610784565b610769565b61072b565b6106fe565b6106c4565b610671565b610644565b6104fc565b6104a2565b6103f9565b6001600160e01b031981165b036103ca57565b600080fd5b905035906103dc826103b7565b565b906020828203126103ca576103f2916103cf565b90565b9052565b346103ca5761042761041461040f3660046103de565b6112d0565b6040515b91829182901515815260200190565b0390f35b60009103126103ca57565b60005b8381106104495750506000910152565b8181015183820152602001610439565b61047a61048360209361048d9361046e815190565b80835293849260200190565b95869101610436565b601f01601f191690565b0190565b60208082526103f292910190610459565b346103ca576104b236600461042b565b6104276104bd6113f9565b60405191829182610491565b806103c3565b905035906103dc826104c9565b906020828203126103ca576103f2916104cf565b6001600160a01b031690565b346103ca576104276105176105123660046104dc565b61142d565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381166103c3565b905035906103dc82610531565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761058457604052565b61054d565b906103dc61059660405190565b9283610563565b6001600160401b03811161058457602090601f01601f19160190565b90826000939282370152565b909291926105da6105d58261059d565b610589565b93818552818301116103ca576103dc9160208501906105b9565b9080601f830112156103ca578160206103f2933591016105c5565b9190916040818403126103ca576106268382610540565b9260208201356001600160401b0381116103ca576103f292016105f4565b346103ca5761042761066061065a36600461060f565b90611463565b6040515b9182918290815260200190565b346103ca5761042761068d61068736600461060f565b90611497565b6040519182918260ff909116815260200190565b91906040838203126103ca576103f29060206106bd8286610540565b94016104cf565b346103ca576106dd6106d73660046106a1565b90611584565b604051005b91906040838203126103ca576103f29060206106bd82866104cf565b346103ca576106dd6107113660046106e2565b9061168e565b906020828203126103ca576103f291610540565b346103ca57610427610414610741366004610717565b6116b2565b6103f2916008021c81565b906103f29154610746565b6103f26000610164610751565b346103ca5761077936600461042b565b61042761066061075c565b346103ca576106dd610797366004610717565b611704565b90916060828403126103ca576103f26107b58484610540565b9360406106bd8260208701610540565b346103ca576106dd6107d836600461079c565b9161176f565b346103ca576104276106606107f4366004610717565b61178c565b90816101809103126103ca5790565b906020828203126103ca5781356001600160401b0381116103ca576103f292016107f9565b6106dd61083b366004610808565b6119e8565b346103ca5761085036600461042b565b6106dd611bff565b6001600160401b0381166103c3565b905035906103dc82610858565b906020828203126103ca576103f291610867565b346103ca576106dd61089b366004610874565b611cf9565b346103ca576104276104146108b6366004610717565b611d1c565b346103ca576106dd6108ce36600461079c565b91611d39565b6001600160c01b031981166103c3565b905035906103dc826108d4565b906020828203126103ca576103f2916108e4565b9061092561091e610914845190565b8084529260200190565b9260200190565b9060005b8181106109365750505090565b90919261095361094c6001928651815260200190565b9460200190565b929101610929565b60208082526103f292910190610905565b346103ca576104276109876109823660046108f1565b611def565b6040519182918261095b565b600411156103ca57565b905035906103dc82610993565b91906040838203126103ca576103f29060206106bd828661099d565b346103ca576106dd6109d93660046109aa565b90611ef4565b906020828203126103ca576103f29161099d565b346103ca57610427610660610a093660046109df565b611efe565b91906040838203126103ca578235906001600160401b0382116103ca5760206106bd826103f29487016107f9565b346103ca576106dd610a4f366004610a0e565b90612175565b91906040838203126103ca576103f2906020610a718286610540565b940161099d565b346103ca57610427610660610a8e366004610a55565b9061217f565b6106dd610aa2366004610a0e565b9061234d565b346103ca57610ab836600461042b565b610427610414612357565b600311156103ca57565b905035906103dc82610ac3565b906020828203126103ca576103f291610acd565b346103ca57610427610b09610b04366004610ada565b612387565b604051918291826001600160401b03909116815260200190565b346103ca57610427610517610b393660046104dc565b612406565b346103ca57610427610660610b54366004610717565b612492565b346103ca57610b6936600461042b565b6106dd6124e7565b91906040838203126103ca576103f2906020610b8d82866104cf565b9401610acd565b346103ca57610427610660610baa366004610b71565b90612505565b6103f26000610165610751565b346103ca57610bcd36600461042b565b610427610660610bb0565b8015156103c3565b905035906103dc82610bd8565b60e0818303126103ca57610c018282610540565b92610c0f8360208401610be0565b92610c1d81604085016108e4565b92610c2b8260608301610acd565b926103f2610c3c846080850161099d565b9360c0610c4c8260a0870161099d565b9401610867565b346103ca57610427610660610c69366004610bed565b95949094939193612574565b346103ca57610427610660610c8b366004610717565b6125cd565b346103ca57610427610414610ca6366004610717565b6125e5565b93959194610d03610cfb610d1a95610ced610d13956103f29c9a610ce060e08c019260008d01906001600160f81b0319169052565b8a820360208c0152610459565b9088820360408a0152610459565b976060870152565b6001600160a01b03166080850152565b60a0830152565b60c0818403910152610905565b346103ca57610d3736600461042b565b610427610d42612681565b93610d5297959793919360405190565b97889788610cab565b6103f2906104f0906001600160a01b031682565b6103f290610d5b565b6103f290610d6f565b90610d8b90610d78565b600052602052604060002090565b61048d610db192602092610dab815190565b94859290565b93849101610436565b610dca61048d9160209493610d99565b918252565b610de4610ddb60405190565b92839283610dba565b03902090565b6103f291610dcf565b610e0d6103f292610e08600093610172610d81565b610dea565b610751565b346103ca57610427610660610e2836600461060f565b90610df3565b346103ca57610e3e36600461042b565b610427610517612711565b90610e5861091e610914845190565b9060005b818110610e695750505090565b909192610e8861094c60019286516001600160a01b0316815260200190565b929101610e5c565b60208082526103f292910190610e49565b346103ca57610eb136600461042b565b610427610ebc61271c565b60405191829182610e90565b346103ca57610ed836600461042b565b6104276104bd612727565b346103ca57610427610414610ef9366004610717565b612731565b346103ca57610427610414610f14366004610717565b61273d565b91906040838203126103ca576103f2906020610f358286610540565b9401610be0565b346103ca576106dd610f4f366004610f19565b90612755565b346103ca57610427610414610f6b366004610717565b61277a565b346103ca576106dd610f83366004610717565b6127a2565b346103ca57610427610660610f9e366004610a55565b906127ab565b346103ca5761042761068d610fba366004610717565b612800565b906080828203126103ca57610fd48183610540565b92610fe28260208501610540565b92610ff083604083016104cf565b9260608201356001600160401b0381116103ca576103f292016105f4565b346103ca576106dd611021366004610fbf565b9291909161282b565b346103ca57610427610660611040366004610717565b612844565b346103ca576106dd611058366004610808565b612907565b346103ca576104276104bd6110733660046104dc565b612924565b9190610100838203126103ca5761108f81846104cf565b9261109d82602083016104cf565b926110ab83604084016104cf565b926110b981606085016104cf565b926110c782608083016104cf565b926103f26110d88460a08501610867565b9360e0610c4c8260c08701610867565b346103ca576106dd6110fb366004611078565b96959095949194939293612c6c565b634e487b7160e01b600052602160045260246000fd5b6004111561112a57565b61110a565b906103dc82611120565b6103f29061112f565b6103f590611139565b6020810192916103dc9190611142565b346103ca57610427611176611171366004610717565b612c7c565b6040515b9182918261114b565b6103f2916008021c5b60ff1690565b906103f29154611183565b6111b26103f292610e08600093610171610d81565b611192565b346103ca5761042761068d6111cd36600461060f565b9061119d565b346103ca576111e336600461042b565b610427610ebc612c94565b91906040838203126103ca576103f290602061120a8286610540565b9401610540565b346103ca576104276104146112273660046111ee565b90612c9f565b346103ca57610427610414611243366004610717565b612cd9565b91906040838203126103ca576103f2906020610c4c8286610acd565b346103ca576106dd611277366004611248565b90612dfc565b346103ca576106dd611290366004610717565b612e97565b346103ca576104276106606112ab366004610717565b612ea0565b6112c36112bd6103f29290565b60e01b90565b6001600160e01b03191690565b6112e06112c363490649066112b0565b6001600160e01b03198216149081156112f7575090565b6103f29150612ec5565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015611337575b602083101461133257565b611301565b91607f1691611327565b8054600093929161135e61135483611317565b8085529360200190565b91600181169081156113b0575060011461137757505050565b61138a9192939450600052602060002090565b916000925b81841061139c5750500190565b80548484015260209093019260010161138f565b92949550505060ff1916825215156020020190565b906103f291611341565b906103dc6113e9926113e060405190565b938480926113c5565b0383610563565b6103f2906113cf565b6103f260656113f0565b6103f26103f26103f29290565b90610d8b90611403565b6103f2906104f0565b6103f2905461141a565b61144d6103f29161143c600090565b5061144681612f10565b6069611410565b611423565b6103f29081565b6103f29054611452565b6103f291610e0861147f92611476600090565b50610172610d81565b611459565b6103f29061118c565b6103f29054611484565b6103f291610e086114b3926114aa600090565b50610171610d81565b61148d565b156114bf57565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b0390fd5b1561151957565b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b906103dc916115cf61159583612406565b6115b36001600160a01b0382166001600160a01b03851614156114b8565b336001600160a01b03821681149182156115d4575b5050611512565b612f47565b6115de9250612c9f565b38806115c8565b906103dc916115f2612ffb565b611639565b90600019905b9181191691161790565b906116176103f261161e92611403565b82546115f7565b9055565b9081526040810192916103dc9160200152565b0152565b907f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a19161166881610164611607565b61167482610165611607565b61168961168060405190565b92839283611622565b0390a1565b906103dc916115e5565b906103f2916116a5612ffb565b506103f29061016661302a565b6103f2906000611698565b6103dc906116c9612ffb565b6116ee565b9060ff906115fd565b906116e76103f261161e92151590565b82546116ce565b60006116ff6103dc92610163610d81565b6116d7565b6103dc906116bd565b1561171457565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b6103dc929190611787611782843361305c565b61170d565b6131b6565b61147f6103f29161179b600090565b50610170610d81565b6103dc906117b0613304565b611836565b356103f281610993565b356103f2816108d4565b6003111561112a57565b906103dc826117c9565b356103f281610ac3565b356103f281610858565b156117f857565b60405162461bcd60e51b8152602060048201526016602482015275125b98dbdc9c9958dd08199959481c1c9bdd9a59195960521b6044820152606490fd5b6103dc9061189361188c6103f261184f60a085016117b5565b61185b60c086016117b5565b61186861010087016117bf565b9161187661012088016117dd565b61188361016089016117e7565b93600133612574565b34146117f1565b611938565b903590601e1936829003018212156103ca57018035906001600160401b0382116103ca57602001913682900383136103ca57565b6103f29136916105c5565b356103f281610531565b156118e857565b60405162461bcd60e51b815260206004820152602260248201527f4e465420616c7265616479206d696e74656420666f72207468697320656e7469604482015261747960f01b6064820152608490fd5b6103dc90610140810161195a6119556119518385611898565b9091565b905090565b61196b6119676000611403565b9190565b036119ce5750600161198761198260e084016118d7565b613403565b6119bc6119a961147f83610e086101726119a360e08a016118d7565b90610d81565b6119b66119676000611403565b146118e1565b6119c66000611403565b82349461379d565b6119e36119dd60019284611898565b906118cc565b611987565b6103dc906117a4565b156119f857565b60405162461bcd60e51b81526020600482015260146024820152734e6f742061207369676e6572206164647265737360601b6044820152606490fd5b611a45611a40336125e5565b6119f1565b6103dc611b2b565b15611a5457565b60405162461bcd60e51b81526020600482015260136024820152724e6f207265776172647320746f20636c61696d60681b6044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b9190611ab0565b9290565b8201809211611abb57565b611a8f565b90610dca6105d58361059d565b3d15611ae757611adc3d611ac0565b903d6000602084013e565b606090565b15611af357565b60405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606490fd5b61016a611b94611b3e61147f3384610d81565b91611b53611b4c6000611403565b8411611a4d565b611b7a611b623361016c610d81565b611b7485611b6f83611459565b611aa5565b90611607565b611b8f611b876000611403565b913390610d81565b611607565b611bc3600080611bab611ba633610d78565b610d78565b60405160009186905af1611bbd611acd565b50611aec565b7ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe611bfa611bf033610d78565b9261066460405190565b0390a2565b6103dc611a34565b6103dc90611c13612ffb565b611c89565b611c256103f26103f29290565b6001600160401b031690565b15611c3857565b60405162461bcd60e51b815260206004820152602360248201527f496e7465677261746f722073686172652063616e6e6f7420657863656564203160448201526230302560e81b6064820152608490fd5b6103dc90611cac611c9b612710611c18565b6001600160401b0383161115611c31565b611ced565b906001600160401b03906115fd565b611c256103f26103f2926001600160401b031690565b90611ce66103f261161e92611cc0565b8254611cb1565b6103dc9061016b611cd6565b6103dc90611c07565b906103f291611d0f612ffb565b506103f290610168613b2e565b6103f2906000611d02565b6103f26000611ac0565b6103f2611d27565b90916103dc92611d47611d31565b9261282b565b6001600160c01b03191690565b906001600160c01b031916610d8b565b90611d85611d79610914845490565b92600052602060002090565b9060005b818110611d965750505090565b909192611dba611db3600192611dab87611459565b815260200190565b9460010190565b929101611d89565b906103f291611d6a565b906103dc6113e992611ddd60405190565b93848092611dc2565b6103f290611dcc565b611e076103f291611dfe606090565b5061016d611d5a565b611de6565b906103dc91611e19612ffb565b611e8f565b15611e2557565b60405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073657420707269636520666f722042617369630000000000006044820152606490fd5b90610d8b90611139565b9160206103dc92949361163560408201966000830190611142565b907f9b2aeac57e3bc4cc557619887fe04fb4a5d6a7198dc9d52d71c288115f3bf7c791611ecf611ebf600061112f565b611ec88361112f565b1415611e1e565b611edf82611b8f83610162611e6a565b611689611eeb60405190565b92839283611e74565b906103dc91611e0c565b611f08600061112f565b611f118261112f565b14611f255761147f6103f291610162611e6a565b506103f2610164611459565b15611f3857565b60405162461bcd60e51b81526020600482015260116024820152702737ba1030b71034b73a32b3b930ba37b960791b6044820152606490fd5b906103dc91611f87611f8233612731565b611f31565b906103dc91611f94613304565b61207d565b15611fa057565b60405162461bcd60e51b815260206004820152601960248201527f546f6b656e2049442f456e74697479206e6f7420666f756e64000000000000006044820152606490fd5b15611fec57565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f204e465420666f756e6420666f72207468697320656e74697479000000006044820152606490fd5b1561203857565b60405162461bcd60e51b815260206004820152601960248201527f5573657220646f6573206e6f74206f776e20746865204e4654000000000000006044820152606490fd5b6103dc916101408201906120976119556119518486611898565b916000926120a761196785611403565b0361216257506120bc61198260e085016118d7565b905b6120c783611403565b810361213f57506120e761147f82610e086101726119a360e089016118d7565b6120fe816120f761196786611403565b1415611fe5565b61212f61210a82612406565b61212961211c6104f060e089016118d7565b916001600160a01b031690565b14612031565b8261213981611403565b9461379d565b61215d612158828461215360e089016118d7565b613b4e565b611f99565b6120fe565b6119dd61216f9185611898565b906120be565b906103dc91611f71565b612189600061112f565b6121928361112f565b141590816121aa575b5015611f25576103f290611efe565b6121bd91506121b890612c7c565b61112f565b6121c68261112f565b113861219b565b906103dc916121da613304565b906103dc9161223161188c6103f26121f460a085016117b5565b61220060c086016117b5565b61220d61010087016117bf565b9161221b61012088016117dd565b61222861016089016117e7565b93600033612574565b612282565b1561223d57565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c657220646f6573206e6f74206f776e20746865204e465400000000006044820152606490fd5b60016103dc92610140830161229d6119556119518387611898565b906000916122ad61196784611403565b0361233a57506122c261198260e086016118d7565b915b6122cd82611403565b810361232057506122ed61147f83610e086101726119a360e08a016118d7565b906122fe826120f761196784611403565b61231961230a83612406565b6123133361211c565b14612236565b349461379d565b90612335612158838561215360e08a016118d7565b6122fe565b6119dd6123479186611898565b916122c4565b906103dc916121cd565b6103f260c961148d565b6103f2906117d3565b90610d8b90612361565b6103f290611c25565b6103f29054612374565b61239f6103f291612396600090565b5061016e61236a565b61237d565b6104f06103f26103f29290565b6103f2906123a4565b156123c157565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6124139060005b50613b67565b6103f26124236104f060006123b1565b6001600160a01b03831614156123ba565b1561243b57565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b61147f6103f2916124a1600090565b506124c36124b26104f060006123b1565b6001600160a01b0383161415612434565b6068610d81565b6124d2612ffb565b6103dc6103dc6124e260006123b1565b613b7e565b6103dc6124ca565b6103f26103f26103f2926001600160401b031690565b61252261251d6103f293612517600090565b50612387565b6124ef565b90613c06565b1561252f57565b60405162461bcd60e51b815260206004820152601b60248201527f446973636f756e742063616e6e6f7420657863656564203130302500000000006044820152606490fd5b919594929161259d90610f1461258b612710611c18565b6001600160401b0389165b1115612528565b6125bd57156125af576103f294613c8c565b509091506103f29250613c3b565b5050505050506103f26000611403565b61147f6103f2916125dc600090565b5061016a610d81565b6103f290610166613d3c565b156125f857565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b6001600160401b0381116105845760208091020190565b90610dca6105d583612635565b369037565b906103dc61267461266e8461264c565b93612635565b601f190160208401612659565b61268b60fb611459565b60009061269a61196783611403565b14806126ef575b6126aa906125f1565b6126b2613d5c565b916126bb613d66565b916126c530610d78565b906126e06126db6126d583611403565b92611403565b61265e565b600f60f81b9594934693929190565b506126aa6126fd60fc611459565b61270961196784611403565b1490506126a1565b6103f261012f611423565b6103f2610166613d70565b6103f260666113f0565b6103f290610168613d3c565b6114b36103f29161274c600090565b50610163610d81565b6103dc919033613dc8565b906103f29161276d612ffb565b506103f29061016861302a565b6103f2906000612760565b6103dc90612791612ffb565b60016116ff6103dc92610163610d81565b6103dc90612785565b6127b5600061112f565b6127be8361112f565b141590816127e2575b50156127d6576103f290611efe565b506103f2610165611459565b6127f091506121b890612c7c565b6127f98261112f565b11386127c7565b6114b36103f29161280f600090565b5061282561281f82610171610d81565b91613403565b90610dea565b6103dc9392919061283f611782843361305c565b613e9c565b61147f6103f291612853600090565b5061016c610d81565b6103dc9061286c611f8233612731565b6103dc90612878613304565b60016103dc916101408101906128946119556119518484611898565b916000926128a461196785611403565b036128f457506128b961198260e083016118d7565b905b6128e36128d761147f84610e086101726119a360e088016118d7565b6119b661196786611403565b6128ec83611403565b93849161379d565b6119dd6129019183611898565b906128bb565b6103dc9061285c565b61291e906103f29392610d99565b90610d99565b61292d81612f10565b61294061293b826097611410565b6113f0565b612948613ebb565b80516129576119676000611403565b146129ab57815161296b6119676000611403565b1161297b5750506103f290613ec3565b6103f2925061299f916103f29161299160405190565b938492602084019283612910565b90810382520382610563565b50905090565b6103f29060081c61118c565b6103f290546129b1565b61118c6103f26103f29290565b156129db57565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b61118c6103f26103f29260ff1690565b906116e76103f261161e92612a37565b9061ff009060081b6115fd565b90612a746103f261161e92151590565b8254612a57565b6103f5906129c7565b6020810192916103dc9190612a7b565b9694929091612ae6969492612ab0612aac60006129bd565b1590565b988980612b83575b8015612b3e575b612ac8906129d4565b89612add612ad660016129c7565b6000612a47565b612b2d57612c07565b612aec57565b612af7600080612a64565b7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498612b2160405190565b80611689600182612a84565b612b3960016000612a64565b612c07565b50612b53612aac612b4e30610d78565b613f10565b8015612abf5750612ac8612b67600061148d565b612b7b612b7460016129c7565b9160ff1690565b149050612abf565b50612b8e600061148d565b612b9b612b7460016129c7565b10612ab8565b612bab6006611ac0565b654c53636f726560d01b602082015290565b6103f2612ba1565b612bcf6003611ac0565b624c525360e81b602082015290565b6103f2612bc5565b612bf06003611ac0565b62302e3160e81b602082015290565b6103f2612be6565b92612c5792612c5c9592612c6199989795612c31612c23612bbd565b612c2b612bde565b90613fa3565b612c4a612c3c612bde565b612c44612bff565b90613fc9565b612c52613feb565b613ff3565b61403b565b614044565b6103dc61016f614065565b906103dc97969594939291612a94565b6114b36103f291612c8b600090565b50610161610d81565b6103f2610168613d70565b6103f291612cba6114b392612cb2600090565b50606a610d81565b610d81565b906103f291612ccc612ffb565b506103f290610166613b2e565b6103f2906000612cbf565b906103dc91612cf1612ffb565b612d75565b15612cfd57565b60405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742073657420646973636f756e7420666f7220506c61696e0000006044820152606490fd5b6103f590612361565b9160206103dc929493612d6660408201966000830190612d42565b01906001600160401b03169052565b907fbee5785da448896584d70ae5764d4280d6eeb2056249b27fd90d47ba6a2ccb9d91612db5612da560006117d3565b612dae836117d3565b1415612cf6565b612dd2612dc3612710611c18565b6001600160401b038416612596565b612de782612de28361016e61236a565b611cd6565b611689612df360405190565b92839283612d4b565b906103dc91612ce4565b6103dc90612e12612ffb565b612e72565b15612e1e57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103dc906124e2612e866104f060006123b1565b6001600160a01b0383161415612e17565b6103dc90612e06565b61147f6103f291612eaf600090565b50610e08612ebc82613403565b91610172610d81565b6380ac58cd60e01b6001600160e01b0319821614908115612ef5575b8115612eeb575090565b6103f29150614084565b6001600160e01b03198116635b5e139f60e01b149150612ee1565b612f1c6103dc9161409e565b6123ba565b906001600160a01b03906115fd565b90612f406103f261161e92610d78565b8254612f21565b90612f5c82612f57836069611410565b612f30565b612f7a612f74612f6e611ba684612406565b93610d78565b91611403565b917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925612fa560405190565b600090a4565b15612fb257565b60405162461bcd60e51b81528061150e600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6103dc613006612711565b61301261211c336104f0565b14612fab565b6103f29081906001600160a01b031681565b9061305761196761305261304d60006103f296613045600090565b500194610d6f565b613018565b611403565b614179565b61306582612406565b916001600160a01b0383166001600160a01b038316149283156130b2575b50821561308f57505090565b6130ae9192506130a161211c9161142d565b926001600160a01b031690565b1490565b6130bf9193508290612c9f565b9138613083565b156130cd57565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b1561312757565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b916001600160a01b0360089290920291821b911b6115fd565b91906131a26103f261161e93610d78565b908354613178565b6103dc91600091613191565b612f74612f6e61329a929493946131e76131cf86612406565b6131e16001600160a01b03841661211c565b146130c6565b6132086131f76104f060006123b1565b6001600160a01b0388161415613120565b61328b6132156001611403565b61322181888a8661428a565b61323f61322d88612406565b6131e16001600160a01b03861661211c565b613254600061324f896069611410565b6131aa565b613273613262846068610d81565b611b748361326f83611459565b0390565b611b74613281896068610d81565b9161048d83611459565b611ba686612f57876067611410565b917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612fa560405190565b156132cc57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103dc613312612aac612357565b6132c5565b6133216010611ac0565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6103f2613317565b906103dc61267461335584611ac0565b9361059d565b634e487b7160e01b600052603260045260246000fd5b9061337a825190565b811015613388570160200190565b61335b565b6133b4906133af6133a16103f29460ff1690565b916001600160f81b03191690565b901c90565b6001600160f81b03191690565b6103f29060f81c612a37565b6103f26103f26103f29260ff1690565b81810292918115918404141715611abb57565b6133b46133fd6103f29290565b60f81b90565b61305261304d61341b92613415606090565b50610d6f565b9061342461333d565b613436613431602a611403565b613345565b90600090603061344e61344884611403565b85613371565b53600191600f60fb1b811a61346b61346585611403565b86613371565b538261347682611403565b905b61348a575b505050506103f291925090565b6134946014611403565b8110156135b257600c906134b06134aa83611403565b82611aa5565b6020811015613388576134aa6135086134fa6134f46134ef6134ea6134da8f61353d981a60f81b90565b6134e460046129c7565b9061338d565b6133c1565b6133cd565b88613371565b516001600160f81b03191690565b9360029461353761352d61352461351e89611403565b886133dd565b611b6f89611403565b91881a918b613371565b53611403565b916020831015613388576135a561359b61359161358b6135856134fa61357f8f61356f6134ef916135ac9c1a60f81b90565b613579600f6133f0565b166133c1565b8b613371565b94611403565b856133dd565b611b6f6003611403565b91851a9188613371565b5360010190565b83613478565b61347d565b60ff81166103c3565b356103f2816135b7565b156135d157565b60405162461bcd60e51b8152602060048201526012602482015271496e76616c69642052616e6b2076616c756560701b6044820152606490fd5b356103f2816104c9565b1561361c57565b60405162461bcd60e51b815260206004820152601a60248201527f5369676e6564207472616e73616374696f6e20657870697265640000000000006044820152606490fd5b99979593919c9b9a98969492909c6101808b019d60008c01613681919052565b60ff1660208b015260408a01526060890152608088015260a087016136a591611142565b60c086016136b291611142565b6001600160a01b031660e085015261010084015261012083016136d491612d42565b610140820152610160016103dc916001600160401b03169052565b156136f657565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b1561373657565b60405162461bcd60e51b815260206004820152601c60248201527f52616e6b206973207468652073616d652061732070726576696f7573000000006044820152606490fd5b6000198114611abb5760010190565b611d4d6137976103f29290565b60c01b90565b9094939160208201906137af826135c0565b6137b960646129c7565b6137c79160ff1611156135ca565b8260808101956137d68761360b565b4211156137e290613615565b6137eb846135c0565b93604083016137fa8185611898565b613803916118cc565b80519060200120946101709b8c9660e087019b8c986138218a6118d7565b61382a91610d81565b61383390611459565b9061383d9061360b565b9160a089019a61384c8c6117b5565b60c08b019d61385a8f6117b5565b9c613864906118d7565b9c61010082019d6138748f6117bf565b6040516001600160c01b03199091166020820190815281906138966008820190565b9081038252036138a69082610563565b80519060200120906138bb61012085016117dd565b926138ca610140860186611898565b6138d3916118cc565b8051906020012094610160016138e8906117e7565b956138f260405190565b9a8b9a60208c019a6139259a7fc896a50d8594a76de3cf83fa8601f9cd29dd7eb6844be0111677510cdd8f20718d613661565b9081038252036139359082610563565b80519060200120613945906142a8565b61394f8780611898565b613958916118cc565b613961916142d1565b9c61396b8e6125e5565b613974906136ef565b61399c9061398b906119a38e8515613afa576118d7565b611b7461399782611459565b61377b565b15613ac85750906139cd92916139c76119dd6139c06139ba8d6118d7565b946135c0565b9287611898565b9161438d565b6139d6836117bf565b6139f46139e6611d4d600061378a565b916001600160c01b03191690565b03613a97575b5050505b613a07826117b5565b613a1a613a14600061112f565b9161112f565b14159081613a76575b50613a54575b50613a3357505050565b612aac610f14613a42926118d7565b613a4b575b5050565b6103dc91614563565b613a7090613a6a613a64856118d7565b916117b5565b9061451c565b38613a29565b9050613a90613a146121b8613a8a856117b5565b936117b5565b1138613a23565b613aa3613ac0936117bf565b91613aba610120613ab38a6118d7565b92016117dd565b92614491565b3880806139fa565b929390613af595506119dd613aef91613ae9613ae38d6118d7565b956135c0565b93611898565b9161432a565b6139fe565b613b29613b136114b38c610e086101716119a3876118d7565b613b22612b7461118c8d6135c0565b141561372f565b6118d7565b90613b4961196761305261304d60006103f296613045600090565b61463c565b611aac61147f6130ae93610e0861196794611476600090565b61144d6103f291613b76600090565b506067611410565b613ba1613b9b613b8f61012f611423565b611ba68461012f612f30565b91610d78565b907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0613bcc60405190565b80805b0390a3565b91908203918211611abb57565b634e487b7160e01b600052601260045260246000fd5b8115613c01570490565b613be1565b90613c35612f746103f293613c19600090565b50613c2f61271094613c2a86611403565b613bd4565b906133dd565b90613bf7565b90613c46600061112f565b613c4f8361112f565b14159081613c72575b50613c6957506103f2610165611459565b6103f290611efe565b613c7c915061112f565b613c858261112f565b1138613c58565b9392909190613c9b600061112f565b613ca48361112f565b14159081613d22575b50613d155750613cbe610164611459565b8093613cd06139e6611d4d600061378a565b03613d02575b5050613ce26000611c18565b6001600160401b03821611613cf5575090565b906125226103f2926124ef565b613d0d929350612505565b903880613cd6565b9150506103f29150611efe565b613d2c915061112f565b613d358261112f565b1138613cad565b90613d5761196761305261304d60006103f296613045600090565b61467d565b6103f260fd6113f0565b6103f260fe6113f0565b6060906119559061470d565b15613d8357565b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b613bcf613e2a612f6e7f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3193613e17613e06876001600160a01b031690565b6001600160a01b0383161415613d7c565b611ba6876116ff88612cba85606a610d81565b9361041860405190565b15613e3b57565b6040515b62461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608490fd5b916103dc9391613eb693613eb18383836131b6565b614788565b613e34565b6103f2611d31565b613ecc81612f10565b613ed4613ebb565b8051613ee36119676000611403565b1115613f06576103f261299f91613efc6103f294614863565b9061299160405190565b50506103f2611d31565b3b613f1e6119676000611403565b1190565b15613f2957565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b906103dc91613f99613f9460006129bd565b613f22565b906103dc91614a64565b906103dc91613f82565b906103dc91613fbf613f9460006129bd565b906103dc91614ac8565b906103dc91613fad565b613fe0613f9460006129bd565b6103dc6103dc614ae9565b6103dc613fd3565b916140366103dc9594614019600394614011611b8f97610164611607565b610165611607565b61402b61016293611b8f600186611e6a565b611b8f600284611e6a565b611e6a565b6103dc90611c89565b90612de260026103dc9361406061016e91612de260018461236a565b61236a565b6103dc90611b7460006140786001611403565b92019161048d83611459565b6130ae6301ffc9a760e01b5b916001600160e01b03191690565b6140a990600061240d565b6140b961211c6104f060006123b1565b141590565b90610d8b565b8054821015613388576140de600191600052602060002090565b91020190600090565b9160001960089290920291821b911b6115fd565b919061410a6103f261161e9390565b9083546140e7565b634e487b7160e01b600052603160045260246000fd5b6103dc916000916140fb565b8054801561415757600019019061415461414e83836140c4565b90614128565b55565b614112565b919061410a6103f261161e93611403565b6103dc9160009161415c565b9061418a61147f82600185016140be565b6141946000611403565b811461423d576141f96103f2926000926141ee956141f360019788936141c26141bc86611403565b82613bd4565b888501916141e06141d1845490565b6141da89611403565b90613bd4565b8281036141fe575b50505090565b614134565b016140be565b61416d565b61422761422d6142359461421e614218611b8f95896140c4565b90610751565b928391886140c4565b906140fb565b8888016140be565b3880806141e8565b505050600090565b1561424c57565b60405162461bcd60e51b81526020600482015260166024820152752737b72a3930b739b332b93930b13632902a37b5b2b760511b6044820152606490fd5b9150506103dc91506142a261211c6104f060006123b1565b14614245565b6103f2906142b4614af1565b6042916040519161190160f01b8352600283015260228201522090565b6103f2916142de91614af9565b919091614b51565b949391614325906103dc9461431861430c60609560808b01908b820360008d0152610459565b60ff90931660208a0152565b8782036040890152610459565b940152565b7f61a544f2d7e269e69dfc23917f6c339e4562f64540af1ff367f9e6a53ad175aa9361437a611bfa92969394966143618884614cf3565b611ba68661437587610e0885610171610d81565b612a47565b9561438460405190565b948594856142e6565b906143d8936144007f61a544f2d7e269e69dfc23917f6c339e4562f64540af1ff367f9e6a53ad175aa936143bf600090565b5061437a61016f916143d083614d3d565b988993614065565b6143e28382614dee565b6143ec8884614cf3565b61436183611b8f87610e0885610172610d81565b0390a290565b1561440d57565b60405162461bcd60e51b815260206004820152601d60248201527f526566657272616c20436f64652063616e6e6f7420626520656d7074790000006044820152606490fd5b90815491600160401b83101561058457826144759160016103dc950181556140c4565b9061415c565b9081526040810192916103dc9160200190612d42565b926144f6612f6e7f1a68dcc6542e34761201cbe39b234c1de2765749c6cf28b67e1917fc5fe955849394956144de6144cc611d4d600061378a565b6001600160c01b031983161415614406565b611d4d876144f16103f28461016d611d5a565b614452565b93613bcf61450360405190565b9283928361447b565b906116e76103f261161e92611139565b611bfa6145597f51de07a4aba9cb8a2ff4c3c8735d01b775003c93dd3ddf5f7a2513c87dde55df92611ba68561455483610161610d81565b61450c565b9261117a60405190565b9061456e6000611403565b8114613a475761457c612711565b916001600160a01b0383166001600160a01b038216036145b35750611b746145a96103dc9361016a610d81565b91611b6f83611459565b6145a96103dc93611b74926145e76145e06145d561351e61251d61016b61237d565b613c35612710611403565b8096613bd4565b946145f1826125e5565b614600575b505061016a610d81565b611b746145a96146129361016a610d81565b38806145f6565b90815491600160401b83101561058457826142279160016103dc950181556140c4565b614649612aac838361467d565b156146765761467191611b8f90600161466a846146668482614619565b5490565b93016140be565b600190565b5050600090565b61469691600161147f9261468f600090565b50016140be565b6140b96119676000611403565b906146b2611d79610914845490565b9060005b8181106146c35750505090565b9091926146d8611db3600192611dab87611459565b9291016146b6565b906103f2916146a3565b906103dc6113e9926146fb60405190565b938480926146e0565b6103f2906146ea565b60006103f29161471b606090565b5001614704565b905051906103dc826103b7565b906020828203126103ca576103f291614722565b6001600160a01b039182168152911660208201526103f292608082019290919061476f905b6040830152565b6060818403910152610459565b6040513d6000823e3d90fd5b60009493929161479781613f10565b1561485957906147ac611ba660209493610d78565b906000336147d66147bc60405190565b97889687958694630a85bd0160e11b865260048601614743565b03925af160009181614828575b5061481557506147f1611acd565b80516148006119676000611403565b0361480d57604051613e3f565b805190602001fd5b9091506130ae630a85bd0160e11b614090565b61484b91925060203d602011614852575b6148438183610563565b81019061472f565b90386147e3565b503d614839565b5060019450505050565b61486c81614e5c565b9061487d60019261048d6001611403565b918061488884613345565b936020018401905b61489a5750505090565b81156148ea576148ce9060001901926f181899199a1a9b1b9c1cb0b131b232b360811b600a82061a8453613c35600a611403565b90816148dd6119676000611403565b146148ea57909181614890565b6141e8565b906103dc91614901613f9460006129bd565b614a4e565b818110614911575050565b8061491f600060019361416d565b01614906565b9190601f811161493457505050565b6149466103dc93600052602060002090565b906020601f840181900483019310614968575b6020601f909101040190614906565b9091508190614959565b9061497b815190565b906001600160401b0382116105845761499e826149988554611317565b85614925565b602090601f83116001146149d95761161e9291600091836149ce575b5050600019600883021c1916906002021790565b0151905038806149ba565b601f198316916149ee85600052602060002090565b9260005b818110614a2c57509160029391856001969410614a13575b50505002019055565b01516000196008601f8516021c19169055388080614a0a565b919360206001819287870151815501950192016149f2565b906103dc91614972565b90614a5d6103dc926065614a44565b6066614a44565b906103dc916148ef565b906103dc91614a80613f9460006129bd565b614a93565b906116176103f261161e9290565b90614aa2614aa99260fd614a44565b60fe614a44565b6103dc614ab66000611403565b614ac18160fb614a85565b60fc614a85565b906103dc91614a6e565b614adf613f9460006129bd565b6103dc8033613b7e565b6103dc614ad2565b6103f2615046565b908051614b096119676041611403565b03614b2b57611951916020820151906060604084015193015160001a906150e2565b5050614b3760006123b1565b90600290565b6005111561112a57565b906103dc82614b3d565b614b5b6000614b47565b614b6482614b47565b03614b6c5750565b614b766001614b47565b614b7f82614b47565b03614bc95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b614bd36002614b47565b614bdc82614b47565b03614c265760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b614c39614c336003614b47565b91614b47565b14614c4057565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b15614c9757565b60405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608490fd5b611689906106607ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce793614d2d614d288461409e565b614c90565b614d38836097611410565b614a44565b60006103f291614d4b600090565b5001611459565b15614d5957565b60405162461bcd60e51b81528061150e600482016020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b15614da957565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b9061329a612f74612f6e614e0260006123b1565b614e206001600160a01b0382166001600160a01b0388161415614d52565b614e34614e2f612aac8761409e565b614da2565b61328b614e416001611403565b614e4d81888a8661428a565b613273614e2f612aac8961409e565b614e666000611403565b907a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000614e8c81611403565b821015614fdc575b506d04ee2d6d415b85acef8100000000614ead81611403565b821015614fba575b50662386f26fc10000614ec781611403565b821015614f98575b506305f5e100614ede81611403565b821015614f76575b50612710614ef381611403565b821015614f54575b50614f066064611403565b811015614f32575b614f1b611967600a611403565b1015614f245790565b6103f29061048d6001611403565b614f43614f4e91613c356064611403565b9161048d6002611403565b90614f0e565b614f6f91613c35614f6492611403565b9161048d6004611403565b9038614efb565b614f9191613c35614f8692611403565b9161048d6008611403565b9038614ee6565b614fb391613c35614fa892611403565b9161048d6010611403565b9038614ecf565b614fd591613c35614fca92611403565b9161048d6020611403565b9038614eb5565b614ff791613c35614fec92611403565b9161048d6040611403565b9038614e94565b909594926103dc946150306150379261502960809661502260a088019c6000890152565b6020870152565b6040850152565b6060830152565b01906001600160a01b03169052565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61509a615072615195565b61507a615203565b9061299f61508730610d78565b6040519586946020860194469286614ffe565b6150ac6150a5825190565b9160200190565b2090565b6103f290611403565b6116356103dc946147686060949897956150d8608086019a6000870152565b60ff166020850152565b9192916150ee836150b0565b61511a6119677f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0611403565b116151815761513a60009360209561513160405190565b948594856150b9565b838052039060015afa1561517c5760005161515560006123b1565b6001600160a01b0381166001600160a01b03831614615175575090600090565b9160019150565b61477c565b5050505061518f60006123b1565b90600390565b6151a06103f2613d5c565b80516151af6119676000611403565b11156151c0576150ac6150a5825190565b506151cb60fb611459565b6151d56000611403565b81146151de5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b61520e6103f2613d66565b805161521d6119676000611403565b111561522e576150ac6150a5825190565b506151cb60fc61145956fea264697066735822122077af3e26648ef14c32d5e18f94f77376c6a0ae6ef2d581f2d37af4d85fab55c064736f6c63430008180033