ETH Price: $2,893.19 (-2.08%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Block
From
To
0x903a4d311321010532025-02-17 14:01:23342 days ago1739800883IN
0xdD748977...Eb92Fce31
0 ETH0.0005270209561.50000044
0x903a4d311320932242025-02-17 9:40:25342 days ago1739785225IN
0xdD748977...Eb92Fce31
0 ETH0.0005273522211.50000058
0x903a4d311320691802025-02-16 20:18:57342 days ago1739737137IN
0xdD748977...Eb92Fce31
0 ETH0.0005255594641.50000185
0x903a4d311320691432025-02-16 20:17:43342 days ago1739737063IN
0xdD748977...Eb92Fce31
0 ETH0.0005255324661.50000186
0x903a4d311320688882025-02-16 20:09:13342 days ago1739736553IN
0xdD748977...Eb92Fce31
0 ETH0.0005254983211.50000193
0x903a4d311320685932025-02-16 19:59:23342 days ago1739735963IN
0xdD748977...Eb92Fce31
0 ETH0.0005255848421.5000018
0x903a4d311320685302025-02-16 19:57:17342 days ago1739735837IN
0xdD748977...Eb92Fce31
0 ETH0.0005255963091.50000179
0x903a4d311320653152025-02-16 18:10:07342 days ago1739729407IN
0xdD748977...Eb92Fce31
0 ETH0.0005259923461.50000144
0x903a4d311320649632025-02-16 17:58:23342 days ago1739728703IN
0xdD748977...Eb92Fce31
0 ETH0.0005258317621.50000117
0x903a4d311320644532025-02-16 17:41:23342 days ago1739727683IN
0xdD748977...Eb92Fce31
0 ETH0.0005261003831.50000098
0x903a4d311320641202025-02-16 17:30:17342 days ago1739727017IN
0xdD748977...Eb92Fce31
0 ETH0.0005259968241.50000068
0x903a4d311320641182025-02-16 17:30:13342 days ago1739727013IN
0xdD748977...Eb92Fce31
0 ETH0.0005260148221.50000068
0x903a4d311320640972025-02-16 17:29:31342 days ago1739726971IN
0xdD748977...Eb92Fce31
0 ETH0.000525957091.50000067
0x903a4d311320635532025-02-16 17:11:23342 days ago1739725883IN
0xdD748977...Eb92Fce31
0 ETH0.0005275202271.50000055
0x903a4d311320633632025-02-16 17:05:03342 days ago1739725503IN
0xdD748977...Eb92Fce31
0 ETH0.000526810871.50000053
0x903a4d311320630972025-02-16 16:56:11342 days ago1739724971IN
0xdD748977...Eb92Fce31
0 ETH0.0005263370891.5000005
0x903a4d311320625392025-02-16 16:37:35343 days ago1739723855IN
0xdD748977...Eb92Fce31
0 ETH0.0005268620431.50000046
0x903a4d311320616702025-02-16 16:08:37343 days ago1739722117IN
0xdD748977...Eb92Fce31
0 ETH0.000526064311.50000054
0x903a4d311320550592025-02-16 12:28:15343 days ago1739708895IN
0xdD748977...Eb92Fce31
0 ETH0.0005254647141.5000006
0x903a4d311320514142025-02-16 10:26:45343 days ago1739701605IN
0xdD748977...Eb92Fce31
0 ETH0.0005254800381.50000083
0x903a4d311320470522025-02-16 8:01:21343 days ago1739692881IN
0xdD748977...Eb92Fce31
0 ETH0.0005254863271.50000494
0x903a4d311320464262025-02-16 7:40:29343 days ago1739691629IN
0xdD748977...Eb92Fce31
0 ETH0.0005254996121.50000569
0x903a4d311320463072025-02-16 7:36:31343 days ago1739691391IN
0xdD748977...Eb92Fce31
0 ETH0.0005255178381.50000587
0x903a4d311320207842025-02-15 17:25:45343 days ago1739640345IN
0xdD748977...Eb92Fce31
0 ETH0.0005255247821.50000327
0x903a4d311320188062025-02-15 16:19:49344 days ago1739636389IN
0xdD748977...Eb92Fce31
0 ETH0.000525501691.50000145
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1096773012023-09-17 12:22:59861 days ago1694953379
0xdD748977...Eb92Fce31
13.065 ETH
1077068472023-08-02 21:41:11906 days ago1691012471
0xdD748977...Eb92Fce31
4.81 ETH
1075818192023-07-31 0:13:35909 days ago1690762415
0xdD748977...Eb92Fce31
5.28 ETH
1075582602023-07-30 11:08:17910 days ago1690715297
0xdD748977...Eb92Fce31
0 ETH
1075582602023-07-30 11:08:17910 days ago1690715297
0xdD748977...Eb92Fce31
0 ETH
1075582072023-07-30 11:06:31910 days ago1690715191
0xdD748977...Eb92Fce31
0 ETH
1075582072023-07-30 11:06:31910 days ago1690715191
0xdD748977...Eb92Fce31
0 ETH
1075581632023-07-30 11:05:03910 days ago1690715103
0xdD748977...Eb92Fce31
0 ETH
1075581632023-07-30 11:05:03910 days ago1690715103
0xdD748977...Eb92Fce31
0 ETH
1075580262023-07-30 11:00:29910 days ago1690714829
0xdD748977...Eb92Fce31
0 ETH
1075580262023-07-30 11:00:29910 days ago1690714829
0xdD748977...Eb92Fce31
0 ETH
1075579922023-07-30 10:59:21910 days ago1690714761
0xdD748977...Eb92Fce31
0 ETH
1075579922023-07-30 10:59:21910 days ago1690714761
0xdD748977...Eb92Fce31
0 ETH
1075579652023-07-30 10:58:27910 days ago1690714707
0xdD748977...Eb92Fce31
0 ETH
1075579652023-07-30 10:58:27910 days ago1690714707
0xdD748977...Eb92Fce31
0 ETH
1075578032023-07-30 10:53:03910 days ago1690714383
0xdD748977...Eb92Fce31
0 ETH
1075578032023-07-30 10:53:03910 days ago1690714383
0xdD748977...Eb92Fce31
0 ETH
1075577822023-07-30 10:52:21910 days ago1690714341
0xdD748977...Eb92Fce31
0 ETH
1075577822023-07-30 10:52:21910 days ago1690714341
0xdD748977...Eb92Fce31
0 ETH
1075577612023-07-30 10:51:39910 days ago1690714299
0xdD748977...Eb92Fce31
0 ETH
1075577612023-07-30 10:51:39910 days ago1690714299
0xdD748977...Eb92Fce31
0 ETH
1075577572023-07-30 10:51:31910 days ago1690714291
0xdD748977...Eb92Fce31
0 ETH
1075577572023-07-30 10:51:31910 days ago1690714291
0xdD748977...Eb92Fce31
0 ETH
1075577422023-07-30 10:51:01910 days ago1690714261
0xdD748977...Eb92Fce31
0 ETH
1075577422023-07-30 10:51:01910 days ago1690714261
0xdD748977...Eb92Fce31
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SybilResistance

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at optimistic.etherscan.io on 2023-02-19
*/

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

library Pairing {
    struct G1Point {
        uint X;
        uint Y;
    }
    // Encoding of field elements is: X[0] * z + X[1]
    struct G2Point {
        uint[2] X;
        uint[2] Y;
    }
    /// @return the generator of G1
    function P1() pure internal returns (G1Point memory) {
        return G1Point(1, 2);
    }
    /// @return the generator of G2
    function P2() pure internal returns (G2Point memory) {
        return G2Point(
            [10857046999023057135944570762232829481370756359578518086990519993285655852781,
             11559732032986387107991004021392285783925812861821192530917403151452391805634],
            [8495653923123431417604973247489272438418190587263600148770280649306958101930,
             4082367875863433681332203403145435568316851327593401208105741076214120093531]
        );
    }
    /// @return the negation of p, i.e. p.addition(p.negate()) should be zero.
    function negate(G1Point memory p) pure internal returns (G1Point memory) {
        // The prime q in the base field F_q for G1
        uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
        if (p.X == 0 && p.Y == 0)
            return G1Point(0, 0);
        return G1Point(p.X, q - (p.Y % q));
    }
    /// @return r the sum of two points of G1
    function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {
        uint[4] memory input;
        input[0] = p1.X;
        input[1] = p1.Y;
        input[2] = p2.X;
        input[3] = p2.Y;
        bool success;
        assembly {
            success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require(success);
    }


    /// @return r the product of a point on G1 and a scalar, i.e.
    /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p.
    function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) {
        uint[3] memory input;
        input[0] = p.X;
        input[1] = p.Y;
        input[2] = s;
        bool success;
        assembly {
            success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require (success);
    }
    /// @return the result of computing the pairing check
    /// e(p1[0], p2[0]) *  .... * e(p1[n], p2[n]) == 1
    /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should
    /// return true.
    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {
        require(p1.length == p2.length);
        uint elements = p1.length;
        uint inputSize = elements * 6;
        uint[] memory input = new uint[](inputSize);
        for (uint i = 0; i < elements; i++)
        {
            input[i * 6 + 0] = p1[i].X;
            input[i * 6 + 1] = p1[i].Y;
            input[i * 6 + 2] = p2[i].X[1];
            input[i * 6 + 3] = p2[i].X[0];
            input[i * 6 + 4] = p2[i].Y[1];
            input[i * 6 + 5] = p2[i].Y[0];
        }
        uint[1] memory out;
        bool success;
        assembly {
            success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require(success);
        return out[0] != 0;
    }
    /// Convenience method for a pairing check for two pairs.
    function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) {
        G1Point[] memory p1 = new G1Point[](2);
        G2Point[] memory p2 = new G2Point[](2);
        p1[0] = a1;
        p1[1] = b1;
        p2[0] = a2;
        p2[1] = b2;
        return pairing(p1, p2);
    }
    /// Convenience method for a pairing check for three pairs.
    function pairingProd3(
            G1Point memory a1, G2Point memory a2,
            G1Point memory b1, G2Point memory b2,
            G1Point memory c1, G2Point memory c2
    ) internal view returns (bool) {
        G1Point[] memory p1 = new G1Point[](3);
        G2Point[] memory p2 = new G2Point[](3);
        p1[0] = a1;
        p1[1] = b1;
        p1[2] = c1;
        p2[0] = a2;
        p2[1] = b2;
        p2[2] = c2;
        return pairing(p1, p2);
    }
    /// Convenience method for a pairing check for four pairs.
    function pairingProd4(
            G1Point memory a1, G2Point memory a2,
            G1Point memory b1, G2Point memory b2,
            G1Point memory c1, G2Point memory c2,
            G1Point memory d1, G2Point memory d2
    ) internal view returns (bool) {
        G1Point[] memory p1 = new G1Point[](4);
        G2Point[] memory p2 = new G2Point[](4);
        p1[0] = a1;
        p1[1] = b1;
        p1[2] = c1;
        p1[3] = d1;
        p2[0] = a2;
        p2[1] = b2;
        p2[2] = c2;
        p2[3] = d2;
        return pairing(p1, p2);
    }
}

// Groth16 Proof struct
struct Proof {
        Pairing.G1Point a;
        Pairing.G2Point b;
        Pairing.G1Point c;
}

contract ProofOfCountry {
    using Pairing for *;
    struct VerifyingKey {
        Pairing.G1Point alpha;
        Pairing.G2Point beta;
        Pairing.G2Point gamma;
        Pairing.G2Point delta;
        Pairing.G1Point[] gamma_abc;
    }

    function verifyingKey() pure internal returns (VerifyingKey memory vk) {
        vk.alpha = Pairing.G1Point(uint256(0x1dcfbcc68c706725d95cae80087f4f803f7c628fd2ebed0c8d8f1c08efb000a2), uint256(0x1db5c895af5af97da17f06a993745f82dc6c3f43b862de01bb499821a2f07f7f));
        vk.beta = Pairing.G2Point([uint256(0x14595f61ba4aede46e251c87d00e8f5ddd659e3a94f14212cabd8642e28f03b7), uint256(0x2ad520f86f05f729da4c87a6732a2b73b5594f54a3433ddbf9329a859717e893)], [uint256(0x12966aef85fa2cb49ba6c72aaf3b519a909369085de41a7a10db36f6aee9a333), uint256(0x2b2aa977f11a4b1d2fa1b43487a3b348fb78658b4948628ae8a0c77a27309607)]);
        vk.gamma = Pairing.G2Point([uint256(0x0e646c79b92eb81e771a8beedcf750922d68c4cae6e674f28386f05db695f087), uint256(0x2f32db257bd38e510b2c46905bf42ee017eb8dd3736ecf94a63ee388e9dcf7c6)], [uint256(0x2bced1358c17d910723e709aefed3c3b9c127401fbb5b8196023af37eb6924a6), uint256(0x200c899f19599e02ee93c8287a7120147c6f8e001e9c7f7e5c643fce1a2aa94a)]);
        vk.delta = Pairing.G2Point([uint256(0x1116bc1932e65897160357ba10be9222ec1e34adffa8b8c9182b60cac7752446), uint256(0x207f45a790597c02fd21413d5d9ed6bd4b633c18ead06295fe9a8b93562380d2)], [uint256(0x05de54e825005fa8bf89ded4db3448d013c2faa95f3e14e4f502ebb076b6ec42), uint256(0x04a769b3533c1f4394d7523639a81fb549d0f086313f93b605ada17b0d7aeaf5)]);
        vk.gamma_abc = new Pairing.G1Point[](7);
        vk.gamma_abc[0] = Pairing.G1Point(uint256(0x0a0b29d53e75e2681c6cf103f088f351971c06a78c1af4c2c3fad558bd480aba), uint256(0x014db04b3e5fbbd59699890460efd29b5df2491dcade336ed9e58f1920c9b091));
        vk.gamma_abc[1] = Pairing.G1Point(uint256(0x0ab0d26e0b44acc3f6166a737f25c6b594f8ee0550b0b774a5fc1a9b1c90c2e5), uint256(0x2be4d4802073c03ab7a5160c0f1bfef2f1c8fb0ecfb61c2a2ddfa0f1d64b98f2));
        vk.gamma_abc[2] = Pairing.G1Point(uint256(0x08539b6e4fa48392fa14e89394f52ff8ca375c23103bfc6f78af24152666cc57), uint256(0x16099e7289a9f2539a9d5abe3665ffaf7236de57ccb24cdff3e4cb8047709198));
        vk.gamma_abc[3] = Pairing.G1Point(uint256(0x21e5733b57484e09646f512c1c0d95c6670d6701c7540b9487f4f08723c19bb8), uint256(0x11fb6e9d01ab0f58928f40f21da7beee62943aa3c2c5490100ffb6a09d8ce2e5));
        vk.gamma_abc[4] = Pairing.G1Point(uint256(0x1ea9366f1bee313ec9786dc19facf5dccf3e47e23d9477e274b377e4272bceda), uint256(0x13b1db8802d9fc947ad2ab6ffce35e3e9b147ce6a79760886cefb4e9e4b0212e));
        vk.gamma_abc[5] = Pairing.G1Point(uint256(0x186067a849502f2e7ce583156758d2aa6d10b98638374d897bd0ab1438f3e45d), uint256(0x2b777f559e2f11fe20903a6b6fe5808a73c93e278effadaad217701caae97063));
        vk.gamma_abc[6] = Pairing.G1Point(uint256(0x151caaf5340893a1c7e92b6fcaa315046b38a29e5904b7f31088994a6554cf47), uint256(0x04ccd8e7e9a8637873c3fc75ae69afa761886cec6e78675f391ed008c20a0083));
    }
    function verify(uint[] memory input, Proof memory proof) internal view returns (uint) {
        uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
        VerifyingKey memory vk = verifyingKey();
        require(input.length + 1 == vk.gamma_abc.length);
        // Compute the linear combination vk_x
        Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
        for (uint i = 0; i < input.length; i++) {
            require(input[i] < snark_scalar_field);
            vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.gamma_abc[i + 1], input[i]));
        }
        vk_x = Pairing.addition(vk_x, vk.gamma_abc[0]);
        if(!Pairing.pairingProd4(
             proof.a, proof.b,
             Pairing.negate(vk_x), vk.gamma,
             Pairing.negate(proof.c), vk.delta,
             Pairing.negate(vk.alpha), vk.beta)) return 1;
        return 0;
    }
    function verifyTx(
            Proof memory proof, uint[6] memory input
        ) public view returns (bool r) {
        uint[] memory inputValues = new uint[](6);
        
        for(uint i = 0; i < input.length; i++){
            inputValues[i] = input[i];
        }
        if (verify(inputValues, proof) == 0) {
            return true;
        } else {
            return false;
        }
    }
    // function verifyEncoded(Proof calldata proof, uint[] calldata input_) public view returns (bool r) {
    //     // (Proof memory proof, uint[25] memory input) = abi.decode(b, (Proof, uint[25]));
    //     uint[6] memory input;
    //     for (uint i = 0; i < 6; i++) {
    //         input[i] = input_[i];
    //     }
    //     return verifyTx(proof, input);
    // }
}


interface IRootsMinimal {
   function rootIsRecent(uint256 root) external view returns (bool isRecent);
}

interface IPaidProof {
    function setPrice(uint newPrice) external;
    function collectPayments() external;
    function allowIssuers(uint[] memory issuerAddresses) external;
    function revokeIssuers(uint[] memory issuerAddresses) external;
    function isValidIssuer(uint issuerAddress) external view returns (bool);
}

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)


/**
 * @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;
    }
}

/**
 * @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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}


contract PaidProof is IPaidProof, Ownable {
    uint public price; // Price in ETH to use a function with the needsPayment modifier
    mapping(uint => bool) public allowedIssuers; // Whitelist of issuers

    constructor() {}

    function setPrice(uint newPrice) public onlyOwner {
            price = newPrice;
    }

    function collectPayments() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    modifier needsPayment() {
        require(msg.value >= price, "Missing payment");
        _;
    }

    function allowIssuers(uint[] memory issuerAddresses) public onlyOwner {
        uint8 i;
        for (i = 0; i < issuerAddresses.length; i++) {
            allowedIssuers[issuerAddresses[i]] = true;  
        }
    }

    function revokeIssuers(uint[] memory issuerAddresses) public onlyOwner {
        uint8 i;
        for (i = 0; i < issuerAddresses.length; i++) {
            allowedIssuers[issuerAddresses[i]] = false;  
        }            
    }

    function isValidIssuer(uint issuerAddress) public view returns (bool) {
        return allowedIssuers[issuerAddress];       
    }
}

contract AntiSybilVerifier {
    using Pairing for *;
    struct VerifyingKey {
        Pairing.G1Point alpha;
        Pairing.G2Point beta;
        Pairing.G2Point gamma;
        Pairing.G2Point delta;
        Pairing.G1Point[] gamma_abc;
    }
    function verifyingKey() pure internal returns (VerifyingKey memory vk) {
        vk.alpha = Pairing.G1Point(uint256(0x07cf3ea35ce89bd47ae7884ed63e681cdd2bcc9b1522c8513995b2efe1424bbc), uint256(0x0175240658c74aefc5d7e5f9298254ac527b06a541c5745375d8be7f6618f80a));
        vk.beta = Pairing.G2Point([uint256(0x05b2d5f21d70e3e463cf78c09b6791c65b5a4e220a8e9f598a1eb07db21455fa), uint256(0x2f9e034fc8cd01282b990581a71b3c539a9e8b7670c9c4a7def9ed865c3254be)], [uint256(0x0049736bfe2b83a68f14c7ac8df40ed448eb85344f2116539497062b9628a014), uint256(0x1e49966ae8c5ad615d4f804a1a0733a0f9e0ec802e1102297d1aa89e545cc8b5)]);
        vk.gamma = Pairing.G2Point([uint256(0x09b8b9280d1a535c41cd655d52beb176de2c75c7eaa27f683edc5c3b23fd4d23), uint256(0x2483cc62f2f655231a041c2efe3c0acf8ec228c662367e7643dde9486566083e)], [uint256(0x2acd04fbd40b56b330ae9b7fae61de45078063eef9dc2efa85ac07670c9a8710), uint256(0x289242c611532eb565c01dda2af7fdace4e181b429b1c522f09e2c45a41ec986)]);
        vk.delta = Pairing.G2Point([uint256(0x1fb55ccd4e42f62ea22ec3f2343c6963503de5d52a5886e2de5600bdd6045edf), uint256(0x1a62735f741101477afc183dd602246d45a685556369fa8a3b59e23b3d6bb9b3)], [uint256(0x2d72c8f7af207f2456102b5714d78986ed97f6a1859ff03b808cd1bbafa0ff7d), uint256(0x1a4dacd7a48f92c49b9a0c1e764a70b254ce3f61b2fa138e095237293ce7c3b5)]);
        vk.gamma_abc = new Pairing.G1Point[](6);
        vk.gamma_abc[0] = Pairing.G1Point(uint256(0x2fbf2edc978f739425e24af07b701b0252aa5ed5fe6d0c1fa93f4e4e762b2043), uint256(0x234cf92ca5acb62d3ca271ef6aa2ca4bb011886016a4fbb38bd78bfd3a3b05ee));
        vk.gamma_abc[1] = Pairing.G1Point(uint256(0x1cdeace3919620bbdf2c821ff7a5067d36ec9b3e3b291c5871447e675f72dd88), uint256(0x255816c023276c902fb1b59789fc4ff19b23cf0e63cdc34fbd9202e5947a5020));
        vk.gamma_abc[2] = Pairing.G1Point(uint256(0x18e3ec6edb610ebaaec15f751bf8173d6336d2c5b09b288b9c8a9d4787983935), uint256(0x272e548acd302e7fbda87612c1d68d737f1d816586e2a236b71e80cdd4cc3e07));
        vk.gamma_abc[3] = Pairing.G1Point(uint256(0x2998028f89a5496e4adb5332b22a054b9c843c4f54dcdca0951444157f0c8db0), uint256(0x11faaa550f3ab63790adb6594e6bd9017e8253e416a4380ab7b8565acfcb82db));
        vk.gamma_abc[4] = Pairing.G1Point(uint256(0x09a638226cfc46ac9661a3b62870302d3ff62a958ae2b5d141cba275a59932f3), uint256(0x0d46745c05f8ece61658144223e895c54f087cad3923b5e7e3cf44353ab35046));
        vk.gamma_abc[5] = Pairing.G1Point(uint256(0x26b78e89f8c6fad685ff502edc6d501adf0fff4ca04439412ca7c40a71543df8), uint256(0x0eca22c5c5523eb363bb9df6a48421816aec29029d3d88ce2f4eeb595bf58870));
    }
    function verify(uint[] memory input, Proof memory proof) internal view returns (uint) {
        uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
        VerifyingKey memory vk = verifyingKey();
        require(input.length + 1 == vk.gamma_abc.length);
        // Compute the linear combination vk_x
        Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
        for (uint i = 0; i < input.length; i++) {
            require(input[i] < snark_scalar_field);
            vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.gamma_abc[i + 1], input[i]));
        }
        vk_x = Pairing.addition(vk_x, vk.gamma_abc[0]);
        if(!Pairing.pairingProd4(
             proof.a, proof.b,
             Pairing.negate(vk_x), vk.gamma,
             Pairing.negate(proof.c), vk.delta,
             Pairing.negate(vk.alpha), vk.beta)) return 1;
        return 0;
    }
    function verifyTx(
            Proof memory proof, uint[5] memory input
        ) public view returns (bool r) {
        uint[] memory inputValues = new uint[](5);
        
        for(uint i = 0; i < input.length; i++){
            inputValues[i] = input[i];
        }
        if (verify(inputValues, proof) == 0) {
            return true;
        } else {
            return false;
        }
    }

    // function verifyEncoded(Proof calldata proof, uint[] calldata input_) public view returns (bool r) {
    //     // (Proof memory proof, uint[25] memory input) = abi.decode(b, (Proof, uint[25]));
    //     uint[5] memory input;
    //     for (uint i = 0; i < 5; i++) {
    //         input[i] = input_[i];
    //     }
    //     return verifyTx(proof, input);
    // }
}


interface ISybilResistance {
   function isUniqueForAction(address,uint256) external view returns (bool);
}


contract SybilResistance is PaidProof {
    // Stores all used footprints
    mapping(uint256 => bool) public masalaWasUsed;
    // When *address* verifies they're unique for *actionId*, keccak256(address, actionId) will be stored as true:
    mapping(bytes32 => bool) verifications;
    // And an event will be emitted:
    event Uniqueness(address userAddr, uint actionId);

    AntiSybilVerifier verifier; 
    IRootsMinimal roots;

    // allow for backwards compatability by also accepting users who verified in the old contract
    bool legacySupport;
    ISybilResistance oldContract; 
    
    constructor(address roots_, uint[] memory issuers_, uint price_, address oldContract_) {
        roots = IRootsMinimal(roots_);
        verifier = new AntiSybilVerifier();
        allowIssuers(issuers_);
        setPrice(price_);

        if(oldContract_ != address(0)) {
            legacySupport = true;
            oldContract = ISybilResistance(oldContract_);
        }
    }

    function isUniqueForAction(address addr, uint actionId) public view returns (bool unique) {
        return (
            verifications[keccak256(abi.encodePacked(addr, actionId))]) || 
            (legacySupport && oldContract.isUniqueForAction(addr, actionId)
        );
    }

    // It is useful to separate this from the prove() function which is changes state, so that somebody can call this off-chain as a view function.
    // Then, they can maintain their own off-chain list of footprints and verified address 
    function proofIsValid(Proof calldata proof, uint[5] memory input) public view returns (bool isValid) {
        require(roots.rootIsRecent(input[0]), "The root provided was not found in the Merkle tree's recent root list");
        // Checking msg.sender no longer seems very necessary and prevents signature-free interactions. Without it, relayers can submit cross-chain transactions without the user signature. Thus, we are deprecating this check:
        // require(uint256(uint160(msg.sender)) == input[1], "Second public argument of proof must be your address");

        require(isValidIssuer(input[2]), "Proof must come from correct issuer's address"); 
        require(!masalaWasUsed[input[4]], "One person can only verify once");
        require(verifier.verifyTx(proof, input), "Failed to verify ZKP");
        return true;
    }

    /// @param proof PairingAndProof.sol Proof struct
    /// @param input The public inputs to the proof, in ZoKrates' format
    function prove(Proof calldata proof, uint256[5] calldata input) public payable needsPayment {
        require(proofIsValid(proof, input));
        masalaWasUsed[input[4]] = true; //input[4] is address
        bytes32 commit = keccak256(abi.encodePacked(uint160(input[1]), input[3])); //input[1] is address of user to be registered for actionId, input[3] is actionId
        verifications[commit] = true;
        emit Uniqueness(msg.sender, input[3]);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"roots_","type":"address"},{"internalType":"uint256[]","name":"issuers_","type":"uint256[]"},{"internalType":"uint256","name":"price_","type":"uint256"},{"internalType":"address","name":"oldContract_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"actionId","type":"uint256"}],"name":"Uniqueness","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"issuerAddresses","type":"uint256[]"}],"name":"allowIssuers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedIssuers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectPayments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"actionId","type":"uint256"}],"name":"isUniqueForAction","outputs":[{"internalType":"bool","name":"unique","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"issuerAddress","type":"uint256"}],"name":"isValidIssuer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"masalaWasUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"a","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct Pairing.G2Point","name":"b","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"c","type":"tuple"}],"internalType":"struct Proof","name":"proof","type":"tuple"},{"internalType":"uint256[5]","name":"input","type":"uint256[5]"}],"name":"proofIsValid","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"a","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct Pairing.G2Point","name":"b","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"c","type":"tuple"}],"internalType":"struct Proof","name":"proof","type":"tuple"},{"internalType":"uint256[5]","name":"input","type":"uint256[5]"}],"name":"prove","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"issuerAddresses","type":"uint256[]"}],"name":"revokeIssuers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620038553803806200385583398181016040528101906200003791906200061f565b620000576200004b620001c260201b60201c565b620001ca60201b60201c565b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620000a690620003e8565b604051809103906000f080158015620000c3573d6000803e3d6000fd5b50600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000115836200028e60201b60201c565b62000126826200031460201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620001b8576001600660146101000a81548160ff02191690831515021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50505050620007cd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200029e6200032e60201b60201c565b60005b81518160ff1610156200031057600160026000848460ff1681518110620002cd57620002cc620006b0565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808062000307906200071b565b915050620002a1565b5050565b620003246200032e60201b60201c565b8060018190555050565b6200033e620001c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000364620003bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b490620007ab565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116f8806200215d83390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000437826200040a565b9050919050565b62000449816200042a565b81146200045557600080fd5b50565b60008151905062000469816200043e565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004bf8262000474565b810181811067ffffffffffffffff82111715620004e157620004e062000485565b5b80604052505050565b6000620004f6620003f6565b9050620005048282620004b4565b919050565b600067ffffffffffffffff82111562000527576200052662000485565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b62000552816200053d565b81146200055e57600080fd5b50565b600081519050620005728162000547565b92915050565b60006200058f620005898462000509565b620004ea565b90508083825260208201905060208402830185811115620005b557620005b462000538565b5b835b81811015620005e25780620005cd888262000561565b845260208401935050602081019050620005b7565b5050509392505050565b600082601f8301126200060457620006036200046f565b5b81516200061684826020860162000578565b91505092915050565b600080600080608085870312156200063c576200063b62000400565b5b60006200064c8782880162000458565b945050602085015167ffffffffffffffff81111562000670576200066f62000405565b5b6200067e87828801620005ec565b9350506040620006918782880162000561565b9250506060620006a48782880162000458565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b600062000728826200070e565b915060ff8214156200073f576200073e620006df565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007936020836200074a565b9150620007a0826200075b565b602082019050919050565b60006020820190508181036000830152620007c68162000784565b9050919050565b61198080620007dd6000396000f3fe6080604052600436106100dd5760003560e01c806391b7f5ed1161007f578063c3f243af11610059578063c3f243af1461029d578063ce072163146102da578063f175a2d7146102f1578063f2fde38b1461032e576100dd565b806391b7f5ed1461020c57806396248d1214610235578063a035b1fe14610272576100dd565b8063775d0df0116100bb578063775d0df01461015f5780637fb0ac831461019c5780638da5cb5b146101c5578063903a4d31146101f0576100dd565b80635022a31f146100e25780636bd09a531461011f578063715018a614610148575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190610e84565b610357565b6040516101169190610ee1565b60405180910390f35b34801561012b57600080fd5b5061014660048036038101906101419190610fbf565b61062a565b005b34801561015457600080fd5b5061015d6106a1565b005b34801561016b57600080fd5b5061018660048036038101906101819190611008565b6106b5565b6040516101939190610ee1565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190610fbf565b6106d5565b005b3480156101d157600080fd5b506101da61074c565b6040516101e79190611076565b60405180910390f35b61020a600480360381019061020591906110b3565b610775565b005b34801561021857600080fd5b50610233600480360381019061022e9190611008565b610927565b005b34801561024157600080fd5b5061025c60048036038101906102579190611121565b610939565b6040516102699190610ee1565b60405180910390f35b34801561027e57600080fd5b50610287610a58565b6040516102949190611170565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190611008565b610a5e565b6040516102d19190610ee1565b60405180910390f35b3480156102e657600080fd5b506102ef610a7e565b005b3480156102fd57600080fd5b5061031860048036038101906103139190611008565b610ad6565b6040516103259190610ee1565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061118b565b610b00565b005b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d61af5c836000600581106103ab576103aa6111b8565b5b60200201516040518263ffffffff1660e01b81526004016103cc9190611170565b60206040518083038186803b1580156103e457600080fd5b505afa1580156103f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041c9190611213565b61045b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610452906112e9565b60405180910390fd5b61047c82600260058110610472576104716111b8565b5b6020020151610ad6565b6104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b29061137b565b60405180910390fd5b60036000836004600581106104d3576104d26111b8565b5b6020020151815260200190815260200160002060009054906101000a900460ff1615610534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052b906113e7565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bcb9988684846040518363ffffffff1660e01b81526004016105919291906115e2565b60206040518083038186803b1580156105a957600080fd5b505afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190611213565b610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061790611659565b60405180910390fd5b6001905092915050565b610632610b84565b60005b81518160ff16101561069d57600060026000848460ff168151811061065d5761065c6111b8565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610695906116b5565b915050610635565b5050565b6106a9610b84565b6106b36000610c02565b565b60036020528060005260406000206000915054906101000a900460ff1681565b6106dd610b84565b60005b81518160ff16101561074857600160026000848460ff1681518110610708576107076111b8565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610740906116b5565b9150506106e0565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001543410156107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b19061172b565b60405180910390fd5b6107fb82826005806020026040519081016040528092919082600560200280828437600081840152601f19601f820116905080830192505050505050610357565b61080457600080fd5b6001600360008360046005811061081e5761081d6111b8565b5b6020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060008160016005811061085e5761085d6111b8565b5b602002013582600360058110610877576108766111b8565b5b602002013560405160200161088d9291906117a2565b60405160208183030381529060405280519060200120905060016004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd198fa8523413333ec863279d1630fa354ecc8b110ae00f9ca98c8b498fb46873383600360058110610907576109066111b8565b5b602002013560405161091a9291906117ce565b60405180910390a1505050565b61092f610b84565b8060018190555050565b6000600460008484604051602001610952929190611820565b60405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a900460ff1680610a505750600660149054906101000a900460ff168015610a4f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166396248d1284846040518363ffffffff1660e01b81526004016109fe9291906117ce565b60206040518083038186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190611213565b5b5b905092915050565b60015481565b60026020528060005260406000206000915054906101000a900460ff1681565b610a86610b84565b610a8e61074c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ad3573d6000803e3d6000fd5b50565b60006002600083815260200190815260200160002060009054906101000a900460ff169050919050565b610b08610b84565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906118be565b60405180910390fd5b610b8181610c02565b50565b610b8c610cc6565b73ffffffffffffffffffffffffffffffffffffffff16610baa61074c565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf79061192a565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b60006101008284031215610cfe57610cfd610ce2565b5b81905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d5582610d0c565b810181811067ffffffffffffffff82111715610d7457610d73610d1d565b5b80604052505050565b6000610d87610cce565b9050610d938282610d4c565b919050565b600067ffffffffffffffff821115610db357610db2610d1d565b5b602082029050919050565b600080fd5b6000819050919050565b610dd681610dc3565b8114610de157600080fd5b50565b600081359050610df381610dcd565b92915050565b6000610e0c610e0784610d98565b610d7d565b90508060208402830185811115610e2657610e25610dbe565b5b835b81811015610e4f5780610e3b8882610de4565b845260208401935050602081019050610e28565b5050509392505050565b600082601f830112610e6e57610e6d610d07565b5b6005610e7b848285610df9565b91505092915050565b6000806101a08385031215610e9c57610e9b610cd8565b5b6000610eaa85828601610ce7565b925050610100610ebc85828601610e59565b9150509250929050565b60008115159050919050565b610edb81610ec6565b82525050565b6000602082019050610ef66000830184610ed2565b92915050565b600067ffffffffffffffff821115610f1757610f16610d1d565b5b602082029050602081019050919050565b6000610f3b610f3684610efc565b610d7d565b90508083825260208201905060208402830185811115610f5e57610f5d610dbe565b5b835b81811015610f875780610f738882610de4565b845260208401935050602081019050610f60565b5050509392505050565b600082601f830112610fa657610fa5610d07565b5b8135610fb6848260208601610f28565b91505092915050565b600060208284031215610fd557610fd4610cd8565b5b600082013567ffffffffffffffff811115610ff357610ff2610cdd565b5b610fff84828501610f91565b91505092915050565b60006020828403121561101e5761101d610cd8565b5b600061102c84828501610de4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061106082611035565b9050919050565b61107081611055565b82525050565b600060208201905061108b6000830184611067565b92915050565b6000819050826020600502820111156110ad576110ac610dbe565b5b92915050565b6000806101a083850312156110cb576110ca610cd8565b5b60006110d985828601610ce7565b9250506101006110eb85828601611091565b9150509250929050565b6110fe81611055565b811461110957600080fd5b50565b60008135905061111b816110f5565b92915050565b6000806040838503121561113857611137610cd8565b5b60006111468582860161110c565b925050602061115785828601610de4565b9150509250929050565b61116a81610dc3565b82525050565b60006020820190506111856000830184611161565b92915050565b6000602082840312156111a1576111a0610cd8565b5b60006111af8482850161110c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6111f081610ec6565b81146111fb57600080fd5b50565b60008151905061120d816111e7565b92915050565b60006020828403121561122957611228610cd8565b5b6000611237848285016111fe565b91505092915050565b600082825260208201905092915050565b7f54686520726f6f742070726f766964656420776173206e6f7420666f756e642060008201527f696e20746865204d65726b6c652074726565277320726563656e7420726f6f7460208201527f206c697374000000000000000000000000000000000000000000000000000000604082015250565b60006112d3604583611240565b91506112de82611251565b606082019050919050565b60006020820190508181036000830152611302816112c6565b9050919050565b7f50726f6f66206d75737420636f6d652066726f6d20636f72726563742069737360008201527f7565722773206164647265737300000000000000000000000000000000000000602082015250565b6000611365602d83611240565b915061137082611309565b604082019050919050565b6000602082019050818103600083015261139481611358565b9050919050565b7f4f6e6520706572736f6e2063616e206f6e6c7920766572696679206f6e636500600082015250565b60006113d1601f83611240565b91506113dc8261139b565b602082019050919050565b60006020820190508181036000830152611400816113c4565b9050919050565b600082905092915050565b60006114216020840184610de4565b905092915050565b61143281610dc3565b82525050565b604082016114496000830183611412565b6114566000850182611429565b506114646020830183611412565b6114716020850182611429565b50505050565b600082905092915050565b600082905092915050565b82818337600083830152505050565b6114a86040838361148d565b5050565b608082016114bd6000830183611482565b6114ca600085018261149c565b506114d86040830183611482565b6114e5604085018261149c565b50505050565b61010082016114fd6000830183611407565b61150a6000850182611438565b506115186040830183611477565b61152560408501826114ac565b5061153360c0830183611407565b61154060c0850182611438565b50505050565b600060059050919050565b600081905092915050565b6000819050919050565b60006115728383611429565b60208301905092915050565b6000602082019050919050565b61159481611546565b61159e8184611551565b92506115a98261155c565b8060005b838110156115da5781516115c18782611566565b96506115cc8361157e565b9250506001810190506115ad565b505050505050565b60006101a0820190506115f860008301856114eb565b61160661010083018461158b565b9392505050565b7f4661696c656420746f20766572696679205a4b50000000000000000000000000600082015250565b6000611643601483611240565b915061164e8261160d565b602082019050919050565b6000602082019050818103600083015261167281611636565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b60006116c0826116a8565b915060ff8214156116d4576116d3611679565b5b600182019050919050565b7f4d697373696e67207061796d656e740000000000000000000000000000000000600082015250565b6000611715600f83611240565b9150611720826116df565b602082019050919050565b6000602082019050818103600083015261174481611708565b9050919050565b60008160601b9050919050565b60006117638261174b565b9050919050565b61177b61177682611035565b611758565b82525050565b6000819050919050565b61179c61179782610dc3565b611781565b82525050565b60006117ae828561176a565b6014820191506117be828461178b565b6020820191508190509392505050565b60006040820190506117e36000830185611067565b6117f06020830184611161565b9392505050565b600061180282611758565b9050919050565b61181a61181582611055565b6117f7565b82525050565b600061182c8285611809565b60148201915061183c828461178b565b6020820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006118a8602683611240565b91506118b38261184c565b604082019050919050565b600060208201905081810360008301526118d78161189b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611914602083611240565b915061191f826118de565b602082019050919050565b6000602082019050818103600083015261194381611907565b905091905056fea26469706673582212202947c55672ae4574e91719254617011bbc0c8c9a39506c5c5b9ccbf064f5aabd64736f6c63430008090033608060405234801561001057600080fd5b506116d8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bcb9988614610030575b600080fd5b61004a6004803603810190610045919061143f565b610060565b604051610057919061149c565b60405180910390f35b600080600567ffffffffffffffff81111561007e5761007d61111d565b5b6040519080825280602002602001820160405280156100ac5781602001602082028036833780820191505090505b50905060005b6005811015610105578381600581106100ce576100cd6114b7565b5b60200201518282815181106100e6576100e56114b7565b5b60200260200101818152505080806100fd90611515565b9150506100b2565b506000610112828661012e565b1415610122576001915050610128565b60009150505b92915050565b6000807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019050600061015e6102c5565b905080608001515160018651610174919061155e565b1461017e57600080fd5b60006040518060400160405280600081526020016000815250905060005b865181101561023757838782815181106101b9576101b86114b7565b5b6020026020010151106101cb57600080fd5b6102228261021d85608001516001856101e4919061155e565b815181106101f5576101f46114b7565b5b60200260200101518a85815181106102105761020f6114b7565b5b60200260200101516108a8565b61094f565b9150808061022f90611515565b91505061019c565b50610261818360800151600081518110610254576102536114b7565b5b602002602001015161094f565b90506102a78560000151866020015161027984610a1c565b856040015161028b8a60400151610a1c565b876060015161029d8960000151610a1c565b8960200151610ac1565b6102b757600193505050506102bf565b600093505050505b92915050565b6102cd610fe9565b60405180604001604052807f07cf3ea35ce89bd47ae7884ed63e681cdd2bcc9b1522c8513995b2efe1424bbc81526020017f0175240658c74aefc5d7e5f9298254ac527b06a541c5745375d8be7f6618f80a8152508160000181905250604051806040016040528060405180604001604052807f05b2d5f21d70e3e463cf78c09b6791c65b5a4e220a8e9f598a1eb07db21455fa81526020017f2f9e034fc8cd01282b990581a71b3c539a9e8b7670c9c4a7def9ed865c3254be815250815260200160405180604001604052807e49736bfe2b83a68f14c7ac8df40ed448eb85344f2116539497062b9628a01481526020017f1e49966ae8c5ad615d4f804a1a0733a0f9e0ec802e1102297d1aa89e545cc8b58152508152508160200181905250604051806040016040528060405180604001604052807f09b8b9280d1a535c41cd655d52beb176de2c75c7eaa27f683edc5c3b23fd4d2381526020017f2483cc62f2f655231a041c2efe3c0acf8ec228c662367e7643dde9486566083e815250815260200160405180604001604052807f2acd04fbd40b56b330ae9b7fae61de45078063eef9dc2efa85ac07670c9a871081526020017f289242c611532eb565c01dda2af7fdace4e181b429b1c522f09e2c45a41ec9868152508152508160400181905250604051806040016040528060405180604001604052807f1fb55ccd4e42f62ea22ec3f2343c6963503de5d52a5886e2de5600bdd6045edf81526020017f1a62735f741101477afc183dd602246d45a685556369fa8a3b59e23b3d6bb9b3815250815260200160405180604001604052807f2d72c8f7af207f2456102b5714d78986ed97f6a1859ff03b808cd1bbafa0ff7d81526020017f1a4dacd7a48f92c49b9a0c1e764a70b254ce3f61b2fa138e095237293ce7c3b58152508152508160600181905250600667ffffffffffffffff8111156105935761059261111d565b5b6040519080825280602002602001820160405280156105cc57816020015b6105b9611030565b8152602001906001900390816105b15790505b50816080018190525060405180604001604052807f2fbf2edc978f739425e24af07b701b0252aa5ed5fe6d0c1fa93f4e4e762b204381526020017f234cf92ca5acb62d3ca271ef6aa2ca4bb011886016a4fbb38bd78bfd3a3b05ee8152508160800151600081518110610642576106416114b7565b5b602002602001018190525060405180604001604052807f1cdeace3919620bbdf2c821ff7a5067d36ec9b3e3b291c5871447e675f72dd8881526020017f255816c023276c902fb1b59789fc4ff19b23cf0e63cdc34fbd9202e5947a502081525081608001516001815181106106ba576106b96114b7565b5b602002602001018190525060405180604001604052807f18e3ec6edb610ebaaec15f751bf8173d6336d2c5b09b288b9c8a9d478798393581526020017f272e548acd302e7fbda87612c1d68d737f1d816586e2a236b71e80cdd4cc3e078152508160800151600281518110610732576107316114b7565b5b602002602001018190525060405180604001604052807f2998028f89a5496e4adb5332b22a054b9c843c4f54dcdca0951444157f0c8db081526020017f11faaa550f3ab63790adb6594e6bd9017e8253e416a4380ab7b8565acfcb82db81525081608001516003815181106107aa576107a96114b7565b5b602002602001018190525060405180604001604052807f09a638226cfc46ac9661a3b62870302d3ff62a958ae2b5d141cba275a59932f381526020017f0d46745c05f8ece61658144223e895c54f087cad3923b5e7e3cf44353ab350468152508160800151600481518110610822576108216114b7565b5b602002602001018190525060405180604001604052807f26b78e89f8c6fad685ff502edc6d501adf0fff4ca04439412ca7c40a71543df881526020017f0eca22c5c5523eb363bb9df6a48421816aec29029d3d88ce2f4eeb595bf58870815250816080015160058151811061089a576108996114b7565b5b602002602001018190525090565b6108b0611030565b6108b861104a565b8360000151816000600381106108d1576108d06114b7565b5b6020020181815250508360200151816001600381106108f3576108f26114b7565b5b6020020181815250508281600260038110610911576109106114b7565b5b602002018181525050600060608360808460076107d05a03fa9050806000811461093a5761093c565bfe5b508061094757600080fd5b505092915050565b610957611030565b61095f61106c565b836000015181600060048110610978576109776114b7565b5b60200201818152505083602001518160016004811061099a576109996114b7565b5b6020020181815250508260000151816002600481106109bc576109bb6114b7565b5b6020020181815250508260200151816003600481106109de576109dd6114b7565b5b602002018181525050600060608360c08460066107d05a03fa90508060008114610a0757610a09565bfe5b5080610a1457600080fd5b505092915050565b610a24611030565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905060008360000151148015610a61575060008360200151145b15610a85576040518060400160405280600081526020016000815250915050610abc565b604051806040016040528084600001518152602001828560200151610aaa91906115e3565b83610ab59190611614565b8152509150505b919050565b600080600467ffffffffffffffff811115610adf57610ade61111d565b5b604051908082528060200260200182016040528015610b1857816020015b610b05611030565b815260200190600190039081610afd5790505b5090506000600467ffffffffffffffff811115610b3857610b3761111d565b5b604051908082528060200260200182016040528015610b7157816020015b610b5e61108e565b815260200190600190039081610b565790505b5090508a82600081518110610b8957610b886114b7565b5b60200260200101819052508882600181518110610ba957610ba86114b7565b5b60200260200101819052508682600281518110610bc957610bc86114b7565b5b60200260200101819052508482600381518110610be957610be86114b7565b5b60200260200101819052508981600081518110610c0957610c086114b7565b5b60200260200101819052508781600181518110610c2957610c286114b7565b5b60200260200101819052508581600281518110610c4957610c486114b7565b5b60200260200101819052508381600381518110610c6957610c686114b7565b5b6020026020010181905250610c7e8282610c8e565b9250505098975050505050505050565b60008151835114610c9e57600080fd5b6000835190506000600682610cb39190611648565b905060008167ffffffffffffffff811115610cd157610cd061111d565b5b604051908082528060200260200182016040528015610cff5781602001602082028036833780820191505090505b50905060005b83811015610f8457868181518110610d2057610d1f6114b7565b5b602002602001015160000151826000600684610d3c9190611648565b610d46919061155e565b81518110610d5757610d566114b7565b5b602002602001018181525050868181518110610d7657610d756114b7565b5b602002602001015160200151826001600684610d929190611648565b610d9c919061155e565b81518110610dad57610dac6114b7565b5b602002602001018181525050858181518110610dcc57610dcb6114b7565b5b602002602001015160000151600160028110610deb57610dea6114b7565b5b6020020151826002600684610e009190611648565b610e0a919061155e565b81518110610e1b57610e1a6114b7565b5b602002602001018181525050858181518110610e3a57610e396114b7565b5b602002602001015160000151600060028110610e5957610e586114b7565b5b6020020151826003600684610e6e9190611648565b610e78919061155e565b81518110610e8957610e886114b7565b5b602002602001018181525050858181518110610ea857610ea76114b7565b5b602002602001015160200151600160028110610ec757610ec66114b7565b5b6020020151826004600684610edc9190611648565b610ee6919061155e565b81518110610ef757610ef66114b7565b5b602002602001018181525050858181518110610f1657610f156114b7565b5b602002602001015160200151600060028110610f3557610f346114b7565b5b6020020151826005600684610f4a9190611648565b610f54919061155e565b81518110610f6557610f646114b7565b5b6020026020010181815250508080610f7c90611515565b915050610d05565b50610f8d6110b4565b6000602082602086026020860160086107d05a03fa90508060008114610fb257610fb4565bfe5b5080610fbf57600080fd5b600082600060018110610fd557610fd46114b7565b5b602002015114159550505050505092915050565b6040518060a00160405280610ffc611030565b815260200161100961108e565b815260200161101661108e565b815260200161102361108e565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b60405180604001604052806110a16110d6565b81526020016110ae6110d6565b81525090565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111558261110c565b810181811067ffffffffffffffff821117156111745761117361111d565b5b80604052505050565b60006111876110f8565b9050611193828261114c565b919050565b6000819050919050565b6111ab81611198565b81146111b657600080fd5b50565b6000813590506111c8816111a2565b92915050565b6000604082840312156111e4576111e3611107565b5b6111ee604061117d565b905060006111fe848285016111b9565b6000830152506020611212848285016111b9565b60208301525092915050565b600080fd5b600067ffffffffffffffff82111561123e5761123d61111d565b5b602082029050919050565b600080fd5b600061126161125c84611223565b61117d565b9050806020840283018581111561127b5761127a611249565b5b835b818110156112a4578061129088826111b9565b84526020840193505060208101905061127d565b5050509392505050565b600082601f8301126112c3576112c261121e565b5b60026112d084828561124e565b91505092915050565b6000608082840312156112ef576112ee611107565b5b6112f9604061117d565b90506000611309848285016112ae565b600083015250604061131d848285016112ae565b60208301525092915050565b600061010082840312156113405761133f611107565b5b61134a606061117d565b9050600061135a848285016111ce565b600083015250604061136e848285016112d9565b60208301525060c0611382848285016111ce565b60408301525092915050565b600067ffffffffffffffff8211156113a9576113a861111d565b5b602082029050919050565b60006113c76113c28461138e565b61117d565b905080602084028301858111156113e1576113e0611249565b5b835b8181101561140a57806113f688826111b9565b8452602084019350506020810190506113e3565b5050509392505050565b600082601f8301126114295761142861121e565b5b60056114368482856113b4565b91505092915050565b6000806101a0838503121561145757611456611102565b5b600061146585828601611329565b92505061010061147785828601611414565b9150509250929050565b60008115159050919050565b61149681611481565b82525050565b60006020820190506114b1600083018461148d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061152082611198565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611553576115526114e6565b5b600182019050919050565b600061156982611198565b915061157483611198565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115a9576115a86114e6565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006115ee82611198565b91506115f983611198565b925082611609576116086115b4565b5b828206905092915050565b600061161f82611198565b915061162a83611198565b92508282101561163d5761163c6114e6565b5b828203905092915050565b600061165382611198565b915061165e83611198565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611697576116966114e6565b5b82820290509291505056fea2646970667358221220dc9d99ad4efc49bf67d59d33972a0d191e94df7a3d73e1f3679f7e87a8ce87a964736f6c63430008090033000000000000000000000000b316940b687daa87392157e2ecfec1b9e182423d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003497556f7d0bf602d4237ecb8ae92840d09e4f630000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c8834c1fcf0df6623fc8c8ed25064a4148d9938803fae82f38bf01d9799d57fdda64fad4ac44e4c2c2f16c5bf8e1873d0a3e1993

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c806391b7f5ed1161007f578063c3f243af11610059578063c3f243af1461029d578063ce072163146102da578063f175a2d7146102f1578063f2fde38b1461032e576100dd565b806391b7f5ed1461020c57806396248d1214610235578063a035b1fe14610272576100dd565b8063775d0df0116100bb578063775d0df01461015f5780637fb0ac831461019c5780638da5cb5b146101c5578063903a4d31146101f0576100dd565b80635022a31f146100e25780636bd09a531461011f578063715018a614610148575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190610e84565b610357565b6040516101169190610ee1565b60405180910390f35b34801561012b57600080fd5b5061014660048036038101906101419190610fbf565b61062a565b005b34801561015457600080fd5b5061015d6106a1565b005b34801561016b57600080fd5b5061018660048036038101906101819190611008565b6106b5565b6040516101939190610ee1565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190610fbf565b6106d5565b005b3480156101d157600080fd5b506101da61074c565b6040516101e79190611076565b60405180910390f35b61020a600480360381019061020591906110b3565b610775565b005b34801561021857600080fd5b50610233600480360381019061022e9190611008565b610927565b005b34801561024157600080fd5b5061025c60048036038101906102579190611121565b610939565b6040516102699190610ee1565b60405180910390f35b34801561027e57600080fd5b50610287610a58565b6040516102949190611170565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190611008565b610a5e565b6040516102d19190610ee1565b60405180910390f35b3480156102e657600080fd5b506102ef610a7e565b005b3480156102fd57600080fd5b5061031860048036038101906103139190611008565b610ad6565b6040516103259190610ee1565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061118b565b610b00565b005b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d61af5c836000600581106103ab576103aa6111b8565b5b60200201516040518263ffffffff1660e01b81526004016103cc9190611170565b60206040518083038186803b1580156103e457600080fd5b505afa1580156103f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041c9190611213565b61045b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610452906112e9565b60405180910390fd5b61047c82600260058110610472576104716111b8565b5b6020020151610ad6565b6104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b29061137b565b60405180910390fd5b60036000836004600581106104d3576104d26111b8565b5b6020020151815260200190815260200160002060009054906101000a900460ff1615610534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052b906113e7565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bcb9988684846040518363ffffffff1660e01b81526004016105919291906115e2565b60206040518083038186803b1580156105a957600080fd5b505afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190611213565b610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061790611659565b60405180910390fd5b6001905092915050565b610632610b84565b60005b81518160ff16101561069d57600060026000848460ff168151811061065d5761065c6111b8565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610695906116b5565b915050610635565b5050565b6106a9610b84565b6106b36000610c02565b565b60036020528060005260406000206000915054906101000a900460ff1681565b6106dd610b84565b60005b81518160ff16101561074857600160026000848460ff1681518110610708576107076111b8565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610740906116b5565b9150506106e0565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001543410156107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b19061172b565b60405180910390fd5b6107fb82826005806020026040519081016040528092919082600560200280828437600081840152601f19601f820116905080830192505050505050610357565b61080457600080fd5b6001600360008360046005811061081e5761081d6111b8565b5b6020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060008160016005811061085e5761085d6111b8565b5b602002013582600360058110610877576108766111b8565b5b602002013560405160200161088d9291906117a2565b60405160208183030381529060405280519060200120905060016004600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd198fa8523413333ec863279d1630fa354ecc8b110ae00f9ca98c8b498fb46873383600360058110610907576109066111b8565b5b602002013560405161091a9291906117ce565b60405180910390a1505050565b61092f610b84565b8060018190555050565b6000600460008484604051602001610952929190611820565b60405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a900460ff1680610a505750600660149054906101000a900460ff168015610a4f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166396248d1284846040518363ffffffff1660e01b81526004016109fe9291906117ce565b60206040518083038186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190611213565b5b5b905092915050565b60015481565b60026020528060005260406000206000915054906101000a900460ff1681565b610a86610b84565b610a8e61074c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ad3573d6000803e3d6000fd5b50565b60006002600083815260200190815260200160002060009054906101000a900460ff169050919050565b610b08610b84565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906118be565b60405180910390fd5b610b8181610c02565b50565b610b8c610cc6565b73ffffffffffffffffffffffffffffffffffffffff16610baa61074c565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf79061192a565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b60006101008284031215610cfe57610cfd610ce2565b5b81905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d5582610d0c565b810181811067ffffffffffffffff82111715610d7457610d73610d1d565b5b80604052505050565b6000610d87610cce565b9050610d938282610d4c565b919050565b600067ffffffffffffffff821115610db357610db2610d1d565b5b602082029050919050565b600080fd5b6000819050919050565b610dd681610dc3565b8114610de157600080fd5b50565b600081359050610df381610dcd565b92915050565b6000610e0c610e0784610d98565b610d7d565b90508060208402830185811115610e2657610e25610dbe565b5b835b81811015610e4f5780610e3b8882610de4565b845260208401935050602081019050610e28565b5050509392505050565b600082601f830112610e6e57610e6d610d07565b5b6005610e7b848285610df9565b91505092915050565b6000806101a08385031215610e9c57610e9b610cd8565b5b6000610eaa85828601610ce7565b925050610100610ebc85828601610e59565b9150509250929050565b60008115159050919050565b610edb81610ec6565b82525050565b6000602082019050610ef66000830184610ed2565b92915050565b600067ffffffffffffffff821115610f1757610f16610d1d565b5b602082029050602081019050919050565b6000610f3b610f3684610efc565b610d7d565b90508083825260208201905060208402830185811115610f5e57610f5d610dbe565b5b835b81811015610f875780610f738882610de4565b845260208401935050602081019050610f60565b5050509392505050565b600082601f830112610fa657610fa5610d07565b5b8135610fb6848260208601610f28565b91505092915050565b600060208284031215610fd557610fd4610cd8565b5b600082013567ffffffffffffffff811115610ff357610ff2610cdd565b5b610fff84828501610f91565b91505092915050565b60006020828403121561101e5761101d610cd8565b5b600061102c84828501610de4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061106082611035565b9050919050565b61107081611055565b82525050565b600060208201905061108b6000830184611067565b92915050565b6000819050826020600502820111156110ad576110ac610dbe565b5b92915050565b6000806101a083850312156110cb576110ca610cd8565b5b60006110d985828601610ce7565b9250506101006110eb85828601611091565b9150509250929050565b6110fe81611055565b811461110957600080fd5b50565b60008135905061111b816110f5565b92915050565b6000806040838503121561113857611137610cd8565b5b60006111468582860161110c565b925050602061115785828601610de4565b9150509250929050565b61116a81610dc3565b82525050565b60006020820190506111856000830184611161565b92915050565b6000602082840312156111a1576111a0610cd8565b5b60006111af8482850161110c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6111f081610ec6565b81146111fb57600080fd5b50565b60008151905061120d816111e7565b92915050565b60006020828403121561122957611228610cd8565b5b6000611237848285016111fe565b91505092915050565b600082825260208201905092915050565b7f54686520726f6f742070726f766964656420776173206e6f7420666f756e642060008201527f696e20746865204d65726b6c652074726565277320726563656e7420726f6f7460208201527f206c697374000000000000000000000000000000000000000000000000000000604082015250565b60006112d3604583611240565b91506112de82611251565b606082019050919050565b60006020820190508181036000830152611302816112c6565b9050919050565b7f50726f6f66206d75737420636f6d652066726f6d20636f72726563742069737360008201527f7565722773206164647265737300000000000000000000000000000000000000602082015250565b6000611365602d83611240565b915061137082611309565b604082019050919050565b6000602082019050818103600083015261139481611358565b9050919050565b7f4f6e6520706572736f6e2063616e206f6e6c7920766572696679206f6e636500600082015250565b60006113d1601f83611240565b91506113dc8261139b565b602082019050919050565b60006020820190508181036000830152611400816113c4565b9050919050565b600082905092915050565b60006114216020840184610de4565b905092915050565b61143281610dc3565b82525050565b604082016114496000830183611412565b6114566000850182611429565b506114646020830183611412565b6114716020850182611429565b50505050565b600082905092915050565b600082905092915050565b82818337600083830152505050565b6114a86040838361148d565b5050565b608082016114bd6000830183611482565b6114ca600085018261149c565b506114d86040830183611482565b6114e5604085018261149c565b50505050565b61010082016114fd6000830183611407565b61150a6000850182611438565b506115186040830183611477565b61152560408501826114ac565b5061153360c0830183611407565b61154060c0850182611438565b50505050565b600060059050919050565b600081905092915050565b6000819050919050565b60006115728383611429565b60208301905092915050565b6000602082019050919050565b61159481611546565b61159e8184611551565b92506115a98261155c565b8060005b838110156115da5781516115c18782611566565b96506115cc8361157e565b9250506001810190506115ad565b505050505050565b60006101a0820190506115f860008301856114eb565b61160661010083018461158b565b9392505050565b7f4661696c656420746f20766572696679205a4b50000000000000000000000000600082015250565b6000611643601483611240565b915061164e8261160d565b602082019050919050565b6000602082019050818103600083015261167281611636565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b60006116c0826116a8565b915060ff8214156116d4576116d3611679565b5b600182019050919050565b7f4d697373696e67207061796d656e740000000000000000000000000000000000600082015250565b6000611715600f83611240565b9150611720826116df565b602082019050919050565b6000602082019050818103600083015261174481611708565b9050919050565b60008160601b9050919050565b60006117638261174b565b9050919050565b61177b61177682611035565b611758565b82525050565b6000819050919050565b61179c61179782610dc3565b611781565b82525050565b60006117ae828561176a565b6014820191506117be828461178b565b6020820191508190509392505050565b60006040820190506117e36000830185611067565b6117f06020830184611161565b9392505050565b600061180282611758565b9050919050565b61181a61181582611055565b6117f7565b82525050565b600061182c8285611809565b60148201915061183c828461178b565b6020820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006118a8602683611240565b91506118b38261184c565b604082019050919050565b600060208201905081810360008301526118d78161189b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611914602083611240565b915061191f826118de565b602082019050919050565b6000602082019050818103600083015261194381611907565b905091905056fea26469706673582212202947c55672ae4574e91719254617011bbc0c8c9a39506c5c5b9ccbf064f5aabd64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b316940b687daa87392157e2ecfec1b9e182423d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003497556f7d0bf602d4237ecb8ae92840d09e4f630000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c8834c1fcf0df6623fc8c8ed25064a4148d9938803fae82f38bf01d9799d57fdda64fad4ac44e4c2c2f16c5bf8e1873d0a3e1993

-----Decoded View---------------
Arg [0] : roots_ (address): 0xb316940b687DAa87392157e2ECfeC1b9e182423d
Arg [1] : issuers_ (uint256[]): 1144726183143482297049508718223886886488380117896,1800252790190408162496944851144659187813457198890711068413419637171073980819
Arg [2] : price_ (uint256): 0
Arg [3] : oldContract_ (address): 0x3497556f7D0bF602D4237Ecb8ae92840D09E4f63

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000b316940b687daa87392157e2ecfec1b9e182423d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000003497556f7d0bf602d4237ecb8ae92840d09e4f63
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 000000000000000000000000c8834c1fcf0df6623fc8c8ed25064a4148d99388
Arg [6] : 03fae82f38bf01d9799d57fdda64fad4ac44e4c2c2f16c5bf8e1873d0a3e1993


Deployed Bytecode Sourcemap

19935:2995:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21481:847;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14866:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13255:103;;;;;;;;;;;;;:::i;:::-;;20015:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14637:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12607:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22465:462;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14312:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20949:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14123:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14212:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14409:111;;;;;;;;;;;;;:::i;:::-;;15109:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13513:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21481:847;21568:12;21601:5;;;;;;;;;;;:18;;;21620:5;21626:1;21620:8;;;;;;;:::i;:::-;;;;;;21601:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21593:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22070:23;22084:5;22090:1;22084:8;;;;;;;:::i;:::-;;;;;;22070:13;:23::i;:::-;22062:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22164:13;:23;22178:5;22184:1;22178:8;;;;;;;:::i;:::-;;;;;;22164:23;;;;;;;;;;;;;;;;;;;;;22163:24;22155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:8;;;;;;;;;;;:17;;;22260:5;22267;22242:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22234:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22316:4;22309:11;;21481:847;;;;:::o;14866:235::-;12493:13;:11;:13::i;:::-;14948:7:::1;14966:116;14982:15;:22;14978:1;:26;;;14966:116;;;15063:5;15026:14;:34;15041:15;15057:1;15041:18;;;;;;;;;;:::i;:::-;;;;;;;;15026:34;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;15006:3;;;;;:::i;:::-;;;;14966:116;;;14937:164;14866:235:::0;:::o;13255:103::-;12493:13;:11;:13::i;:::-;13320:30:::1;13347:1;13320:18;:30::i;:::-;13255:103::o:0;20015:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;14637:221::-;12493:13;:11;:13::i;:::-;14718:7:::1;14736:115;14752:15;:22;14748:1;:26;;;14736:115;;;14833:4;14796:14;:34;14811:15;14827:1;14811:18;;;;;;;;;;:::i;:::-;;;;;;;;14796:34;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;14776:3;;;;;:::i;:::-;;;;14736:115;;;14707:151;14637:221:::0;:::o;12607:87::-;12653:7;12680:6;;;;;;;;;;;12673:13;;12607:87;:::o;22465:462::-;14584:5;;14571:9;:18;;14563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22576:26:::1;22589:5;22596;22576:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:26::i;:::-;22568:35;;;::::0;::::1;;22640:4;22614:13;:23;22628:5;22634:1;22628:8;;;;;;;:::i;:::-;;;;;;22614:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22677:14;22729:5;22735:1;22729:8;;;;;;;:::i;:::-;;;;;;22740:5;22746:1;22740:8;;;;;;;:::i;:::-;;;;;;22704:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22694:56;;;;;;22677:73;;22867:4;22843:13;:21;22857:6;22843:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22887:32;22898:10;22910:5;22916:1;22910:8;;;;;;;:::i;:::-;;;;;;22887:32;;;;;;;:::i;:::-;;;;;;;;22557:370;22465:462:::0;;:::o;14312:89::-;12493:13;:11;:13::i;:::-;14385:8:::1;14377:5;:16;;;;14312:89:::0;:::o;20949:282::-;21026:11;21072:13;:58;21113:4;21119:8;21096:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21086:43;;;;;;21072:58;;;;;;;;;;;;;;;;;;;;;21057:166;;;;21150:13;;;;;;;;;;;:62;;;;;21167:11;;;;;;;;;;;:29;;;21197:4;21203:8;21167:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21150:62;21057:166;21050:173;;20949:282;;;;:::o;14123:17::-;;;;:::o;14212:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;14409:111::-;12493:13;:11;:13::i;:::-;14472:7:::1;:5;:7::i;:::-;14464:25;;:48;14490:21;14464:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14409:111::o:0;15109:132::-;15173:4;15197:14;:29;15212:13;15197:29;;;;;;;;;;;;;;;;;;;;;15190:36;;15109:132;;;:::o;13513:201::-;12493:13;:11;:13::i;:::-;13622:1:::1;13602:22;;:8;:22;;;;13594:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13678:28;13697:8;13678:18;:28::i;:::-;13513:201:::0;:::o;12772:132::-;12847:12;:10;:12::i;:::-;12836:23;;:7;:5;:7::i;:::-;:23;;;12828:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12772:132::o;13874:191::-;13948:16;13967:6;;;;;;;;;;;13948:25;;13993:8;13984:6;;:17;;;;;;;;;;;;;;;;;;14048:8;14017:40;;14038:8;14017:40;;;;;;;;;;;;13937:128;13874:191;:::o;11316:98::-;11369:7;11396:10;11389:17;;11316:98;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;477:229;547:5;588:3;579:6;574:3;570:16;566:26;563:113;;;595:79;;:::i;:::-;563:113;694:6;685:15;;477:229;;;;:::o;712:117::-;821:1;818;811:12;835:102;876:6;927:2;923:7;918:2;911:5;907:14;903:28;893:38;;835:102;;;:::o;943:180::-;991:77;988:1;981:88;1088:4;1085:1;1078:15;1112:4;1109:1;1102:15;1129:281;1212:27;1234:4;1212:27;:::i;:::-;1204:6;1200:40;1342:6;1330:10;1327:22;1306:18;1294:10;1291:34;1288:62;1285:88;;;1353:18;;:::i;:::-;1285:88;1393:10;1389:2;1382:22;1172:238;1129:281;;:::o;1416:129::-;1450:6;1477:20;;:::i;:::-;1467:30;;1506:33;1534:4;1526:6;1506:33;:::i;:::-;1416:129;;;:::o;1551:249::-;1626:4;1716:18;1708:6;1705:30;1702:56;;;1738:18;;:::i;:::-;1702:56;1788:4;1780:6;1776:17;1768:25;;1551:249;;;:::o;1806:117::-;1915:1;1912;1905:12;1929:77;1966:7;1995:5;1984:16;;1929:77;;;:::o;2012:122::-;2085:24;2103:5;2085:24;:::i;:::-;2078:5;2075:35;2065:63;;2124:1;2121;2114:12;2065:63;2012:122;:::o;2140:139::-;2186:5;2224:6;2211:20;2202:29;;2240:33;2267:5;2240:33;:::i;:::-;2140:139;;;;:::o;2303:643::-;2397:5;2422:79;2438:62;2493:6;2438:62;:::i;:::-;2422:79;:::i;:::-;2413:88;;2521:5;2574:4;2566:6;2562:17;2554:6;2550:30;2603:3;2595:6;2592:15;2589:122;;;2622:79;;:::i;:::-;2589:122;2737:6;2720:220;2754:6;2749:3;2746:15;2720:220;;;2829:3;2858:37;2891:3;2879:10;2858:37;:::i;:::-;2853:3;2846:50;2925:4;2920:3;2916:14;2909:21;;2796:144;2780:4;2775:3;2771:14;2764:21;;2720:220;;;2724:21;2403:543;;2303:643;;;;;:::o;2970:339::-;3039:5;3088:3;3081:4;3073:6;3069:17;3065:27;3055:122;;3096:79;;:::i;:::-;3055:122;3200:4;3222:81;3299:3;3291:6;3283;3222:81;:::i;:::-;3213:90;;3045:264;2970:339;;;;:::o;3315:570::-;3430:6;3438;3487:3;3475:9;3466:7;3462:23;3458:33;3455:120;;;3494:79;;:::i;:::-;3455:120;3614:1;3639:77;3708:7;3699:6;3688:9;3684:22;3639:77;:::i;:::-;3629:87;;3585:141;3765:3;3792:76;3860:7;3851:6;3840:9;3836:22;3792:76;:::i;:::-;3782:86;;3736:142;3315:570;;;;;:::o;3891:90::-;3925:7;3968:5;3961:13;3954:21;3943:32;;3891:90;;;:::o;3987:109::-;4068:21;4083:5;4068:21;:::i;:::-;4063:3;4056:34;3987:109;;:::o;4102:210::-;4189:4;4227:2;4216:9;4212:18;4204:26;;4240:65;4302:1;4291:9;4287:17;4278:6;4240:65;:::i;:::-;4102:210;;;;:::o;4318:311::-;4395:4;4485:18;4477:6;4474:30;4471:56;;;4507:18;;:::i;:::-;4471:56;4557:4;4549:6;4545:17;4537:25;;4617:4;4611;4607:15;4599:23;;4318:311;;;:::o;4652:710::-;4748:5;4773:81;4789:64;4846:6;4789:64;:::i;:::-;4773:81;:::i;:::-;4764:90;;4874:5;4903:6;4896:5;4889:21;4937:4;4930:5;4926:16;4919:23;;4990:4;4982:6;4978:17;4970:6;4966:30;5019:3;5011:6;5008:15;5005:122;;;5038:79;;:::i;:::-;5005:122;5153:6;5136:220;5170:6;5165:3;5162:15;5136:220;;;5245:3;5274:37;5307:3;5295:10;5274:37;:::i;:::-;5269:3;5262:50;5341:4;5336:3;5332:14;5325:21;;5212:144;5196:4;5191:3;5187:14;5180:21;;5136:220;;;5140:21;4754:608;;4652:710;;;;;:::o;5385:370::-;5456:5;5505:3;5498:4;5490:6;5486:17;5482:27;5472:122;;5513:79;;:::i;:::-;5472:122;5630:6;5617:20;5655:94;5745:3;5737:6;5730:4;5722:6;5718:17;5655:94;:::i;:::-;5646:103;;5462:293;5385:370;;;;:::o;5761:539::-;5845:6;5894:2;5882:9;5873:7;5869:23;5865:32;5862:119;;;5900:79;;:::i;:::-;5862:119;6048:1;6037:9;6033:17;6020:31;6078:18;6070:6;6067:30;6064:117;;;6100:79;;:::i;:::-;6064:117;6205:78;6275:7;6266:6;6255:9;6251:22;6205:78;:::i;:::-;6195:88;;5991:302;5761:539;;;;:::o;6306:329::-;6365:6;6414:2;6402:9;6393:7;6389:23;6385:32;6382:119;;;6420:79;;:::i;:::-;6382:119;6540:1;6565:53;6610:7;6601:6;6590:9;6586:22;6565:53;:::i;:::-;6555:63;;6511:117;6306:329;;;;:::o;6641:126::-;6678:7;6718:42;6711:5;6707:54;6696:65;;6641:126;;;:::o;6773:96::-;6810:7;6839:24;6857:5;6839:24;:::i;:::-;6828:35;;6773:96;;;:::o;6875:118::-;6962:24;6980:5;6962:24;:::i;:::-;6957:3;6950:37;6875:118;;:::o;6999:222::-;7092:4;7130:2;7119:9;7115:18;7107:26;;7143:71;7211:1;7200:9;7196:17;7187:6;7143:71;:::i;:::-;6999:222;;;;:::o;7245:249::-;7316:8;7347:6;7335:18;;7400:3;7392:4;7386;7382:15;7372:8;7368:30;7365:39;7362:126;;;7407:79;;:::i;:::-;7362:126;7245:249;;;;:::o;7500:574::-;7617:6;7625;7674:3;7662:9;7653:7;7649:23;7645:33;7642:120;;;7681:79;;:::i;:::-;7642:120;7801:1;7826:77;7895:7;7886:6;7875:9;7871:22;7826:77;:::i;:::-;7816:87;;7772:141;7952:3;7979:78;8049:7;8040:6;8029:9;8025:22;7979:78;:::i;:::-;7969:88;;7923:144;7500:574;;;;;:::o;8080:122::-;8153:24;8171:5;8153:24;:::i;:::-;8146:5;8143:35;8133:63;;8192:1;8189;8182:12;8133:63;8080:122;:::o;8208:139::-;8254:5;8292:6;8279:20;8270:29;;8308:33;8335:5;8308:33;:::i;:::-;8208:139;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:118::-;8920:24;8938:5;8920:24;:::i;:::-;8915:3;8908:37;8833:118;;:::o;8957:222::-;9050:4;9088:2;9077:9;9073:18;9065:26;;9101:71;9169:1;9158:9;9154:17;9145:6;9101:71;:::i;:::-;8957:222;;;;:::o;9185:329::-;9244:6;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9185:329;;;;:::o;9520:180::-;9568:77;9565:1;9558:88;9665:4;9662:1;9655:15;9689:4;9686:1;9679:15;9706:116;9776:21;9791:5;9776:21;:::i;:::-;9769:5;9766:32;9756:60;;9812:1;9809;9802:12;9756:60;9706:116;:::o;9828:137::-;9882:5;9913:6;9907:13;9898:22;;9929:30;9953:5;9929:30;:::i;:::-;9828:137;;;;:::o;9971:345::-;10038:6;10087:2;10075:9;10066:7;10062:23;10058:32;10055:119;;;10093:79;;:::i;:::-;10055:119;10213:1;10238:61;10291:7;10282:6;10271:9;10267:22;10238:61;:::i;:::-;10228:71;;10184:125;9971:345;;;;:::o;10322:169::-;10406:11;10440:6;10435:3;10428:19;10480:4;10475:3;10471:14;10456:29;;10322:169;;;;:::o;10497:293::-;10637:34;10633:1;10625:6;10621:14;10614:58;10706:34;10701:2;10693:6;10689:15;10682:59;10775:7;10770:2;10762:6;10758:15;10751:32;10497:293;:::o;10796:366::-;10938:3;10959:67;11023:2;11018:3;10959:67;:::i;:::-;10952:74;;11035:93;11124:3;11035:93;:::i;:::-;11153:2;11148:3;11144:12;11137:19;;10796:366;;;:::o;11168:419::-;11334:4;11372:2;11361:9;11357:18;11349:26;;11421:9;11415:4;11411:20;11407:1;11396:9;11392:17;11385:47;11449:131;11575:4;11449:131;:::i;:::-;11441:139;;11168:419;;;:::o;11593:232::-;11733:34;11729:1;11721:6;11717:14;11710:58;11802:15;11797:2;11789:6;11785:15;11778:40;11593:232;:::o;11831:366::-;11973:3;11994:67;12058:2;12053:3;11994:67;:::i;:::-;11987:74;;12070:93;12159:3;12070:93;:::i;:::-;12188:2;12183:3;12179:12;12172:19;;11831:366;;;:::o;12203:419::-;12369:4;12407:2;12396:9;12392:18;12384:26;;12456:9;12450:4;12446:20;12442:1;12431:9;12427:17;12420:47;12484:131;12610:4;12484:131;:::i;:::-;12476:139;;12203:419;;;:::o;12628:181::-;12768:33;12764:1;12756:6;12752:14;12745:57;12628:181;:::o;12815:366::-;12957:3;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13054:93;13143:3;13054:93;:::i;:::-;13172:2;13167:3;13163:12;13156:19;;12815:366;;;:::o;13187:419::-;13353:4;13391:2;13380:9;13376:18;13368:26;;13440:9;13434:4;13430:20;13426:1;13415:9;13411:17;13404:47;13468:131;13594:4;13468:131;:::i;:::-;13460:139;;13187:419;;;:::o;13612:110::-;13688:5;13713:3;13704:12;;13612:110;;;;:::o;13728:122::-;13780:5;13805:39;13840:2;13835:3;13831:12;13826:3;13805:39;:::i;:::-;13796:48;;13728:122;;;;:::o;13856:108::-;13933:24;13951:5;13933:24;:::i;:::-;13928:3;13921:37;13856:108;;:::o;14026:541::-;14159:4;14154:3;14150:14;14226:50;14270:4;14263:5;14259:16;14252:5;14226:50;:::i;:::-;14289:63;14346:4;14341:3;14337:14;14323:12;14289:63;:::i;:::-;14174:188;14424:50;14468:4;14461:5;14457:16;14450:5;14424:50;:::i;:::-;14487:63;14544:4;14539:3;14535:14;14521:12;14487:63;:::i;:::-;14372:188;14128:439;14026:541;;:::o;14573:111::-;14650:5;14675:3;14666:12;;14573:111;;;;:::o;14690:::-;14767:5;14792:3;14783:12;;14690:111;;;;:::o;14807:154::-;14891:6;14886:3;14881;14868:30;14953:1;14944:6;14939:3;14935:16;14928:27;14807:154;;;:::o;14999:160::-;15112:41;15148:4;15143:3;15136:5;15112:41;:::i;:::-;14999:160;;:::o;15221:689::-;15356:4;15351:3;15347:14;15423:75;15492:4;15485:5;15481:16;15474:5;15423:75;:::i;:::-;15511:111;15616:4;15611:3;15607:14;15593:12;15511:111;:::i;:::-;15371:261;15694:75;15763:4;15756:5;15752:16;15745:5;15694:75;:::i;:::-;15782:111;15887:4;15882:3;15878:14;15864:12;15782:111;:::i;:::-;15642:261;15325:585;15221:689;;:::o;15952:964::-;16095:6;16090:3;16086:16;16164:74;16232:4;16225:5;16221:16;16214:5;16164:74;:::i;:::-;16251:109;16354:4;16349:3;16345:14;16331:12;16251:109;:::i;:::-;16112:258;16432:75;16501:4;16494:5;16490:16;16483:5;16432:75;:::i;:::-;16520:111;16625:4;16620:3;16616:14;16602:12;16520:111;:::i;:::-;16380:261;16703:74;16771:4;16764:5;16760:16;16753:5;16703:74;:::i;:::-;16790:109;16893:4;16888:3;16884:14;16870:12;16790:109;:::i;:::-;16651:258;16064:852;15952:964;;:::o;16922:104::-;16987:6;17015:4;17005:14;;16922:104;;;:::o;17032:143::-;17129:11;17166:3;17151:18;;17032:143;;;;:::o;17181:98::-;17246:4;17269:3;17261:11;;17181:98;;;:::o;17285:179::-;17354:10;17375:46;17417:3;17409:6;17375:46;:::i;:::-;17453:4;17448:3;17444:14;17430:28;;17285:179;;;;:::o;17470:111::-;17538:4;17570;17565:3;17561:14;17553:22;;17470:111;;;:::o;17619:694::-;17755:52;17801:5;17755:52;:::i;:::-;17823:84;17900:6;17895:3;17823:84;:::i;:::-;17816:91;;17931:54;17979:5;17931:54;:::i;:::-;18008:7;18039:1;18024:282;18049:6;18046:1;18043:13;18024:282;;;18125:6;18119:13;18152:63;18211:3;18196:13;18152:63;:::i;:::-;18145:70;;18238:58;18289:6;18238:58;:::i;:::-;18228:68;;18084:222;18071:1;18068;18064:9;18059:14;;18024:282;;;18028:14;17731:582;;;17619:694;;:::o;18319:518::-;18532:4;18570:3;18559:9;18555:19;18547:27;;18584:117;18698:1;18687:9;18683:17;18674:6;18584:117;:::i;:::-;18711:119;18825:3;18814:9;18810:19;18801:6;18711:119;:::i;:::-;18319:518;;;;;:::o;18843:170::-;18983:22;18979:1;18971:6;18967:14;18960:46;18843:170;:::o;19019:366::-;19161:3;19182:67;19246:2;19241:3;19182:67;:::i;:::-;19175:74;;19258:93;19347:3;19258:93;:::i;:::-;19376:2;19371:3;19367:12;19360:19;;19019:366;;;:::o;19391:419::-;19557:4;19595:2;19584:9;19580:18;19572:26;;19644:9;19638:4;19634:20;19630:1;19619:9;19615:17;19608:47;19672:131;19798:4;19672:131;:::i;:::-;19664:139;;19391:419;;;:::o;19816:180::-;19864:77;19861:1;19854:88;19961:4;19958:1;19951:15;19985:4;19982:1;19975:15;20002:86;20037:7;20077:4;20070:5;20066:16;20055:27;;20002:86;;;:::o;20094:167::-;20131:3;20154:22;20170:5;20154:22;:::i;:::-;20145:31;;20198:4;20191:5;20188:15;20185:41;;;20206:18;;:::i;:::-;20185:41;20253:1;20246:5;20242:13;20235:20;;20094:167;;;:::o;20267:165::-;20407:17;20403:1;20395:6;20391:14;20384:41;20267:165;:::o;20438:366::-;20580:3;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20438:366;;;:::o;20810:419::-;20976:4;21014:2;21003:9;20999:18;20991:26;;21063:9;21057:4;21053:20;21049:1;21038:9;21034:17;21027:47;21091:131;21217:4;21091:131;:::i;:::-;21083:139;;20810:419;;;:::o;21235:94::-;21268:8;21316:5;21312:2;21308:14;21287:35;;21235:94;;;:::o;21335:::-;21374:7;21403:20;21417:5;21403:20;:::i;:::-;21392:31;;21335:94;;;:::o;21435:157::-;21540:45;21560:24;21578:5;21560:24;:::i;:::-;21540:45;:::i;:::-;21535:3;21528:58;21435:157;;:::o;21598:79::-;21637:7;21666:5;21655:16;;21598:79;;;:::o;21683:157::-;21788:45;21808:24;21826:5;21808:24;:::i;:::-;21788:45;:::i;:::-;21783:3;21776:58;21683:157;;:::o;21846:397::-;21986:3;22001:75;22072:3;22063:6;22001:75;:::i;:::-;22101:2;22096:3;22092:12;22085:19;;22114:75;22185:3;22176:6;22114:75;:::i;:::-;22214:2;22209:3;22205:12;22198:19;;22234:3;22227:10;;21846:397;;;;;:::o;22249:332::-;22370:4;22408:2;22397:9;22393:18;22385:26;;22421:71;22489:1;22478:9;22474:17;22465:6;22421:71;:::i;:::-;22502:72;22570:2;22559:9;22555:18;22546:6;22502:72;:::i;:::-;22249:332;;;;;:::o;22587:100::-;22626:7;22655:26;22675:5;22655:26;:::i;:::-;22644:37;;22587:100;;;:::o;22693:157::-;22798:45;22818:24;22836:5;22818:24;:::i;:::-;22798:45;:::i;:::-;22793:3;22786:58;22693:157;;:::o;22856:397::-;22996:3;23011:75;23082:3;23073:6;23011:75;:::i;:::-;23111:2;23106:3;23102:12;23095:19;;23124:75;23195:3;23186:6;23124:75;:::i;:::-;23224:2;23219:3;23215:12;23208:19;;23244:3;23237:10;;22856:397;;;;;:::o;23259:225::-;23399:34;23395:1;23387:6;23383:14;23376:58;23468:8;23463:2;23455:6;23451:15;23444:33;23259:225;:::o;23490:366::-;23632:3;23653:67;23717:2;23712:3;23653:67;:::i;:::-;23646:74;;23729:93;23818:3;23729:93;:::i;:::-;23847:2;23842:3;23838:12;23831:19;;23490:366;;;:::o;23862:419::-;24028:4;24066:2;24055:9;24051:18;24043:26;;24115:9;24109:4;24105:20;24101:1;24090:9;24086:17;24079:47;24143:131;24269:4;24143:131;:::i;:::-;24135:139;;23862:419;;;:::o;24287:182::-;24427:34;24423:1;24415:6;24411:14;24404:58;24287:182;:::o;24475:366::-;24617:3;24638:67;24702:2;24697:3;24638:67;:::i;:::-;24631:74;;24714:93;24803:3;24714:93;:::i;:::-;24832:2;24827:3;24823:12;24816:19;;24475:366;;;:::o;24847:419::-;25013:4;25051:2;25040:9;25036:18;25028:26;;25100:9;25094:4;25090:20;25086:1;25075:9;25071:17;25064:47;25128:131;25254:4;25128:131;:::i;:::-;25120:139;;24847:419;;;:::o

Swarm Source

ipfs://dc9d99ad4efc49bf67d59d33972a0d191e94df7a3d73e1f3679f7e87a8ce87a9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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  ]
[ 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.