[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "address", "name": "_paymentToken", "type": "address" }, { "internalType": "address", "name": "_underlyingToken", "type": "address" }, { "internalType": "contract IPair", "name": "_pair", "type": "address" }, { "internalType": "address", "name": "_gaugeFactory", "type": "address" }, { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "address", "name": "_voter", "type": "address" }, { "internalType": "address", "name": "_votingEscrow", "type": "address" }, { "internalType": "address", "name": "_router", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "OptionToken_IncorrectPairToken", "type": "error" }, { "inputs": [], "name": "OptionToken_InvalidDiscount", "type": "error" }, { "inputs": [], "name": "OptionToken_InvalidFee", "type": "error" }, { "inputs": [], "name": "OptionToken_InvalidLockDuration", "type": "error" }, { "inputs": [], "name": "OptionToken_InvalidTwapPoints", "type": "error" }, { "inputs": [], "name": "OptionToken_NoAdminRole", "type": "error" }, { "inputs": [], "name": "OptionToken_NoMinterRole", "type": "error" }, { "inputs": [], "name": "OptionToken_NoPauserRole", "type": "error" }, { "inputs": [], "name": "OptionToken_PastDeadline", "type": "error" }, { "inputs": [], "name": "OptionToken_Paused", "type": "error" }, { "inputs": [], "name": "OptionToken_SlippageTooHigh", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paymentAmount", "type": "uint256" } ], "name": "Exercise", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paymentAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lpAmount", "type": "uint256" } ], "name": "ExerciseLp", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paymentAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "ExerciseVe", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "PauseStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "discount", "type": "uint256" } ], "name": "SetDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTeamFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVMFee", "type": "uint256" } ], "name": "SetFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newGauge", "type": "address" } ], "name": "SetGauge", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lockDurationForMaxLpDiscount", "type": "uint256" } ], "name": "SetLockDurationForMaxLpDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lockDurationForMinLpDiscount", "type": "uint256" } ], "name": "SetLockDurationForMinLpDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lpMaxDiscount", "type": "uint256" } ], "name": "SetMaxLPDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lpMinDiscount", "type": "uint256" } ], "name": "SetMinLPDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IPair", "name": "newPair", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newPaymentToken", "type": "address" } ], "name": "SetPairAndPaymentToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "SetRouter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newTreasury", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newVMTreasury", "type": "address" } ], "name": "SetTreasury", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "twapPoints", "type": "uint256" } ], "name": "SetTwapPoints", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "veDiscount", "type": "uint256" } ], "name": "SetVeDiscount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FULL_LOCK", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_DISCOUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_FEES", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TWAP_POINTS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_DISCOUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "discount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPaymentAmount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "exercise", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPaymentAmount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "exercise", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPaymentAmount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_discount", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "exerciseLp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPaymentAmount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "exerciseVe", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "gauge", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "getDiscountedPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_discount", "type": "uint256" } ], "name": "getLockDurationForLpDiscount", "outputs": [ { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_discount", "type": "uint256" } ], "name": "getLpDiscountedPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_discount", "type": "uint256" } ], "name": "getPaymentTokenAmountForExerciseLp", "outputs": [ { "internalType": "uint256", "name": "paymentAmount", "type": "uint256" }, { "internalType": "uint256", "name": "paymentAmountToAddLiquidity", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSlopeInterceptForLpDiscount", "outputs": [ { "internalType": "int256", "name": "slope", "type": "int256" }, { "internalType": "int256", "name": "intercept", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "getTimeWeightedAveragePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "getVeDiscountedPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockDurationForMaxLpDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockDurationForMinLpDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxLPDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minLPDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "contract IPair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paymentToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_discount", "type": "uint256" } ], "name": "setDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_fee", "type": "uint256" }, { "internalType": "uint256", "name": "_vmFee", "type": "uint256" } ], "name": "setFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_gauge", "type": "address" } ], "name": "setGauge", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_duration", "type": "uint256" } ], "name": "setLockDurationForMaxLpDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_duration", "type": "uint256" } ], "name": "setLockDurationForMinLpDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpMaxDiscount", "type": "uint256" } ], "name": "setMaxLPDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpMinDiscount", "type": "uint256" } ], "name": "setMinLPDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IPair", "name": "_pair", "type": "address" }, { "internalType": "address", "name": "_paymentToken", "type": "address" } ], "name": "setPairAndPaymentToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_router", "type": "address" } ], "name": "setRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "address", "name": "_vmTreasury", "type": "address" } ], "name": "setTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_twapPoints", "type": "uint256" } ], "name": "setTwapPoints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_veDiscount", "type": "uint256" } ], "name": "setVeDiscount", "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": [], "name": "teamFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "twapPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlyingToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "updateGauge", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "veDiscount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vmFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vmTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "voter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "votingEscrow", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
6101406040526014600d556050600e556063600f55600a6010556301dfe20060115562093a806012556005601355600560145560046015553480156200004457600080fd5b5060405162003ee938038062003ee98339810160408190526200006791620005d9565b8a8a601282600090805190602001906200008392919062000449565b5081516200009990600190602085019062000449565b5060ff81166080524660a052620000af620002bd565b60c05250620000d2915060008051602062003ec983398151915290508a62000359565b620000fe7f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c8a62000359565b6200011960008051602062003ec98339815191528662000359565b6200013460008051602062003ec983398151915280620003fe565b6200016f7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc960008051602062003ec9833981519152620003fe565b620001aa7f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c60008051602062003ec9833981519152620003fe565b600780546001600160a01b03808b166001600160a01b0319928316811790935589811660e052600980548a83169084168117909155600b80548984169085168117909155600c80548516909117905586821661012052858216610100526008805492861692909316919091179091556040517f8f7f94e208aee73a455947efb48867081ee05f8c16656f34f471c2fec95b8d6e90600090a36040516001600160a01b0385169081907f190c262dc6f09322c68a13bf67c9659e58367755ba6190fa7ce5ca8aa45a877d90600090a36040516001600160a01b038216907f6de4326a8b9054d72d9dbab97d27bc4edffadee7d966f5af9cc4eafdaf8e545590600090a25050505050505050505050620007d3565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620002f1919062000730565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620003fa5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003b93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600082815260066020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b8280546200045790620006f4565b90600052602060002090601f0160209004810192826200047b5760008555620004c6565b82601f106200049657805160ff1916838001178555620004c6565b82800160010185558215620004c6579182015b82811115620004c6578251825591602001919060010190620004a9565b50620004d4929150620004d8565b5090565b5b80821115620004d45760008155600101620004d9565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200051757600080fd5b81516001600160401b0380821115620005345762000534620004ef565b604051601f8301601f19908116603f011681019082821181831017156200055f576200055f620004ef565b816040528381526020925086838588010111156200057c57600080fd5b600091505b83821015620005a0578582018301518183018401529082019062000581565b83821115620005b25760008385830101525b9695505050505050565b80516001600160a01b0381168114620005d457600080fd5b919050565b60008060008060008060008060008060006101608c8e031215620005fc57600080fd5b8b516001600160401b038111156200061357600080fd5b620006218e828f0162000505565b60208e0151909c5090506001600160401b038111156200064057600080fd5b6200064e8e828f0162000505565b9a50506200065f60408d01620005bc565b98506200066f60608d01620005bc565b97506200067f60808d01620005bc565b96506200068f60a08d01620005bc565b95506200069f60c08d01620005bc565b9450620006af60e08d01620005bc565b9350620006c06101008d01620005bc565b9250620006d16101208d01620005bc565b9150620006e26101408d01620005bc565b90509295989b509295989b9093969950565b600181811c908216806200070957607f821691505b6020821081036200072a57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200074d57607f831692505b602080841082036200076d57634e487b7160e01b86526022600452602486fd5b8180156200078457600181146200079657620007c5565b60ff19861689528489019650620007c5565b60008a81526020902060005b86811015620007bd5781548b820152908501908301620007a2565b505084890196505b509498975050505050505050565b60805160a05160c05160e0516101005161012051613644620008856000396000818161065c015281816112110152611e750152600081816106830152818161242f015261248401526000818161054a01528181610fab01528181611016015281816113c401528181611a0801528181611d9601528181611dd20152818161240e015281816125e701528181612734015261279d01526000610e4701526000610e12015260006105b201526136446000f3fe608060405234801561001057600080fd5b506004361061043e5760003560e01c806379c7970711610236578063c7d1e3951161013b578063e3495569116100c3578063f887ea4011610087578063f887ea4014610993578063f897bd1d146109a6578063fa4473b3146109b9578063fb1d6bd9146109cc578063ff26b1c8146109df57600080fd5b8063e349556914610936578063e63ab1e91461093e578063e8772bb214610965578063f595c5ad14610978578063f7b188a51461098b57600080fd5b8063d6379b721161010a578063d6379b72146108c9578063d7c94efd146108dc578063dabd2719146108e5578063dd62ed3e146108f8578063de87db2f1461092357600080fd5b8063c7d1e39514610869578063d505accf1461087c578063d53913931461088f578063d547741f146108b657600080fd5b8063a217fddf116101be578063adfe08701161018d578063adfe08701461082d578063b187bd2614610840578063b34275761461084d578063c0d7865514610856578063c2300bef146107ab57600080fd5b8063a217fddf1461056c578063a6f19c84146107f4578063a8aa1b3114610807578063a9059cbb1461081a57600080fd5b8063881326b311610205578063881326b3146107ab57806391d14854146107b357806395d89b41146107c65780639e66645b146107ce578063a1d50c3a146107e157600080fd5b806379c79707146107725780637ecebe001461077a5780638456cb591461079a578063860ca9bb146107a257600080fd5b80633644e5151161034757806354cb0384116102cf5780636b6f4a9d116102935780636b6f4a9d1461070e5780636e180f6a1461071757806370a082311461072a57806375b238fc1461074a578063787dd9e41461075f57600080fd5b806354cb0384146106c157806355a68ed3146106cc5780635d283021146106df57806361d027b3146106e857806362994c05146106fb57600080fd5b806342966c681161031657806342966c681461064457806346c96aac146106575780634f2bfe5b1461067e57806350a566c5146106a557806351217cbe146106b857600080fd5b80633644e515146105f957806336568abe146106015780633cdfed561461061457806340c10f191461063157600080fd5b806323b872dd116103ca5780632f2ff15d116103995780632f2ff15d146105745780632fc1b057146105875780633013ce291461059a578063313ce567146105ad578063339ccade146105e657600080fd5b806323b872dd1461050f578063248a9ca3146105225780632495a599146105455780632ac8a92c1461056c57600080fd5b8063095ea7b311610411578063095ea7b3146104ac5780630b78f9c0146104bf57806318160ddd146104d25780631adb040a146104db57806320d1b665146104e457600080fd5b806301ffc9a714610443578063062e5bbe1461046b5780630694d1f11461048257806306fdde0314610497575b600080fd5b610456610451366004612db7565b6109e8565b60405190151581526020015b60405180910390f35b610474600d5481565b604051908152602001610462565b610495610490366004612de1565b610a1f565b005b61049f610ab2565b6040516104629190612e2a565b6104566104ba366004612e72565b610b40565b6104956104cd366004612e9e565b610bac565b61047460025481565b61047460115481565b600c546104f7906001600160a01b031681565b6040516001600160a01b039091168152602001610462565b61045661051d366004612ec0565b610c53565b610474610530366004612de1565b60009081526006602052604090206001015490565b6104f77f000000000000000000000000000000000000000000000000000000000000000081565b610474600081565b610495610582366004612f01565b610d33565b610495610595366004612de1565b610d5d565b6007546104f7906001600160a01b031681565b6105d47f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610462565b6104746105f4366004612de1565b610dea565b610474610e0e565b61049561060f366004612f01565b610e69565b61061c610eec565b60408051928352602083019190915201610462565b61049561063f366004612e72565b610f3c565b610495610652366004612de1565b610fdc565b6104f77f000000000000000000000000000000000000000000000000000000000000000081565b6104f77f000000000000000000000000000000000000000000000000000000000000000081565b6104956106b3366004612de1565b611049565b61047460105481565b6104746301dfe20081565b6104956106da366004612f31565b6110ea565b61047460155481565b600b546104f7906001600160a01b031681565b61061c610709366004612f4e565b611169565b610474600f5481565b610474610725366004612de1565b6111a5565b610474610738366004612f31565b60036020526000908152604090205481565b6104746000805160206135cf83398151915281565b61047461076d366004612de1565b6111b5565b6104956111ec565b610474610788366004612f31565b60056020526000908152604090205481565b6104956112ca565b610474600e5481565b610474603281565b6104566107c1366004612f01565b611362565b61049f61138d565b61061c6107dc366004612e9e565b61139a565b6104746107ef366004612f4e565b611473565b600a546104f7906001600160a01b031681565b6009546104f7906001600160a01b031681565b610456610828366004612e72565b6114aa565b61049561083b366004612f8d565b611510565b6016546104569060ff1681565b61047460125481565b610495610864366004612f31565b6115a3565b610474610877366004612e9e565b611622565b61049561088a366004612fbb565b61164b565b6104747ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6104956108c4366004612f01565b61188f565b6104746108d7366004613032565b6118b4565b61047460135481565b6104956108f3366004612de1565b6118c1565b610474610906366004612f8d565b600460209081526000928352604080842090915290825290205481565b610495610931366004612de1565b611956565b610474606481565b6104747f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c81565b610474610973366004612de1565b6119eb565b610495610986366004612de1565b611aea565b610495611b8b565b6008546104f7906001600160a01b031681565b61061c6109b436600461306b565b611c06565b6104956109c7366004612de1565b611c44565b6104956109da366004612f8d565b611cd9565b61047460145481565b60006001600160e01b03198216637965db0b60e01b1480610a1957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610a376000805160206135cf83398151915233611362565b610a545760405163f982dd0f60e01b815260040160405180910390fd5b6012548111610a7657604051634dd99fe760e01b815260040160405180910390fd5b60118190556040518181527f9604eee1326ca00c5073dfa77c88157865a7db1ed7323c9b1e0bc2aa17fa2ea2906020015b60405180910390a150565b60008054610abf906130b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610aeb906130b4565b8015610b385780601f10610b0d57610100808354040283529160200191610b38565b820191906000526020600020905b815481529060010190602001808311610b1b57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b9b9086815260200190565b60405180910390a350600192915050565b610bc46000805160206135cf83398151915233611362565b610be15760405163f982dd0f60e01b815260040160405180910390fd5b6032610bed8284613104565b1115610c0c576040516302ed3d4160e11b815260040160405180910390fd5b6013829055601481905560408051838152602081018390527f3be6e637f54f081a2dd12982cfd58481304fc98b604b18fa8ed4aa4e4a9d1532910160405180910390a15050565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610caf57610c8a838261311c565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b03851660009081526003602052604081208054859290610cd790849061311c565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716906000805160206135ef83398151915290610d209087815260200190565b60405180910390a3506001949350505050565b600082815260066020526040902060010154610d4e81611f42565b610d588383611f4c565b505050565b610d756000805160206135cf83398151915233611362565b610d925760405163f982dd0f60e01b815260040160405180910390fd5b601154811115610db557604051634dd99fe760e01b815260040160405180910390fd5b60128190556040518181527f5de612882d01106e49434ea40eed209dc8ad1a1f752a3388f45824f19b07abbb90602001610aa7565b60006064600f54610dfa846119eb565b610e049190613133565b610a199190613168565b60007f00000000000000000000000000000000000000000000000000000000000000004614610e4457610e3f611fd2565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0381163314610ede5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610ee8828261206c565b5050565b600080600e54600d54610eff919061317c565b601254601154610f0f919061311c565b610f1991906131bb565b9150600e5482610f2991906131e9565b601254610f36919061317c565b90509091565b610f546000805160206135cf83398151915233611362565b158015610f885750610f867ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc933611362565b155b15610fa657604051634fcb6d0160e01b815260040160405180910390fd5b610fd27f00000000000000000000000000000000000000000000000000000000000000003330846120d3565b610ee882826121cb565b610ff46000805160206135cf83398151915233611362565b6110115760405163f982dd0f60e01b815260040160405180910390fd5b61103c7f00000000000000000000000000000000000000000000000000000000000000003383612225565b6110463382612325565b50565b6110616000805160206135cf83398151915233611362565b61107e5760405163f982dd0f60e01b815260040160405180910390fd5b606481118061108b575080155b80611097575080600d54115b156110b5576040516304a5f22d60e41b815260040160405180910390fd5b600e8190556040518181527feccba1be6a56ca0e2c089e59a99f130b3f0bbe23d7bb2d085c278d51b384205890602001610aa7565b6111026000805160206135cf83398151915233611362565b61111f5760405163f982dd0f60e01b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040517f17228b08e4c958112a0827a6d8dc8475dba58dd068a3d400800a606794db02a690600090a250565b6000808242111561118d57604051632d56313160e11b815260040160405180910390fd5b611198868686612387565b9150915094509492505050565b60006064601054610dfa846119eb565b60008060006111c2610eec565b90925090506111e4816111d586856131e9565b6111df919061326e565b61254b565b949350505050565b60095460405163b9a09fd560e01b81526001600160a01b0391821660048201526000917f0000000000000000000000000000000000000000000000000000000000000000169063b9a09fd590602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c91906132af565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250907f17228b08e4c958112a0827a6d8dc8475dba58dd068a3d400800a606794db02a690600090a250565b6112f47f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c33611362565b611311576040516316390a3f60e31b815260040160405180910390fd5b60165460ff16611360576016805460ff191660019081179091556040519081527f4543baa938cb97f5073ec206ad35638cdb1f4db8f677d31579b2f6fe7d18c14a906020015b60405180910390a15b565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60018054610abf906130b4565b6000806113a78484611622565b600854600754604051635e60dab560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015260006044820181905293955083929190911690635e60dab5906064016040805180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e91906132cc565b90925090508161145e8288613133565b6114689190613168565b925050509250929050565b60008142111561149657604051632d56313160e11b815260040160405180910390fd5b6114a1858585612562565b95945050505050565b336000908152600360205260408120805483919083906114cb90849061311c565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133906000805160206135ef83398151915290610b9b9086815260200190565b6115286000805160206135cf83398151915233611362565b6115455760405163f982dd0f60e01b815260040160405180910390fd5b600b80546001600160a01b03199081166001600160a01b03858116918217909355600c80549092169284169283179091556040517f190c262dc6f09322c68a13bf67c9659e58367755ba6190fa7ce5ca8aa45a877d90600090a35050565b6115bb6000805160206135cf83398151915233611362565b6115d85760405163f982dd0f60e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040517f6de4326a8b9054d72d9dbab97d27bc4edffadee7d966f5af9cc4eafdaf8e545590600090a250565b6000606482611630856119eb565b61163a9190613133565b6116449190613168565b9392505050565b4284101561169b5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610ed5565b600060016116a7610e0e565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156117b3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117e95750876001600160a01b0316816001600160a01b0316145b6118265760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610ed5565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000828152600660205260409020600101546118aa81611f42565b610d58838361206c565b60006111e4848484612562565b6118d96000805160206135cf83398151915233611362565b6118f65760405163f982dd0f60e01b815260040160405180910390fd5b6064811180611903575080155b15611921576040516304a5f22d60e41b815260040160405180910390fd5b600f8190556040518181527ff247e4dd947ab13ba6c46412e403447a26e67109ba13945a20e3170e9acef88390602001610aa7565b61196e6000805160206135cf83398151915233611362565b61198b5760405163f982dd0f60e01b815260040160405180910390fd5b6064811180611998575080155b156119b6576040516304a5f22d60e41b815260040160405180910390fd5b60108190556040518181527f88bde7c07a2800f63dadeaab0c0dca2f3792c92736de0f8e6f89954bb0f3c7df90602001610aa7565b600954601554604051635881c47560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201859052604482019290925260009283921690635881c47590606401600060405180830381865afa158015611a6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a929190810190613306565b80519091506000805b82811015611adc57838181518110611ab557611ab56133c4565b602002602001015182611ac89190613104565b915080611ad4816133da565b915050611a9b565b506015546114a19082613168565b611b026000805160206135cf83398151915233611362565b611b1f5760405163f982dd0f60e01b815260040160405180910390fd5b6064811180611b2c575080155b80611b385750600e5481115b15611b56576040516304a5f22d60e41b815260040160405180910390fd5b600d8190556040518181527f09734b71a2b91b11a979f46fe8751cc0a22e29af3006d1ba5196a7ace08798b490602001610aa7565b611ba36000805160206135cf83398151915233611362565b611bc05760405163f982dd0f60e01b815260040160405180910390fd5b60165460ff1615611360576016805460ff19169055604051600081527f4543baa938cb97f5073ec206ad35638cdb1f4db8f677d31579b2f6fe7d18c14a90602001611357565b60008082421115611c2a57604051632d56313160e11b815260040160405180910390fd5b611c368787878761265b565b915091509550959350505050565b611c5c6000805160206135cf83398151915233611362565b611c795760405163f982dd0f60e01b815260040160405180910390fd5b6032811180611c86575080155b15611ca457604051630ac0408560e01b815260040160405180910390fd5b60158190556040518181527f0ede3419bb2e44475a8c470a557b5e3fa75d2ea0c4a8519c9600579d4091678d90602001610aa7565b611cf16000805160206135cf83398151915233611362565b611d0e5760405163f982dd0f60e01b815260040160405180910390fd5b600080836001600160a01b0316639d63848a6040518163ffffffff1660e01b815260040160408051808303816000875af1158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906133f3565b91509150826001600160a01b0316826001600160a01b0316148015611dca57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b80611e2257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015611e225750826001600160a01b0316816001600160a01b0316145b611e3f5760405163a818b0ad60e01b815260040160405180910390fd5b600980546001600160a01b0319166001600160a01b0386811691821790925560405163b9a09fd560e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000009091169063b9a09fd590602401602060405180830381865afa158015611ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee291906132af565b600a80546001600160a01b039283166001600160a01b0319918216179091556007805486841692168217905560405190918616907f8f7f94e208aee73a455947efb48867081ee05f8c16656f34f471c2fec95b8d6e90600090a350505050565b6110468133612951565b611f568282611362565b610ee85760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611f8e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516120049190613422565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6120768282611362565b15610ee85760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000846001600160a01b03163b116120ea57600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161214e91906134bd565b6000604051808303816000865af19150503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b50915091508180156121ba5750805115806121ba5750808060200190518101906121ba91906134d9565b6121c357600080fd5b505050505050565b80600260008282546121dd9190613104565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481526000805160206135ef83398151915291015b60405180910390a35050565b6000836001600160a01b03163b1161223c57600080fd5b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122a991906134bd565b6000604051808303816000865af19150503d80600081146122e6576040519150601f19603f3d011682016040523d82523d6000602084013e6122eb565b606091505b509150915081801561231557508051158061231557508080602001905181019061231591906134d9565b61231e57600080fd5b5050505050565b6001600160a01b0382166000908152600360205260408120805483929061234d90849061311c565b90915550506002805482900390556040518181526000906001600160a01b038416906000805160206135ef83398151915290602001612219565b601654600090819060ff16156123af5760405162b4aa3760e01b815260040160405180910390fd5b6123b93386612325565b6123c2856111a5565b9150838211156123e5576040516323a4850d60e21b815260040160405180910390fd5b6007546000906123fe906001600160a01b0316846129aa565b905061240981612a31565b6124547f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088612a51565b60405163d4e54c3b60e01b8152600481018790526301dfe20060248201526001600160a01b0385811660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d4e54c3b906064016020604051808303816000875af11580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f191906134fb565b60408051888152602081018690529081018290529092506001600160a01b0385169033907f74b7132649649ee4ac2519ff0bb963ce812aaa4c8a0ad0f73c9ac1149fa6e3f49060600160405180910390a350935093915050565b60008082121561255e5781600003610a19565b5090565b60165460009060ff16156125885760405162b4aa3760e01b815260040160405180910390fd5b6125923385612325565b61259b84610dea565b9050828111156125be576040516323a4850d60e21b815260040160405180910390fd5b6007546000906125d7906001600160a01b0316836129aa565b90506125e281612a31565b61260d7f00000000000000000000000000000000000000000000000000000000000000008487612225565b60408051868152602081018490526001600160a01b0385169133917fb1c971764663d561c0ec2baf395a55f33f0a79fabb35bbad580247ba2959523d910160405180910390a3509392505050565b601654600090819060ff16156126835760405162b4aa3760e01b815260040160405180910390fd5b600e548311806126945750600d5483105b156126b2576040516304a5f22d60e41b815260040160405180910390fd5b6126bc3387612325565b6000806126c9888661139a565b91509150868211156126ee576040516323a4850d60e21b815260040160405180910390fd5b600754600090612707906001600160a01b0316846129aa565b60075490915061272b906001600160a01b031633306127268686613104565b6120d3565b600854612763907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168b612a51565b600754600854612780916001600160a01b03908116911684612a51565b600854600754604051635a47ddc360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015260006044820152606481018c905260848101859052600160a4820181905260c48201523060e482015242610104820152911690635a47ddc390610124016060604051808303816000875af1158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b9190613514565b600a546009549197506001600160a01b03908116935061286e9250168287612a51565b806001600160a01b0316631f933c2d89876128888b6111b5565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b1580156128d657600080fd5b505af11580156128ea573d6000803e3d6000fd5b505050506128f6612a9b565b604080518b8152602081018690529081018690526001600160a01b0389169033907f49a80f92a21531b6bccc1cf51cb96a7f814282e7d6a69d0a4dea0167193cd3589060600160405180910390a35050505094509492505050565b61295b8282611362565b610ee85761296881612c09565b612973836020612c1b565b604051602001612984929190613542565b60408051601f198184030181529082905262461bcd60e51b8252610ed591600401612e2a565b6000806064601354846129bd9190613133565b6129c79190613168565b905060006064601454856129db9190613133565b6129e59190613168565b600b54909150612a0290869033906001600160a01b0316856120d3565b600c54612a1c90869033906001600160a01b0316846120d3565b80612a27838661311c565b6114a1919061311c565b600754612a49906001600160a01b03163330846120d3565b611046612a9b565b6000836001600160a01b03163b11612a6857600080fd5b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b9060640161226b565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0891906134fb565b600a54600754604051634cde602960e11b81526001600160a01b0391821660048201529293506000929116906399bcc05290602401602060405180830381865afa158015612b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7e91906134fb565b905080821115610ee857600754600a54612ba5916001600160a01b03908116911684612a51565b600a5460075460405163b66503cf60e01b81526001600160a01b0391821660048201526024810185905291169063b66503cf90604401600060405180830381600087803b158015612bf557600080fd5b505af11580156121c3573d6000803e3d6000fd5b6060610a196001600160a01b03831660145b60606000612c2a836002613133565b612c35906002613104565b67ffffffffffffffff811115612c4d57612c4d6132f0565b6040519080825280601f01601f191660200182016040528015612c77576020820181803683370190505b509050600360fc1b81600081518110612c9257612c926133c4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612cc157612cc16133c4565b60200101906001600160f81b031916908160001a9053506000612ce5846002613133565b612cf0906001613104565b90505b6001811115612d68576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d2457612d246133c4565b1a60f81b828281518110612d3a57612d3a6133c4565b60200101906001600160f81b031916908160001a90535060049490941c93612d61816135b7565b9050612cf3565b5083156116445760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ed5565b600060208284031215612dc957600080fd5b81356001600160e01b03198116811461164457600080fd5b600060208284031215612df357600080fd5b5035919050565b60005b83811015612e15578181015183820152602001612dfd565b83811115612e24576000848401525b50505050565b6020815260008251806020840152612e49816040850160208701612dfa565b601f01601f19169190910160400192915050565b6001600160a01b038116811461104657600080fd5b60008060408385031215612e8557600080fd5b8235612e9081612e5d565b946020939093013593505050565b60008060408385031215612eb157600080fd5b50508035926020909101359150565b600080600060608486031215612ed557600080fd5b8335612ee081612e5d565b92506020840135612ef081612e5d565b929592945050506040919091013590565b60008060408385031215612f1457600080fd5b823591506020830135612f2681612e5d565b809150509250929050565b600060208284031215612f4357600080fd5b813561164481612e5d565b60008060008060808587031215612f6457600080fd5b84359350602085013592506040850135612f7d81612e5d565b9396929550929360600135925050565b60008060408385031215612fa057600080fd5b8235612fab81612e5d565b91506020830135612f2681612e5d565b600080600080600080600060e0888a031215612fd657600080fd5b8735612fe181612e5d565b96506020880135612ff181612e5d565b95506040880135945060608801359350608088013560ff8116811461301557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561304757600080fd5b8335925060208401359150604084013561306081612e5d565b809150509250925092565b600080600080600060a0868803121561308357600080fd5b8535945060208601359350604086013561309c81612e5d565b94979396509394606081013594506080013592915050565b600181811c908216806130c857607f821691505b6020821081036130e857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613117576131176130ee565b500190565b60008282101561312e5761312e6130ee565b500390565b600081600019048311821515161561314d5761314d6130ee565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261317757613177613152565b500490565b60008083128015600160ff1b85018412161561319a5761319a6130ee565b6001600160ff1b03840183138116156131b5576131b56130ee565b50500390565b6000826131ca576131ca613152565b600160ff1b8214600019841416156131e4576131e46130ee565b500590565b60006001600160ff1b038184138284138082168684048611161561320f5761320f6130ee565b600160ff1b600087128281168783058912161561322e5761322e6130ee565b6000871292508782058712848416161561324a5761324a6130ee565b87850587128184161615613260576132606130ee565b505050929093029392505050565b600080821280156001600160ff1b0384900385131615613290576132906130ee565b600160ff1b83900384128116156132a9576132a96130ee565b50500190565b6000602082840312156132c157600080fd5b815161164481612e5d565b600080604083850312156132df57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561331957600080fd5b825167ffffffffffffffff8082111561333157600080fd5b818501915085601f83011261334557600080fd5b815181811115613357576133576132f0565b8060051b604051601f19603f8301168101818110858211171561337c5761337c6132f0565b60405291825284820192508381018501918883111561339a57600080fd5b938501935b828510156133b85784518452938501939285019261339f565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016133ec576133ec6130ee565b5060010190565b6000806040838503121561340657600080fd5b825161341181612e5d565b6020840151909250612f2681612e5d565b600080835481600182811c91508083168061343e57607f831692505b6020808410820361345d57634e487b7160e01b86526022600452602486fd5b8180156134715760018114613482576134af565b60ff198616895284890196506134af565b60008a81526020902060005b868110156134a75781548b82015290850190830161348e565b505084890196505b509498975050505050505050565b600082516134cf818460208701612dfa565b9190910192915050565b6000602082840312156134eb57600080fd5b8151801515811461164457600080fd5b60006020828403121561350d57600080fd5b5051919050565b60008060006060848603121561352957600080fd5b8351925060208401519150604084015190509250925092565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161357a816017850160208801612dfa565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516135ab816028840160208801612dfa565b01602801949350505050565b6000816135c6576135c66130ee565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c769054306bc910061d691908ad8c1302fa6fb0b87f5468ff7f8aaacbc1683a264736f6c634300080d0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000003b91ca4d89b5156d456cbd0d6305f7f36b1517a40000000000000000000000004e74d4db6c0726ccded4656d0bce448876bb4c7a000000000000000000000000548f93779fbc992010c07467cbaf329dd5f059b7000000000000000000000000d272920b2b4ebee362a887451edbd6d68a76e50700000000000000000000000096600b4293da981554805ccbab88b48b4c54faa8000000000000000000000000fa89a4c7f79dc4111c116a0f01061f4a7d9fab73000000000000000000000000ab9b68c9e53c94d7c0949fb909e80e4a29f9134a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e11b93b61f6291d35c5a2bea0a9ff169080160cf00000000000000000000000000000000000000000000000000000000000000114f7074696f6e20746f2062757920424d5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f424d5800000000000000000000000000000000000000000000000000000000