false
false

Contract Address Details

0x9ee3c4a6ac9d95f9def69c106849f207114f7f09

Contract Name
ArbSubredditPoints
Creator
0x3455fa–f3666d at 0xa0b52b–6a222d
Balance
0 ETH ( )
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
67643881
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
ArbSubredditPoints




Optimization enabled
true
Compiler version
v0.8.12+commit.f00d7308




Optimization runs
10
Verified at
2023-08-24T23:26:33.523000Z

contracts/arbitrum/ArbSubredditPoints.sol

/*
    SPDX-License-Identifier: Apache-2.0

    Copyright 2021 Reddit, Inc

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

pragma solidity ^0.8.9;

import "../SubredditPoints.sol";
import "./arb-peripherals/interfaces/IArbToken.sol";
import "../opengsn/ERC2771Recipient.sol";

/*
    Subreddit points token implementation that lives in L2/Arbitrum
*/

contract ArbSubredditPoints is SubredditPoints, IArbToken, ERC2771Recipient {
    address public override l1Address;
    address public gateway;

    event TrustedForwarderUpdated(address newForwarder);

    // struct to prevent stack too deep errors
    struct Params {
        address l1Address_;
        address gateway_;
        address owner_;
        address trustedForwarder_;
        address distributionContract_;
        string subreddit_;
        string name_;
        string symbol_;
        address[] defaultOperators_;
    }

    modifier onlyGateway {
        require(msg.sender == gateway, "Call only from gateway");
        _;
    }

    function initialize(Params calldata params_) external initializer {
        _initialize(params_);
    }

    function _initialize(Params calldata params_) internal onlyInitializing {
        l1Address = params_.l1Address_;
        gateway = params_.gateway_;
        _setTrustedForwarder(params_.trustedForwarder_);
        super._initialize(
            params_.owner_, params_.distributionContract_,
            params_.subreddit_, params_.name_,
            params_.symbol_, params_.defaultOperators_
        );
    }

    function bridgeMint(address account, uint256 amount) external override onlyGateway {
        _mint(account, amount);
    }

    function bridgeBurn(address account, uint256 amount) external override onlyGateway {
        _burn(account, amount);
    }

    function updateTrustedForwarder(address forwarder_) external onlyOwner {
        _setTrustedForwarder(forwarder_);
        emit TrustedForwarderUpdated(forwarder_);
    }

    function _msgSender() internal view override(ERC2771Recipient, ContextUpgradeable) returns (address ret) {
        ret = ERC2771Recipient._msgSender();
    }

    function _msgData() internal view override(ERC2771Recipient, ContextUpgradeable) returns (bytes calldata ret) {
        ret = ERC2771Recipient._msgData();
    }

    // required by ERC2771Recipient
    function versionRecipient() external pure override returns (string memory) {
        return "0+ArbSubredditPoints";
    }
}
        

contracts/ISubredditPoints.sol

/*
    SPDX-License-Identifier: Apache-2.0

    Copyright 2021 Reddit, Inc

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

pragma solidity ^0.8.9;

import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";

interface ISubredditPoints is IERC20Upgradeable {
    event Sent(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );

    event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);

    event AuthorizedOperator(address indexed operator, address indexed tokenHolder);

    event RevokedOperator(address indexed operator, address indexed tokenHolder);

    event DefaultOperatorAdded(address indexed operator);

    event DefaultOperatorRemoved(address indexed operator);

    function mint(
        address operator,
        address account,
        uint256 amount,
        bytes calldata userData,
        bytes calldata operatorData
    ) external; // solium-disable-line indentation

    function burn(
        uint256 amount,
        bytes calldata data
    ) external; // solium-disable-line indentation

    function operatorBurn(
        address account,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external; // solium-disable-line indentation

    function subreddit() external view returns (string memory);
}

//
          

Contract ABI

[{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AuthorizedOperator","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"tokenHolder","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Burned","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"bytes","name":"data","internalType":"bytes","indexed":false},{"type":"bytes","name":"operatorData","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"DefaultOperatorAdded","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"DefaultOperatorRemoved","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RevokedOperator","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"tokenHolder","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Sent","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"bytes","name":"data","internalType":"bytes","indexed":false},{"type":"bytes","name":"operatorData","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TrustedForwarderUpdated","inputs":[{"type":"address","name":"newForwarder","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addDefaultOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorizeOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bridgeBurn","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bridgeMint","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"userData","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"defaultOperators","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"distributionContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gateway","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"forwarder","internalType":"address"}],"name":"getTrustedForwarder","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"owner_","internalType":"address"},{"type":"address","name":"distributionContract_","internalType":"address"},{"type":"string","name":"subreddit_","internalType":"string"},{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"address[]","name":"defaultOperators_","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"tuple","name":"params_","internalType":"struct ArbSubredditPoints.Params","components":[{"type":"address","name":"l1Address_","internalType":"address"},{"type":"address","name":"gateway_","internalType":"address"},{"type":"address","name":"owner_","internalType":"address"},{"type":"address","name":"trustedForwarder_","internalType":"address"},{"type":"address","name":"distributionContract_","internalType":"address"},{"type":"string","name":"subreddit_","internalType":"string"},{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"address[]","name":"defaultOperators_","internalType":"address[]"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOperatorFor","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"address","name":"tokenHolder","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTrustedForwarder","inputs":[{"type":"address","name":"forwarder","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"l1Address","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"userData","internalType":"bytes"},{"type":"bytes","name":"operatorData","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"operatorBurn","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"},{"type":"bytes","name":"operatorData","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"operatorSend","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"userData","internalType":"bytes"},{"type":"bytes","name":"operatorData","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeDefaultOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"subreddit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDistributionContract","inputs":[{"type":"address","name":"distributionContract_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateTrustedForwarder","inputs":[{"type":"address","name":"forwarder_","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"versionRecipient","inputs":[]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50612b69806100206000396000f3fe608060405234801561001057600080fd5b50600436106101b75760003560e01c806306e48538146101bc57806306fdde03146101da578063095ea7b3146101ef578063116191b61461021257806318160ddd146102335780631b7d83e51461024557806323b872dd1461025a578063313ce5671461026d578063395093511461027c578063403f1ffa1461028f578063486ff0cd146102a2578063572b6c05146102d25780635a4528c2146102e557806362ad1b83146102f657806370a0823114610309578063715018a61461033257806374f4f5471461033a5780637fa827b91461034d5780638c2a993e146103605780638da5cb5b14610373578063959b8c3f1461037b57806395d89b411461038e578063a457c2d714610396578063a9059cbb146103a9578063ab89013b146103bc578063bdc330cb146103cf578063c2eeeebd146103d7578063ce1b815f146103eb578063d22ad72d146103fc578063d95b63711461040f578063dd62ed3e14610422578063e699e8c314610435578063f2fde38b14610448578063f90b03111461045b578063fad8b32a1461046e578063fc673c4f14610481578063fe9d930314610494575b600080fd5b6101c46104a7565b6040516101d19190612213565b60405180910390f35b6101e2610509565b6040516101d191906122ad565b6102026101fd3660046122dc565b610592565b60405190151581526020016101d1565b61010354610226906001600160a01b031681565b6040516101d19190612306565b6067545b6040519081526020016101d1565b61025861025336600461231a565b6105b4565b005b610202610268366004612335565b610719565b604051601281526020016101d1565b61020261028a3660046122dc565b610747565b61025861029d36600461231a565b610793565b604080518082019091526014815273302b417262537562726564646974506f696e747360601b60208201526101e2565b6102026102e036600461231a565b6107de565b609c546001600160a01b0316610226565b6102586103043660046123b9565b6107f2565b61023761031736600461231a565b6001600160a01b031660009081526065602052604090205490565b610258610896565b6102586103483660046122dc565b6108e1565b61025861035b366004612497565b61091a565b61025861036e3660046122dc565b6109a8565b6102266109dd565b61025861038936600461231a565b6109ec565b6101e2610b85565b6102026103a43660046122dc565b610b94565b6102026103b73660046122dc565b610c33565b6102586103ca3660046123b9565b610c4b565b6101e2610d58565b61010254610226906001600160a01b031681565b60cf546001600160a01b0316610226565b61025861040a36600461257e565b610d67565b61020261041d3660046125b9565b610de2565b6102376104303660046125b9565b610e84565b61025861044336600461231a565b610eaf565b61025861045636600461231a565b6110f6565b61025861046936600461231a565b6111a3565b61025861047c36600461231a565b611225565b61025861048f3660046125ec565b6113bb565b6102586104a2366004612675565b611463565b6060609b8054806020026020016040519081016040528092919081815260200182805480156104ff57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104e1575b5050505050905090565b606060688054610518906126c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610544906126c0565b80156104ff5780601f10610566576101008083540402835291602001916104ff565b820191906000526020600020905b81548152906001019060200180831161057457509395945050505050565b60008061059d6114c5565b90506105aa8185856114d4565b5060019392505050565b6105bc6114c5565b6001600160a01b03166105cd6109dd565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016105f3906126fb565b60405180910390fd5b6001600160a01b0381166106225760405162461bcd60e51b81526004016105f390612730565b6001600160a01b03811660009081526098602052604090205460ff161561069c5760405162461bcd60e51b815260206004820152602860248201527f537562726564646974506f696e74733a206f70657261746f7220616c72656164604482015267792065786973747360c01b60648201526084016105f3565b609b805460018082019092557fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc3490180546001600160a01b0319166001600160a01b038416908117909155600081815260986020526040808220805460ff191690941790935591519091600080516020612af483398151915291a250565b6000806107246114c5565b90506107318582856115f9565b61073c85858561166d565b506001949350505050565b6000806107526114c5565b6001600160a01b038082166000908152606660209081526040808320938916835292905220549091506105aa908290869061078e908790612796565b6114d4565b61079b6114c5565b6001600160a01b03166107ac6109dd565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016105f3906126fb565b6107db81611829565b50565b60cf546001600160a01b0391821691161490565b60006107fc6114c5565b90506108088189610de2565b6108245760405162461bcd60e51b81526004016105f3906127ae565b61082f88888861166d565b866001600160a01b0316886001600160a01b0316826001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987898989898960405161088495949392919061282c565b60405180910390a45050505050505050565b61089e6114c5565b6001600160a01b03166108af6109dd565b6001600160a01b0316146108d55760405162461bcd60e51b81526004016105f3906126fb565b6108df6000611871565b565b610103546001600160a01b0316331461090c5760405162461bcd60e51b81526004016105f390612865565b61091682826118c3565b5050565b600054610100900460ff166109355760005460ff1615610939565b303b155b6109555760405162461bcd60e51b81526004016105f390612895565b600054610100900460ff16158015610977576000805461ffff19166101011790555b6109898b8b8b8b8b8b8b8b8b8b6119fc565b801561099b576000805461ff00191690555b5050505050505050505050565b610103546001600160a01b031633146109d35760405162461bcd60e51b81526004016105f390612865565b6109168282611d45565b6033546001600160a01b031690565b806001600160a01b03166109fe6114c5565b6001600160a01b03161415610a6b5760405162461bcd60e51b815260206004820152602d60248201527f537562726564646974506f696e74733a20617574686f72697a696e672073656c60448201526c331030b99037b832b930ba37b960991b60648201526084016105f3565b6001600160a01b038116610a915760405162461bcd60e51b81526004016105f3906128e3565b6001600160a01b03811660009081526098602052604090205460ff1615610af457609a6000610abe6114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff19169055610b3b565b600160996000610b026114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b610b436114c5565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060698054610518906126c0565b600080610b9f6114c5565b6001600160a01b0380821660009081526066602090815260408083209389168352929052205490915083811015610c265760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f3565b61073c82868684036114d4565b600080610c3e6114c5565b90506105aa81858561166d565b609c546001600160a01b0316610c5f6114c5565b6001600160a01b031614610cd95760405162461bcd60e51b815260206004820152603b60248201527f537562726564646974506f696e74733a206f6e6c79206469737472696275746960448201527a6f6e20636f6e74726163742063616e206d696e7420706f696e747360281b60648201526084016105f3565b610d4f87878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611e1292505050565b50505050505050565b606060978054610518906126c0565b600054610100900460ff16610d825760005460ff1615610d86565b303b155b610da25760405162461bcd60e51b81526004016105f390612895565b600054610100900460ff16158015610dc4576000805461ffff19166101011790555b610dcd82611e23565b8015610916576000805461ff00191690555050565b6000816001600160a01b0316836001600160a01b03161480610e4d57506001600160a01b03831660009081526098602052604090205460ff168015610e4d57506001600160a01b038083166000908152609a602090815260408083209387168352929052205460ff16155b80610e7d57506001600160a01b0380831660009081526099602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610eb76114c5565b6001600160a01b0316610ec86109dd565b6001600160a01b031614610eee5760405162461bcd60e51b81526004016105f3906126fb565b6001600160a01b038116610f145760405162461bcd60e51b81526004016105f390612730565b6001600160a01b03811660009081526098602052604090205460ff16610f8d5760405162461bcd60e51b815260206004820152602860248201527f537562726564646974506f696e74733a206f70657261746f7220646f65736e27604482015267742065786973747360c01b60648201526084016105f3565b60005b609b548110156110ac57816001600160a01b0316609b8281548110610fb757610fb7612931565b6000918252602090912001546001600160a01b0316141561109a57609b54610fe190600190612947565b811461106257609b8054610ff790600190612947565b8154811061100757611007612931565b600091825260209091200154609b80546001600160a01b03909216918390811061103357611033612931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b609b8054806110735761107361295e565b600082815260209020810160001990810180546001600160a01b03191690550190556110ac565b806110a481612974565b915050610f90565b506001600160a01b038116600081815260986020526040808220805460ff19169055517fec42077e4a379228eef9f58422079e786670be900ea3257e9d2e2227d0b56abd9190a250565b6110fe6114c5565b6001600160a01b031661110f6109dd565b6001600160a01b0316146111355760405162461bcd60e51b81526004016105f3906126fb565b6001600160a01b03811661119a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f3565b6107db81611871565b6111ab6114c5565b6001600160a01b03166111bc6109dd565b6001600160a01b0316146111e25760405162461bcd60e51b81526004016105f3906126fb565b6111eb81611f1e565b7fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd118160405161121a9190612306565b60405180910390a150565b61122d6114c5565b6001600160a01b0316816001600160a01b031614156112a15760405162461bcd60e51b815260206004820152602a60248201527f537562726564646974506f696e74733a207265766f6b696e672073656c662061604482015269399037b832b930ba37b960b11b60648201526084016105f3565b6001600160a01b0381166112c75760405162461bcd60e51b81526004016105f3906128e3565b6001600160a01b03811660009081526098602052604090205460ff1615611333576001609a60006112f66114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff1916911515919091179055611371565b6099600061133f6114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b6113796114c5565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b60006113c56114c5565b90506113d18188610de2565b6113ed5760405162461bcd60e51b81526004016105f3906127ae565b610d4f81888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611f4092505050565b600061146d6114c5565b90506114bf81828686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250611f40915050565b50505050565b60006114cf611fa0565b905090565b6001600160a01b0383166115365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f3565b6001600160a01b0382166115975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f3565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006116058484610e84565b905060001981146114bf57818110156116605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f3565b6114bf84848484036114d4565b6001600160a01b0383166116d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f3565b6001600160a01b0382166117335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f3565b6001600160a01b038316600090815260656020526040902054818110156117ab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f3565b6001600160a01b038085166000908152606560205260408082208585039055918516815290812080548492906117e2908490612796565b92505081905550826001600160a01b0316846001600160a01b0316600080516020612b148339815191528460405161181c91815260200190565b60405180910390a36114bf565b6001600160a01b03811661184f5760405162461bcd60e51b81526004016105f39061298f565b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166119235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f3565b6001600160a01b038216600090815260656020526040902054818110156119975760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f3565b6001600160a01b03831660009081526065602052604081208383039055606780548492906119c6908490612947565b90915550506040518281526000906001600160a01b03851690600080516020612b14833981519152906020016115ec565b505050565b600054610100900460ff16611a235760405162461bcd60e51b81526004016105f3906129e4565b86611a825760405162461bcd60e51b815260206004820152602960248201527f537562726564646974506f696e74733a207375627265646469742063616e277460448201526820626520656d70747960b81b60648201526084016105f3565b84611adb5760405162461bcd60e51b8152602060048201526024808201527f537562726564646974506f696e74733a206e616d652063616e277420626520656044820152636d70747960e01b60648201526084016105f3565b82611b375760405162461bcd60e51b815260206004820152602660248201527f537562726564646974506f696e74733a2073796d626f6c2063616e277420626560448201526520656d70747960d01b60648201526084016105f3565b6001600160a01b038a16611b9c5760405162461bcd60e51b815260206004820152602660248201527f537562726564646974506f696e74733a206f776e65722073686f756c64206e6f60448201526507420626520360d41b60648201526084016105f3565b6001600160a01b038916611bc25760405162461bcd60e51b81526004016105f39061298f565b611bca611fce565b611bd26114c5565b6001600160a01b03168a6001600160a01b031614611bf357611bf38a6110f6565b611c6686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250611ffd92505050565b611c6f89611829565b611c7b609789896120b3565b50611c88609b8383612137565b5060005b8181101561099b57600160986000858585818110611cac57611cac612931565b9050602002016020810190611cc1919061231a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110611cfb57611cfb612931565b9050602002016020810190611d10919061231a565b6001600160a01b0316600080516020612af483398151915260405160405180910390a280611d3d81612974565b915050611c8c565b6001600160a01b038216611d9b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f3565b8060676000828254611dad9190612796565b90915550506001600160a01b03821660009081526065602052604081208054839290611dda908490612796565b90915550506040518181526001600160a01b03831690600090600080516020612b148339815191529060200160405180910390a35050565b611e1c8484611d45565b5050505050565b600054610100900460ff16611e4a5760405162461bcd60e51b81526004016105f3906129e4565b611e57602082018261231a565b61010280546001600160a01b0319166001600160a01b0392909216919091179055611e88604082016020830161231a565b61010380546001600160a01b0319166001600160a01b0392909216919091179055611ec1611ebc608083016060840161231a565b611f1e565b6107db611ed4606083016040840161231a565b611ee460a084016080850161231a565b611ef160a0850185612a2f565b611efe60c0870187612a2f565b611f0b60e0890189612a2f565b611f196101008b018b612a75565b6119fc565b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f4a84846118c3565b836001600160a01b0316856001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098858585604051611f9193929190612abe565b60405180910390a35050505050565b600060143610801590611fb75750611fb7336107de565b15611fc9575060131936013560601c90565b503390565b600054610100900460ff16611ff55760405162461bcd60e51b81526004016105f3906129e4565b6108df61202e565b600054610100900460ff166120245760405162461bcd60e51b81526004016105f3906129e4565b6109168282612065565b600054610100900460ff166120555760405162461bcd60e51b81526004016105f3906129e4565b6108df6120606114c5565b611871565b600054610100900460ff1661208c5760405162461bcd60e51b81526004016105f3906129e4565b815161209f90606890602085019061218a565b5080516119f790606990602084019061218a565b8280546120bf906126c0565b90600052602060002090601f0160209004810192826120e15760008555612127565b82601f106120fa5782800160ff19823516178555612127565b82800160010185558215612127579182015b8281111561212757823582559160200191906001019061210c565b506121339291506121fe565b5090565b828054828255906000526020600020908101928215612127579160200282015b828111156121275781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612157565b828054612196906126c0565b90600052602060002090601f0160209004810192826121b85760008555612127565b82601f106121d157805160ff1916838001178555612127565b82800160010185558215612127579182015b828111156121275782518255916020019190600101906121e3565b5b8082111561213357600081556001016121ff565b6020808252825182820181905260009190848201906040850190845b818110156122545783516001600160a01b03168352928401929184019160010161222f565b50909695505050505050565b6000815180845260005b818110156122865760208185018101518683018201520161226a565b81811115612298576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e7d6020830184612260565b80356001600160a01b03811681146122d757600080fd5b919050565b600080604083850312156122ef57600080fd5b6122f8836122c0565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561232c57600080fd5b610e7d826122c0565b60008060006060848603121561234a57600080fd5b612353846122c0565b9250612361602085016122c0565b9150604084013590509250925092565b60008083601f84011261238357600080fd5b5081356001600160401b0381111561239a57600080fd5b6020830191508360208285010111156123b257600080fd5b9250929050565b600080600080600080600060a0888a0312156123d457600080fd5b6123dd886122c0565b96506123eb602089016122c0565b95506040880135945060608801356001600160401b038082111561240e57600080fd5b61241a8b838c01612371565b909650945060808a013591508082111561243357600080fd5b506124408a828b01612371565b989b979a50959850939692959293505050565b60008083601f84011261246557600080fd5b5081356001600160401b0381111561247c57600080fd5b6020830191508360208260051b85010111156123b257600080fd5b60008060008060008060008060008060c08b8d0312156124b657600080fd5b6124bf8b6122c0565b99506124cd60208c016122c0565b985060408b01356001600160401b03808211156124e957600080fd5b6124f58e838f01612371565b909a50985060608d013591508082111561250e57600080fd5b61251a8e838f01612371565b909850965060808d013591508082111561253357600080fd5b61253f8e838f01612371565b909650945060a08d013591508082111561255857600080fd5b506125658d828e01612453565b915080935050809150509295989b9194979a5092959850565b60006020828403121561259057600080fd5b81356001600160401b038111156125a657600080fd5b82016101208185031215610e7d57600080fd5b600080604083850312156125cc57600080fd5b6125d5836122c0565b91506125e3602084016122c0565b90509250929050565b6000806000806000806080878903121561260557600080fd5b61260e876122c0565b95506020870135945060408701356001600160401b038082111561263157600080fd5b61263d8a838b01612371565b9096509450606089013591508082111561265657600080fd5b5061266389828a01612371565b979a9699509497509295939492505050565b60008060006040848603121561268a57600080fd5b8335925060208401356001600160401b038111156126a757600080fd5b6126b386828701612371565b9497909650939450505050565b600181811c908216806126d457607f821691505b602082108114156126f557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f537562726564646974506f696e74733a206f70657261746f722061646472657360408201526f0732073686f756c646e277420626520360841b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127a9576127a9612780565b500190565b60208082526035908201527f537562726564646974506f696e74733a2063616c6c6572206973206e6f742061604082015274371037b832b930ba37b9103337b9103437b63232b960591b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000612846606083018688612803565b8281036040840152612859818587612803565b98975050505050505050565b60208082526016908201527543616c6c206f6e6c792066726f6d206761746577617960501b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602e908201527f537562726564646974506f696e74733a206f70657261746f722063616e27742060408201526d686176652030206164647265737360901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008282101561295957612959612780565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561298857612988612780565b5060010190565b60208082526035908201527f537562726564646974506f696e74733a20646973747269627574696f6e436f6e604082015274074726163742073686f756c64206e6f74206265203605c1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e19843603018112612a4657600080fd5b8301803591506001600160401b03821115612a6057600080fd5b6020019150368190038213156123b257600080fd5b6000808335601e19843603018112612a8c57600080fd5b8301803591506001600160401b03821115612aa657600080fd5b6020019150600581901b36038213156123b257600080fd5b838152606060208201526000612ad76060830185612260565b8281036040840152612ae98185612260565b969550505050505056feb1c266c79163ba5da9a4deba2a5d1313547c94f50a5db49c1d04d9cc24a66c9dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122008bac9b9c0d7fc39c65d64f833e20af4fd0c4f142cf8578f4f831be2175d01e764736f6c634300080c0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101b75760003560e01c806306e48538146101bc57806306fdde03146101da578063095ea7b3146101ef578063116191b61461021257806318160ddd146102335780631b7d83e51461024557806323b872dd1461025a578063313ce5671461026d578063395093511461027c578063403f1ffa1461028f578063486ff0cd146102a2578063572b6c05146102d25780635a4528c2146102e557806362ad1b83146102f657806370a0823114610309578063715018a61461033257806374f4f5471461033a5780637fa827b91461034d5780638c2a993e146103605780638da5cb5b14610373578063959b8c3f1461037b57806395d89b411461038e578063a457c2d714610396578063a9059cbb146103a9578063ab89013b146103bc578063bdc330cb146103cf578063c2eeeebd146103d7578063ce1b815f146103eb578063d22ad72d146103fc578063d95b63711461040f578063dd62ed3e14610422578063e699e8c314610435578063f2fde38b14610448578063f90b03111461045b578063fad8b32a1461046e578063fc673c4f14610481578063fe9d930314610494575b600080fd5b6101c46104a7565b6040516101d19190612213565b60405180910390f35b6101e2610509565b6040516101d191906122ad565b6102026101fd3660046122dc565b610592565b60405190151581526020016101d1565b61010354610226906001600160a01b031681565b6040516101d19190612306565b6067545b6040519081526020016101d1565b61025861025336600461231a565b6105b4565b005b610202610268366004612335565b610719565b604051601281526020016101d1565b61020261028a3660046122dc565b610747565b61025861029d36600461231a565b610793565b604080518082019091526014815273302b417262537562726564646974506f696e747360601b60208201526101e2565b6102026102e036600461231a565b6107de565b609c546001600160a01b0316610226565b6102586103043660046123b9565b6107f2565b61023761031736600461231a565b6001600160a01b031660009081526065602052604090205490565b610258610896565b6102586103483660046122dc565b6108e1565b61025861035b366004612497565b61091a565b61025861036e3660046122dc565b6109a8565b6102266109dd565b61025861038936600461231a565b6109ec565b6101e2610b85565b6102026103a43660046122dc565b610b94565b6102026103b73660046122dc565b610c33565b6102586103ca3660046123b9565b610c4b565b6101e2610d58565b61010254610226906001600160a01b031681565b60cf546001600160a01b0316610226565b61025861040a36600461257e565b610d67565b61020261041d3660046125b9565b610de2565b6102376104303660046125b9565b610e84565b61025861044336600461231a565b610eaf565b61025861045636600461231a565b6110f6565b61025861046936600461231a565b6111a3565b61025861047c36600461231a565b611225565b61025861048f3660046125ec565b6113bb565b6102586104a2366004612675565b611463565b6060609b8054806020026020016040519081016040528092919081815260200182805480156104ff57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104e1575b5050505050905090565b606060688054610518906126c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610544906126c0565b80156104ff5780601f10610566576101008083540402835291602001916104ff565b820191906000526020600020905b81548152906001019060200180831161057457509395945050505050565b60008061059d6114c5565b90506105aa8185856114d4565b5060019392505050565b6105bc6114c5565b6001600160a01b03166105cd6109dd565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016105f3906126fb565b60405180910390fd5b6001600160a01b0381166106225760405162461bcd60e51b81526004016105f390612730565b6001600160a01b03811660009081526098602052604090205460ff161561069c5760405162461bcd60e51b815260206004820152602860248201527f537562726564646974506f696e74733a206f70657261746f7220616c72656164604482015267792065786973747360c01b60648201526084016105f3565b609b805460018082019092557fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc3490180546001600160a01b0319166001600160a01b038416908117909155600081815260986020526040808220805460ff191690941790935591519091600080516020612af483398151915291a250565b6000806107246114c5565b90506107318582856115f9565b61073c85858561166d565b506001949350505050565b6000806107526114c5565b6001600160a01b038082166000908152606660209081526040808320938916835292905220549091506105aa908290869061078e908790612796565b6114d4565b61079b6114c5565b6001600160a01b03166107ac6109dd565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016105f3906126fb565b6107db81611829565b50565b60cf546001600160a01b0391821691161490565b60006107fc6114c5565b90506108088189610de2565b6108245760405162461bcd60e51b81526004016105f3906127ae565b61082f88888861166d565b866001600160a01b0316886001600160a01b0316826001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987898989898960405161088495949392919061282c565b60405180910390a45050505050505050565b61089e6114c5565b6001600160a01b03166108af6109dd565b6001600160a01b0316146108d55760405162461bcd60e51b81526004016105f3906126fb565b6108df6000611871565b565b610103546001600160a01b0316331461090c5760405162461bcd60e51b81526004016105f390612865565b61091682826118c3565b5050565b600054610100900460ff166109355760005460ff1615610939565b303b155b6109555760405162461bcd60e51b81526004016105f390612895565b600054610100900460ff16158015610977576000805461ffff19166101011790555b6109898b8b8b8b8b8b8b8b8b8b6119fc565b801561099b576000805461ff00191690555b5050505050505050505050565b610103546001600160a01b031633146109d35760405162461bcd60e51b81526004016105f390612865565b6109168282611d45565b6033546001600160a01b031690565b806001600160a01b03166109fe6114c5565b6001600160a01b03161415610a6b5760405162461bcd60e51b815260206004820152602d60248201527f537562726564646974506f696e74733a20617574686f72697a696e672073656c60448201526c331030b99037b832b930ba37b960991b60648201526084016105f3565b6001600160a01b038116610a915760405162461bcd60e51b81526004016105f3906128e3565b6001600160a01b03811660009081526098602052604090205460ff1615610af457609a6000610abe6114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff19169055610b3b565b600160996000610b026114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b610b436114c5565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060698054610518906126c0565b600080610b9f6114c5565b6001600160a01b0380821660009081526066602090815260408083209389168352929052205490915083811015610c265760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f3565b61073c82868684036114d4565b600080610c3e6114c5565b90506105aa81858561166d565b609c546001600160a01b0316610c5f6114c5565b6001600160a01b031614610cd95760405162461bcd60e51b815260206004820152603b60248201527f537562726564646974506f696e74733a206f6e6c79206469737472696275746960448201527a6f6e20636f6e74726163742063616e206d696e7420706f696e747360281b60648201526084016105f3565b610d4f87878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611e1292505050565b50505050505050565b606060978054610518906126c0565b600054610100900460ff16610d825760005460ff1615610d86565b303b155b610da25760405162461bcd60e51b81526004016105f390612895565b600054610100900460ff16158015610dc4576000805461ffff19166101011790555b610dcd82611e23565b8015610916576000805461ff00191690555050565b6000816001600160a01b0316836001600160a01b03161480610e4d57506001600160a01b03831660009081526098602052604090205460ff168015610e4d57506001600160a01b038083166000908152609a602090815260408083209387168352929052205460ff16155b80610e7d57506001600160a01b0380831660009081526099602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610eb76114c5565b6001600160a01b0316610ec86109dd565b6001600160a01b031614610eee5760405162461bcd60e51b81526004016105f3906126fb565b6001600160a01b038116610f145760405162461bcd60e51b81526004016105f390612730565b6001600160a01b03811660009081526098602052604090205460ff16610f8d5760405162461bcd60e51b815260206004820152602860248201527f537562726564646974506f696e74733a206f70657261746f7220646f65736e27604482015267742065786973747360c01b60648201526084016105f3565b60005b609b548110156110ac57816001600160a01b0316609b8281548110610fb757610fb7612931565b6000918252602090912001546001600160a01b0316141561109a57609b54610fe190600190612947565b811461106257609b8054610ff790600190612947565b8154811061100757611007612931565b600091825260209091200154609b80546001600160a01b03909216918390811061103357611033612931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b609b8054806110735761107361295e565b600082815260209020810160001990810180546001600160a01b03191690550190556110ac565b806110a481612974565b915050610f90565b506001600160a01b038116600081815260986020526040808220805460ff19169055517fec42077e4a379228eef9f58422079e786670be900ea3257e9d2e2227d0b56abd9190a250565b6110fe6114c5565b6001600160a01b031661110f6109dd565b6001600160a01b0316146111355760405162461bcd60e51b81526004016105f3906126fb565b6001600160a01b03811661119a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f3565b6107db81611871565b6111ab6114c5565b6001600160a01b03166111bc6109dd565b6001600160a01b0316146111e25760405162461bcd60e51b81526004016105f3906126fb565b6111eb81611f1e565b7fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd118160405161121a9190612306565b60405180910390a150565b61122d6114c5565b6001600160a01b0316816001600160a01b031614156112a15760405162461bcd60e51b815260206004820152602a60248201527f537562726564646974506f696e74733a207265766f6b696e672073656c662061604482015269399037b832b930ba37b960b11b60648201526084016105f3565b6001600160a01b0381166112c75760405162461bcd60e51b81526004016105f3906128e3565b6001600160a01b03811660009081526098602052604090205460ff1615611333576001609a60006112f66114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff1916911515919091179055611371565b6099600061133f6114c5565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b6113796114c5565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b60006113c56114c5565b90506113d18188610de2565b6113ed5760405162461bcd60e51b81526004016105f3906127ae565b610d4f81888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611f4092505050565b600061146d6114c5565b90506114bf81828686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250611f40915050565b50505050565b60006114cf611fa0565b905090565b6001600160a01b0383166115365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f3565b6001600160a01b0382166115975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f3565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006116058484610e84565b905060001981146114bf57818110156116605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f3565b6114bf84848484036114d4565b6001600160a01b0383166116d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f3565b6001600160a01b0382166117335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f3565b6001600160a01b038316600090815260656020526040902054818110156117ab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f3565b6001600160a01b038085166000908152606560205260408082208585039055918516815290812080548492906117e2908490612796565b92505081905550826001600160a01b0316846001600160a01b0316600080516020612b148339815191528460405161181c91815260200190565b60405180910390a36114bf565b6001600160a01b03811661184f5760405162461bcd60e51b81526004016105f39061298f565b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166119235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f3565b6001600160a01b038216600090815260656020526040902054818110156119975760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f3565b6001600160a01b03831660009081526065602052604081208383039055606780548492906119c6908490612947565b90915550506040518281526000906001600160a01b03851690600080516020612b14833981519152906020016115ec565b505050565b600054610100900460ff16611a235760405162461bcd60e51b81526004016105f3906129e4565b86611a825760405162461bcd60e51b815260206004820152602960248201527f537562726564646974506f696e74733a207375627265646469742063616e277460448201526820626520656d70747960b81b60648201526084016105f3565b84611adb5760405162461bcd60e51b8152602060048201526024808201527f537562726564646974506f696e74733a206e616d652063616e277420626520656044820152636d70747960e01b60648201526084016105f3565b82611b375760405162461bcd60e51b815260206004820152602660248201527f537562726564646974506f696e74733a2073796d626f6c2063616e277420626560448201526520656d70747960d01b60648201526084016105f3565b6001600160a01b038a16611b9c5760405162461bcd60e51b815260206004820152602660248201527f537562726564646974506f696e74733a206f776e65722073686f756c64206e6f60448201526507420626520360d41b60648201526084016105f3565b6001600160a01b038916611bc25760405162461bcd60e51b81526004016105f39061298f565b611bca611fce565b611bd26114c5565b6001600160a01b03168a6001600160a01b031614611bf357611bf38a6110f6565b611c6686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250611ffd92505050565b611c6f89611829565b611c7b609789896120b3565b50611c88609b8383612137565b5060005b8181101561099b57600160986000858585818110611cac57611cac612931565b9050602002016020810190611cc1919061231a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110611cfb57611cfb612931565b9050602002016020810190611d10919061231a565b6001600160a01b0316600080516020612af483398151915260405160405180910390a280611d3d81612974565b915050611c8c565b6001600160a01b038216611d9b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f3565b8060676000828254611dad9190612796565b90915550506001600160a01b03821660009081526065602052604081208054839290611dda908490612796565b90915550506040518181526001600160a01b03831690600090600080516020612b148339815191529060200160405180910390a35050565b611e1c8484611d45565b5050505050565b600054610100900460ff16611e4a5760405162461bcd60e51b81526004016105f3906129e4565b611e57602082018261231a565b61010280546001600160a01b0319166001600160a01b0392909216919091179055611e88604082016020830161231a565b61010380546001600160a01b0319166001600160a01b0392909216919091179055611ec1611ebc608083016060840161231a565b611f1e565b6107db611ed4606083016040840161231a565b611ee460a084016080850161231a565b611ef160a0850185612a2f565b611efe60c0870187612a2f565b611f0b60e0890189612a2f565b611f196101008b018b612a75565b6119fc565b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f4a84846118c3565b836001600160a01b0316856001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098858585604051611f9193929190612abe565b60405180910390a35050505050565b600060143610801590611fb75750611fb7336107de565b15611fc9575060131936013560601c90565b503390565b600054610100900460ff16611ff55760405162461bcd60e51b81526004016105f3906129e4565b6108df61202e565b600054610100900460ff166120245760405162461bcd60e51b81526004016105f3906129e4565b6109168282612065565b600054610100900460ff166120555760405162461bcd60e51b81526004016105f3906129e4565b6108df6120606114c5565b611871565b600054610100900460ff1661208c5760405162461bcd60e51b81526004016105f3906129e4565b815161209f90606890602085019061218a565b5080516119f790606990602084019061218a565b8280546120bf906126c0565b90600052602060002090601f0160209004810192826120e15760008555612127565b82601f106120fa5782800160ff19823516178555612127565b82800160010185558215612127579182015b8281111561212757823582559160200191906001019061210c565b506121339291506121fe565b5090565b828054828255906000526020600020908101928215612127579160200282015b828111156121275781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612157565b828054612196906126c0565b90600052602060002090601f0160209004810192826121b85760008555612127565b82601f106121d157805160ff1916838001178555612127565b82800160010185558215612127579182015b828111156121275782518255916020019190600101906121e3565b5b8082111561213357600081556001016121ff565b6020808252825182820181905260009190848201906040850190845b818110156122545783516001600160a01b03168352928401929184019160010161222f565b50909695505050505050565b6000815180845260005b818110156122865760208185018101518683018201520161226a565b81811115612298576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e7d6020830184612260565b80356001600160a01b03811681146122d757600080fd5b919050565b600080604083850312156122ef57600080fd5b6122f8836122c0565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561232c57600080fd5b610e7d826122c0565b60008060006060848603121561234a57600080fd5b612353846122c0565b9250612361602085016122c0565b9150604084013590509250925092565b60008083601f84011261238357600080fd5b5081356001600160401b0381111561239a57600080fd5b6020830191508360208285010111156123b257600080fd5b9250929050565b600080600080600080600060a0888a0312156123d457600080fd5b6123dd886122c0565b96506123eb602089016122c0565b95506040880135945060608801356001600160401b038082111561240e57600080fd5b61241a8b838c01612371565b909650945060808a013591508082111561243357600080fd5b506124408a828b01612371565b989b979a50959850939692959293505050565b60008083601f84011261246557600080fd5b5081356001600160401b0381111561247c57600080fd5b6020830191508360208260051b85010111156123b257600080fd5b60008060008060008060008060008060c08b8d0312156124b657600080fd5b6124bf8b6122c0565b99506124cd60208c016122c0565b985060408b01356001600160401b03808211156124e957600080fd5b6124f58e838f01612371565b909a50985060608d013591508082111561250e57600080fd5b61251a8e838f01612371565b909850965060808d013591508082111561253357600080fd5b61253f8e838f01612371565b909650945060a08d013591508082111561255857600080fd5b506125658d828e01612453565b915080935050809150509295989b9194979a5092959850565b60006020828403121561259057600080fd5b81356001600160401b038111156125a657600080fd5b82016101208185031215610e7d57600080fd5b600080604083850312156125cc57600080fd5b6125d5836122c0565b91506125e3602084016122c0565b90509250929050565b6000806000806000806080878903121561260557600080fd5b61260e876122c0565b95506020870135945060408701356001600160401b038082111561263157600080fd5b61263d8a838b01612371565b9096509450606089013591508082111561265657600080fd5b5061266389828a01612371565b979a9699509497509295939492505050565b60008060006040848603121561268a57600080fd5b8335925060208401356001600160401b038111156126a757600080fd5b6126b386828701612371565b9497909650939450505050565b600181811c908216806126d457607f821691505b602082108114156126f557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f537562726564646974506f696e74733a206f70657261746f722061646472657360408201526f0732073686f756c646e277420626520360841b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127a9576127a9612780565b500190565b60208082526035908201527f537562726564646974506f696e74733a2063616c6c6572206973206e6f742061604082015274371037b832b930ba37b9103337b9103437b63232b960591b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000612846606083018688612803565b8281036040840152612859818587612803565b98975050505050505050565b60208082526016908201527543616c6c206f6e6c792066726f6d206761746577617960501b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602e908201527f537562726564646974506f696e74733a206f70657261746f722063616e27742060408201526d686176652030206164647265737360901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008282101561295957612959612780565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561298857612988612780565b5060010190565b60208082526035908201527f537562726564646974506f696e74733a20646973747269627574696f6e436f6e604082015274074726163742073686f756c64206e6f74206265203605c1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e19843603018112612a4657600080fd5b8301803591506001600160401b03821115612a6057600080fd5b6020019150368190038213156123b257600080fd5b6000808335601e19843603018112612a8c57600080fd5b8301803591506001600160401b03821115612aa657600080fd5b6020019150600581901b36038213156123b257600080fd5b838152606060208201526000612ad76060830185612260565b8281036040840152612ae98185612260565b969550505050505056feb1c266c79163ba5da9a4deba2a5d1313547c94f50a5db49c1d04d9cc24a66c9dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122008bac9b9c0d7fc39c65d64f833e20af4fd0c4f142cf8578f4f831be2175d01e764736f6c634300080c0033