@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,582 lines • 79.5 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.StakeTokenFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class StakeTokenFactory extends contracts_1.ContractFactory {
constructor(signer) {
super(_abi, _bytecode, signer);
}
deploy(overrides) {
return super.deploy(overrides || {});
}
getDeployTransaction(overrides) {
return super.getDeployTransaction(overrides || {});
}
attach(address) {
return super.attach(address);
}
connect(signer) {
return super.connect(signer);
}
static connect(address, signerOrProvider) {
return new contracts_1.Contract(address, _abi, signerOrProvider);
}
}
exports.StakeTokenFactory = StakeTokenFactory;
const _abi = [
{
inputs: [],
stateMutability: "nonpayable",
type: "constructor",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "spender",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Approval",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "",
type: "uint16",
},
],
name: "BaselinePercentageUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "account",
type: "address",
},
{
indexed: false,
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "CooldownStarted",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
indexed: false,
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
],
name: "CooldownUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "by",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "EmergencyPaused",
type: "event",
},
{
anonymous: false,
inputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
indexed: false,
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
indexed: false,
internalType: "string",
name: "tokenName",
type: "string",
},
{
indexed: false,
internalType: "string",
name: "tokenSymbol",
type: "string",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "maxSlash",
type: "uint16",
},
],
name: "MaxSlashUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
],
name: "ProviderAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
],
name: "ProviderRemoved",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "RateUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "bool",
name: "redeemable",
type: "bool",
},
],
name: "RedeemableUpdated",
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",
},
{
indexed: false,
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
],
name: "Redeemed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "totalBeforeSlash",
type: "uint256",
},
],
name: "Slashed",
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",
},
{
indexed: true,
internalType: "uint256",
name: "referal",
type: "uint256",
},
],
name: "Staked",
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: "value",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [],
name: "COOLDOWN_PERIOD",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "DOMAIN_SEPARATOR",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "EIP712_REVISION",
outputs: [
{
internalType: "bytes",
name: "",
type: "bytes",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "PERMIT_TYPEHASH",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "REVISION",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [],
name: "UNDERLYING_ASSET_ADDRESS",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "UNSTAKE_PERIOD",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
name: "_nonces",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "addRewardProvider",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
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: [],
name: "attachedToRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "balanceAndCooldownOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "windowStart",
type: "uint32",
},
{
internalType: "uint32",
name: "windowEnd",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOfUnderlying",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "calcRewardFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "claimRewardFor",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "",
type: "uint32",
},
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint256",
name: "baseAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "limit",
type: "uint256",
},
{
internalType: "uint16",
name: "minPct",
type: "uint16",
},
],
name: "claimRewardWithLimitFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
{
internalType: "bool",
name: "keepPull",
type: "bool",
},
{
internalType: "uint256",
name: "newLimit",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "cooldown",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "decimals",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "subtractedValue",
type: "uint256",
},
],
name: "decreaseAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "detachedFromRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "exchangeRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getBaselinePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "getCooldown",
outputs: [
{
internalType: "uint32",
name: "",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getIncentivesController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getMaxSlashablePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getOwner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getPoolName",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRewardController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "addedValue",
type: "uint256",
},
],
name: "increaseAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "config",
type: "tuple",
},
],
name: "initializeRewardPool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
internalType: "string",
name: "name",
type: "string",
},
{
internalType: "string",
name: "symbol",
type: "string",
},
],
name: "initializeStakeToken",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "initializedRewardPoolWith",
outputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "initializedStakeTokenWith",
outputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
internalType: "string",
name: "name_",
type: "string",
},
{
internalType: "string",
name: "symbol_",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isPaused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isRedeemable",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "addr",
type: "address",
},
],
name: "nonces",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
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: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "stakeAmount",
type: "uint256",
},
],
name: "redeem",
outputs: [
{
internalType: "uint256",
name: "stakeAmount_",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
],
name: "redeemUnderlying",
outputs: [
{
internalType: "uint256",
name: "underlyingAmount_",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "provider",
type: "address",
},
],
name: "removeRewardProvider",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "rewardedBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "factor",
type: "uint16",
},
],
name: "setBaselinePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
],
name: "setCooldown",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
name: "setIncentivesController",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "slashPct",
type: "uint16",
},
],
name: "setMaxSlashablePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "setPaused",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "redeemable",
type: "bool",
},
],
name: "setRedeemable",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "destination",
type: "address",
},
{
internalType: "uint256",
name: "minAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "maxAmount",
type: "uint256",
},
],
name: "slashUnderlying",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "bool",
name: "erc20Transfer",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "referral",
type: "uint256",
},
],
name: "stake",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "symbol",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "recipient",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "sender",
type: "address",
},
{
internalType: "address",
name: "recipient",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "baseline",
type: "uint256",
},
],
name: "updateBaseline",
outputs: [
{
internalType: "bool",
name: "hasBaseline",
type: "bool",
},
{
internalType: "uint256",
name: "appliedRate",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "uint256",
name: "subtractedValue",
type: "uint256",
},
],
name: "useAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode = "0x6080604052600080546001600160a01b0316676765c793fa10079d60bb1b1790556001805463ffffffff60301b191666780000000000001781556200004790600019620007fd565b60105560006011553480156200005c57600080fd5b5060408051602080820183526000808352835191820190935282815282546001600160a01b0319168355909180808080620000978162000111565b50620000bb83838360405180602001604052806000815250620001bc60201b60201c565b50508351620000d391506008906020860190620006b2565b508151620000e9906009906020850190620006b2565b50600a805460ff191660ff92909216919091179055506200010b905062000205565b620008a8565b600080546001600160a01b0316676765c793fa10079d60bb1b17905560026200013d60016064620007ae565b6200014a906064620007ae565b62000156919062000773565b61ffff168161ffff1610620001a75760026200017560016064620007ae565b62000182906064620007ae565b6200018e919062000773565b6001805461ffff191661ffff9290921691909117905550565b6001805461ffff191661ffff83161790555b50565b600780546001600160a01b0319166001600160a01b03861617905561ffff821615620001ed57620001ed82620002b3565b8215620001ff57620001ff8362000398565b50505050565b467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000231620003de565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f198184030181529190528051602090910120600c5550565b620002bd620003fa565b61ffff8116620002d957620002d3600062000398565b62000341565b620002e760016064620007ae565b620002f4906064620007ae565b61ffff168161ffff161115620003415760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6007805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b620003a2620003fa565b620003ad8162000456565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020016200038d565b6060620003f56200046c60201b620009011760201c565b905090565b6007546001600160a01b0316620004545760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000338565b565b620001b9816200050660201b6200172d1760201c565b6060600880546200047d906200083f565b80601f0160208091040260200160405190810160405280929190818152602001828054620004ab906200083f565b8015620004fc5780601f10620004d057610100808354040283529160200191620004fc565b820191906000526020600020905b815481529060010190602001808311620004de57829003601f168201915b5050505050905090565b620001b981426004546001600160e01b031682141562000524575050565b6001600160e01b038211156200053957600080fd5b60045463ffffffff600160e01b90910481169082168114620005a6576004546001600160e01b039081169062000572908490620005ab16565b600480546001600160e01b0319166001600160e01b0386811691909117909155620001ff9082811690849086906200062a16565b505050565b60045463ffffffff600160e01b90910481169082161015620006055760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000338565b6004805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6006546200063757505050565b8163ffffffff168163ffffffff1614620005a65760065462000669906ec097ce7bc90715b34b9f100000000062000797565b620006759084620007db565b925062000683828262000817565b620006959063ffffffff1684620007db565b60056000828254620006a8919062000758565b9091555050505050565b828054620006c0906200083f565b90600052602060002090601f016020900481019282620006e457600085556200072f565b82601f10620006ff57805160ff19168380011785556200072f565b828001600101855582156200072f579182015b828111156200072f57825182559160200191906001019062000712565b506200073d92915062000741565b5090565b5b808211156200073d576000815560010162000742565b600082198211156200076e576200076e6200087c565b500190565b600061ffff808416806200078b576200078b62000892565b92169190910492915050565b600082620007a957620007a962000892565b500490565b600061ffff80831681851681830481118215151615620007d257620007d26200087c565b02949350505050565b6000816000190483118215151615620007f857620007f86200087c565b500290565b6000828210156200081257620008126200087c565b500390565b600063ffffffff838116908316818110156200083757620008376200087c565b039392505050565b600181811c908216806200085457607f821691505b602082108114156200087657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6145d580620008b86000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806370a08231116101e9578063a9059cbb1161010f578063d2993983116100ad578063dde43cba1161007c578063dde43cba146108a6578063e655dbd8146108ad578063f34d96da146108c0578063ff85a2ba146108cc57600080fd5b8063d29939831461083f578063d354f24014610847578063d505accf1461085a578063dd62ed3e1461086d57600080fd5b8063b16a19de116100e9578063b16a19de146107e4578063b187bd26146107fa578063b6fe2e9c1461080c578063b9844d8d1461081f57600080fd5b8063a9059cbb146107c9578063a9dd77021461064e578063af920582146107dc57600080fd5b80637fcea80e1161018757806395d89b411161015657806395d89b411461075d5780639629417814610765578063a457c2d714610778578063a8346a8c1461078b57600080fd5b80637fcea80e146106f4578063893d20e8146107075780638abc37d31461071857806392efda791461074c57600080fd5b8063787a08a6116101c3578063787a08a61461069b57806379b57862146106a357806379d08c34146106b85780637ecebe00146106cb57600080fd5b806370a082311461064e57806375d2641314610661578063781603761461067b57600080fd5b806330adf81f116102ce5780633a7d40891161026c5780634d25c4f11161023b5780634d25c4f11461060857806355f4f1971461062a578063679aefce146106325780636e99d52f1461063a57600080fd5b80633a7d4089146105b55780633af9e669146105ca5780633ba0b9a9146105dd5780634800df8c146105f557600080fd5b806337a92626116102a857806337a92626146105545780633890711814610567578063395093511461057a57806339b84ecf1461058d57600080fd5b806330adf81f1461050f578063313ce567146105365780633644e5151461054b57600080fd5b8063161952101161033b5780631dd0f483116103155780631dd0f483146104bf5780631e9a6950146104d257806323b872dd146104e557806326cc73a4146104f857600080fd5b8063161952101461047c57806316c38b3c146104a457806318160ddd146104b757600080fd5b80630c51b88f116103775780630c51b88f146103f55780630ca2103d14610408578063115eb1cf1461043257806314e613a81461046757600080fd5b806306fdde031461039e5780630746363d146103bc578063095ea7b3146103d2575b600080fd5b6103a6610901565b6040516103b3919061415e565b60405180910390f35b6103c4610993565b6040519081526020016103b3565b6103e56103e0366004613d92565b6109a8565b60405190151581526020016103b3565b6103c4610403366004613dbd565b6109bf565b61041b610416366004614038565b6109d7565b6040805192151583526020830191909152016103b3565b610445610440366004613c91565b610a34565b6040805193845263ffffffff92831660208501529116908201526060016103b3565b61047a610475366004613edc565b610aae565b005b61048f61048a366004613dbd565b610c64565b604080519283529015156020830152016103b3565b61047a6104b2366004613e6c565b610d19565b6103c4610d8b565b61047a6104cd366004613c91565b610d96565b6103c46104e0366004613d92565b610da1565b6103e56104f3366004613ce5565b610dfd565b610500610e1e565b6040516103b393929190614297565b6103c47f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600a5460405160ff90911681526020016103b3565b6103c4600c5481565b61047a610562366004613ea4565b610eb1565b61047a610575366004613e6c565b610f9c565b6103e5610588366004613d92565b611020565b6105a061059b366004613c91565b61105c565b60405163ffffffff90911681526020016103b3565b6105bd611071565b6040516103b39190614171565b6103c46105d8366004613c91565b6110fa565b600054600160a01b90046001600160601b03166103c4565b61047a61060336600461401e565b61112b565b600754600160a01b900461ffff165b60405161ffff90911681526020016103b3565b6103c461113c565b6103c461114b565b60015462010000900463ffffffff166103c4565b6103c461065c366004613c91565b611155565b305b6040516001600160a01b0390911681526020016103b3565b6103a6604051806040016040528060018152602001603160f81b81525081565b61047a611170565b600154600160301b900463ffffffff166103c4565b61047a6106c636600461401e565b6111f8565b6103c46106d9366004613c91565b6001600160a01b03166000908152600d602052604090205490565b6103e5610702366004613d92565b6112dd565b6000546001600160a01b0316610663565b61072b610726366004613e38565b611303565b60408051938452602084019290925263ffffffff16908201526060016103b3565b6007546001600160a01b0316610663565b6103a661133c565b6103c4610773366004613d92565b61134b565b6103e5610786366004613d92565b6113c0565b61079e610799366004613df1565b6113e6565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016103b3565b6103e56107d7366004613d92565b611412565b6103e561141f565b600e5461010090046001600160a01b0316610663565b600754600160b01b900460ff166103e5565b61047a61081a366004613cad565b611442565b6103c461082d366004613c91565b600d6020526000908152604090205481565b6103a6611456565b61047a610855366004614068565b611460565b61047a610868366004613d25565b6114a3565b6103c461087b366004613cad565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b60026103c4565b61047a6108bb366004613c91565b6116ca565b60015461ffff16610617565b6108df6108da366004613c91565b61170a565b6040805193845263ffffffff90921660208401521515908201526060016103b3565b606060088054610910906144a7565b80601f016020809104026020016040519081016040528092919081815260200182805461093c906144a7565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b600061099d611737565b50600090565b905090565b60006109b533848461177e565b5060015b92915050565b60006109cd338585856118a3565b90505b9392505050565b6000806109e2611737565b600754600160a01b900461ffff16610a075760006109fe611a4d565b91509150915091565b600754610a20908490600160a01b900461ffff16611a61565b9050610a2b81611b56565b60019150915091565b6000806000610a428461105c565b915063ffffffff821615610a9b5760015462010000900463ffffffff16610a699083614399565b600154909250600160301b900463ffffffff16820190508163ffffffff168163ffffffff161015610a9b575063ffffffff5b610aa484611155565b92505b9193909250565b60026000806000610abe84611b97565b92509250925080610acf5760118490555b610adc6002601054101590565b15610b6257610b5d88888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610b589250610ea8915050565b611e0e565b610bff565b610be088888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610b589250505060e08d0160c08e01614083565b610bf7610bf2368b90038b018b613f63565b611e4e565b610bff611edb565b7f9caf63ff43d150ebe4579f7f23fe1333ab0047963f67720a273b83ad2d4686b08989898989604051610c369594939291906141b9565b60405180910390a180610c4957