[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint80", "name": "stakingPeriod", "type": "uint80" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recepient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Pulled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newAPY", "type": "uint256" } ], "name": "SetAPY", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "SetTokenLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint80", "name": "stakingPeriod", "type": "uint80" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "MAX_APY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_STAKE_AMOUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_STAKING_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ONE_HUNDRED", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "YEAR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentAPY", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMainInfo", "outputs": [ { "components": [ { "internalType": "uint256", "name": "globalId", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "numOfActiveStakes", "type": "uint256" }, { "internalType": "uint256", "name": "sumOfActiveAPY", "type": "uint256" }, { "internalType": "uint256", "name": "rewardsAvailable", "type": "uint256" }, { "internalType": "uint256", "name": "maxPotentialDebt", "type": "uint256" }, { "internalType": "uint256", "name": "stakingTokenLimit", "type": "uint256" }, { "internalType": "uint256", "name": "contractBalance", "type": "uint256" }, { "internalType": "uint256", "name": "currentAPY", "type": "uint256" }, { "internalType": "uint256", "name": "stakingPeriod", "type": "uint256" }, { "internalType": "address", "name": "stakingToken", "type": "address" } ], "internalType": "struct StakingPool.MainInfo", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardsAvailable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getStakeRealDuration", "outputs": [ { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserInactiveStakesLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "getUserInactiveStakesSlice", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "claimed", "type": "uint256" }, { "internalType": "uint256", "name": "expectedRewards", "type": "uint256" }, { "internalType": "uint80", "name": "apy", "type": "uint80" }, { "internalType": "uint80", "name": "unstakedAtBlockTimestamp", "type": "uint80" }, { "internalType": "uint80", "name": "timestamp", "type": "uint80" } ], "internalType": "struct StakingPool.Stake[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserStakeIdsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "getUserStakesSlice", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "claimed", "type": "uint256" }, { "internalType": "uint256", "name": "expectedRewards", "type": "uint256" }, { "internalType": "uint80", "name": "apy", "type": "uint80" }, { "internalType": "uint80", "name": "unstakedAtBlockTimestamp", "type": "uint80" }, { "internalType": "uint80", "name": "timestamp", "type": "uint80" } ], "internalType": "struct StakingPool.Stake[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "globalId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "hasStakeId", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "stakingToken_", "type": "address" }, { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "uint256", "name": "stakingPeriod_", "type": "uint256" }, { "internalType": "uint256", "name": "apy_", "type": "uint256" }, { "internalType": "uint256", "name": "stakeAmountLimit_", "type": "uint256" }, { "internalType": "contract IBlastPoints", "name": "blastPoints_", "type": "address" }, { "internalType": "address", "name": "pointsOperator_", "type": "address" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxPotentialDebt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numOfActiveStakes", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "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": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "recepient", "type": "address" } ], "name": "pullExtraLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "apy", "type": "uint256" } ], "name": "setAPY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "paused", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "setTokenLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakes", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "claimed", "type": "uint256" }, { "internalType": "uint256", "name": "expectedRewards", "type": "uint256" }, { "internalType": "uint80", "name": "apy", "type": "uint80" }, { "internalType": "uint80", "name": "unstakedAtBlockTimestamp", "type": "uint80" }, { "internalType": "uint80", "name": "timestamp", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingPeriod", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingTokenLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sumOfActiveAPY", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "userInactiveStakes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801562000010575f80fd5b506200001b62000021565b620000df565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614620000dd575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6136f880620000ed5f395ff3fe608060405234801561000f575f80fd5b5060043610610283575f3560e01c80637cb1f5ce11610157578063bfaa8cca116100d2578063d5a44f8611610088578063eb8af21a1161006e578063eb8af21a14610657578063f1752ec51461068c578063f2fde38b146106a2575f80fd5b8063d5a44f8614610559578063dc7804be1461064e575f80fd5b8063c0e68fec116100b8578063c0e68fec14610535578063ca66682314610548578063cac33fdc14610551575f80fd5b8063bfaa8cca146104fe578063c03d5b4714610507575f80fd5b80639a79d32b11610127578063a37096871161010d578063a3709687146104b4578063a694fc3a146104c7578063be15d8ef146104da575f80fd5b80639a79d32b14610470578063a182dd13146104a1575f80fd5b80637cb1f5ce1461042a578063839145401461043f5780638b7afe2e1461044a5780638da5cb5b14610452575f80fd5b80635709632b1161020157806370a08231116101b75780637180e5901161019d5780637180e590146103bf57806372f702f3146103d25780637a2be6e314610417575f80fd5b806370a0823114610398578063715018a6146103b7575f80fd5b80635c41972a116101e75780635c41972a1461034e5780635c975abb146103615780636a89beb714610378575f80fd5b80635709632b146103335780635ae64bd814610346575f80fd5b80632f92f1f2116102565780633d92f4e21161023c5780633d92f4e21461030f5780634298168d146103175780634d6ed8c414610320575f80fd5b80632f92f1f2146102de5780633a5dd35f146102fc575f80fd5b806316c38b3c1461028757806318160ddd1461029c57806324f45e67146102b85780632e1a7d4d146102cb575b5f80fd5b61029a610295366004613123565b6106b5565b005b6102a560985481565b6040519081526020015b60405180910390f35b61029a6102c636600461313e565b6106d6565b61029a6102d936600461313e565b61089b565b6102a5766867a5a867f103b2fffa5a71fba0e7b68000000000000081565b6102a561030a366004613176565b610ccc565b6102a5610cf7565b6102a5609a5481565b6102a561032e36600461313e565b610d06565b6102a56103413660046131a0565b610dee565b6102a5610e21565b61029a61035c3660046131bb565b610e3c565b60655460ff165b60405190151581526020016102af565b61038b6103863660046131fa565b6111c9565b6040516102af919061322c565b6102a56103a63660046131a0565b609e6020525f908152604090205481565b61029a6114a7565b6103686103cd366004613176565b6114ba565b6097546103f29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102af565b61029a6104253660046132e2565b6114e8565b610432611bff565b6040516102af9190613358565b6102a56301e1338081565b6102a5611d33565b60335473ffffffffffffffffffffffffffffffffffffffff166103f2565b60a1546104869069ffffffffffffffffffff1681565b60405169ffffffffffffffffffff90911681526020016102af565b61038b6104af3660046131fa565b611dc3565b6102a56104c236600461313e565b612091565b61029a6104d536600461313e565b612197565b60a054610486906a0100000000000000000000900469ffffffffffffffffffff1681565b6102a561271081565b60a0546104869074010000000000000000000000000000000000000000900469ffffffffffffffffffff1681565b61029a61054336600461313e565b6126ae565b6102a5609f5481565b6102a5612828565b6105ec61056736600461313e565b609b6020525f9081526040902080546001820154600283015460038401546004850154600590950154939473ffffffffffffffffffffffffffffffffffffffff909316939192909169ffffffffffffffffffff808216916a01000000000000000000008104821691740100000000000000000000000000000000000000009091041688565b6040805198895273ffffffffffffffffffffffffffffffffffffffff9097166020890152958701949094526060860192909252608085015269ffffffffffffffffffff90811660a085015290811660c08401521660e0820152610100016102af565b6102a560995481565b6102a56106653660046131a0565b73ffffffffffffffffffffffffffffffffffffffff165f908152609c602052604090205490565b60a0546104869069ffffffffffffffffffff1681565b61029a6106b03660046131a0565b612837565b6106bd6128eb565b80156106ce576106cb61296c565b50565b6106cb6129f1565b6106de6128eb565b805f0361074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f5a65726f2041505900000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6107586127108061341f565b8111156107c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d617820415059206578636565646564000000000000000000000000000000006044820152606401610743565b60a15469ffffffffffffffffffff168103610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4475706c696361746500000000000000000000000000000000000000000000006044820152606401610743565b60a180547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff831617905560405181907f4b1f09525e9c25bddc3213c84d0d552fef147d8b5d210f62e64d5487d6beee02905f90a250565b5f818152609b602052604090206002810154600482015460058301546a0100000000000000000000900469ffffffffffffffffffff1615610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f416c726561647920756e7374616b6564000000000000000000000000000000006044820152606401610743565b600183015473ffffffffffffffffffffffffffffffffffffffff1633146109e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e60742062652063616c6c6564206e6f74206279207374616b65206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610743565b60a05460058401544291610a209169ffffffffffffffffffff740100000000000000000000000000000000000000009283900481169290910416613436565b69ffffffffffffffffffff161115610a94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5374616b696e6720706572696f64206e6f7420706173736564000000000000006044820152606401610743565b8160985f828254610aa59190613459565b9091555050335f908152609e602052604081208054849290610ac8908490613459565b909155505060a080545f90610ae89069ffffffffffffffffffff1661346c565b91906101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550826005015f9054906101000a900469ffffffffffffffffffff1660a0600a8282829054906101000a900469ffffffffffffffffffff16610b5291906134af565b825469ffffffffffffffffffff9182166101009390930a9283029190920219909116179055505f848152609b60205260409020600301819055610b9582826134d2565b60995f828254610ba59190613459565b9091555050335f908152609d60205260409020610bc29085612a48565b50335f818152609c60209081526040808320805460018101825590845282842001889055878352609b825291829020600501805469ffffffffffffffffffff4281166a0100000000000000000000027fffffffffffffffffffffffff00000000000000000000ffffffffffffffffffff9092169190911790915560a05483517401000000000000000000000000000000000000000090910490911681529081018590529081018390527f1df7cb55969ffa64a0ce0516e297227f920ef241c227f512f32398a45d8506829060600160405180910390a2610cc633610ca683856134d2565b60975473ffffffffffffffffffffffffffffffffffffffff169190612a53565b50505050565b609c602052815f5260405f208181548110610ce5575f80fd5b905f5260205f20015f91509150505481565b610d036127108061341f565b81565b5f818152609b6020908152604080832081516101008101835281548152600182015473ffffffffffffffffffffffffffffffffffffffff169381019390935260028101549183019190915260038101546060830152600481015460808301526005015469ffffffffffffffffffff80821660a08401526a01000000000000000000008204811660c08401819052740100000000000000000000000000000000000000009092041660e08301528203610de657610ddf81604001518260a0015169ffffffffffffffffffff16610dda86612091565b612b27565b9392505050565b505f92915050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609d60205260408120610e1b90612b5f565b92915050565b5f609954610e2d611d33565b610e379190613459565b905090565b610e446128eb565b73ffffffffffffffffffffffffffffffffffffffff8316610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610743565b815f03610f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610743565b73ffffffffffffffffffffffffffffffffffffffff8116610fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563657069656e740000000000000000000000000000006044820152606401610743565b60975473ffffffffffffffffffffffffffffffffffffffff9081169084160361104057610fd2610e21565b82111561103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416d6f756e7420746f6f206869676800000000000000000000000000000000006044820152606401610743565b61113c565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa1580156110aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ce91906134e5565b90508281101561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416d6f756e7420746f6f206869676800000000000000000000000000000000006044820152606401610743565b505b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe7604cacd688915900b1f2267bef2bcbf979d1b00df94edb2e22d1c18e99697e8460405161119b91815260200190565b60405180910390a36111c473ffffffffffffffffffffffffffffffffffffffff84168284612a53565b505050565b6060815f03611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f206c656e6774680000000000000000000000000000000000000000006044820152606401610743565b73ffffffffffffffffffffffffffffffffffffffff84165f908152609c602052604090205461126383856134d2565b11156112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206f6666736574202b206c656e6774680000000000000000006044820152606401610743565b5f8267ffffffffffffffff8111156112e5576112e56134fc565b60405190808252806020026020018201604052801561137157816020015b60408051610100810182525f8082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816113035790505b5090505f5b8381101561149e5773ffffffffffffffffffffffffffffffffffffffff86165f908152609c602052604081206113ac87846134d2565b815481106113bc576113bc613529565b5f918252602080832090910154808352609b825260409283902083516101008101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff1693810193909352600281015493830193909352600383015460608301526004830154608083015260059092015469ffffffffffffffffffff80821660a08401526a01000000000000000000008204811660c0840152740100000000000000000000000000000000000000009091041660e082015284519192509084908490811061148a5761148a613529565b602090810291909101015250600101611376565b50949350505050565b6114af6128eb565b6114b85f612b68565b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152609d60205260408120610ddf9083612bde565b5f54610100900460ff161580801561150657505f54600160ff909116105b8061151f5750303b15801561151f57505f5460ff166001145b6115ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610743565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611607575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8816611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610743565b73ffffffffffffffffffffffffffffffffffffffff8716611701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610743565b855f0361176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f20706572696f640000000000000000000000000000000000000000006044820152606401610743565b6117796301e13380600a61341f565b8611156117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d617820706572696f64206578636565646564000000000000000000000000006044820152606401610743565b845f0361184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f5a65726f204150590000000000000000000000000000000000000000000000006044820152606401610743565b6118576127108061341f565b8511156118c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d617820415059206578636565646564000000000000000000000000000000006044820152606401610743565b835f03611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5a65726f207374616b696e67206c696d697400000000000000000000000000006044820152606401610743565b73ffffffffffffffffffffffffffffffffffffffff831615611a435773ffffffffffffffffffffffffffffffffffffffff82166119c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c696420626c61737420706f696e74730000000000000000000000006044820152606401610743565b6040517f36b91f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906336b91f2b906024015f604051808303815f87803b158015611a28575f80fd5b505af1158015611a3a573d5f803e3d5ffd5b50505050611ac1565b73ffffffffffffffffffffffffffffffffffffffff821615611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206f70657261746f72000000000000000000000000000000006044820152606401610743565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560a080547fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000069ffffffffffffffffffff898116919091029190911790915560a180547fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016918716919091179055609a849055611b9387612b68565b8015611bf5575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b611c676040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b6040805161016081018252609f548152609854602082015260a05469ffffffffffffffffffff808216938301939093526a01000000000000000000009004909116606082015260808101611cb9610e21565b81526020016099548152602001609a548152602001611cd6611d33565b815260a15469ffffffffffffffffffff908116602083015260a05474010000000000000000000000000000000000000000900416604082015260975473ffffffffffffffffffffffffffffffffffffffff16606090910152919050565b6097546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611d9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3791906134e5565b6060815f03611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f206c656e6774680000000000000000000000000000000000000000006044820152606401610743565b73ffffffffffffffffffffffffffffffffffffffff84165f908152609d60205260409020611e5b90612b5f565b611e6583856134d2565b1115611ecd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206f6666736574202b206c656e6774680000000000000000006044820152606401610743565b5f8267ffffffffffffffff811115611ee757611ee76134fc565b604051908082528060200260200182016040528015611f7357816020015b60408051610100810182525f8082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611f055790505b5090505f5b8381101561149e575f611fb8611f8e87846134d2565b73ffffffffffffffffffffffffffffffffffffffff89165f908152609d6020526040902090612bf5565b5f818152609b602090815260409182902082516101008101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff1692810192909252600281015492820192909252600382015460608201526004820154608082015260059091015469ffffffffffffffffffff80821660a08401526a01000000000000000000008204811660c0840152740100000000000000000000000000000000000000009091041660e082015284519192509084908490811061207d5761207d613529565b602090810291909101015250600101611f78565b5f818152609b60205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1661211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964207374616b65206964000000000000000000000000000000006044820152606401610743565b60058101545f906121549074010000000000000000000000000000000000000000900469ffffffffffffffffffff1642613459565b60a05490915074010000000000000000000000000000000000000000900469ffffffffffffffffffff168082101561218c578161218e565b805b95945050505050565b61219f612c00565b766867a5a867f103b2fffa5a71fba0e7b680000000000000811115612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5374616b6520616d6f756e742065786365656473206c696d69740000000000006044820152606401610743565b609a548160985461223191906134d2565b1115612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5374616b696e6720746f6b656e206c696d6974206578636565646564000000006044820152606401610743565b8060985f8282546122aa91906134d2565b909155505060a080545f906122ca9069ffffffffffffffffffff16613556565b82546101009290920a69ffffffffffffffffffff81810219909316918316021790915560a15460a08054918316928392600a916123189185916a010000000000000000000090910416613436565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f61237e838369ffffffffffffffffffff1660a060149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16612b27565b9050805f036123e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f416d6f756e7420746f6f206c6f770000000000000000000000000000000000006044820152606401610743565b6123f383826134d2565b60995f82825461240391906134d2565b90915550839050612412611d33565b61241c91906134d2565b60995411156124ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4d617820706f74656e7469616c2064656274206578636565647320636f6e747260448201527f6163742062616c616e63650000000000000000000000000000000000000000006064820152608401610743565b5f609f5f81546124bc9061357e565b918290555060408051610100810182528281523360208083018281528385018a81525f60608601818152608087018b815269ffffffffffffffffffff808e1660a08a0190815260c08a0185815242831660e08c019081528d8752609b8a528c87209b518c55975160018c01805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055965160028c0155935160038b0155915160048a015590516005909801805492519551821674010000000000000000000000000000000000000000027fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff9683166a010000000000000000000002939095169890911697909717179290921617909355908252609e9052908120805492935086929091906126099084906134d2565b9091555050335f908152609d602052604090206126269082612c6d565b5060a054604080517401000000000000000000000000000000000000000090920469ffffffffffffffffffff1682526020820186905233917fa20f503ac8a453079054889202fd81a0654e351f74ce915725441eff6ee3d14c910160405180910390a2609754610cc69073ffffffffffffffffffffffffffffffffffffffff16333087612c78565b6126b66128eb565b805f0361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5a65726f207374616b696e67206c696d697400000000000000000000000000006044820152606401610743565b609a54810361278a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4475706c696361746500000000000000000000000000000000000000000000006044820152606401610743565b6098548110156127f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4c696d697420746f6f206c6f77000000000000000000000000000000000000006044820152606401610743565b609a81905560405181907f4a4b65bb25590217253ce88fd353c52a3bb907ab6ed454b833d575e7477f23d8905f90a250565b610d036301e13380600a61341f565b61283f6128eb565b73ffffffffffffffffffffffffffffffffffffffff81166128e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610743565b6106cb81612b68565b60335473ffffffffffffffffffffffffffffffffffffffff1633146114b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610743565b612974612c00565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129c73390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6129f9612cd6565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336129c7565b5f610ddf8383612d42565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526111c49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612e2c565b5f612b386127106301e1338061341f565b82612b43858761341f565b612b4d919061341f565b612b5791906135b5565b949350505050565b5f610e1b825490565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8181526001830160205260408120541515610ddf565b5f610ddf8383612f39565b60655460ff16156114b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610743565b5f610ddf8383612f5f565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610cc69085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612aa5565b60655460ff166114b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610743565b5f8181526001830160205260408120548015612e1c575f612d64600183613459565b85549091505f90612d7790600190613459565b9050818114612dd6575f865f018281548110612d9557612d95613529565b905f5260205f200154905080875f018481548110612db557612db5613529565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612de757612de76135ed565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610e1b565b5f915050610e1b565b5092915050565b5f612e8d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fab9092919063ffffffff16565b905080515f1480612ead575080806020019051810190612ead919061361a565b6111c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610743565b5f825f018281548110612f4e57612f4e613529565b905f5260205f200154905092915050565b5f818152600183016020526040812054612fa457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610e1b565b505f610e1b565b6060612b5784845f85855f808673ffffffffffffffffffffffffffffffffffffffff168587604051612fdd9190613657565b5f6040518083038185875af1925050503d805f8114613017576040519150601f19603f3d011682016040523d82523d5f602084013e61301c565b606091505b509150915061302d87838387613038565b979650505050505050565b606083156130cd5782515f036130c65773ffffffffffffffffffffffffffffffffffffffff85163b6130c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610743565b5081612b57565b612b5783838151156130e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107439190613672565b80151581146106cb575f80fd5b5f60208284031215613133575f80fd5b8135610ddf81613116565b5f6020828403121561314e575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106cb575f80fd5b5f8060408385031215613187575f80fd5b823561319281613155565b946020939093013593505050565b5f602082840312156131b0575f80fd5b8135610ddf81613155565b5f805f606084860312156131cd575f80fd5b83356131d881613155565b92506020840135915060408401356131ef81613155565b809150509250925092565b5f805f6060848603121561320c575f80fd5b833561321781613155565b95602085013595506040909401359392505050565b602080825282518282018190525f919060409081850190868401855b828110156132d5578151805185528681015173ffffffffffffffffffffffffffffffffffffffff16878601528581015186860152606080820151908601526080808201519086015260a08082015169ffffffffffffffffffff9081169187019190915260c08083015182169087015260e09182015116908501526101009093019290850190600101613248565b5091979650505050505050565b5f805f805f805f60e0888a0312156132f8575f80fd5b873561330381613155565b9650602088013561331381613155565b955060408801359450606088013593506080880135925060a088013561333881613155565b915060c088013561334881613155565b8091505092959891949750929550565b5f61016082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401516133ea8285018273ffffffffffffffffffffffffffffffffffffffff169052565b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610e1b57610e1b6133f2565b69ffffffffffffffffffff818116838216019080821115612e2557612e256133f2565b81810381811115610e1b57610e1b6133f2565b5f69ffffffffffffffffffff821680613487576134876133f2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b69ffffffffffffffffffff828116828216039080821115612e2557612e256133f2565b80820180821115610e1b57610e1b6133f2565b5f602082840312156134f5575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f69ffffffffffffffffffff808316818103613574576135746133f2565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ae576135ae6133f2565b5060010190565b5f826135e8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6020828403121561362a575f80fd5b8151610ddf81613116565b5f5b8381101561364f578181015183820152602001613637565b50505f910152565b5f8251613668818460208701613635565b9190910192915050565b602081525f8251806020840152613690816040850160208701613635565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220254fa08685c5b58a18495e71c2fef3708f76b180b41cf489e8274780660c46f364736f6c63430008150033