ETH Price: $2,518.75 (-0.45%)

Contract

0x05369F969B47ab4BDdD4fa5af897dd5517910eB0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040147344692022-05-08 6:23:03845 days ago1651990983IN
 Create: Artifacts
0 ETH0.1640978533.46088942

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Artifacts

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Artifacts.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.7;

//import "hardhat/console.sol";
import "./Interfaces.sol";

/*

░█████╗░██████╗░████████╗░░██╗██╗███████╗░█████╗░░█████╗░████████╗░██████╗██╗░░
██╔══██╗██╔══██╗╚══██╔══╝░██╔╝██║██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██╔════╝╚██╗░
███████║██████╔╝░░░██║░░░██╔╝░██║█████╗░░███████║██║░░╚═╝░░░██║░░░╚█████╗░░╚██╗
██╔══██║██╔══██╗░░░██║░░░╚██╗░██║██╔══╝░░██╔══██║██║░░██╗░░░██║░░░░╚═══██╗░██╔╝
██║░░██║██║░░██║░░░██║░░░░╚██╗██║██║░░░░░██║░░██║╚█████╔╝░░░██║░░░██████╔╝██╔╝░
╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░░░╚═╝╚═╝╚═╝░░░░░╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░╚═════╝░╚═╝░░
*/

contract Artifacts is IERC1155 {

    address admin;
    address validator;
    bool initialized;
   
    mapping(bytes => uint256) public usedSignatures; 
    mapping(address => bool) public auth;
    
    /***********************************|
    |        Variables and Events       |
    |__________________________________*/

    // onReceive function signatures
    bytes4 constant internal ERC1155_RECEIVED_VALUE       = 0xf23a6e61;
    bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

    mapping (address => mapping(uint256 => uint256))  internal balances;    
    mapping (address => mapping(address => bool))     internal operators;

   /****************************************|
  |            Minting Functions           |
  |_______________________________________*/

function initialize() public {
    admin = msg.sender;
    auth[msg.sender] = true;
    initialized = true;
    validator = 0xF3c1D8E58A6d79e9db28a364b196daCD3dE42069;
}

function mint(uint256 quantity, uint256 timestamp, bytes memory tokenSignature) external {
    isPlayer();
    require(usedSignatures[tokenSignature] == 0, "Signature already used");   
    require(_isSignedByValidator(encodeTokenForSignature(quantity, msg.sender, timestamp),tokenSignature), "incorrect signature");
    usedSignatures[tokenSignature] = 1;    
    //_safeMint(msg.sender, quantity);
     _mint(msg.sender, 1, quantity);
  }

  function reserve(uint256 quantity) external {
    onlyOwner();
    _mint(msg.sender, 1, quantity);
  }

  function burn(address from,uint256 id, uint256 value) external {
        require(auth[msg.sender], "FORBIDDEN TO BURN");
        _burn(from, id, value);
   }

   function _mint(address _to, uint256 _id, uint256 _amount) internal {
        balances[_to][_id] += _amount; 
        emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);
   }
    
   function _burn(address _from, uint256 _id, uint256 _amount) internal {
        balances[_from][_id] -= _amount;
        emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
   }



//Permissions
function encodeTokenForSignature(uint256 quantity, address owner, uint256 timestamp) public pure returns (bytes32) {
                return keccak256(
                        abi.encodePacked("\x19Ethereum Signed Message:\n32", 
                            keccak256(abi.encodePacked(quantity, owner, timestamp))
                                )
                            );
}  

function _isSignedByValidator(bytes32 _hash, bytes memory _signature) private view returns (bool) {
                
                bytes32 r;
                bytes32 s;
                uint8 v;
                    assembly {
                            r := mload(add(_signature, 0x20))
                            s := mload(add(_signature, 0x40))
                            v := byte(0, mload(add(_signature, 0x60)))
                        }
                    
                        address signer = ecrecover(_hash, v, r, s);
                        return signer == validator;
  
}
//ADMIN

function onlyOwner() internal view {    
    require(admin == msg.sender);
}

function onlyOperator() internal view {    
    require(auth[msg.sender] == true, "not Authorized");    
}        

function isPlayer() internal {    
    uint256 size = 0;
    address acc = msg.sender;
    assembly { size := extcodesize(acc)}
    require((msg.sender == tx.origin && size == 0));
}

function setValidator(address _validator)  public {
    onlyOwner();       
    validator  = _validator;     
}

function setAuth(address[] calldata adds_, bool status) public {
       onlyOwner();
       
        for (uint256 index = 0; index < adds_.length; index++) {
            auth[adds_[index]] = status;
        }
    }
    /***********************************|
    |     On Chain Imaging              |
    |__________________________________*/


    function getTokenURI(uint256 id_) public view returns (string memory) {
        //string memory imageURI = "https://huskies.mypinata.cloud/ipfs/QmUGnyv5SLs4QngTPnwNAE6asWouEnfuLjPHmPEKCyZFk1/1.png"    
        string memory imageURI = "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";
        string memory svgBase64 = Base64.encode(
                                            bytes(
                                                abi.encodePacked(
        '<svg id="art" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350" width="100%" height="100%" >',
        '<image x="0" y="0" width="350" height="350" preserveAspectRatio="xMidYMid" image-rendering="pixelated" href="data:image/png;base64,', imageURI, '" />',
        '<style>#art{shape-rendering: crispedges; image-rendering: -webkit-crisp-edges; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; image-rendering: pixelated; -ms-interpolation-mode: nearest-neighbor;}</style></svg>'  
                                                )
                                            )
                                        );
        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    Base64.encode(
                        bytes(
                            abi.encodePacked(
                                '{"name":"Artifacts","description":"EthernalElves Artifacts is a collection of rare fragements. A combination of these artifacts can be used to awaken The Elders and other elements of the Elvenverse.",',
                                '"image": "data:image/svg+xml;base64,',svgBase64,'", "attributes": []}'                                
                            )
                        )
                    )
                )
            );
    }

   

    /***********************************|
    |     Public Transfer Functions     |
    |__________________________________*/

    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
        public override
    {
        require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
        require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");

        _safeTransferFrom(_from, _to, _id, _amount);
        _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data);
    }

    function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
        public override
    {
        // Requirements
        require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR");
        require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT");

        _safeBatchTransferFrom(_from, _to, _ids, _amounts);
        _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data);
    }


    /***********************************|
    |    Internal Transfer Functions    |
    |__________________________________*/

    function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
        internal
    {
        // Update balances
        balances[_from][_id] -= _amount;
        balances[_to][_id] += _amount;

        // Emit event
        emit TransferSingle(msg.sender, _from, _to, _id, _amount);
    }

    /**
    * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
    */
    function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, uint256 _gasLimit, bytes memory _data) internal {
        // Check if recipient is contract
        if (_to.code.length != 0) {
        bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{gas: _gasLimit}(msg.sender, _from, _id, _amount, _data);
        require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE");
        }
    }

    function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts) internal {
        require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH");

        // Number of transfer to execute
        uint256 nTransfer = _ids.length;

        // Executing all transfers
        for (uint256 i = 0; i < nTransfer; i++) {
            
            balances[_from][_ids[i]] -= _amounts[i];
            balances[_to][_ids[i]]   += _amounts[i];
        }

        // Emit event
        emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
    }

    /**
    * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
    */
    function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, uint256 _gasLimit, bytes memory _data) internal {
        // Pass data if recipient is contract
        if (_to.code.length != 0) {
        bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{gas: _gasLimit}(msg.sender, _from, _ids, _amounts, _data);
        require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
        }
    }


    /***********************************|
    |         Operator Functions        |
    |__________________________________*/


    function setApprovalForAll(address _operator, bool _approved)
        external override
    {
        // Update operator status
        operators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    function isApprovedForAll(address _owner, address _operator)
        public override view returns (bool isOperator)
    {
        return operators[_owner][_operator];
    }


    /***********************************|
    |         Balance Functions         |
    |__________________________________*/

    function balanceOf(address _owner, uint256 _id) public override view returns (uint256) {
        return balances[_owner][_id];
    }

    function balanceOfBatch(address[] memory _owners, uint256[] memory _ids) public override view returns (uint256[] memory) {
        require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH");

        // Variables
        uint256[] memory batchBalances = new uint256[](_owners.length);

        // Iterate over each owner and token ID
        for (uint256 i = 0; i < _owners.length; i++) {
        batchBalances[i] = balances[_owners[i]][_ids[i]];
        }

        return batchBalances;
    }

    function uri(uint256 _id) public view returns (string memory) {
        return getTokenURI(_id);
    }

    function owner() external view returns(address own_) {
        own_ = admin;
    }


    /***********************************|
    |          ERC165 Functions         |
    |__________________________________*/

    function supportsInterface(bytes4 _interfaceID) public override pure returns (bool) {
        if (_interfaceID == type(IERC1155).interfaceId) {
            return true;
        }
        if (_interfaceID == type(IERC1155Metadata).interfaceId) {
            return true;
        }
        return _interfaceID == this.supportsInterface.selector;
    }

}


/// @title Base64
/// @author Brecht Devos - <[email protected]>
/// @notice Provides a function for encoding some bytes in base64
/// @notice NOT BUILT BY ETHERNAL ELVES TEAM.
library Base64 {
    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(input, 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }
}

File 2 of 2 : Interfaces.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.7;

interface IERC20Lite {
    
    function transfer(address to, uint256 value) external returns (bool);
    function burn(address from, uint256 value) external;
    function mint(address to, uint256 value) external; 
    function approve(address spender, uint256 value) external returns (bool); 
    function balanceOf(address account) external returns (uint256); 
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

}

interface IElfMetaDataHandler {    
function getTokenURI(uint16 id_, uint256 sentinel) external view returns (string memory);
}

interface ICampaigns {
function gameEngine(uint256 _campId, uint256 _sector, uint256 _level, uint256 _attackPoints, uint256 _healthPoints, uint256 _inventory, bool _useItem) external 
returns(uint256 level, uint256 rewards, uint256 timestamp, uint256 inventory);
}

interface IElves {    
    function prismBridge(uint256[] calldata id, uint256[] calldata sentinel, address owner) external;    
    function exitElf(uint256[] calldata ids, address owner) external;
    function setAccountBalance(address _owner, uint256 _amount, bool _subtract, uint256 _index) external;
}

interface IERC721Lite {
    function transferFrom(address from, address to, uint256 id) external;   
    function transfer(address to, uint256 id) external;
    function ownerOf(uint256 id) external returns (address owner);
    function mint(address to, uint256 tokenid) external;
}

interface IERC1155Lite {
    function burn(address from,uint256 id, uint256 value) external;
    function balanceOf(address _owner, uint256 _id) external returns (uint256); 
}

 
//1155
interface IERC165 {
    function supportsInterface(bytes4 _interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
  function setApprovalForAll(address _operator, bool _approved) external;
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);
}

interface IERC1155Metadata {
  event URI(string _uri, uint256 indexed _id);
  function uri(uint256 _id) external view returns (string memory);
}

interface IERC1155TokenReceiver {
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"encodeTokenForSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes","name":"tokenSignature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"own_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adds_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"usedSignatures","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506157ab806100206000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80634e1273f4116100ad578063cd5d211811610071578063cd5d2118146102db578063e949580e146102fe578063e985e9c514610329578063f242432a1461033c578063f5298aca1461034f57600080fd5b80634e1273f4146102255780638129fc1c14610245578063819b25ba1461029a5780638da5cb5b146102ad578063a22cb465146102c857600080fd5b80631327d3d8116100f45780631327d3d8146101c65780632eb2c2d6146101d9578063335229a9146101ec5780633bb3a24d146101ff5780634576da471461021257600080fd5b8062fdd58e1461012557806301ffc9a71461016e57806308dc9f42146101915780630e89341c146101a6575b600080fd5b61015b6101333660046115cd565b6001600160a01b03919091166000908152600460209081526040808320938352929052205490565b6040519081526020015b60405180910390f35b61018161017c366004611775565b610362565b6040519015158152602001610165565b6101a461019f36600461183a565b6103bd565b005b6101b96101b43660046117ec565b6104ba565b6040516101659190611e32565b6101a46101d436600461143f565b6104cb565b6101a46101e7366004611494565b6104f5565b61015b6101fa366004611805565b610605565b6101b961020d3660046117ec565b610695565b6101a461022036600461162a565b61071f565b6102386102333660046116ae565b61079e565b6040516101659190611dfa565b60008054336001600160a01b0319909116811782558152600360205260409020805460ff1916600190811790915580546001600160a81b0319167401f3c1d8e58a6d79e9db28a364b196dacd3de42069179055005b6101a46102a83660046117ec565b6108fa565b6000546040516001600160a01b039091168152602001610165565b6101a46102d63660046115a3565b610911565b6101816102e936600461143f565b60036020526000908152604090205460ff1681565b61015b61030c3660046117af565b805160208183018101805160028252928201919093012091525481565b610181610337366004611461565b61097d565b6101a461034a36600461153e565b6109ab565b6101a461035d3660046115f7565b610aaa565b60006001600160e01b03198216636cdb3d1360e11b141561038557506001919050565b6001600160e01b031982166303a24d0760e21b14156103a657506001919050565b506001600160e01b0319166301ffc9a760e01b1490565b6103c5610b08565b6002816040516103d591906118f1565b9081526020016040518091039020546000146104315760405162461bcd60e51b815260206004820152601660248201527514da59db985d1d5c9948185b1c9958591e481d5cd95960521b60448201526064015b60405180910390fd5b61044561043f843385610605565b82610b26565b6104875760405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606401610428565b600160028260405161049991906118f1565b908152604051908190036020019020556104b533600185610bb2565b505050565b60606104c582610695565b92915050565b6104d3610c39565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b03861614806105115750610511853361097d565b6105755760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b6064820152608401610428565b6001600160a01b0384166105e45760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b6064820152608401610428565b6105f085858585610c52565b6105fe858585855a86610e3c565b5050505050565b6040805160208082019590955260609390931b6bffffffffffffffffffffffff191683820152605480840192909252805180840390920182526074830181528151918401919091207f19457468657265756d205369676e6564204d6573736167653a0a333200000000609484015260b0808401919091528151808403909101815260d09092019052805191012090565b60606000604051806137c0016040528061378c8152602001611fea61378c9139905060006106e1826040516020016106cd919061190d565b604051602081830303815290604052610f68565b90506106f7816040516020016106cd9190611bf1565b6040516020016107079190611bac565b60405160208183030381529060405292505050919050565b610727610c39565b60005b8281101561079857816003600086868581811061074957610749611f67565b905060200201602081019061075e919061143f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061079081611f36565b91505061072a565b50505050565b606081518351146108065760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b6064820152608401610428565b6000835167ffffffffffffffff81111561082257610822611f7d565b60405190808252806020026020018201604052801561084b578160200160208202803683370190505b50905060005b84518110156108f2576004600086838151811061087057610870611f67565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106108ac576108ac611f67565b60200260200101518152602001908152602001600020548282815181106108d5576108d5611f67565b6020908102919091010152806108ea81611f36565b915050610851565b509392505050565b610902610c39565b61090e33600183610bb2565b50565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861614806109c757506109c7853361097d565b610a265760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b6064820152608401610428565b6001600160a01b038416610a905760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b6064820152608401610428565b610a9c858585856110d0565b6105fe858585855a86611191565b3360009081526003602052604090205460ff16610afd5760405162461bcd60e51b81526020600482015260116024820152702327a92124a22222a7102a2790212aa92760791b6044820152606401610428565b6104b58383836112b3565b33803b903281148015610b19575081155b610b2257600080fd5b5050565b6020818101516040808401516060808601518351600080825296810180865289905290861a93810184905290810184905260808101829052909190849060019060a0016020604051602081039080840390855afa158015610b8b573d6000803e3d6000fd5b5050604051601f1901516001546001600160a01b0390811691161498975050505050505050565b6001600160a01b038316600090815260046020908152604080832085845290915281208054839290610be5908490611e9a565b909155505060408051838152602081018390526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000546001600160a01b03163314610c5057600080fd5b565b8051825114610cc15760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b6064820152608401610428565b815160005b81811015610ddd57828181518110610ce057610ce0611f67565b602002602001015160046000886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d2157610d21611f67565b602002602001015181526020019081526020016000206000828254610d469190611ef3565b92505081905550828181518110610d5f57610d5f611f67565b602002602001015160046000876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610da057610da0611f67565b602002602001015181526020019081526020016000206000828254610dc59190611e9a565b90915550819050610dd581611f36565b915050610cc6565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e2d929190611e0d565b60405180910390a45050505050565b6001600160a01b0385163b15610f60576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b8152600401610e83959493929190611d57565b602060405180830381600088803b158015610e9d57600080fd5b5087f1158015610eb1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed69190611792565b90506001600160e01b0319811663bc197c8160e01b14610f5e5760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745006064820152608401610428565b505b505050505050565b6060815160001415610f8857505060408051602081019091526000815290565b6000604051806060016040528060408152602001611faa6040913990506000600384516002610fb79190611e9a565b610fc19190611eb2565b610fcc906004611ed4565b90506000610fdb826020611e9a565b67ffffffffffffffff811115610ff357610ff3611f7d565b6040519080825280601f01601f19166020018201604052801561101d576020820181803683370190505b509050818152600183018586518101602084015b8183101561108b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611031565b6003895106600181146110a557600281146110b6576110c2565b613d3d60f01b6001198301526110c2565b603d60f81b6000198301525b509398975050505050505050565b6001600160a01b038416600090815260046020908152604080832085845290915281208054839290611103908490611ef3565b90915550506001600160a01b03831660009081526004602090815260408083208584529091528120805483929061113b908490611e9a565b909155505060408051838152602081018390526001600160a01b03808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6001600160a01b0385163b15610f60576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b81526004016111d8959493929190611db5565b602060405180830381600088803b1580156111f257600080fd5b5087f1158015611206573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061122b9190611792565b90506001600160e01b0319811663f23a6e6160e01b14610f5e5760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d4553534147450000000000006064820152608401610428565b6001600160a01b0383166000908152600460209081526040808320858452909152812080548392906112e6908490611ef3565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101610c2c565b80356001600160a01b038116811461134857600080fd5b919050565b600082601f83011261135e57600080fd5b8135602061137361136e83611e76565b611e45565b80838252828201915082860187848660051b890101111561139357600080fd5b60005b858110156113b257813584529284019290840190600101611396565b5090979650505050505050565b8035801515811461134857600080fd5b600082601f8301126113e057600080fd5b813567ffffffffffffffff8111156113fa576113fa611f7d565b61140d601f8201601f1916602001611e45565b81815284602083860101111561142257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561145157600080fd5b61145a82611331565b9392505050565b6000806040838503121561147457600080fd5b61147d83611331565b915061148b60208401611331565b90509250929050565b600080600080600060a086880312156114ac57600080fd5b6114b586611331565b94506114c360208701611331565b9350604086013567ffffffffffffffff808211156114e057600080fd5b6114ec89838a0161134d565b9450606088013591508082111561150257600080fd5b61150e89838a0161134d565b9350608088013591508082111561152457600080fd5b50611531888289016113cf565b9150509295509295909350565b600080600080600060a0868803121561155657600080fd5b61155f86611331565b945061156d60208701611331565b93506040860135925060608601359150608086013567ffffffffffffffff81111561159757600080fd5b611531888289016113cf565b600080604083850312156115b657600080fd5b6115bf83611331565b915061148b602084016113bf565b600080604083850312156115e057600080fd5b6115e983611331565b946020939093013593505050565b60008060006060848603121561160c57600080fd5b61161584611331565b95602085013595506040909401359392505050565b60008060006040848603121561163f57600080fd5b833567ffffffffffffffff8082111561165757600080fd5b818601915086601f83011261166b57600080fd5b81358181111561167a57600080fd5b8760208260051b850101111561168f57600080fd5b6020928301955093506116a591860190506113bf565b90509250925092565b600080604083850312156116c157600080fd5b823567ffffffffffffffff808211156116d957600080fd5b818501915085601f8301126116ed57600080fd5b813560206116fd61136e83611e76565b8083825282820191508286018a848660051b890101111561171d57600080fd5b600096505b848710156117475761173381611331565b835260019690960195918301918301611722565b509650508601359250508082111561175e57600080fd5b5061176b8582860161134d565b9150509250929050565b60006020828403121561178757600080fd5b813561145a81611f93565b6000602082840312156117a457600080fd5b815161145a81611f93565b6000602082840312156117c157600080fd5b813567ffffffffffffffff8111156117d857600080fd5b6117e4848285016113cf565b949350505050565b6000602082840312156117fe57600080fd5b5035919050565b60008060006060848603121561181a57600080fd5b8335925061182a60208501611331565b9150604084013590509250925092565b60008060006060848603121561184f57600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561187457600080fd5b611880868287016113cf565b9150509250925092565b600081518084526020808501945080840160005b838110156118ba5781518752958201959082019060010161189e565b509495945050505050565b600081518084526118dd816020860160208601611f0a565b601f01601f19169290920160200192915050565b60008251611903818460208701611f0a565b9190910192915050565b7f3c7376672069643d226172742220786d6c6e733d22687474703a2f2f7777772e81527f77332e6f72672f323030302f737667222070726573657276654173706563745260208201527f6174696f3d22784d696e594d696e206d656574222076696577426f783d22302060408201527f302033353020333530222077696474683d223130302522206865696768743d226060820152661898181291101f60c91b60808201527f3c696d61676520783d22302220793d2230222077696474683d2233353022206860878201527f65696768743d2233353022207072657365727665417370656374526174696f3d60a78201527f22784d6964594d69642220696d6167652d72656e646572696e673d227069786560c78201527f6c617465642220687265663d22646174613a696d6167652f706e673b6261736560e7820152620d8d0b60ea1b610107820152600061010a8351611a6e8183860160208801611f0a565b611ba3611a898383870101631110179f60e11b815260040190565b7f3c7374796c653e236172747b73686170652d72656e646572696e673a2063726981527f737065646765733b20696d6167652d72656e646572696e673a202d7765626b6960208201527f742d63726973702d65646765733b20696d6167652d72656e646572696e673a2060408201527f2d6d6f7a2d63726973702d65646765733b20696d6167652d72656e646572696e60608201527f673a2063726973702d65646765733b20696d6167652d72656e646572696e673a60808201527f20706978656c617465643b202d6d732d696e746572706f6c6174696f6e2d6d6f60a08201527f64653a206e6561726573742d6e65696768626f723b7d3c2f7374796c653e3c2f60c08201526339bb339f60e11b60e082015260e40190565b95945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611be481601d850160208701611f0a565b91909101601d0192915050565b7f7b226e616d65223a22417274696661637473222c226465736372697074696f6e81527f223a2245746865726e616c456c7665732041727469666163747320697320612060208201527f636f6c6c656374696f6e206f6620726172652066726167656d656e74732e204160408201527f20636f6d62696e6174696f6e206f66207468657365206172746966616374732060608201527f63616e206265207573656420746f206177616b656e2054686520456c6465727360808201527f20616e64206f7468657220656c656d656e7473206f662074686520456c76656e60a0820152671d995c9cd94b888b60c21b60c08201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360c882015263194d8d0b60e21b60e882015260008251611d2b8160ec850160208701611f0a565b73222c202261747472696275746573223a205b5d7d60601b60ec93909101928301525061010001919050565b6001600160a01b0386811682528516602082015260a060408201819052600090611d839083018661188a565b8281036060840152611d95818661188a565b90508281036080840152611da981856118c5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611def908301846118c5565b979650505050505050565b60208152600061145a602083018461188a565b604081526000611e20604083018561188a565b8281036020840152611ba3818561188a565b60208152600061145a60208301846118c5565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6e57611e6e611f7d565b604052919050565b600067ffffffffffffffff821115611e9057611e90611f7d565b5060051b60200190565b60008219821115611ead57611ead611f51565b500190565b600082611ecf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611eee57611eee611f51565b500290565b600082821015611f0557611f05611f51565b500390565b60005b83811015611f25578181015183820152602001611f0d565b838111156107985750506000910152565b6000600019821415611f4a57611f4a611f51565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461090e57600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6956424f5277304b47676f414141414e5355684555674141414867414141423443414d414141414f75736267414141414347466a56457741414141464141414141454774543241414141436655457855525141414141344f4542414f4469416749695165486a51304f4473774d51774f456873694a303551566c744753345a2b56797735514279762f7a39635a476e342f6d6e2b7942696d556936366152595847526b574674372b2f784d58484569466946436d70544e6b5a5565596c6a3178633075656e437459575553546b51514a44574b756f6e4b5a67433964586b57576c4330734c545642526c317158335631577834664953496448535a56566a5331346a38354f6a394a54554b536b4568494f314a575356612b756d786e5333427455526f674a6454612f6449414141414264464a4f557742413574686d41414141476d5a6a564577414141414141414141654141414148674141414141414141414141415a41475141414a34462b354541414141536445565964464e765a6e523359584a6c414756365a326c6d4c6d4e766261444473316741414141706445565964454e766257316c626e514151334a6c5958526c5a4342336158526f494756365a326c6d4c6d4e7662534242554535484947316861325679666f697233414141434a704a52454655614e377457737479497a634d3141326f496f7048587630542b663976433948643446434f71794a4b3875354672435472745a31703474566f594853376663376e664d376e664d376e664d376a782b7a764966386c6150502b41505a7633473469522f7a506736335a4c385231497664776d76327a386462664135795074783059794436784157452f344c344c474368326a327957332b793978546548574c5457375432784e6f2b416434336d662b564e48506635686a7976453731314c2b43776c30324f364232477a7966443276794c5a38416e736c6449387463386632386c6f723057346a774d4c663830674475754157516a716e436a674a66546e3457657a773844467041445a674d73667a4c727934476158706d586b35337a6d79384349325659512f44754a4245506d6b6b6349436532342b2b647465594a2f446f796e6b6d5054724d79784e324e594431547a3176576d4363756f504e4f30654a6c5942654b724d77623949574d6631734c35574476756d642f4866696d2f46464730633064695a323379583936577a626a64394c67704e6458302f7272793959706e3665487a526a3879414b6d7a65413147467a41396e515a5a394c616a38697a736972305246356e66694e654172367062685261497076534a30504e76774e35706e4733437a70595765634d5a7674784f4c4b416737454f6854722f6255516d38507a6c427135356a6a7268546d53554347545a48553437356644384a7579643446566c4533686537477669746965416e626c6a50657a6535554b72554f655069437a6744765a302b357035393053667a49665947495a79616432756f674a734b41626b626c4256746d4e6e51356b325a327a696d5770474c78684f5a4744334b373237696349744e6d52505946777867664f486f4f7a543567786b6e386768354a625653656579545348655553316a5668524d786e30364d6953795a35766245327735674f7a4d485279535a7a342b4f5a744d6f6d626c694c4a546b445a456d7958776c504b5a5963367937534146484b523647676f3334353951576b335870724e546b57566f41427a506c4652614d786845744e78676a536d767652716d395771557a59694d456d5033436a2f78396336516268636c3252324668514a73364e6c354a79447a7478707579715a36596d3236647541424c6f4b696b35326846706e6f576c514c4c74755a39306c666464307a52304e714457754c7376523056566652435a48527348794f45764a523632695470424b7a73394572637a6f74444156562b6774746b4955746c5133366850564e46306e614c466e434e6d4a6e5552365136664b6a6e743756674b383838455766725333356d783641796353316f7a6152706251684c376e623033677739477252704249416939783779763553356b6347443171357353566b706147796b68666e7431753161455a44664933763561305136635474447876634b6531634a6e4e5941496b343073775a38685962624147487649324559386f666449754a504e6a376b677379745872666b646b6e3070706d69314d792f48417763364a4c6679654e334136516a544932594a617a32374e52704d2b5a347a3072746f5376675457447159793770724f442f483143583533616f7758726430456a76784f78556b686443375557636a626e76493435344d6a5879534569682f5270506e4e48647555776333654a6b56545a31414e6730527a6d41487845324635796938476b46674579655273734158655855484c5353796b52784464485062444c6763472b4177735a3246784a6f45773732724f4c52354b68676179704a31456850512b424c325231354b36706c445a6e2f6a584f367132416b56476349716c4531626b4f534e4f724a614c6a52796d42337376644d4c585271794c4c686d6e5675537478564a4e7a326e6d6376646a697741476f5978464972787a7a4e54766943757a454b664d513436685a51473344486c65634169625a5136766d39674532623345326c545a48474f5262624872557932306e7746355367316f314d347569617947725a3344314975666649312f416a34752b625753673070576e7332663156566649334d6b787150664f734b3874315a6f37546f4256785a7632596f647268627845666e71684e656c6f4956664444724e725a3249486e746251676759774269794e45686b565a6a524c614a314775556e4e675473683654526e50516a4d6668357864523559327466594f45724b63666d54313042334b4c6b337330324b7478356b44777142574470617863697548446c51435a5a55516b58554f614675677a566d566d593771657742304c53732b752f696932456a784d6f4471496f7a6e497372756661503951696e4a3167613972383774534b6e666e31564151314933746f2f314f366a466f7675746436466f676466307633754432543135575475644b6f6255764434474e746f7359305857784670545242634b31513232694d527668345956302f4b4d305a4774424c4c2b78314c3766656777584e457a72585867484a385547583653744c59775264794f57506c5962386350797441615a63465073456e736a3075634e6537414f314147504978464f566937544239325772566d2b594b4f4e666e6e536c33494b316a4b3975317767497330305769784d58656e4234786c6a636d4358637866675a387177466d4b626d37624272624b672f6e3467324b66525a6345506873574d337149544a6238543379346f383066566955517570796c594354535a6e7742384f692b4639645358492b7a79675042434d5a6b316f436138594f4554376b61645a6750775432712f575536466e676f33614e726f7373334d5976754d364f42587a6736755447595636596d6f67723366526d4a6d522f70587a69516a5263774348743954687762707571526e667361326a6c6e6e476f31495562484b46432f5a767644794c56364f4d4b784b4d57445747377742784c6a636e702f426d316b5161384b5571474a6b777542513643334750663849696a5138687272576e62434c7657594a6b4f6b3956396d657848774c4a483144334744724a76374a666f5870306253774d6657746472724476592b3279374e4737626174334732586d3946366f71373558692b733767734e6b784b4a2f4d4d4c336565536956467a4a7264567a6d617566414a716873544637426a7a736e78704d353161746d4d487968516d75527978566376576c7a7651594b416a754267537866483238574a5770576e36394746477467465777764a7176645649704132427755586b66417243634c7753385a64323145704164384d616a58367a6e456f30623773386d6332637446706b7977652b7865433779725a2f777a4c6d434c6f5665455a367455655a6c2f6273426a376231696f6535715744305533645071667a78396a787536667a4442584c6c64346a72576c6e624270733468722b6e74474831392f67594b594e7739382b746859684f7067555163315339643562364142794e32764b66764b36486c78734c2b726b7249632b554e5563385561434f7038346d336a4957734a627830506579566c667671666f793731344d326550795a3135756d35466d43683273756d754b6a42744566554176353259386f4762652f6274764c50676974433867766138636f7546745677504f76734a6d3464794d446d2f5547375a65766165562f5037627a314a766b385233366d33666456355a503250367544316a706b616f5372622f557251636e6f7a557a5a32572f37344e64434661396632427542397465386b6b4a51504c6d65504d487968595065733266392f39427233672f6248336f434c31716f325639475777527733376e34334f2b325a6965487173396c4f43382f636f68737670793073635934786f6d667647446a4f797936394d43494b35565437646650506d434950523548726578574f50323634664967773234794f50324a773631396843446a76486e50714271584d6c6335483337593263743776786f736646472f4a4f58704738332f6659356e2f4d356e2f4e587a722b6b314f7273555564796f5141414142706d5931524d4141414141514141414741414141426c4141414144514141414134414751426b41674635593737484141414a71575a6b5156514141414143614e36316d73754f497a6b4f525555515847675238454b4c514d44776f687159786d41616a5a6e2f2f376f68377955567374504f563256485657585a615a744866464d4b742f6156613850566676385365535a6f6d396450454e346974755671332b49736e7844745a4479586e3566496c773038483872527a5259454a5637716f76776d323766737a6b3866765a754747744e676c2f744c3976596c446636536c454e5a636d675131426d623948615479317635426669554e376274426d6c53537956424a4837357239367539775352613275644a74726b746e334b417a63316731556b42496a384a346a2b7833382b4545514f36363272784e72646e4e64504f414e6d50787a524f78525236316839505047666677644255376f63562b73613737756b752b786a62327953463033502f775551425134456f58536a664250456b78787572453970344a384e7134644d45417871674f71507a4a77413661476c4c364948344f4c7939544f4149495472474a746846562b6b72397945426774355166444c4859586e505a77567765434154366c4137796b4d424b753444667878443063594366367758525758617845496437646173302b704541424e61626e714950564a774c385742466770354239486b41507763527778524c6a3639437a4e307846495159322f76553064384a3551494d724b68385576777769466f514971625257574561467a4c424b414f6944506f5541434e6e6b665141656150435634784a5a72534a69582f79492b4651463765393846475939706568496f3034306c3847696c524e763936596b775247786b394f762b736977623769794130526557726f682f4c51674638446333354b5137384759765851307a774c4f5a61464d50553634374461567755342b7233544a364865414c61426576662f4c4b303245614375776d39365a4b7165574b65496d454248525544665875633758324f7059697757514d515269324c6d65775172796c375669626b4c722b767075794d4c6f4f59644e725a4d4d7251695338444355426a483647553563735557494c51514f417051524139656235344c456b386735426e57424a614248644e41724c4b76786856666f3843364143754646453950434b49563661586743694b4c6f4b515644364542654c526f694a6d73534d792b4b7138494a7941476e77686b56706575486f4453714547794c734f354948463049724667377a344b3878426c7854474b6c376d49644a41624258414b726742426f5a4a64385975786c48576f5563396b4c42396c6b41424951757132307361487556614563477a5578527555747053776349656b617751654337476c61457848756d67757937326341624e524f57786c472b6e6b6d5865414e426f63737434797a53755a5a31325a345a79424868346a5a544f4b566b314662616b594143712f4c4c67626541746f37797a5a544c717679324a593849695561436773447136644b5a47446b6c6f5778416d31384a6a484a526263366658353930554749395272465944697955306b47592f73436f5647576a2f536f69756835556f4878356f3042384a6b4a3049637778706f63797145437a5254446c414c6a6d3231546768657331314e6965644c504256533956776a425449474b6a487352345653324356757842324a6c395159636e5176372b47456a627a68617671514b4d77475254754676706b6d614c2b41523465364f56344869473243375043494d314f58496d584e7a37536d4339693955316d626e6e37746d6c373577775930726a2f425470746a3068654a314342474b5a7971374367686532596b78466647674e4e50375541656145444c7365526f6f5839596b4b376f65647661775a34333869454538687556795a565259786645306a635637756d4e65653253674965795a523243492b75784955453030594a324a6c4e7265596b70787735474154517a4541542b7246786f715744622b5451455332613251547a46514e5670474751574476432f764879497773664176596451556b415178757052446d486531424d392b69416f475130325a4978366a78416e415373694f774b35514f6b61614e65354a5741486a5757494135534c4c5337724b3953655571316567735668326e397a49546c74356f44666744745463474a4f376c464647716e444c6448492b3162733939416164617930547235577564737a5a516a5a3068564441537369646c7562633746624276336175574a5344364d6e56592f43435a4768325448667875792f79685a595a37415063655771314c57526d6935534f544a7946726e324b4c6c6b61374a35774158586f7a4e38624c434b66556778614b4774746e76434a53504265524c3531756d6276664f51635363456e434b623971744d364d6943424d77687a47517173574b63475537396c444e5a7671334e5074525667416b734d6943746b59574c6c5630796f336f49696a527a614f46787a707759627a63343474514a3463714c45446e4a55534b2b397a7a423756306747414439416761377830722b636b55344b7769353637533670757938526937416f574132754b5a3871786b335a4f3773764741724e38332b6e7063457343794764477a63794b4251775a6c6c566e5148723641555942577650636f5554416b7466733274696c6279306a5073746d507939753854444b314c3670645a767a57414a4d7a736b4c64634b524e305a49416b4b444d6737336b46576c325368316a475855573861394a54687a323250634a706b656a4a59456f4e57634837537a68735931526c6938484b7a394c6d7458486858774c554a736d2f2f414248454334475364515745725a424a4b75526b502f5453595231793650784c45495536515377466d484d307a744e796a3053566a704265714b706e6b77315a484d374838424d517856565447517769344f77635257384a2b626f45686e6d374c4a71645a6e546874592f76523645547543585543377174524459367a6f393935645378626531786e666e456f597941624165486f553445695246535377465a775435683546716f4d736571735056565051465351574549417476754f4e6f367359316c46632b794b61355247526b76376a686341744978514c7933453250347a4164766a5548476470624b613559534d4f6d5051424537356a5139346e45524e754e573550514c304773564253336275434d727465524a7071552b46574d6848637a6f4278743738333064416337634d72526866476563777a2f4f466b616d53386f31376438762b77584d33333053376a5236504b3769505a4a54494f6c434d326133545748794e505455485a573979497964796e766d3841577831446c4c645946546b674443504c57515a3765633232702f2b3656564c70777236444c446e2b7249306a62454b57302f41357441304f776332515471776e76395a6a7364764158335a63304e5756564a75635765686e6c6e534b3654794e3450446563644734524641517037395a65684d416d4e396e4d765076524a3341786b566b58393475585043766a795a3337566945554d734972774f586d4b52593537386f687a6c55617077423945525954692f66516d59645654505961634b703831425073583379757a61383859774142324d59393954414f4e554c44477a6e5a3837747577374f697548316e4578374668626d47634843726e3146683555354a4c6b6e74467251332f57766e2b5045794132386d6a364757444c546b36466451474d75572b324b58326463724b326f36704c6666444a6d6375325a667a51514e79745a437a566347547a5647574b48314844744b6243584a6e6f397679456e374d314278624c78304d7936374c72684f52526456777a58535a67304e4a507a3733694873552b41796a564c385a6a6c3250656c33615a6f7437415235534d6c2b64716c306e49513632637637442b58505636464462473362473044463748797a506d4a4d7a5461396f615959476c366167422f596e30496f693863377569434f66596c74364d47572f636e63716e5830614a7656544576582b76416f523950524b734c6171756136365834594d782f684463514241522b6642474d41653938596834734972716a437158763076656f66335544653249705845635235365756534c56434f614d7359695076517a6c74382f664c3866646b4448503578684c786e496365566544414f72466e7562353073317233724f734d6c427a2b663050314c783948794c4c6a50673141745041376a5a582b52446e3239646a7950304d2b6a5743544e4f6b58476261784b5830792f652b7072424e5176614653444f6b6d6834524143583938753176515777456d4d79374f556a6b4761667a797750662f6d344643682b506b31475178737975355a734a762f55646a69494d4e6f424b7376576244372f352f5a4167784b784541744e342b57624644337a4878516b4868715739562b583455666c566c2f793637547a792b6d483538366a454f5946593764392b6a44415261327a2b6d507a6c617a6d586e34724f447a6a2f6c5077375176754872752b492f7a3835535a637276663934575141414142706d5931524d414141414177414141477741414142784141414143514141414163414751426b4141477456644f324141414a37575a6b5156514141414145614e36396d74747149306b5368704d6769497545516a63704b416f68476e706857426747647666393332307a2f6a38694b30743257374a61367070756a393232363873344836704b2b643631354658656669337a3953645a623659353442545875326b544b6e462f697656573267665747326d667346354a45376e4841713238696959544c4f392f787656796d6d684e336937592b5878444f796a67643268624e657333577a3679426b324b4c4b2b7745326a56744976585966336a7a417161724f56707966346a73364536544a326d6e58655357713579432b7573357955725639785a6a6a51522f38642f31584b5241307a6b556b6f4e6d4679666f5a6c4263774a336c482b6333762f724832396f49707656556c5863495a636946336e434b62614f71785543716c564935562f306a33383754594d6b323857712b7338684a37737a796264444378644e7866384c67416f3061454b536b57554a36777239766a397546376553337838306733673451662f4d724e4e4163756e376753706833626850774278336f622b37357672687530516d564b726632326e39366f6246312f30674a37413637446e61706c41694e4e663131442b76626a676a725839614c6f7172532b653437697071785a36436164773570484671485454384c5536444a7032316258364b3532434650684247437856574f4b536677502f554d6d54447a3768676e747165636366644c526e50764a395461557a7a414b4e73794338514c474879485258365055772b7066556f53464f534e71372b44786177362f64456f32463247752f664653727768677935737659766435777871682f4c4a444a66436c64496d4e46324671627a763856704365732f5842442f4c74686a6c6f4f713442555231454d2b55386f54796d5371726e3535356b5a45644a67367075666d4232464b2b3073314f616f7a43476b362f785a7041617649584e6f7236635565394241505a6d6c4e344e716c7968344151466e6f6c376b534b614e366d57445337724b3533692b505270736e48576c4b476e6831643873716b544c464a706f36444d64796d4f72566b434966615578413030367a6f4257504869714f36522f3273307a4c50636f6747733767695579336e7257364d6a6435544c59756d744f5539736646784f573339427a4a364934696f4a58466e593059724765654b7556525262725a504b777141685558584e514667677278782b672f58514e515a48585639563841374d484535614a31476f32436b6d574d682f42487a6549446e614c49394434494e495144713449663771476733734c35526d7151517971784d4a696735766b35514f4e50465a774f51533533576d565a56374f4758394a4946465367387673523448455541303068347a583831644e494876463072384e7a6e4c744847616b6a376869526b43464f47677142796f384f762f6f42536b584a59586a4c73515039484e6663745170704368717a66436378384b4b4c524f71436c44384337696b727933662f2b6e4b6e532b42787574394443445a7876474d46626467507257536d7276496a36616a6d45493073755a754b3365306e326d6a747167754a6a44684b484d4d62734576386d41717364726d3465463959625946596c47624b56496265436c48674f636e72534a593461726f366257576b2b306c674f576574587a6e6b73724b393052414e696d4a674b31784661634a6945797067765778546b33416175756f713932694e6463546a3039326a31706e47584f796e4c6a4c69764a747a6c627179532f654f6c76326c682f5a7968395a7a4b4c77617831645753435a6a31796439302f314d73386e725833615964567134623356462b6a66316a6d6a646269747264444847313844424c35325362684456414846784355567946716e6f62652f7030576c72424b7a72792b387a307852646e69765166573455626538694f32324c5a7338484473426977506e6c726f505a4e70716453687078305a34676371484b6243495549653830316e53336c34386a69506866626451342b61773677344947487364646846464665644f4962632b496f4558483769533058414e326931753445704256643170554e4661316c4d3354512b463857424947727a4157436a626a72416972355035752b59796c575635514a5332725a363270536f6855616b7a657758542f564d37654373395864757064545a2b7343344e31637663516a74434973776a716d6e3669593659427472437975576847577454584b4645473057356f79556f5945796f47694d3668624a50644a454b766f694f477a396a5568326d715a38426d326d43647368574e77517a6577535a6b304349764b306271554f795274734e364f723364332b3273303954364b75576a4672305731424544384c676539346a48536a4f4f6a63626f6e776e4c565644536b6e552b523554746b784b6e45382f317049334731615574486e4a4d4e5458364249334759637a673630796242447348544b4c6852704a7444524a5a46754d3047776f502b6f44434e6f746a464d344278346d35414c447a4c74724f4f7175786775305a48524c564d63363062476341673833514247534c336a306d757275386b5a776e576772477259335936424d6a57466a567a4165415144473832533155546b76545949663571613730456a666a42356a76765078636a4e3452785836774a733069437a6151776d3551484936687358764b573044626c2b68533550774246684556366233754638647a7448633532355a716f33634e6d4d6e6570534a58646679563376554a7a43564c425849586b4a57467a5943324e725849553573384f58794d6f3862783158536a702b3137304231324f6f2b3554784933674b323568644935744236797863796d594831453837584954335250423959635a53684734567732417763746852362b5648656c6473384e312f4541374d424f32316b374c476a6e73667a544d565054684b324631544a4c6d73536e4a5664344c6c6241664f587057627472387369616e6832525a6c4e596a5255485544523546472b4e624d6d70686a74354770337a7643627375503966356964563258795062756267455731613665446159356b4e4c49504443484d6e2b6643733455427a5479654e70657849477a4874496a617837423571714352676e7358384f4a74386647517a6c5a69325259364e62423874716c38744a545661786e713447315a4d4655316d4379307958763461734e757559426d5647684d4363646b514447444c505a4d47664c414b502b45366b684a79424c312b3175386b54532b656f4451354d5a476c7938524733454c4f6446566e6f6444754d474d7638742f723873576a3032375370686c444d3238666f4c686a6168474b77544c7561537a7148336537707555582b7844434d46446d454773794e315a74644365685548365066554d4d49623134743568387543663835664b467447727a5a6942796f675674724c466b477166476d71522f2b5666506f6a7045302f72567067636463515177553256723834336e7a65706f4b6b666c77334371445766376e38586f38645667495775643969753462325a387269314763526c52574e4d31343138616836434b5165334c73527130324475484377346159366e745973553879326b73504d706a48642b756e47544b6e5a6c4a3037387849434343636b486e68322f6a6951585359367a3668524e636861666957634e44734a4876645738474d384862474a344356544f6a35423744477948495a6d795837384c6f2b324b42484b334d506d46484464575276545166633044584f553765585a6646314d6e46565278566a727961693577394c2f2b3737544378466f39583773475736474b6f464a316762657846624a446d7a692f71455371523543382b734f426e62694f4e455543667a4f625278765a746f4a726e564d31754f6b365a2b3778377567534175304e2b336951695043716f55317257486f3177484c4247617a7930543132484934614b6b6e6462765a6c765575704942373168615a3632486e77456c4c52596c6b617643726c436d6e6e463274726830596f305874756a7a3575634e70374730445a774c78785a577735466e3543534a743934365143307664304e542f446575423265506f556457794a4f36626e666532793372764d364f74634f4f7375533334624e5776744a684967383852435a6a6a666a626a536e4f72797a7339626665566d6a743172624668765a444e7073567a7576545369664d646666657a4545797339394d4833535745493878724d4a51733561662f372b5379696e6b594d305a36486a422b546a6457307665642f6c524e3270485162672b425450617935626b356539576a505546777847395541337641487a71686575534975363569474e734e624e6e6166786a5a75587351717231486a366951517966502f5662355831564d4a48496b6951625554797a5a726f7062544741705942665279565830727a58704930706f2f6a767547316c32786f4a7465613265756473487a2b64463235536a326633365a464276634a71786e4879666e64734f55556f366d38583742394544362b6c2f65324630576e35637a625763633365392f2b76753179513376766d385248327276666b563532334239342b3376356b322b616c7a2f4a6d6d6c502f504c2f416247657872436e7658416241414141476d5a6a56457741414141464141414162414141414845414141414a414141414277415a4147514241566d456b493041414147445a6d52425641414141415a6f3375326157784c434941784657554b792f38303632764b6d6a6a6f3931366e6d2f6b6c48546b4d444a49475533704e6e4a567a6553736d436158654137614a704453726a564379554e724641326f4b46305a617342773242356636333379537447705a6243673263583757784e766a356f2f6a6f7632306234476471377261774247747974564d4261385a594342527462312b437962365a75645246517146514b425153527962434c5455472f496f2b3874456a77434576546e4d7854546a726e335a344e75314a7a67456b434563564e53547a575266776643734a6e4a384c32307944574675615039423246675472615a6c46775670615957477757722b724c4b5a67303947344d52786f71484e4d4c6c6b4d59364f6633545273686833426146594834344e496f57585777307a43346d645a7368364730727161504c677754717832615551327a2f36736761544e527a626746724d34316e4e734d5637464f3036746b50377147354435747253497261574a79776e614d787a3969564841667164514567706454425a44454a2f3766357a4c5a4b386b794d694c546172346a372b65743079565254425a454b30326a494864757831636e494f356a616b70657556775349534e396357754f474f30332f743466644e686d4b7675396734306571487969684e6b344b3638615a3655724a6232775a39762b3767387937724641574141414141615a6d4e55544141414141634141414267414141415a514141414130414141414f41426b415a414141305a6965715141414361396d5a4546554141414143476a65745a72646269504a4459564e454c776f394933516464466f434d4a67463867695342416b372f3930496338687136766c316f7a743864624f7a457132784b2f347a7972703765307a613856362b2f306c6369566f48657337434f3852363754657673535a33694861794c69576e30766b30775965443256765a684f43456d2b314b482b523955743235377633316b78446a57477732336e4a746e784b6733394c7971457332545549366f785632764b5132337635426669514e39623141576c53577956424a4837346a3762637a7753522b3749306d6d6956782f6f68447a7a55444661524543447972794436662f37764530466b743759306c6469376d2f502b41576641374c736a576f4d69616732376a79662b37332b436f436c64397273316a646664306c333261322b736b6f756d352f38464541554f424b46306f337754784a50736271775061654476446175485442414d616f44716a387963414f6d6870572b694265446d3876556a674343453678696259525866704f2f636841594c65554877355937433878624f696d4277774964556f506355426f4a563341622b7549556a6a41522f754e775679375549684c7462626245507152414154576d3536794331516344664a51697755736a6639794148344e64787842446837744f7a4e453944494155312f72526c3649445868414a52566e355a2f444b4d667679517363705759526b524f736369416167443868774b4a4743566e77506f514a4e4c676b6473755961457366774838613449324d6650585a44786d4b596e67544c6457414b50566b6f736d7a3839454961496a59782b33562b6d62634f6442544436777449563858634a516748387851747930683334734a657568686e67325579306f5963703935324769682b4764462f4c4936505841623642487a6576662f4c4b30324561436d776d5a314f6c31484a462f49714542445255445a55666372666c64537846676b6e76676a42636d687a4243764757746d4e74517572363678374b77756736684533766b513276434a4877307055454d4e6f52546b327952496c4e42413041746849413159666e67386553794538493667524c77684c5254614f77724d496656715850737741716742744652486576474f4b6c3651556769714b724541536c443746594e454a4d3143526d58425a586852655541386743623169557068654f587146437543484376694635734242617358475942332b4d4d654361776b68746359432f415142374261414b5471435255664b4e735a74787046584959533855624a38465145446f7374724768745a5869625a6e304977556c564e4b577a704130444f4344514a6674574248534c7772465754627a447065714a6d774e493753465a6c3069546351464c6f384d7334696e577462742f584b514934494679386a68564e4b526d326c48516b6f7343702f4f504152304b57686644506c734b3561636f2b51574568514546673958546f544936636b6c41316f383063436f3178556d2f506e3934734f53717a484b44624c6759565347676a4448786956716d77736678515258513871554c36385579446545794536456359593030495a564b445249706879414e7a7a5a53727777763065617177583361787a31314f564d4d7755694e696f422f376a70566f4572646943734448376767355068507a744f5a44576a5331655577555967636d6d634c66534a59744e346850673759315767754d5a59707463455470726375524d754c69316d634236463774625a4f536575326554746e48436a436d4e38314f6b3233704238447146434d51326c56324642533973785a68714566453130506854423567544d75786147436c2b715263717542383239724c46475038446758674b7965584b724c4b493458736169664e79773778325a614d67624a6c455959743437307949624b4a78496c5a476334737079516c37446a597846414e7755533957567252732b49304549724a6449357467706d7177696a514d416e7466324439475a6d54686538436d4d79414a5950416f6854427661412b612b525956434953634e6b4d36526f305867494f51485946646f5853494e4631344a6c6b4b414d3861437a41485356626154645a337156796c4770334671754f30566d624331686461412f35413759304269576335525a51717030773378334f74322f4a63774b6e574d7446612b56724872413355777334514b68674a325a4f79334e744a425a78627436706c4359692b5442306d5030696d52734e6b42372f624e48396f6d65454d344e6c44713355704b304f30664754794947547455787a52306d686e776748517154667a5944794e63456f39614b476f735733454b794c46637848353075695763666f6463794142747951633871744736386949434d496b6a47457374466f694a5a6a794c58756f5a6c4d645a37717443424e41636c6845496573644f37647157755547464848307949586a42556436734f48386e474d4c6b44634861757741523658457a7473597333753164414467417a544947692f64367a6e4a6c4343636f7366706b7172624e4c455975344c46774a72696d584c73704932542b33537777437a664e6e6f36334a494138706c5249374e69413132365a6458706b4a352b67464741317278334b424777354432374e6b377036317447664a624e646977653854444b314c6c706154626d73515359484a4d58366f516a48347951424951475a5279654961744b7331467137394f6f4e3431375533446d7363643454444c644753304a514b7335336d68484459335665316938484b7a746c4c557a6a7772344553474f7a583969676a6741634c4b4f6f4c415a4d67696c3349694864686a4d4979376448776e69454366497251416a6a73596457703752364a4c65307774566c557a7934564a584d374839424d5131565654475851673433594f495457452f6a7341515437646c6b394f73547079326366785936455365435855417a74576f427366523055396537645052487576494c77356c4447516a494278394b46434569456f533241724f684a466e6f556f5871383761557655455241574a4c51526750586530766d6364797971615931657358686f5a4c65306e586744514d6b4b397442426a2b363845724d394478583255796d715741394c726a6b45544f4f5176664d44724a4772436f38376a476144334b41356173764e45554737506d30684c66537245516a3661307745773975622f50675065334331644b385a6e786a484d383336685a36716b664f505a33624a2f384e374e443946756f2b66724370346a4753557944785239644f7330466e2f486e707144736a65356e684d3537337a654164613642366c753043747951426a58466a4b4e39754d5937552f2f3871716c51775739416d79357679784e76632f43356875774d54534e7a6f46446b48627335332b57342f4637514a764f334a42566c5a52483346476f5235613043716e3853656477336e4251654161516b48642f4754714477466a76782f627a724d545451455a463542392b335468683379376d643631597842434c434b2b4c6c39686b487a652f4b4564356c536f3851545245474f357658774a474864566a324b6e4361574f51542f47744d72764f7644454d5141666a3248634a594a794b4a576130382b50456c6e3148522b58517569364748657349633357686b45647634555646626b6e4f6a4659482b7150322f624d66414c476556394e58674455374f5258574364444875646d4739486e4b7964714f71693731786f73376c33584e2b4b47426546724a574b7268794d6174796844666f345a70545957354d3948312b6f6166737a55484673764858544c72737575453546353158444e6442714454307066335876455a785459434b4e5576786e4f585939365864706d69337342376c497958393271335163684c725a792f73502f633958775631767670576c6f36312f37796a6a6b4a342f6161746b5a59594776616130432f6b4634456b5a3938584647455932784c6238614d31302b3338756d58586d4a764658452f2f3677436847322b4571776a71733537726c2f444237332f4b6667415155546b6c783845633944727a34676e7136694f71484c356d2b516e74422f365144746971652f376e72646c6c556731676a6d6a542b4c6a4c45503562782f2f7642796668765278503864594d70626a794c736142464176746a5450707a3638356d655756515a714c6a2f2f673571336256316b6d68452f52324161324f6c776c513978763333667535786e304d38525a4a676d35544c544269366c333737324e595631454c4976524a6f683158535041436a707479392f4332496c774752386d6f4e45486e4536766a7a77356539576f5044784f686b4671592f736d72365a38467666345368435a774f6f4a4a752f2b6643623377384a5173784b4a44434e70323957664d4e33584a797759316a61576c574f6235566664636e58592b4f56317a664c4831636c7a676e4562502b3362794d4d7842796233795a2f2b6c724f37627569387865637630762b696644324e3632766950382f49333675417a666f58745141414141415355564f524b35435949493da264697066735822122001dacd6f3c5417c7ca6e1dc39b51bef93b04dc1f32148b551415c6ac7f28704464736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c80634e1273f4116100ad578063cd5d211811610071578063cd5d2118146102db578063e949580e146102fe578063e985e9c514610329578063f242432a1461033c578063f5298aca1461034f57600080fd5b80634e1273f4146102255780638129fc1c14610245578063819b25ba1461029a5780638da5cb5b146102ad578063a22cb465146102c857600080fd5b80631327d3d8116100f45780631327d3d8146101c65780632eb2c2d6146101d9578063335229a9146101ec5780633bb3a24d146101ff5780634576da471461021257600080fd5b8062fdd58e1461012557806301ffc9a71461016e57806308dc9f42146101915780630e89341c146101a6575b600080fd5b61015b6101333660046115cd565b6001600160a01b03919091166000908152600460209081526040808320938352929052205490565b6040519081526020015b60405180910390f35b61018161017c366004611775565b610362565b6040519015158152602001610165565b6101a461019f36600461183a565b6103bd565b005b6101b96101b43660046117ec565b6104ba565b6040516101659190611e32565b6101a46101d436600461143f565b6104cb565b6101a46101e7366004611494565b6104f5565b61015b6101fa366004611805565b610605565b6101b961020d3660046117ec565b610695565b6101a461022036600461162a565b61071f565b6102386102333660046116ae565b61079e565b6040516101659190611dfa565b60008054336001600160a01b0319909116811782558152600360205260409020805460ff1916600190811790915580546001600160a81b0319167401f3c1d8e58a6d79e9db28a364b196dacd3de42069179055005b6101a46102a83660046117ec565b6108fa565b6000546040516001600160a01b039091168152602001610165565b6101a46102d63660046115a3565b610911565b6101816102e936600461143f565b60036020526000908152604090205460ff1681565b61015b61030c3660046117af565b805160208183018101805160028252928201919093012091525481565b610181610337366004611461565b61097d565b6101a461034a36600461153e565b6109ab565b6101a461035d3660046115f7565b610aaa565b60006001600160e01b03198216636cdb3d1360e11b141561038557506001919050565b6001600160e01b031982166303a24d0760e21b14156103a657506001919050565b506001600160e01b0319166301ffc9a760e01b1490565b6103c5610b08565b6002816040516103d591906118f1565b9081526020016040518091039020546000146104315760405162461bcd60e51b815260206004820152601660248201527514da59db985d1d5c9948185b1c9958591e481d5cd95960521b60448201526064015b60405180910390fd5b61044561043f843385610605565b82610b26565b6104875760405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606401610428565b600160028260405161049991906118f1565b908152604051908190036020019020556104b533600185610bb2565b505050565b60606104c582610695565b92915050565b6104d3610c39565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b03861614806105115750610511853361097d565b6105755760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b6064820152608401610428565b6001600160a01b0384166105e45760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b6064820152608401610428565b6105f085858585610c52565b6105fe858585855a86610e3c565b5050505050565b6040805160208082019590955260609390931b6bffffffffffffffffffffffff191683820152605480840192909252805180840390920182526074830181528151918401919091207f19457468657265756d205369676e6564204d6573736167653a0a333200000000609484015260b0808401919091528151808403909101815260d09092019052805191012090565b60606000604051806137c0016040528061378c8152602001611fea61378c9139905060006106e1826040516020016106cd919061190d565b604051602081830303815290604052610f68565b90506106f7816040516020016106cd9190611bf1565b6040516020016107079190611bac565b60405160208183030381529060405292505050919050565b610727610c39565b60005b8281101561079857816003600086868581811061074957610749611f67565b905060200201602081019061075e919061143f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061079081611f36565b91505061072a565b50505050565b606081518351146108065760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b6064820152608401610428565b6000835167ffffffffffffffff81111561082257610822611f7d565b60405190808252806020026020018201604052801561084b578160200160208202803683370190505b50905060005b84518110156108f2576004600086838151811061087057610870611f67565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106108ac576108ac611f67565b60200260200101518152602001908152602001600020548282815181106108d5576108d5611f67565b6020908102919091010152806108ea81611f36565b915050610851565b509392505050565b610902610c39565b61090e33600183610bb2565b50565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861614806109c757506109c7853361097d565b610a265760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b6064820152608401610428565b6001600160a01b038416610a905760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b6064820152608401610428565b610a9c858585856110d0565b6105fe858585855a86611191565b3360009081526003602052604090205460ff16610afd5760405162461bcd60e51b81526020600482015260116024820152702327a92124a22222a7102a2790212aa92760791b6044820152606401610428565b6104b58383836112b3565b33803b903281148015610b19575081155b610b2257600080fd5b5050565b6020818101516040808401516060808601518351600080825296810180865289905290861a93810184905290810184905260808101829052909190849060019060a0016020604051602081039080840390855afa158015610b8b573d6000803e3d6000fd5b5050604051601f1901516001546001600160a01b0390811691161498975050505050505050565b6001600160a01b038316600090815260046020908152604080832085845290915281208054839290610be5908490611e9a565b909155505060408051838152602081018390526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000546001600160a01b03163314610c5057600080fd5b565b8051825114610cc15760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b6064820152608401610428565b815160005b81811015610ddd57828181518110610ce057610ce0611f67565b602002602001015160046000886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d2157610d21611f67565b602002602001015181526020019081526020016000206000828254610d469190611ef3565b92505081905550828181518110610d5f57610d5f611f67565b602002602001015160046000876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610da057610da0611f67565b602002602001015181526020019081526020016000206000828254610dc59190611e9a565b90915550819050610dd581611f36565b915050610cc6565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e2d929190611e0d565b60405180910390a45050505050565b6001600160a01b0385163b15610f60576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b8152600401610e83959493929190611d57565b602060405180830381600088803b158015610e9d57600080fd5b5087f1158015610eb1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed69190611792565b90506001600160e01b0319811663bc197c8160e01b14610f5e5760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745006064820152608401610428565b505b505050505050565b6060815160001415610f8857505060408051602081019091526000815290565b6000604051806060016040528060408152602001611faa6040913990506000600384516002610fb79190611e9a565b610fc19190611eb2565b610fcc906004611ed4565b90506000610fdb826020611e9a565b67ffffffffffffffff811115610ff357610ff3611f7d565b6040519080825280601f01601f19166020018201604052801561101d576020820181803683370190505b509050818152600183018586518101602084015b8183101561108b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611031565b6003895106600181146110a557600281146110b6576110c2565b613d3d60f01b6001198301526110c2565b603d60f81b6000198301525b509398975050505050505050565b6001600160a01b038416600090815260046020908152604080832085845290915281208054839290611103908490611ef3565b90915550506001600160a01b03831660009081526004602090815260408083208584529091528120805483929061113b908490611e9a565b909155505060408051838152602081018390526001600160a01b03808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6001600160a01b0385163b15610f60576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b81526004016111d8959493929190611db5565b602060405180830381600088803b1580156111f257600080fd5b5087f1158015611206573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061122b9190611792565b90506001600160e01b0319811663f23a6e6160e01b14610f5e5760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d4553534147450000000000006064820152608401610428565b6001600160a01b0383166000908152600460209081526040808320858452909152812080548392906112e6908490611ef3565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101610c2c565b80356001600160a01b038116811461134857600080fd5b919050565b600082601f83011261135e57600080fd5b8135602061137361136e83611e76565b611e45565b80838252828201915082860187848660051b890101111561139357600080fd5b60005b858110156113b257813584529284019290840190600101611396565b5090979650505050505050565b8035801515811461134857600080fd5b600082601f8301126113e057600080fd5b813567ffffffffffffffff8111156113fa576113fa611f7d565b61140d601f8201601f1916602001611e45565b81815284602083860101111561142257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561145157600080fd5b61145a82611331565b9392505050565b6000806040838503121561147457600080fd5b61147d83611331565b915061148b60208401611331565b90509250929050565b600080600080600060a086880312156114ac57600080fd5b6114b586611331565b94506114c360208701611331565b9350604086013567ffffffffffffffff808211156114e057600080fd5b6114ec89838a0161134d565b9450606088013591508082111561150257600080fd5b61150e89838a0161134d565b9350608088013591508082111561152457600080fd5b50611531888289016113cf565b9150509295509295909350565b600080600080600060a0868803121561155657600080fd5b61155f86611331565b945061156d60208701611331565b93506040860135925060608601359150608086013567ffffffffffffffff81111561159757600080fd5b611531888289016113cf565b600080604083850312156115b657600080fd5b6115bf83611331565b915061148b602084016113bf565b600080604083850312156115e057600080fd5b6115e983611331565b946020939093013593505050565b60008060006060848603121561160c57600080fd5b61161584611331565b95602085013595506040909401359392505050565b60008060006040848603121561163f57600080fd5b833567ffffffffffffffff8082111561165757600080fd5b818601915086601f83011261166b57600080fd5b81358181111561167a57600080fd5b8760208260051b850101111561168f57600080fd5b6020928301955093506116a591860190506113bf565b90509250925092565b600080604083850312156116c157600080fd5b823567ffffffffffffffff808211156116d957600080fd5b818501915085601f8301126116ed57600080fd5b813560206116fd61136e83611e76565b8083825282820191508286018a848660051b890101111561171d57600080fd5b600096505b848710156117475761173381611331565b835260019690960195918301918301611722565b509650508601359250508082111561175e57600080fd5b5061176b8582860161134d565b9150509250929050565b60006020828403121561178757600080fd5b813561145a81611f93565b6000602082840312156117a457600080fd5b815161145a81611f93565b6000602082840312156117c157600080fd5b813567ffffffffffffffff8111156117d857600080fd5b6117e4848285016113cf565b949350505050565b6000602082840312156117fe57600080fd5b5035919050565b60008060006060848603121561181a57600080fd5b8335925061182a60208501611331565b9150604084013590509250925092565b60008060006060848603121561184f57600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561187457600080fd5b611880868287016113cf565b9150509250925092565b600081518084526020808501945080840160005b838110156118ba5781518752958201959082019060010161189e565b509495945050505050565b600081518084526118dd816020860160208601611f0a565b601f01601f19169290920160200192915050565b60008251611903818460208701611f0a565b9190910192915050565b7f3c7376672069643d226172742220786d6c6e733d22687474703a2f2f7777772e81527f77332e6f72672f323030302f737667222070726573657276654173706563745260208201527f6174696f3d22784d696e594d696e206d656574222076696577426f783d22302060408201527f302033353020333530222077696474683d223130302522206865696768743d226060820152661898181291101f60c91b60808201527f3c696d61676520783d22302220793d2230222077696474683d2233353022206860878201527f65696768743d2233353022207072657365727665417370656374526174696f3d60a78201527f22784d6964594d69642220696d6167652d72656e646572696e673d227069786560c78201527f6c617465642220687265663d22646174613a696d6167652f706e673b6261736560e7820152620d8d0b60ea1b610107820152600061010a8351611a6e8183860160208801611f0a565b611ba3611a898383870101631110179f60e11b815260040190565b7f3c7374796c653e236172747b73686170652d72656e646572696e673a2063726981527f737065646765733b20696d6167652d72656e646572696e673a202d7765626b6960208201527f742d63726973702d65646765733b20696d6167652d72656e646572696e673a2060408201527f2d6d6f7a2d63726973702d65646765733b20696d6167652d72656e646572696e60608201527f673a2063726973702d65646765733b20696d6167652d72656e646572696e673a60808201527f20706978656c617465643b202d6d732d696e746572706f6c6174696f6e2d6d6f60a08201527f64653a206e6561726573742d6e65696768626f723b7d3c2f7374796c653e3c2f60c08201526339bb339f60e11b60e082015260e40190565b95945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611be481601d850160208701611f0a565b91909101601d0192915050565b7f7b226e616d65223a22417274696661637473222c226465736372697074696f6e81527f223a2245746865726e616c456c7665732041727469666163747320697320612060208201527f636f6c6c656374696f6e206f6620726172652066726167656d656e74732e204160408201527f20636f6d62696e6174696f6e206f66207468657365206172746966616374732060608201527f63616e206265207573656420746f206177616b656e2054686520456c6465727360808201527f20616e64206f7468657220656c656d656e7473206f662074686520456c76656e60a0820152671d995c9cd94b888b60c21b60c08201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360c882015263194d8d0b60e21b60e882015260008251611d2b8160ec850160208701611f0a565b73222c202261747472696275746573223a205b5d7d60601b60ec93909101928301525061010001919050565b6001600160a01b0386811682528516602082015260a060408201819052600090611d839083018661188a565b8281036060840152611d95818661188a565b90508281036080840152611da981856118c5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611def908301846118c5565b979650505050505050565b60208152600061145a602083018461188a565b604081526000611e20604083018561188a565b8281036020840152611ba3818561188a565b60208152600061145a60208301846118c5565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6e57611e6e611f7d565b604052919050565b600067ffffffffffffffff821115611e9057611e90611f7d565b5060051b60200190565b60008219821115611ead57611ead611f51565b500190565b600082611ecf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611eee57611eee611f51565b500290565b600082821015611f0557611f05611f51565b500390565b60005b83811015611f25578181015183820152602001611f0d565b838111156107985750506000910152565b6000600019821415611f4a57611f4a611f51565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461090e57600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6956424f5277304b47676f414141414e5355684555674141414867414141423443414d414141414f75736267414141414347466a56457741414141464141414141454774543241414141436655457855525141414141344f4542414f4469416749695165486a51304f4473774d51774f456873694a303551566c744753345a2b56797735514279762f7a39635a476e342f6d6e2b7942696d556936366152595847526b574674372b2f784d58484569466946436d70544e6b5a5565596c6a3178633075656e437459575553546b51514a44574b756f6e4b5a67433964586b57576c4330734c545642526c317158335631577834664953496448535a56566a5331346a38354f6a394a54554b536b4568494f314a575356612b756d786e5333427455526f674a6454612f6449414141414264464a4f557742413574686d41414141476d5a6a564577414141414141414141654141414148674141414141414141414141415a41475141414a34462b354541414141536445565964464e765a6e523359584a6c414756365a326c6d4c6d4e766261444473316741414141706445565964454e766257316c626e514151334a6c5958526c5a4342336158526f494756365a326c6d4c6d4e7662534242554535484947316861325679666f697233414141434a704a52454655614e377457737479497a634d3141326f496f7048587630542b663976433948643446434f71794a4b3875354672435472745a31703474566f594853376663376e664d376e664d376e664d376a782b7a764966386c6150502b41505a7633473469522f7a506736335a4c385231497664776d76327a386462664135795074783059794436784157452f344c344c474368326a327957332b793978546548574c5457375432784e6f2b416434336d662b564e48506635686a7976453731314c2b43776c30324f364232477a7966443276794c5a38416e736c6449387463386632386c6f723057346a774d4c663830674475754157516a716e436a674a66546e3457657a773844467041445a674d73667a4c727934476158706d586b35337a6d79384349325659512f44754a4245506d6b6b6349436532342b2b647465594a2f446f796e6b6d5054724d79784e324e594431547a3176576d4363756f504e4f30654a6c5942654b724d77623949574d6631734c35574476756d642f4866696d2f46464730633064695a323379583936577a626a64394c67704e6458302f7272793959706e3665487a526a3879414b6d7a65413147467a41396e515a5a394c616a38697a736972305246356e66694e654172367062685261497076534a30504e76774e35706e4733437a70595765634d5a7674784f4c4b416737454f6854722f6255516d38507a6c427135356a6a7268546d53554347545a48553437356644384a7579643446566c4533686537477669746965416e626c6a50657a6535554b72554f655069437a6744765a302b357035393053667a49665947495a79616432756f674a734b41626b626c4256746d4e6e51356b325a327a696d5770474c78684f5a4744334b373237696349744e6d52505946777867664f486f4f7a543567786b6e386768354a625653656579545348655553316a5668524d786e30364d6953795a35766245327735674f7a4d485279535a7a342b4f5a744d6f6d626c694c4a546b445a456d7958776c504b5a5963367937534146484b523647676f3334353951576b335870724e546b57566f41427a506c4652614d786845744e78676a536d767652716d395771557a59694d456d5033436a2f78396336516268636c3252324668514a73364e6c354a79447a7478707579715a36596d3236647541424c6f4b696b35326846706e6f576c514c4c74755a39306c666464307a52304e714457754c7376523056566652435a48527348794f45764a523632695470424b7a73394572637a6f74444156562b6774746b4955746c5133366850564e46306e614c466e434e6d4a6e5552365136664b6a6e743756674b383838455766725333356d783641796353316f7a6152706251684c376e623033677739477252704249416939783779763553356b6347443171357353566b706147796b68666e7431753161455a44664933763561305136635474447876634b6531634a6e4e5941496b343073775a38685962624147487649324559386f666449754a504e6a376b677379745872666b646b6e3070706d69314d792f48417763364a4c6679654e334136516a544932594a617a32374e52704d2b5a347a3072746f5376675457447159793770724f442f483143583533616f7758726430456a76784f78556b686443375557636a626e76493435344d6a5879534569682f5270506e4e48647555776333654a6b56545a31414e6730527a6d41487845324635796938476b46674579655273734158655855484c5353796b52784464485062444c6763472b4177735a3246784a6f45773732724f4c52354b68676179704a31456850512b424c325231354b36706c445a6e2f6a584f367132416b56476349716c4531626b4f534e4f724a614c6a52796d42337376644d4c585271794c4c686d6e5675537478564a4e7a326e6d6376646a697741476f5978464972787a7a4e54766943757a454b664d513436685a51473344486c65634169625a5136766d39674532623345326c545a48474f5262624872557932306e7746355367316f314d347569617947725a3344314975666649312f416a34752b625753673070576e7332663156566649334d6b787150664f734b3874315a6f37546f4256785a7632596f647268627845666e71684e656c6f4956664444724e725a3249486e746251676759774269794e45686b565a6a524c614a314775556e4e675473683654526e50516a4d6668357864523559327466594f45724b63666d54313042334b4c6b337330324b7478356b44777142574470617863697548446c51435a5a55516b58554f614675677a566d566d593771657742304c53732b752f696932456a784d6f4471496f7a6e497372756661503951696e4a3167613972383774534b6e666e31564151314933746f2f314f366a466f7675746436466f676466307633754432543135575475644b6f6255764434474e746f7359305857784670545242634b31513232694d527668345956302f4b4d305a4774424c4c2b78314c3766656777584e457a72585867484a385547583653744c59775264794f57506c5962386350797441615a63465073456e736a3075634e6537414f314147504978464f566937544239325772566d2b594b4f4e666e6e536c33494b316a4b3975317767497330305769784d58656e4234786c6a636d4358637866675a387177466d4b626d37624272624b672f6e3467324b66525a6345506873574d337149544a6238543379346f383066566955517570796c594354535a6e7742384f692b4639645358492b7a79675042434d5a6b316f436138594f4554376b61645a6750775432712f575536466e676f33614e726f7373334d5976754d364f42587a6736755447595636596d6f67723366526d4a6d522f70587a69516a5263774348743954687762707571526e667361326a6c6e6e476f31495562484b46432f5a767644794c56364f4d4b784b4d57445747377742784c6a636e702f426d316b5161384b5571474a6b777542513643334750663849696a5138687272576e62434c7657594a6b4f6b3956396d657848774c4a483144334744724a76374a666f5870306253774d6657746472724476592b3279374e4737626174334732586d3946366f71373558692b733767734e6b784b4a2f4d4d4c336565536956467a4a7264567a6d617566414a716873544637426a7a736e78704d353161746d4d487968516d75527978566376576c7a7651594b416a754267537866483238574a5770576e36394746477467465777764a7176645649704132427755586b66417243634c7753385a64323145704164384d616a58367a6e456f30623773386d6332637446706b7977652b7865433779725a2f777a4c6d434c6f5665455a367455655a6c2f6273426a376231696f6535715744305533645071667a78396a787536667a4442584c6c64346a72576c6e624270733468722b6e74474831392f67594b594e7739382b746859684f7067555163315339643562364142794e32764b66764b36486c78734c2b726b7249632b554e5563385561434f7038346d336a4957734a627830506579566c667671666f793731344d326550795a3135756d35466d43683273756d754b6a42744566554176353259386f4762652f6274764c50676974433867766138636f7546745677504f76734a6d3464794d446d2f5547375a65766165562f5037627a314a766b385233366d33666456355a503250367544316a706b616f5372622f557251636e6f7a557a5a32572f37344e64434661396632427542397465386b6b4a51504c6d65504d487968595065733266392f39427233672f6248336f434c31716f325639475777527733376e34334f2b325a6965487173396c4f43382f636f68737670793073635934786f6d667647446a4f797936394d43494b35565437646650506d434950523548726578574f50323634664967773234794f50324a773631396843446a76486e50714271584d6c6335483337593263743776786f736646472f4a4f58704738332f6659356e2f4d356e2f4e587a722b6b314f7273555564796f5141414142706d5931524d4141414141514141414741414141426c4141414144514141414134414751426b41674635593737484141414a71575a6b5156514141414143614e36316d73754f497a6b4f525555515847675238454b4c514d44776f687159786d41616a5a6e2f2f376f68377955567374504f563256485657585a615a744866464d4b742f6156613850566676385365535a6f6d396450454e346974755671332b49736e7844745a4479586e3566496c773038483872527a5259454a5637716f76776d323766737a6b3866765a754747744e676c2f744c3976596c446636536c454e5a636d675131426d623948615479317635426669554e376274426d6c53537956424a4837357239367539775352613275644a74726b746e334b417a63316731556b42496a384a346a2b7833382b4545514f36363272784e72646e4e64504f414e6d50787a524f78525236316839505047666677644255376f63562b73613737756b752b786a62327953463033502f775551425134456f58536a664250456b78787572453970344a384e7134644d45417871674f71507a4a77413661476c4c364948344f4c7939544f4149495472474a746846562b6b72397945426774355166444c4859586e505a77567765434154366c4137796b4d424b753444667878443063594366367758525758617845496437646173302b704541424e61626e714950564a774c385742466770354239486b41507763527778524c6a3639437a4e307846495159322f76553064384a3551494d724b68385576777769466f514971625257574561467a4c424b414f6944506f5541434e6e6b665141656150435634784a5a72534a69582f79492b4651463765393846475939706568496f3034306c3847696c524e763936596b775247786b394f762b736977623769794130526557726f682f4c51674638446333354b5137384759765851307a774c4f5a61464d50553634374461567755342b7233544a364865414c61426576662f4c4b303245614375776d39365a4b7165574b65496d454248525544665875633758324f7059697757514d515269324c6d65775172796c375669626b4c722b767075794d4c6f4f59644e725a4d4d7251695338444355426a483647553563735557494c51514f417051524139656235344c456b386735426e57424a614248644e41724c4b76786856666f3843364143754646453950434b49563661586743694b4c6f4b515644364542654c526f694a6d73534d792b4b7138494a7941476e77686b56706575486f4453714547794c734f354948463049724667377a344b3878426c7854474b6c376d49644a41624258414b726742426f5a4a64385975786c48576f5563396b4c42396c6b41424951757132307361487556614563477a5578527555747053776349656b617751654337476c61457848756d67757937326341624e524f57786c472b6e6b6d5865414e426f63737434797a53755a5a31325a345a79424868346a5a544f4b566b314662616b594143712f4c4c67626541746f37797a5a544c717679324a593849695561436773447136644b5a47446b6c6f5778416d31384a6a484a526263366658353930554749395272465944697955306b47592f73436f5647576a2f536f69756835556f4878356f3042384a6b4a3049637778706f63797145437a5254446c414c6a6d3231546768657331314e6965644c504256533956776a425449474b6a487352345653324356757842324a6c395159636e5176372b47456a627a68617671514b4d77475254754676706b6d614c2b41523465364f56344869473243375043494d314f58496d584e7a37536d4339693955316d626e6e37746d6c373577775930726a2f425470746a3068654a314342474b5a7971374367686532596b78466647674e4e50375541656145444c7365526f6f5839596b4b376f65647661775a34333869454538687556795a565259786645306a635637756d4e65653253674965795a523243492b75784955453030594a324a6c4e7265596b70787735474154517a4541542b7246786f715744622b5451455332613251547a46514e5670474751574476432f764879497773664176596451556b415178757052446d486531424d392b69416f475130325a4978366a78416e415373694f774b35514f6b61614e65354a5741486a5757494135534c4c5337724b3953655571316567735668326e397a49546c74356f44666744745463474a4f376c464647716e444c6448492b3162733939416164617930547235577564737a5a516a5a3068564441537369646c7562633746624276336175574a5344364d6e56592f43435a4768325448667875792f79685a595a37415063655771314c57526d6935534f544a7946726e324b4c6c6b61374a35774158586f7a4e38624c434b66556778614b4774746e76434a53504265524c3531756d6276664f51635363456e434b623971744d364d6943424d77687a47517173574b63475537396c444e5a7671334e5074525667416b734d6943746b59574c6c5630796f336f49696a527a614f46787a707759627a63343474514a3463714c45446e4a55534b2b397a7a423756306747414439416761377830722b636b55344b7769353637533670757938526937416f574132754b5a3871786b335a4f3773764741724e38332b6e7063457343794764477a63794b4251775a6c6c566e5148723641555942577650636f5554416b7466733274696c6279306a5073746d507939753854444b314c3670645a767a57414a4d7a736b4c64634b524e305a49416b4b444d6737336b46576c325368316a475855573861394a54687a323250634a706b656a4a59456f4e57634837537a68735931526c6938484b7a394c6d7458486858774c554a736d2f2f414248454334475364515745725a424a4b75526b502f5453595231793650784c45495536515377466d484d307a744e796a3053566a704265714b706e6b77315a484d374838424d517856565447517769344f77635257384a2b626f45686e6d374c4a71645a6e546874592f76523645547543585543377174524459367a6f393935645378626531786e666e456f597941624165486f553445695246535377465a775435683546716f4d736571735056565051465351574549417476754f4e6f367359316c46632b794b61355247526b76376a686341744978514c7933453250347a4164766a5548476470624b613559534d4f6d5051424537356a5139346e45524e754e573550514c304773564253336275434d727465524a7071552b46574d6848637a6f4278743738333064416337634d72526866476563777a2f4f466b616d53386f31376438762b77584d33333053376a5236504b3769505a4a54494f6c434d326133545748794e505455485a573979497964796e766d3841577831446c4c645946546b674443504c57515a3765633232702f2b3656564c70777236444c446e2b7249306a62454b57302f41357441304f776332515471776e76395a6a7364764158335a63304e5756564a75635765686e6c6e534b3654794e3450446563644734524641517037395a65684d416d4e396e4d765076524a3341786b566b58393475585043766a795a3337566945554d734972774f586d4b52593537386f687a6c55617077423945525954692f66516d59645654505961634b703831425073583379757a61383859774142324d59393954414f4e554c44477a6e5a3837747577374f697548316e4578374668626d47634843726e3146683555354a4c6b6e74467251332f57766e2b5045794132386d6a364757444c546b36466451474d75572b324b58326463724b326f36704c6666444a6d6375325a667a51514e79745a437a566347547a5647574b48314844744b6243584a6e6f397679456e374d314278624c78304d7936374c72684f52526456777a58535a67304e4a507a3733694873552b41796a564c385a6a6c3250656c33615a6f7437415235534d6c2b64716c306e49513632637637442b58505636464462473362473044463748797a506d4a4d7a5461396f615959476c366167422f596e30496f693863377569434f66596c74364d47572f636e63716e5830614a7656544576582b76416f523950524b734c6171756136365834594d782f684463514241522b6642474d41653938596834734972716a437158763076656f66335544653249705845635235365756534c56434f614d7359695076517a6c74382f664c3866646b4448503578684c786e496365566544414f72466e7562353073317233724f734d6c427a2b663050314c783948794c4c6a50673141745041376a5a582b52446e3239646a7950304d2b6a5743544e4f6b58476261784b5830792f652b7072424e5176614653444f6b6d6834524143583938753176515777456d4d79374f556a6b4761667a797750662f6d344643682b506b31475178737975355a734a762f55646a69494d4e6f424b7376576244372f352f5a4167784b784541744e342b57624644337a4878516b4868715739562b583455666c566c2f793637547a792b6d483538366a454f5946593764392b6a44415261327a2b6d507a6c617a6d586e34724f447a6a2f6c5077375176754872752b492f7a3835535a637276663934575141414142706d5931524d414141414177414141477741414142784141414143514141414163414751426b4141477456644f324141414a37575a6b5156514141414145614e36396d74747149306b5368704d6769497545516a63704b416f68476e706857426747647666393332307a2f6a38694b30743257374a61367070756a393232363873344836704b2b643631354658656669337a3953645a623659353442545875326b544b6e462f697656573267665747326d667346354a45376e4841713238696959544c4f392f787656796d6d684e336937592b5878444f796a67643268624e657333577a3679426b324b4c4b2b7745326a56744976585966336a7a417161724f56707966346a73364536544a326d6e58655357713579432b7573357955725639785a6a6a51522f38642f31584b5241307a6b556b6f4e6d4679666f5a6c4263774a336c482b6333762f724832396f49707656556c5863495a636946336e434b62614f71785543716c564935562f306a33383754594d6b323857712b7338684a37737a796264444378644e7866384c67416f3061454b536b57554a36777239766a397546376553337838306733673451662f4d724e4e4163756e376753706833626850774278336f622b37357672687530516d564b726632326e39366f6246312f30674a37413637446e61706c41694e4e663131442b76626a676a725839614c6f7172532b653437697071785a36436164773570484671485454384c5536444a7032316258364b3532434650684247437856574f4b536677502f554d6d54447a3768676e747165636366644c526e50764a395461557a7a414b4e73794338514c474879485258365055772b7066556f53464f534e71372b44786177362f64456f32463247752f664653727768677935737659766435777871682f4c4a444a66436c64496d4e46324671627a763856704365732f5842442f4c74686a6c6f4f713442555231454d2b55386f54796d5371726e3535356b5a45644a67367075666d4232464b2b3073314f616f7a43476b362f785a7041617649584e6f7236635565394241505a6d6c4e344e716c7968344151466e6f6c376b534b614e366d57445337724b3533692b505270736e48576c4b476e6831643873716b544c464a706f36444d64796d4f72566b434966615578413030367a6f4257504869714f36522f3273307a4c50636f6747733767695579336e7257364d6a6435544c59756d744f5539736646784f573339427a4a364934696f4a58466e593059724765654b7556525262725a504b777141685558584e514667677278782b672f58514e515a48585639563841374d484535614a31476f32436b6d574d682f42487a6549446e614c49394434494e495144713449663771476733734c35526d7151517971784d4a696735766b35514f4e50465a774f51533533576d565a56374f4758394a4946465367387673523448455541303068347a583831644e494876463072384e7a6e4c744847616b6a376869526b43464f47677142796f384f762f6f42536b584a59586a4c73515039484e6663745170704368717a66436378384b4b4c524f71436c44384337696b727933662f2b6e4b6e532b42787574394443445a7876474d46626467507257536d7276496a36616a6d45493073755a754b3365306e326d6a747167754a6a44684b484d4d62734576386d41717364726d3465463959625946596c47624b56496265436c48674f636e72534a593461726f366257576b2b306c674f576574587a6e6b73724b393052414e696d4a674b31784661634a6945797067765778546b33416175756f713932694e6463546a3039326a31706e47584f796e4c6a4c69764a747a6c627179532f654f6c76326c682f5a7968395a7a4b4c77617831645753435a6a31796439302f314d73386e725833615964567134623356462b6a66316a6d6a646269747264444847313844424c35325362684456414846784355567946716e6f62652f7030576c72424b7a72792b387a307852646e69765166573455626538694f32324c5a7338484473426977506e6c726f505a4e70716453687078305a34676371484b6243495549653830316e53336c34386a69506866626451342b61773677344947487364646846464665644f4962632b496f4558483769533058414e326931753445704256643170554e4661316c4d3354512b463857424947727a4157436a626a72416972355035752b59796c575635514a5332725a363270536f6855616b7a657758542f564d37654373395864757064545a2b7343344e31637663516a74434973776a716d6e3669593659427472437975576847577454584b4645473057356f79556f5945796f47694d3668624a50644a454b766f694f477a396a5568326d715a38426d326d43647368574e77517a6577535a6b304349764b306271554f795274734e364f723364332b3273303954364b75576a4672305731424544384c676539346a48536a4f4f6a63626f6e776e4c565644536b6e552b523554746b784b6e45382f317049334731615574486e4a4d4e5458364249334759637a673630796242447348544b4c6852704a7444524a5a46754d3047776f502b6f44434e6f746a464d344278346d35414c447a4c74724f4f7175786775305a48524c564d63363062476341673833514247534c336a306d757275386b5a776e576772477259335936424d6a57466a567a4165415144473832533155546b76545949663571613730456a666a42356a76765078636a4e3452785836774a733069437a6151776d3551484936687358764b573044626c2b68533550774246684556366233754638647a7448633532355a716f33634e6d4d6e6570534a58646679563376554a7a43564c425849586b4a57467a5943324e725849553573384f58794d6f3862783158536a702b3137304231324f6f2b3554784933674b323568644935744236797863796d594831453837584954335250423959635a53684734567732417763746852362b5648656c6473384e312f4541374d424f32316b374c476a6e73667a544d565054684b324631544a4c6d73536e4a5664344c6c6241664f587057627472387369616e6832525a6c4e596a5255485544523546472b4e624d6d70686a74354770337a7643627375503966356964563258795062756267455731613665446159356b4e4c49504443484d6e2b6643733455427a5479654e70657849477a4874496a617837423571714352676e7358384f4a74386647517a6c5a69325259364e62423874716c38744a545661786e713447315a4d4655316d4379307958763461734e757559426d5647684d4363646b514447444c505a4d47664c414b502b45366b684a79424c312b3175386b54532b656f4451354d5a476c7938524733454c4f6446566e6f6444754d474d7638742f723873576a3032375370686c444d3238666f4c686a6168474b77544c7561537a7148336537707555582b7844434d46446d454773794e315a74644365685548365066554d4d49623134743568387543663835664b467447727a5a6942796f675674724c466b477166476d71522f2b5666506f6a7045302f72567067636463515177553256723834336e7a65706f4b6b666c77334371445766376e38586f38645667495775643969753462325a387269314763526c52574e4d31343138616836434b5165334c73527130324475484377346159366e745973553879326b73504d706a48642b756e47544b6e5a6c4a3037387849434343636b486e68322f6a6951585359367a3668524e636861666957634e44734a4876645738474d384862474a344356544f6a35423744477948495a6d795837384c6f2b324b42484b334d506d46484464575276545166633044584f553765585a6646314d6e46565278566a727961693577394c2f2b3737544378466f39583773475736474b6f464a316762657846624a446d7a692f71455371523543382b734f426e62694f4e455543667a4f625278765a746f4a726e564d31754f6b365a2b3778377567534175304e2b336951695043716f55317257486f3177484c4247617a7930543132484934614b6b6e6462765a6c765575704942373168615a3632486e77456c4c52596c6b617643726c436d6e6e463274726830596f305874756a7a3575634e70374730445a774c78785a577735466e3543534a743934365143307664304e542f446575423265506f556457794a4f36626e666532793372764d364f74634f4f7375533334624e5776744a684967383852435a6a6a666a626a536e4f72797a7339626665566d6a743172624668765a444e7073567a7576545369664d646666657a4545797339394d4833535745493878724d4a51733561662f372b5379696e6b594d305a36486a422b546a6457307665642f6c524e3270485162672b425450617935626b356539576a505546777847395541337641487a71686575534975363569474e734e624e6e6166786a5a75587351717231486a366951517966502f5662355831564d4a48496b6951625554797a5a726f7062544741705942665279565830727a58704930706f2f6a767547316c32786f4a7465613265756473487a2b64463235536a326633365a464276634a71786e4879666e64734f55556f366d38583742394544362b6c2f65324630576e35637a625763633365392f2b76753179513376766d385248327276666b563532334239342b3376356b322b616c7a2f4a6d6d6c502f504c2f416247657872436e7658416241414141476d5a6a56457741414141464141414162414141414845414141414a414141414277415a4147514241566d456b493041414147445a6d52425641414141415a6f3375326157784c434941784657554b792f38303632764b6d6a6a6f3931366e6d2f6b6c48546b4d444a49475533704e6e4a567a6553736d436158654137614a704453726a564379554e724641326f4b46305a617342773242356636333379537447705a6243673263583757784e766a356f2f6a6f7632306234476471377261774247747974564d4261385a594342527462312b437962365a75645246517146514b425153527962434c5455472f496f2b3874456a77434576546e4d7854546a726e335a344e75314a7a67456b434563564e53547a575266776643734a6e4a384c32307944574675615039423246675472615a6c46775670615957477757722b724c4b5a67303947344d52786f71484e4d4c6c6b4d59364f6633545273686833426146594834344e496f57585777307a43346d645a7368364730727161504c677754717832615551327a2f36736761544e527a626746724d34316e4e734d5637464f3036746b50377147354435747253497261574a79776e614d787a3969564841667164514567706454425a44454a2f3766357a4c5a4b386b794d694c546172346a372b65743079565254425a454b30326a494864757831636e494f356a616b70657556775349534e396357754f474f30332f743466644e686d4b7675396734306571487969684e6b344b3638615a3655724a6232775a39762b3767387937724641574141414141615a6d4e55544141414141634141414267414141415a514141414130414141414f41426b415a414141305a6965715141414361396d5a4546554141414143476a65745a72646269504a4459564e454c776f394933516464466f434d4a67463867695342416b372f3930496338687136766c316f7a743864624f7a457132784b2f347a7972703765307a613856362b2f306c6369566f48657337434f3852363754657673535a33694861794c69576e30766b30775965443256765a684f43456d2b314b482b523955743235377633316b78446a57477732336e4a746e784b6733394c7971457332545549366f785632764b5132337635426669514e39623141576c53577956424a4837346a3762637a7753522b3749306d6d6956782f6f68447a7a55444661524543447972794436662f37764530466b743759306c6469376d2f502b41576641374c736a576f4d69616732376a79662b37332b436f436c64397273316a646664306c333261322b736b6f756d352f38464541554f424b46306f337754784a50736271775061654476446175485442414d616f44716a387963414f6d6870572b694265446d3876556a674343453678696259525866704f2f636841594c65554877355937433878624f696d4277774964556f506355426f4a563341622b7549556a6a41522f754e775679375549684c7462626245507152414154576d3536794331516344664a51697755736a6639794148344e64787842446837744f7a4e453944494155312f72526c3649445868414a52566e355a2f444b4d667679517363705759526b524f736369416167443868774b4a4743566e77506f514a4e4c676b6473755961457366774838613449324d6650585a44786d4b596e67544c6457414b50566b6f736d7a3839454961496a59782b33562b6d62634f6442544436777449563858634a516748387851747930683334734a657568686e67325579306f5963703935324769682b4764462f4c4936505841623642487a6576662f4c4b30324561436d776d5a314f6c31484a462f49714542445255445a55666372666c64537846676b6e76676a42636d687a4243764757746d4e74517572363678374b77756736684533766b513276434a4877307055454d4e6f52546b327952496c4e42413041746849413159666e67386553794538493667524c77684c5254614f77724d496656715850737741716742744652486576474f4b6c3651556769714b724541536c443746594e454a4d3143526d58425a586852655541386743623169557068654f587146437543484376694635734242617358475942332b4d4d654361776b68746359432f415142374261414b5471435255664b4e735a74787046584959533855624a38465145446f7374724768745a5869625a6e304977556c564e4b577a704130444f4344514a6674574248534c7772465754627a447065714a6d774e493753465a6c3069546351464c6f384d7334696e577462742f584b514934494679386a68564e4b526d326c48516b6f7343702f4f504152304b57686644506c734b3561636f2b51574568514546673958546f544936636b6c41316f383063436f3178556d2f506e3934734f53717a484b44624c6759565347676a4448786956716d77736678515258513871554c36385579446545794536456359593030495a564b445249706879414e7a7a5a53727777763065617177583361787a31314f564d4d7755694e696f422f376a70566f4572646943734448376767355068507a744f5a44576a5331655577555967636d6d634c66534a59744e346850673759315767754d5a59707463455470726375524d754c69316d634236463774625a4f536575326554746e48436a436d4e38314f6b3233704238447146434d51326c56324642533973785a68714566453130506854423567544d75786147436c2b715263717542383239724c46475038446758674b7965584b724c4b493458736169664e79773778325a614d67624a6c455959743437307949624b4a78496c5a476334737079516c37446a597846414e7755533957567252732b49304549724a6449357467706d7177696a514d416e7466324439475a6d54686538436d4d79414a5950416f6854427661412b612b525956434953634e6b4d36526f305867494f51485946646f5853494e4631344a6c6b4b414d3861437a41485356626154645a337156796c4770334671754f30566d624331686461412f35413759304269576335525a51717030773378334f74322f4a63774b6e574d7446612b56724872413355777334514b68674a325a4f79334e744a425a78627436706c4359692b5442306d5030696d52734e6b42372f624e48396f6d65454d344e6c44713355704b304f30664754794947547455787a52306d686e776748517154667a5944794e63456f39614b476f735733454b794c46637848353075695763666f6463794142747951633871744736386949434d496b6a47457374466f694a5a6a794c58756f5a6c4d645a37717443424e41636c6845496573644f37647157755547464848307949586a42556436734f48386e474d4c6b44634861757741523658457a7473597333753164414467417a544947692f64367a6e4a6c4343636f7366706b7172624e4c455975344c46774a72696d584c73704932542b33537777437a664e6e6f36334a494138706c5249374e69413132365a6458706b4a352b67464741317278334b424777354432374e6b377036317447664a624e646977653854444b314c6c706154626d73515359484a4d58366f516a48347951424951475a5279654961744b7331467137394f6f4e3431375533446d7363643454444c644753304a514b7335336d68484459335665316938484b7a746c4c557a6a7772344553474f7a583969676a6741634c4b4f6f4c415a4d67696c3349694864686a4d4979376448776e69454366497251416a6a73596457703752364a4c65307774566c557a7934564a584d374839424d5131565654475851673433594f495457452f6a7341515437646c6b394f73547079326366785936455365435855417a74576f427366523055396537645052487576494c77356c4447516a494278394b46434569456f533241724f684a466e6f556f5871383761557655455241574a4c51526750586530766d6364797971615931657358686f5a4c65306e586744514d6b4b397442426a2b363845724d394478583255796d715741394c726a6b45544f4f5176664d44724a4772436f38376a476144334b41356173764e45554737506d30684c66537245516a3661307745773975622f50675065334331644b385a6e786a484d383336685a36716b664f505a33624a2f384e374e443946756f2b66724370346a4753557944785239644f7330466e2f486e707144736a65356e684d3537337a654164613642366c753043747951426a58466a4b4e39754d5937552f2f3871716c51775739416d79357679784e76632f43356875774d54534e7a6f46446b48627335332b57342f4637514a764f334a42566c5a52483346476f5235613043716e3853656477336e4251654161516b48642f4754714477466a76782f627a724d545451455a463542392b335468683379376d643631597842434c434b2b4c6c39686b487a652f4b4564356c536f3851545245474f357658774a474864566a324b6e4361574f51542f47744d72764f7644454d5141666a3248634a594a794b4a576130382b50456c6e3148522b58517569364748657349633357686b45647634555646626b6e4f6a4659482b7150322f624d66414c476556394e58674455374f5258574364444875646d4739486e4b7964714f71693731786f73376c33584e2b4b47426546724a574b7268794d6174796844666f345a70545957354d3948312b6f6166737a55484673764858544c72737575453546353158444e6442714454307066335876455a785459434b4e5576786e4f585939365864706d69337342376c497958393271335163684c725a792f73502f633958775631767670576c6f36312f37796a6a6b4a342f6161746b5a59594776616130432f6b4634456b5a3938584647455932784c6238614d31302b3338756d58586d4a764658452f2f3677436847322b4571776a71733537726c2f444237332f4b6667415155546b6c783845633944727a34676e7136694f71484c356d2b516e74422f365144746971652f376e72646c6c556731676a6d6a542b4c6a4c45503562782f2f7642796668765278503864594d70626a794c736142464176746a5450707a3638356d655756515a714c6a2f2f673571336256316b6d68452f52324161324f6c776c513978763333667535786e304d38525a4a676d35544c544269366c333737324e595631454c4976524a6f683158535041436a707479392f4332496c774752386d6f4e45486e4536766a7a77356539576f5044784f686b4671592f736d72365a38467666345368435a774f6f4a4a752f2b6643623377384a5173784b4a44434e70323957664d4e33584a797759316a61576c574f6235566664636e58592b4f56317a664c4831636c7a676e4562502b3362794d4d7842796233795a2f2b6c724f37627569387865637630762b696644324e3632766950382f49333675417a666f58745141414141415355564f524b35435949493da264697066735822122001dacd6f3c5417c7ca6e1dc39b51bef93b04dc1f32148b551415c6ac7f28704464736f6c63430008070033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.