Address Details
contract

0xfe84474A7c1Fb5f4494a7aAe98788490EF688B88

Contract Name
CASProxy
Creator
0xb156c1–ebc770 at 0x07fb32–eb7ea0
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
6 Transactions
Transfers
0 Transfers
Gas Used
845,690
Last Balance Update
16133060
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
CASProxy




Optimization enabled
false
Compiler version
v0.8.7+commit.e28d00a7




EVM Version
istanbul




Verified at
2023-02-01T16:07:26.885449Z

project:/contracts/CASProxy.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8;

import "@openzeppelin/contracts/access/Ownable.sol";

interface IRegistryManager {
    function createProject(bytes[] memory bytesParams) external;
    function changeProjectEndDate(bytes[] memory bytesParams) external;
    function getProject(bytes[] memory bytesParams) external view returns (uint, uint, uint);
    function processClaim(bytes[] memory projectOutput, bytes[] memory bufferOutput) external;
    function assignTokens(bytes[] memory projectInput, bytes[] memory holderOutput) external;
}
/// create project ["0x5b38da6a701c568545dcfcb03fcb875f56beddc4", "0x00000000000000000000000000000000000000000000000000000000000000fa", "0x0000000000000000000000000000000000000000000000000000000063d98c57", "0x0000000000000000000000000000000000000000000000000000000063d98c57"]
/// get project ["0x5b38da6a701c568545dcfcb03fcb875f56beddc4"]
/// change end date ["0x5b38da6a701c568545dcfcb03fcb875f56beddc4", "0x000000000000000000000000000000000000000000000000000000004c11bfc7"]
/// process claim project output ["0x5b38da6a701c568545dcfcb03fcb875f56beddc4", "0x625f30303230", "0x00000000000000000000000000000000000000000000000000000000000000c8", "0x46435255", "0x6578616d706c652e636f6d2f6d657461646174612f6d2d303031", "0x5b38da6a701c568545dcfcb03fcb875f56beddc4"]
/// process claim buffer output. ["0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2", "0x625f30303034", "0x00000000000000000000000000000000000000000000000000000000000000c8", "0x46435255", "0x6578616d706c652e636f6d2f6d657461646174612f6d2d303031", "0x5b38da6a701c568545dcfcb03fcb875f56beddc4"]
contract CASProxy is Ownable {
    /// initialized registry manager contract address
    address private registryManagerContractAddress;
    /**
     * @dev Setter for a new registry manager contract address
     * @param _registryManagerContractAddress the new address of the registry manager contract
     */
    function setRegistryManagerContractAddress(address _registryManagerContractAddress) public onlyOwner {
        registryManagerContractAddress = _registryManagerContractAddress;
    }
    /**
     * @dev Get the registry manager contract address
     * @return projectAddress Current registry manager contract address
     */
    function getRegistryManagerContractAddress() public view returns(address) {
        return registryManagerContractAddress;
    }
    /**
     * @dev Initialization of a new project
     * @param bytesParams (
     *     project_address: bytes(address),
     *     project_id: bytes(int),
     *     start_date: bytes(string),
     *     end_date: bytes(string)
     * )
     * @notice All parameters must be passed in bytes and opened in the contract as the required type
     */
    function createProject(bytes[] memory bytesParams) public onlyOwner {
        IRegistryManager(registryManagerContractAddress).createProject(bytesParams);
    }
    /**
     * @dev Function to change end date parameter
     * @param bytesParams (
     *     projectAddress: bytes(address),
     *     end_date: bytes(string)
     * )
     * @notice All parameters must be passed in bytes and opened in the contract as the required type
     */
    function changeProjectEndDate(bytes[] memory bytesParams) public onlyOwner {
        IRegistryManager(registryManagerContractAddress).changeProjectEndDate(bytesParams);
    }
    /**
     * @dev Get project parameters
     * @param bytesParams (
     *     project_address: bytes(address)
     * )
     * `projectAddress` parameter must be passed in bytes and opened in the contract as the required type
     * @return projectId Returns `projectId`, `startDate`, `endDate` of a given project
     * @return startDate Returns `projectId`, `startDate`, `endDate` of a given project
     * @return endDate Returns `projectId`, `startDate`, `endDate` of a given project
     */
    function getProject(bytes[] memory bytesParams) public view returns(uint projectId, uint startDate, uint endDate) {
        return IRegistryManager(registryManagerContractAddress).getProject(bytesParams);
    }
    /**
     * @dev create claim for a project (give FCRU to it)
     * @param projectOutput (
     *     projectAddress: bytes(address),
     *     bundleId: bytes(string),
     *     bundleVolume: bytes(int),
     *     unitType: bytes(string),
     *     metadataUrl: bytes(string)
     *     projectAddress: bytes(address)
     * )
     * @param bufferOutput (
     *     bufferAddress: bytes(address),
     *     outputBundleId: bytes(string),
     *     bundleVolume: bytes(int),
     *     unitType: bytes(string),
     *     metadataUrl: bytes(string)
     *     projectAddress: bytes(address)
     * )
     * @notice All parameters must be passed in bytes and opened in the contract as the required type
     */
    function processClaim(bytes[] memory projectOutput, bytes[] memory bufferOutput) public onlyOwner {
        IRegistryManager(registryManagerContractAddress).processClaim(projectOutput, bufferOutput);
    }
    /**
     * @dev assign tokens from the project to the holder
     * @param projectInput (
     *     projectAddress: bytes(address),
     *     bundleId: bytes(string),
     *     bundleVolume: bytes(int),
     *     unitType: bytes(string),
     *     metadataUrl: bytes(string)
     *     projectAddress: bytes(address)
     * )
     * @param holderOutput (
     *     holderAddress: bytes(address),
     *     outputBundleId: bytes(string),
     *     bundleVolume: bytes(int),
     *     unitType: bytes(string),
     *     metadataUrl: bytes(string)
     *     projectAddress: bytes(address)
     * )
     * @notice All parameters must be passed in bytes and opened in the contract as the required type
     */
    function assignProjectTokens(bytes[] memory projectInput, bytes[] memory holderOutput) public onlyOwner {
        IRegistryManager(registryManagerContractAddress).assignTokens(projectInput, holderOutput);
    }

}
        

/_openzeppelin/contracts/access/Ownable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
          

/_openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
          

Contract ABI

[{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"assignProjectTokens","inputs":[{"type":"bytes[]","name":"projectInput","internalType":"bytes[]"},{"type":"bytes[]","name":"holderOutput","internalType":"bytes[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeProjectEndDate","inputs":[{"type":"bytes[]","name":"bytesParams","internalType":"bytes[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createProject","inputs":[{"type":"bytes[]","name":"bytesParams","internalType":"bytes[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"projectId","internalType":"uint256"},{"type":"uint256","name":"startDate","internalType":"uint256"},{"type":"uint256","name":"endDate","internalType":"uint256"}],"name":"getProject","inputs":[{"type":"bytes[]","name":"bytesParams","internalType":"bytes[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRegistryManagerContractAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"processClaim","inputs":[{"type":"bytes[]","name":"projectOutput","internalType":"bytes[]"},{"type":"bytes[]","name":"bufferOutput","internalType":"bytes[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRegistryManagerContractAddress","inputs":[{"type":"address","name":"_registryManagerContractAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6111898061010d6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806389d8dbb01161006657806389d8dbb0146101355780638da5cb5b1461015157806395c581841461016f578063e652cacb1461018b578063f2fde38b146101a75761009e565b8063091a42ed146100a35780632094719d146100bf57806334c10083146100dd5780634bd0bb881461010f578063715018a61461012b575b600080fd5b6100bd60048036038101906100b89190610be1565b6101c3565b005b6100c76102d2565b6040516100d49190610dd2565b60405180910390f35b6100f760048036038101906100f29190610b98565b6102fc565b60405161010693929190610e86565b60405180910390f35b61012960048036038101906101249190610be1565b6103b9565b005b6101336104c8565b005b61014f600480360381019061014a9190610b98565b610550565b005b61015961065c565b6040516101669190610dd2565b60405180910390f35b61018960048036038101906101849190610b6b565b610685565b005b6101a560048036038101906101a09190610b98565b610745565b005b6101c160048036038101906101bc9190610b6b565b610851565b005b6101cb610949565b73ffffffffffffffffffffffffffffffffffffffff166101e961065c565b73ffffffffffffffffffffffffffffffffffffffff161461023f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023690610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663091a42ed83836040518363ffffffff1660e01b815260040161029c929190610e0f565b600060405180830381600087803b1580156102b657600080fd5b505af11580156102ca573d6000803e3d6000fd5b505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334c10083856040518263ffffffff1660e01b815260040161035c9190610ded565b60606040518083038186803b15801561037457600080fd5b505afa158015610388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ac9190610c59565b9250925092509193909250565b6103c1610949565b73ffffffffffffffffffffffffffffffffffffffff166103df61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c90610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f11ba5d883836040518363ffffffff1660e01b8152600401610492929190610e0f565b600060405180830381600087803b1580156104ac57600080fd5b505af11580156104c0573d6000803e3d6000fd5b505050505050565b6104d0610949565b73ffffffffffffffffffffffffffffffffffffffff166104ee61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90610e66565b60405180910390fd5b61054e6000610951565b565b610558610949565b73ffffffffffffffffffffffffffffffffffffffff1661057661065c565b73ffffffffffffffffffffffffffffffffffffffff16146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389d8dbb0826040518263ffffffff1660e01b81526004016106279190610ded565b600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61068d610949565b73ffffffffffffffffffffffffffffffffffffffff166106ab61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890610e66565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61074d610949565b73ffffffffffffffffffffffffffffffffffffffff1661076b61065c565b73ffffffffffffffffffffffffffffffffffffffff16146107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e652cacb826040518263ffffffff1660e01b815260040161081c9190610ded565b600060405180830381600087803b15801561083657600080fd5b505af115801561084a573d6000803e3d6000fd5b5050505050565b610859610949565b73ffffffffffffffffffffffffffffffffffffffff1661087761065c565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490610e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490610e46565b60405180910390fd5b61094681610951565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610a28610a2384610ee2565b610ebd565b90508083825260208201905082856020860282011115610a4b57610a4a611088565b5b60005b85811015610a9957813567ffffffffffffffff811115610a7157610a70611083565b5b808601610a7e8982610b28565b85526020850194506020840193505050600181019050610a4e565b5050509392505050565b6000610ab6610ab184610f0e565b610ebd565b905082815260208101848484011115610ad257610ad161108d565b5b610add848285610fe1565b509392505050565b600081359050610af481611125565b92915050565b600082601f830112610b0f57610b0e611083565b5b8135610b1f848260208601610a15565b91505092915050565b600082601f830112610b3d57610b3c611083565b5b8135610b4d848260208601610aa3565b91505092915050565b600081519050610b658161113c565b92915050565b600060208284031215610b8157610b80611097565b5b6000610b8f84828501610ae5565b91505092915050565b600060208284031215610bae57610bad611097565b5b600082013567ffffffffffffffff811115610bcc57610bcb611092565b5b610bd884828501610afa565b91505092915050565b60008060408385031215610bf857610bf7611097565b5b600083013567ffffffffffffffff811115610c1657610c15611092565b5b610c2285828601610afa565b925050602083013567ffffffffffffffff811115610c4357610c42611092565b5b610c4f85828601610afa565b9150509250929050565b600080600060608486031215610c7257610c71611097565b5b6000610c8086828701610b56565b9350506020610c9186828701610b56565b9250506040610ca286828701610b56565b9150509250925092565b6000610cb88383610d44565b905092915050565b610cc981610fa5565b82525050565b6000610cda82610f4f565b610ce48185610f72565b935083602082028501610cf685610f3f565b8060005b85811015610d325784840389528151610d138582610cac565b9450610d1e83610f65565b925060208a01995050600181019050610cfa565b50829750879550505050505092915050565b6000610d4f82610f5a565b610d598185610f83565b9350610d69818560208601610ff0565b610d728161109c565b840191505092915050565b6000610d8a602683610f94565b9150610d95826110ad565b604082019050919050565b6000610dad602083610f94565b9150610db8826110fc565b602082019050919050565b610dcc81610fd7565b82525050565b6000602082019050610de76000830184610cc0565b92915050565b60006020820190508181036000830152610e078184610ccf565b905092915050565b60006040820190508181036000830152610e298185610ccf565b90508181036020830152610e3d8184610ccf565b90509392505050565b60006020820190508181036000830152610e5f81610d7d565b9050919050565b60006020820190508181036000830152610e7f81610da0565b9050919050565b6000606082019050610e9b6000830186610dc3565b610ea86020830185610dc3565b610eb56040830184610dc3565b949350505050565b6000610ec7610ed8565b9050610ed38282611023565b919050565b6000604051905090565b600067ffffffffffffffff821115610efd57610efc611054565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610f2957610f28611054565b5b610f328261109c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610fb082610fb7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561100e578082015181840152602081019050610ff3565b8381111561101d576000848401525b50505050565b61102c8261109c565b810181811067ffffffffffffffff8211171561104b5761104a611054565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61112e81610fa5565b811461113957600080fd5b50565b61114581610fd7565b811461115057600080fd5b5056fea2646970667358221220fc774f945c89f73b3d54623d6db47267d684c0487be824021b5fc3d74a13551164736f6c63430008070033

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806389d8dbb01161006657806389d8dbb0146101355780638da5cb5b1461015157806395c581841461016f578063e652cacb1461018b578063f2fde38b146101a75761009e565b8063091a42ed146100a35780632094719d146100bf57806334c10083146100dd5780634bd0bb881461010f578063715018a61461012b575b600080fd5b6100bd60048036038101906100b89190610be1565b6101c3565b005b6100c76102d2565b6040516100d49190610dd2565b60405180910390f35b6100f760048036038101906100f29190610b98565b6102fc565b60405161010693929190610e86565b60405180910390f35b61012960048036038101906101249190610be1565b6103b9565b005b6101336104c8565b005b61014f600480360381019061014a9190610b98565b610550565b005b61015961065c565b6040516101669190610dd2565b60405180910390f35b61018960048036038101906101849190610b6b565b610685565b005b6101a560048036038101906101a09190610b98565b610745565b005b6101c160048036038101906101bc9190610b6b565b610851565b005b6101cb610949565b73ffffffffffffffffffffffffffffffffffffffff166101e961065c565b73ffffffffffffffffffffffffffffffffffffffff161461023f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023690610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663091a42ed83836040518363ffffffff1660e01b815260040161029c929190610e0f565b600060405180830381600087803b1580156102b657600080fd5b505af11580156102ca573d6000803e3d6000fd5b505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334c10083856040518263ffffffff1660e01b815260040161035c9190610ded565b60606040518083038186803b15801561037457600080fd5b505afa158015610388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ac9190610c59565b9250925092509193909250565b6103c1610949565b73ffffffffffffffffffffffffffffffffffffffff166103df61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c90610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f11ba5d883836040518363ffffffff1660e01b8152600401610492929190610e0f565b600060405180830381600087803b1580156104ac57600080fd5b505af11580156104c0573d6000803e3d6000fd5b505050505050565b6104d0610949565b73ffffffffffffffffffffffffffffffffffffffff166104ee61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90610e66565b60405180910390fd5b61054e6000610951565b565b610558610949565b73ffffffffffffffffffffffffffffffffffffffff1661057661065c565b73ffffffffffffffffffffffffffffffffffffffff16146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389d8dbb0826040518263ffffffff1660e01b81526004016106279190610ded565b600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61068d610949565b73ffffffffffffffffffffffffffffffffffffffff166106ab61065c565b73ffffffffffffffffffffffffffffffffffffffff1614610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890610e66565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61074d610949565b73ffffffffffffffffffffffffffffffffffffffff1661076b61065c565b73ffffffffffffffffffffffffffffffffffffffff16146107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890610e66565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e652cacb826040518263ffffffff1660e01b815260040161081c9190610ded565b600060405180830381600087803b15801561083657600080fd5b505af115801561084a573d6000803e3d6000fd5b5050505050565b610859610949565b73ffffffffffffffffffffffffffffffffffffffff1661087761065c565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490610e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490610e46565b60405180910390fd5b61094681610951565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610a28610a2384610ee2565b610ebd565b90508083825260208201905082856020860282011115610a4b57610a4a611088565b5b60005b85811015610a9957813567ffffffffffffffff811115610a7157610a70611083565b5b808601610a7e8982610b28565b85526020850194506020840193505050600181019050610a4e565b5050509392505050565b6000610ab6610ab184610f0e565b610ebd565b905082815260208101848484011115610ad257610ad161108d565b5b610add848285610fe1565b509392505050565b600081359050610af481611125565b92915050565b600082601f830112610b0f57610b0e611083565b5b8135610b1f848260208601610a15565b91505092915050565b600082601f830112610b3d57610b3c611083565b5b8135610b4d848260208601610aa3565b91505092915050565b600081519050610b658161113c565b92915050565b600060208284031215610b8157610b80611097565b5b6000610b8f84828501610ae5565b91505092915050565b600060208284031215610bae57610bad611097565b5b600082013567ffffffffffffffff811115610bcc57610bcb611092565b5b610bd884828501610afa565b91505092915050565b60008060408385031215610bf857610bf7611097565b5b600083013567ffffffffffffffff811115610c1657610c15611092565b5b610c2285828601610afa565b925050602083013567ffffffffffffffff811115610c4357610c42611092565b5b610c4f85828601610afa565b9150509250929050565b600080600060608486031215610c7257610c71611097565b5b6000610c8086828701610b56565b9350506020610c9186828701610b56565b9250506040610ca286828701610b56565b9150509250925092565b6000610cb88383610d44565b905092915050565b610cc981610fa5565b82525050565b6000610cda82610f4f565b610ce48185610f72565b935083602082028501610cf685610f3f565b8060005b85811015610d325784840389528151610d138582610cac565b9450610d1e83610f65565b925060208a01995050600181019050610cfa565b50829750879550505050505092915050565b6000610d4f82610f5a565b610d598185610f83565b9350610d69818560208601610ff0565b610d728161109c565b840191505092915050565b6000610d8a602683610f94565b9150610d95826110ad565b604082019050919050565b6000610dad602083610f94565b9150610db8826110fc565b602082019050919050565b610dcc81610fd7565b82525050565b6000602082019050610de76000830184610cc0565b92915050565b60006020820190508181036000830152610e078184610ccf565b905092915050565b60006040820190508181036000830152610e298185610ccf565b90508181036020830152610e3d8184610ccf565b90509392505050565b60006020820190508181036000830152610e5f81610d7d565b9050919050565b60006020820190508181036000830152610e7f81610da0565b9050919050565b6000606082019050610e9b6000830186610dc3565b610ea86020830185610dc3565b610eb56040830184610dc3565b949350505050565b6000610ec7610ed8565b9050610ed38282611023565b919050565b6000604051905090565b600067ffffffffffffffff821115610efd57610efc611054565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610f2957610f28611054565b5b610f328261109c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610fb082610fb7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561100e578082015181840152602081019050610ff3565b8381111561101d576000848401525b50505050565b61102c8261109c565b810181811067ffffffffffffffff8211171561104b5761104a611054565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61112e81610fa5565b811461113957600080fd5b50565b61114581610fd7565b811461115057600080fd5b5056fea2646970667358221220fc774f945c89f73b3d54623d6db47267d684c0487be824021b5fc3d74a13551164736f6c63430008070033