ETH Price: $3,492.68 (+0.13%)
Gas: 2 Gwei

Contract

0x341157CeCd5DC81A39737258ccF3040DF701F7C9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw188735112023-12-27 0:43:35207 days ago1703637815IN
0x341157Ce...DF701F7C9
0 ETH0.0003790413.32070371
Transfer Ownersh...188438152023-12-22 20:38:59211 days ago1703277539IN
0x341157Ce...DF701F7C9
0 ETH0.0008664126.33395279
Withdraw188436662023-12-22 20:08:59211 days ago1703275739IN
0x341157Ce...DF701F7C9
0 ETH0.0007608426.73863236
Withdraw188436422023-12-22 20:03:59211 days ago1703275439IN
0x341157Ce...DF701F7C9
0 ETH0.0008858631.13214584
Accept Bid188436362023-12-22 20:02:47211 days ago1703275367IN
0x341157Ce...DF701F7C9
0 ETH0.0017434826.87707687
Withdraw188435182023-12-22 19:39:11211 days ago1703273951IN
0x341157Ce...DF701F7C9
0 ETH0.0007625126.79739692
Place Bid188434952023-12-22 19:34:35211 days ago1703273675IN
0x341157Ce...DF701F7C9
1.888 ETH0.0018698432.41701348
Withdraw188434772023-12-22 19:30:59211 days ago1703273459IN
0x341157Ce...DF701F7C9
0 ETH0.0009516433.44368929
Place Bid188434642023-12-22 19:28:23211 days ago1703273303IN
0x341157Ce...DF701F7C9
1.69 ETH0.0019065133.0527083
Withdraw188434612023-12-22 19:27:47211 days ago1703273267IN
0x341157Ce...DF701F7C9
0 ETH0.0010215435.90028293
Place Bid188434472023-12-22 19:24:59211 days ago1703273099IN
0x341157Ce...DF701F7C9
1.618 ETH0.0018447431.98190164
Withdraw188434402023-12-22 19:23:35211 days ago1703273015IN
0x341157Ce...DF701F7C9
0 ETH0.0009490533.35292993
Place Bid188434362023-12-22 19:22:47211 days ago1703272967IN
0x341157Ce...DF701F7C9
1.42 ETH0.001840131.90147067
Withdraw188434292023-12-22 19:21:23211 days ago1703272883IN
0x341157Ce...DF701F7C9
0 ETH0.0010053335.33075296
Place Bid188434022023-12-22 19:15:59211 days ago1703272559IN
0x341157Ce...DF701F7C9
1.268 ETH0.0012459930.70390215
Withdraw188433852023-12-22 19:12:35211 days ago1703272355IN
0x341157Ce...DF701F7C9
0 ETH0.0010219635.91504217
Place Bid188433532023-12-22 19:06:11211 days ago1703271971IN
0x341157Ce...DF701F7C9
1.169 ETH0.0021001436.40962861
Withdraw188433412023-12-22 19:03:47211 days ago1703271827IN
0x341157Ce...DF701F7C9
0 ETH0.0009384532.9801552
Place Bid188433122023-12-22 18:57:59211 days ago1703271479IN
0x341157Ce...DF701F7C9
1.068 ETH0.0018277731.68756006
Withdraw188433082023-12-22 18:57:11211 days ago1703271431IN
0x341157Ce...DF701F7C9
0 ETH0.0009563833.61055825
Place Bid188432882023-12-22 18:52:59211 days ago1703271179IN
0x341157Ce...DF701F7C9
0.7 ETH0.0017739230.75403543
Place Bid188432462023-12-22 18:44:23211 days ago1703270663IN
0x341157Ce...DF701F7C9
0.681 ETH0.0029660233.21825567
Withdraw Bid188432432023-12-22 18:43:47211 days ago1703270627IN
0x341157Ce...DF701F7C9
0 ETH0.0012397934.48847717
Place Bid188432402023-12-22 18:43:11211 days ago1703270591IN
0x341157Ce...DF701F7C9
0.68 ETH0.0020678235.84925696
Place Bid188432382023-12-22 18:42:47211 days ago1703270567IN
0x341157Ce...DF701F7C9
0.1 ETH0.0021247436.83619345
View all transactions

Latest 12 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
188735112023-12-27 0:43:35207 days ago1703637815
0x341157Ce...DF701F7C9
0.051 ETH
188436662023-12-22 20:08:59211 days ago1703275739
0x341157Ce...DF701F7C9
0.05 ETH
188436422023-12-22 20:03:59211 days ago1703275439
0x341157Ce...DF701F7C9
1.888 ETH
188435182023-12-22 19:39:11211 days ago1703273951
0x341157Ce...DF701F7C9
1.69 ETH
188434772023-12-22 19:30:59211 days ago1703273459
0x341157Ce...DF701F7C9
1.618 ETH
188434612023-12-22 19:27:47211 days ago1703273267
0x341157Ce...DF701F7C9
1.42 ETH
188434402023-12-22 19:23:35211 days ago1703273015
0x341157Ce...DF701F7C9
1.268 ETH
188434292023-12-22 19:21:23211 days ago1703272883
0x341157Ce...DF701F7C9
1.269 ETH
188433852023-12-22 19:12:35211 days ago1703272355
0x341157Ce...DF701F7C9
1.068 ETH
188433412023-12-22 19:03:47211 days ago1703271827
0x341157Ce...DF701F7C9
0.7 ETH
188433082023-12-22 18:57:11211 days ago1703271431
0x341157Ce...DF701F7C9
0.681 ETH
188432432023-12-22 18:43:47211 days ago1703270627
0x341157Ce...DF701F7C9
0.68 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Illusion

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2023-12-14
*/

// .-..-.  .-.               _             
// : :: :  : :              :_;            
// : :: :  : :  .-..-. .--. .-. .--. ,-.,-.
// : :: :_ : :_ : :; :`._-.': :' .; :: ,. :
// :_;`.__;`.__;`.__.'`.__.':_;`.__.':_;:_;
//
// SPDX-License-Identifier: MIT
// Copyright Han, 2023

pragma solidity ^0.8.21;

contract Illusion {
    event ArtpieceCreated(address indexed creator);
    event ArtpieceTransferred(address indexed oldOwner, address indexed newOwner);
    event BidAccepted(uint256 value, address indexed fromAddress, address indexed toAddress);
    event BidPlaced(uint256 value, address indexed fromAddress);
    event BidWithdrawn(uint256 value, address indexed fromAddress);
    event ListedForSale(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCanceled(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCompleted(uint256 value, address indexed fromAddress, address indexed toAddress);

    error FundsTransfer();
    error InsufficientFunds();
    error ListedForSaleToSpecificAddress();
    error NoBid();
    error NotForSale();
    error NotOwner();
    error NotRoyaltyRecipient();
    error NotYourBid();
    error NullAddress();
    error RoyaltyTooHigh();

    string public constant MANIFEST = (
        'Do you see what I see?' '\n'
    );

    string public constant CORE = (
        '"use strict";let w=window,d=document,b=d.body;d.body.style.touchAction="none",d.body.style.userSelect="none";let c=d.querySelector("canvas");c||(c=d.createElement("canvas"),c.style.display="block",b.appendChild(c));const mobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),SIGNATURE_SVG="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEyIiBoZWlnaHQ9IjIxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM0IDIwMi44MTNWMjE2aDE3OFYzOGgtMTMuMTg1djE2NC44MTVINDcuMTg1di0uMDAySDM0Wk0xOTcuNjk1IDE0LjY0NVYwSDB2MTk3LjY5NWgxNC42NDVWMTQuNjQ0aDE4My4wNVoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOTQgOTVhMyAzIDAgMCAxIDMtM2gyMS40NThhMyAzIDAgMCAxIDMgM3YyMS40NThhMyAzIDAgMCAxLTMgM0g5N2EzIDMgMCAwIDEtMy0zVjk1WiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg",appendSignature=()=>{const e=d.createElement("img");e.src=SIGNATURE_SVG.trim(),e.style.cssText="width:40px;z-index:50;position:fixed;bottom:20px;right:20px;",b.appendChild(e)};let h={},s={};const glOptions={powerPreference:"high-performance"};mobile&&delete glOptions.powerPreference,window.gl=c.getContext("webgl",glOptions),h.uniform=(e,t)=>{let r=Array.isArray(t)?t.length-1:0,o=[["uniform1f",0,"float"],["uniform2fv",[0,0],"vec2"]],i={};return i.name=e,i.type=o[r][0],i.value=t||o[r][1],i.inner_type=o[r][2],i.location="",i.dirty=!1,i},s.uniforms=[["u_resolution",[0,0]],["u_time",0],["u_mouse",[0,0]]],s.uniforms.forEach(((e,t)=>s.uniforms[t]=h.uniform(e[0],e[1]))),h.resize=()=>{let e=s.uniforms[0],t={x:h.ix.mouse.x/e.value[0],y:h.ix.mouse.y/e.value[1]},r=window.innerWidth,o=window.innerHeight;s.aspect&&(r>o*s.aspect?r=o*s.aspect:o=r/s.aspect);let i=window.devicePixelRatio;e.value[0]=c.width=r*i,e.value[1]=c.height=o*i,c.style.width=r+"px",c.style.height=o+"px",e.dirty=!0,h.ix.set(c.width*t.x,c.height*t.y)},h.ix={start:{x:0,y:0},mouse:{x:0,y:0}},h.ix.events={start:["pointerdown"],move:["pointermove"],stop:["pointerup"]},h.ix.save=()=>{let e=s.uniforms[2];e.value=[h.ix.mouse.x,h.ix.mouse.y],e.dirty=!0},h.ix.set=(e,t)=>{h.ix.mouse={x:e,y:t},h.ix.save()},h.ix.start=e=>{h.ix.start.x=e.clientX,h.ix.start.y=e.clientY;for(let e of h.ix.events.move)d.addEventListener(e,h.ix.move)},h.ix.move=e=>{h.ix.mouse.x+=(e.clientX-h.ix.start.x)*window.devicePixelRatio,h.ix.mouse.y-=(e.clientY-h.ix.start.y)*window.devicePixelRatio,h.ix.start.x=e.clientX,h.ix.start.y=e.clientY,h.ix.save()},h.ix.stop=()=>{for(let e of h.ix.events.move)d.removeEventListener(e,h.ix.move)},h.buildShader=(e,t)=>{let r=gl.createShader(e);return gl.shaderSource(r,t),gl.compileShader(r),r},h.initProgram=(e,t)=>{window.program=s.program=gl.createProgram();const r=h.buildShader(gl.VERTEX_SHADER,t),o=h.buildShader(gl.FRAGMENT_SHADER,e);gl.attachShader(s.program,r),gl.attachShader(s.program,o),gl.linkProgram(s.program),gl.getShaderParameter(r,gl.COMPILE_STATUS)||console.error("V: "+gl.getShaderInfoLog(r)),gl.getShaderParameter(o,gl.COMPILE_STATUS)||console.error("F: "+gl.getShaderInfoLog(o)),gl.getProgramParameter(s.program,gl.LINK_STATUS)||console.error("P: "+gl.getProgramInfoLog(s.program));for(let e in s.uniforms){let t=s.uniforms[e];t.location=gl.getUniformLocation(s.program,t.name),t.dirty=!0}let i=Float32Array.of(-1,1,-1,-1,1,1,1,-1),c=gl.createBuffer(),n=gl.getAttribLocation(s.program,"p");gl.bindBuffer(gl.ARRAY_BUFFER,c),gl.bufferData(gl.ARRAY_BUFFER,i,gl.STATIC_DRAW),gl.enableVertexAttribArray(n),gl.vertexAttribPointer(n,2,gl.FLOAT,!1,0,0),gl.useProgram(s.program)},s.pixel=new Uint8Array(4),h.render=()=>{gl.viewport(0,0,c.width,c.height);let e=s.uniforms[1];e.value=.001*performance.now(),e.dirty=!0;let t=s.uniforms.filter((e=>e.dirty));for(let e in t)gl[t[e].type](t[e].location,t[e].value),t[e].dirty=!1;gl.drawArrays(gl.TRIANGLE_STRIP,0,4),gl.readPixels(0,0,1,1,gl.RGBA,gl.UNSIGNED_BYTE,s.pixel),requestAnimationFrame(h.render)};const init=async()=>{if(gl){const e="attribute vec2 p;void main(){gl_Position=vec4(p,1.0,1.0);}",t="precision highp float;const vec3 v=vec3(.580392156862745),f=vec3(.901960784313726);uniform vec2 u_resolution;uniform float u_time;uniform vec2 u_mouse;const vec3 m=vec3(10,20,50),i=vec3(5,20,40);vec3 t(vec3 v,vec4 f){return v+2.*cross(f.xyz,cross(f.xyz,v)+v*f.w);}vec3 s(vec3 v,float f){return t(v,vec4(0,0,sin(f/2.),cos(f/2.)));}float s(float v){vec3 f=fract(vec3(v)*443.8975);f+=dot(f,f.yzx+19.19);return fract((f.x+f.y)*f.z);}float t(float v){float f=floor(v);return mix(s(f),s(f+1.),smoothstep(0.,1.,fract(v)));}float s(vec3 v,vec3 f,vec3 y,float c){float s=dot(f,f),i,r;vec3 m=v-y;i=2.*dot(f,m);r=dot(m,m)-c*c;return i*i-4.*s*r<0.?-1.:(-i-sqrt(i*i-4.*s*r))/(2.*s);}vec2 s(vec3 v,vec3 f,out vec3 m){float r=.7;vec3 i=vec3(0,0,-r);for(int u=0;u<8;u++){float c=s(v,f,i,r);if(c!=-1.)return m=normalize(v+f*c-i),vec2(c,0);i.z-=r;r*=1.5;i.z-=r;}return vec2(1e3,0);}vec2 n(vec3 v){float f=1e3,r=.7;vec3 i=vec3(0,0,-r);for(int u=0;u<7;u++){vec3 m=v-i;float c=length(m)-r;if(c<f)f=c;i.z-=r;r*=1.5;i.z-=r;}return vec2(f,0);}float n(vec3 v,vec3 f){float i=1.,r=.01,u=1.,m=length(v);u=m<=1.1?0.:m<4.05?.37:m<7.4?.476:m<12.5?.728:.476;for(int c=0;c<10;c++){float s=n(v+r*f).x,d=s/r;i=min(i,d);r+=clamp(s,u,1.);if(i<=-1.||r>1e3)break;}return clamp(i,0.,1.);}vec3 n(){vec3 v=gl_FragCoord.xyy,f;v=vec3(dot(v,vec3(127.1,311.7,74.7)),dot(v,vec3(269.5,183.3,246.1)),dot(v,vec3(113.5,271.9,124.6)));f=-1.+2.*fract(sin(v)*43758.5453123);return fract(555.*sin(777.*f))/256.;}vec3 d(vec3 v){vec2 f=gl_FragCoord.xy/u_resolution.xy;float i=(f.x+4.)*(f.y+4.)*(1e2+u_time);vec3 r=vec3(mod((mod(i,13.)+1.)*(mod(i,123.)+1.),.01)-.005)*.01*1e2;v*=1.-r;return v*(1.-r);}vec3 e(vec3 v){v=d(v);v+=n();return v;}vec3 d(inout vec3 c,inout vec3 r,float d){vec3 u,y,e;vec2 t=s(c,r,u);y=c+t.x*r;e=vec3(0);if(t.x>=1e3)e=f;else{y+=u*.01;vec3 z=vec3(0,1,-.5),g=normalize(i-y),o=normalize(m);z=s(z,-d);g=s(g,d);o=s(o,d);g.z+=.5+.6*cos(d*2.);z.z+=.2+.2*cos(d*3.5);o.z+=.2+.5*cos(d)*sin(d*2.);float x=dot(u,normalize(z)),C=dot(g,u),w=(x+C+1.)/2.,F=n(y,o);w*=mix(1.,F,.91);e=mix(f,v,w);}return e;}vec3 d(float v,float f){float c=sin(f);return vec3(50.*c*cos(v),50.*cos(f),50.*c*sin(v));}vec3 e(vec2 v,float f){float r=.5+.5*sin(f-1.570795),c=r*(t(f/2.)-.5),i;v.x+=.00375*c*2.;i=r*(t(f/2.+17.)-.5);v.y+=.00375*i*2.;return d(-v.x*(2.*acos(-1.)),v.y*3.14159);}mat3 r(vec3 v,vec2 f){vec3 i=normalize(vec3(0)-v),m=normalize(cross(vec3(0,floor(mod(f.y,2.))==0.?-1.:1.,0),i));return mat3(m,cross(i,m),i);}vec3 d(){float v=u_time,f,i;vec3 c=vec3(0),m;vec2 u=vec2(.25,-.5),g;m=e(u,2.*acos(-1.)*(v/10.));mat3 s=r(m,u);g=gl_FragCoord.xy;f=.5+.5*sin(g.x*147.)*sin(g.y*131.);i=smoothstep(0.,1.,4.*cos(2.*acos(-1.)*v/20.));for(int y=0;y<1;y++)for(int z=0;z<1;z++){vec2 t=vec2(y,z)/float(1)-.5,o=(gl_FragCoord.xy+t-.5*u_resolution.xy)*.0799573742465801/u_resolution.y;vec3 F=normalize(s*vec3(o,1));float x=v-.1*(float(z+y)+f)/float(1),w;w=2.*acos(-1.)*(x-i)/10.;c.x+=d(m,F,w).x;w=2.*acos(-1.)*x/10.;c.y+=d(m,F,w).y;w=2.*acos(-1.)*(x+i)/10.;c.z+=d(m,F,w).z;}c/=float(1);return c;}void main(){vec3 v=d();gl_FragColor=vec4(e(v),1);}";h.initProgram(t,e),h.resize(),h.ix.set(c.width/2,c.height/2),h.render();for(let e of h.ix.events.start)d.addEventListener(e,h.ix.start);for(let e of h.ix.events.stop)d.addEventListener(e,h.ix.stop);window.addEventListener("resize",h.resize),appendSignature()}else{const e=d.createElement("div");e.style.cssText="align-items:center;background:#969696;color:#fff;display:flex;font-family:monospace;font-size:20px;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;",e.innerHTML="Your browser does not support WebGL.",b.append(e)}};init();'
    );

    modifier onlyOwner() {
        if (owner != msg.sender) {
            revert NotOwner();
        }

        _;
    }

    modifier onlyRoyaltyRecipient() {
        if (royaltyRecipient != msg.sender) {
            revert NotRoyaltyRecipient();
        }

        _;
    }

    struct Offer {
        bool active;
        uint256 value;
        address toAddress;
    }

    struct Bid {
        bool active;
        uint256 value;
        address fromAddress;
    }

    address public owner;

    Offer public currentOffer;

    Bid public currentBid;

    address public royaltyRecipient;

    uint256 public royaltyPercentage;

    mapping (address => uint256) public pendingWithdrawals;

    constructor(uint256 _royaltyPercentage) {
        if (_royaltyPercentage >= 100) {
            revert RoyaltyTooHigh();
        }

        owner = msg.sender;
        royaltyRecipient = msg.sender;
        royaltyPercentage = _royaltyPercentage;

        emit ArtpieceCreated(msg.sender);
    }

    function name() public view virtual returns (string memory) {
        return 'Illusion';
    }

    function symbol() public view virtual returns (string memory) {
        return 'I';
    }

    function artpiece() public view virtual returns (string memory) {
        return string.concat(
            '<!DOCTYPE html>'
            '<html>'
                '<head>'
                    '<title>', 'Illusion', '</title>'

                    '<meta name="viewport" content="width=device-width, initial-scale=1" />'

                    '<style>html,body{background:#969696;margin:0;padding:0;overflow:hidden;}</style>'
                '</head>'

                '<body>'
                    '<script type="text/javascript">',
                        CORE,
                    '</script>'
                '</body>'
            '</html>'
        );
    }

    function withdraw() public {
        uint256 amount = pendingWithdrawals[msg.sender];

        pendingWithdrawals[msg.sender] = 0;

        _sendFunds(amount);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner == address(0)) {
            revert NullAddress();
        }

        _transferOwnership(newOwner);

        if (currentBid.fromAddress == newOwner) {
            uint256 amount = currentBid.value;

            currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

            pendingWithdrawals[newOwner] += amount;
        }

        if (currentOffer.active) {
            currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        }
    }

    function listForSale(uint256 salePriceInWei) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: address(0) });

        emit ListedForSale(salePriceInWei, msg.sender, address(0));
    }

    function listForSaleToAddress(uint256 salePriceInWei, address toAddress) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: toAddress });

        emit ListedForSale(salePriceInWei, msg.sender, toAddress);
    }

    function cancelFromSale() public onlyOwner {
        Offer memory oldOffer = currentOffer;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        emit SaleCanceled(oldOffer.value, msg.sender, oldOffer.toAddress);
    }

    function buyNow() public payable {
        if (!currentOffer.active) {
            revert NotForSale();
        }

        if (currentOffer.toAddress != address(0) && currentOffer.toAddress != msg.sender) {
            revert ListedForSaleToSpecificAddress();
        }

        if (msg.value != currentOffer.value) {
            revert InsufficientFunds();
        }

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(msg.value);

        pendingWithdrawals[owner] += msg.value - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit SaleCompleted(msg.value, owner, msg.sender);

        _transferOwnership(msg.sender);
    }

    function placeBid() public payable {
        if (msg.value <= currentBid.value) {
            revert InsufficientFunds();
        }

        if (currentBid.value > 0) {
            pendingWithdrawals[currentBid.fromAddress] += currentBid.value;
        }

        currentBid = Bid({ active: true, value: msg.value, fromAddress: msg.sender });

        emit BidPlaced(msg.value, msg.sender);
    }

    function acceptBid() public onlyOwner {
        if (!currentBid.active) {
            revert NoBid();
        }

        uint256 amount = currentBid.value;
        address bidder = currentBid.fromAddress;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(amount);

        pendingWithdrawals[owner] += amount - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit BidAccepted(amount, owner, bidder);

        _transferOwnership(bidder);
    }

    function withdrawBid() public {
        if (msg.sender != currentBid.fromAddress) {
            revert NotYourBid();
        }

        uint256 amount = currentBid.value;

        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        _sendFunds(amount);

        emit BidWithdrawn(amount, msg.sender);
    }

    function setRoyaltyRecipient(address newRoyaltyRecipient) public onlyRoyaltyRecipient {
        if (newRoyaltyRecipient == address(0)) {
            revert NullAddress();
        }

        royaltyRecipient = newRoyaltyRecipient;
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = owner;

        owner = newOwner;

        emit ArtpieceTransferred(oldOwner, newOwner);
    }

    function _sendFunds(uint256 amount) internal virtual {
        (bool success, ) = msg.sender.call{value: amount}('');

        if (!success) {
            revert FundsTransfer();
        }
    }

    function _calcRoyalty(uint256 amount) internal virtual returns (uint256) {
        return (amount * royaltyPercentage) / 100;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_royaltyPercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FundsTransfer","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"ListedForSaleToSpecificAddress","type":"error"},{"inputs":[],"name":"NoBid","type":"error"},{"inputs":[],"name":"NotForSale","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotRoyaltyRecipient","type":"error"},{"inputs":[],"name":"NotYourBid","type":"error"},{"inputs":[],"name":"NullAddress","type":"error"},{"inputs":[],"name":"RoyaltyTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"ArtpieceCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ArtpieceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"ListedForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCompleted","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANIFEST","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artpiece","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelFromSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBid","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"fromAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffer","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"}],"name":"listForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"listForSaleToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"royaltyPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRoyaltyRecipient","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBid","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b50604051612f0d380380612f0d83398101604081905261002e916100a2565b6064811061004f5760405163c2b03beb60e01b815260040160405180910390fd5b5f8054336001600160a01b031991821681178355600780549092168117909155600883905560405190917fcaea53471edbf6ace3d253c1bdecf4553374dd40c18148776b57bf5af0f7f02f91a2506100b9565b5f602082840312156100b2575f80fd5b5051919050565b612e47806100c65f395ff3fe608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def1810114610320578063e52a787414610370578063ecfc7ecc14610384578063f2fde38b1461038c578063f3f43703146103ab578063fa4e28f6146103d6575f80fd5b80638a71bb2d1461028f5780638da5cb5b146102b257806395d89b41146102d05780639c3962f0146102f9578063c7857fb514610301575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101fd57806341e42f301461021157806342c47217146102305780634c00de82146102445780636b6c07741461027b575f80fd5b806306fdde031461012a5780630dca550e1461016c57806337271cc71461018d57806337a908fc146101a157806338739dad146101b5575b5f80fd5b348015610135575f80fd5b5060408051808201909152600881526724b6363ab9b4b7b760c11b60208201525b6040516101639190610db1565b60405180910390f35b348015610177575f80fd5b5061018b610186366004610dfe565b610400565b005b348015610198575f80fd5b5061018b6104b0565b3480156101ac575f80fd5b50610156610557565b3480156101c0575f80fd5b506101566040518060400160405280601781526020017f446f20796f752073656520776861742049207365653f0a00000000000000000081525081565b348015610208575f80fd5b5061018b610599565b34801561021c575f80fd5b5061018b61022b366004610e28565b6105b8565b34801561023b575f80fd5b5061018b61062c565b34801561024f575f80fd5b50600754610263906001600160a01b031681565b6040516001600160a01b039091168152602001610163565b348015610286575f80fd5b50610156610704565b34801561029a575f80fd5b506102a460085481565b604051908152602001610163565b3480156102bd575f80fd5b505f54610263906001600160a01b031681565b3480156102db575f80fd5b506040805180820190915260018152604960f81b6020820152610156565b61018b610723565b34801561030c575f80fd5b5061018b61031b366004610e48565b61089d565b34801561032b575f80fd5b5060045460055460065461034a9260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610163565b34801561037b575f80fd5b5061018b610936565b61018b610ac5565b348015610397575f80fd5b5061018b6103a6366004610e28565b610b99565b3480156103b6575f80fd5b506102a46103c5366004610e28565b60096020525f908152604090205481565b3480156103e1575f80fd5b5060015460025460035461034a9260ff1691906001600160a01b031683565b5f546001600160a01b0316331461042a576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104a49086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104db5760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b031916905561051f81610cb5565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b606060405180611de00160405280611dbf8152602001611053611dbf91396040516020016105859190610e5f565b604051602081830303815290604052905090565b335f90815260096020526040812080549190556105b581610cb5565b50565b6007546001600160a01b031633146105e357604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b03811661060a5760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610656576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106f991815260200190565b60405180910390a350565b60405180611de00160405280611dbf8152602001611053611dbf913981565b60015460ff1661074657604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061076b57506003546001600160a01b03163314155b156107895760405163d6da33db60e01b815260040160405180910390fd5b60025434146107ab5760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107ed34610d1f565b90506107f98134610ff6565b5f80546001600160a01b031681526009602052604081208054909190610820908490611009565b90915550506007546001600160a01b03165f908152600960205260408120805483929061084e908490611009565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105b533610d40565b5f546001600160a01b031633146108c7576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106f99085815260200190565b5f546001600160a01b03163314610960576040516330cd747160e01b815260040160405180910390fd5b60045460ff16610983576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b0390911690610a0e83610d1f565b9050610a1a8184610ff6565b5f80546001600160a01b031681526009602052604081208054909190610a41908490611009565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a6f908490611009565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610ac082610d40565b505050565b6005543411610ae75760405163356680b760e01b815260040160405180910390fd5b60055415610b21576005546006546001600160a01b03165f9081526009602052604081208054909190610b1b908490611009565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610bc3576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bea5760405163e99d5ac560e01b815260040160405180910390fd5b610bf381610d40565b6006546001600160a01b03808316911603610c705760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c69908490611009565b9091555050505b60015460ff16156105b557604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610cf4576040519150601f19603f3d011682016040523d82523d5f602084013e610cf9565b606091505b5050905080610d1b576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d30919061101c565b610d3a9190611033565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610da9578181015183820152602001610d91565b50505f910152565b602081525f8251806020840152610dcf816040850160208701610d8f565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610df9575f80fd5b919050565b5f8060408385031215610e0f575f80fd5b82359150610e1f60208401610de3565b90509250929050565b5f60208284031215610e38575f80fd5b610e4182610de3565b9392505050565b5f60208284031215610e58575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b60208201526724b6363ab9b4b7b760c11b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602a8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604a8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606a8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608a8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60aa8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160ca820152693b30b9b1b934b83a111f60b11b60ea8201525f8251610fa98160f4850160208701610d8f565b8201610fd760f482017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010b019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d3a57610d3a610fe2565b80820180821115610d3a57610d3a610fe2565b8082028115828204841417610d3a57610d3a610fe2565b5f8261104d57634e487b7160e01b5f52601260045260245ffd5b50049056fe2275736520737472696374223b6c657420773d77696e646f772c643d646f63756d656e742c623d642e626f64793b642e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c642e626f64792e7374796c652e7573657253656c6563743d226e6f6e65223b6c657420633d642e717565727953656c6563746f72282263616e76617322293b637c7c28633d642e637265617465456c656d656e74282263616e76617322292c632e7374796c652e646973706c61793d22626c6f636b222c622e617070656e644368696c64286329293b636f6e7374206d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c5349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a45794969426f5a576c6e61485139496a49784e6949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a3438634746306143426d615778734c584a3162475539496d56325a5735765a47516949474e7361584174636e56735a5430695a585a6c626d396b5a4349675a44306954544d30494449774d6934344d544e574d6a4532614445334f46597a4f4767744d544d754d546731646a45324e4334344d5456494e4463754d546731646930754d44417953444d30576b30784f5463754e6a6b31494445304c6a59304e565977534442324d546b334c6a59354e5767784e4334324e4456574d5451754e6a5130614445344d7934774e566f6949475a706247773949694e6d5a6d59694c7a3438634746306143426b50534a4e4f5451674f5456684d79417a494441674d43417849444d744d3267794d5334304e5468684d79417a494441674d43417849444d674d3359794d5334304e5468684d79417a494441674d4341784c544d674d3067354e32457a49444d674d434177494445744d79307a566a6b31576949675a6d6c736244306949325a6d5a694976506a777663335a6e5067222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d642e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c622e617070656e644368696c642865297d3b6c657420683d7b7d2c733d7b7d3b636f6e737420676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d3b6d6f62696c65262664656c65746520676c4f7074696f6e732e706f776572507265666572656e63652c77696e646f772e676c3d632e676574436f6e746578742822776562676c222c676c4f7074696f6e73292c682e756e69666f726d3d28652c74293d3e7b6c657420723d41727261792e697341727261792874293f742e6c656e6774682d313a302c6f3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c693d7b7d3b72657475726e20692e6e616d653d652c692e747970653d6f5b725d5b305d2c692e76616c75653d747c7c6f5b725d5b315d2c692e696e6e65725f747970653d6f5b725d5b325d2c692e6c6f636174696f6e3d22222c692e64697274793d21312c697d2c732e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c305d2c5b22755f6d6f757365222c5b302c305d5d5d2c732e756e69666f726d732e666f7245616368282828652c74293d3e732e756e69666f726d735b745d3d682e756e69666f726d28655b305d2c655b315d2929292c682e726573697a653d28293d3e7b6c657420653d732e756e69666f726d735b305d2c743d7b783a682e69782e6d6f7573652e782f652e76616c75655b305d2c793a682e69782e6d6f7573652e792f652e76616c75655b315d7d2c723d77696e646f772e696e6e657257696474682c6f3d77696e646f772e696e6e65724865696768743b732e617370656374262628723e6f2a732e6173706563743f723d6f2a732e6173706563743a6f3d722f732e617370656374293b6c657420693d77696e646f772e646576696365506978656c526174696f3b652e76616c75655b305d3d632e77696474683d722a692c652e76616c75655b315d3d632e6865696768743d6f2a692c632e7374796c652e77696474683d722b227078222c632e7374796c652e6865696768743d6f2b227078222c652e64697274793d21302c682e69782e73657428632e77696474682a742e782c632e6865696768742a742e79297d2c682e69783d7b73746172743a7b783a302c793a307d2c6d6f7573653a7b783a302c793a307d7d2c682e69782e6576656e74733d7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c73746f703a5b22706f696e7465727570225d7d2c682e69782e736176653d28293d3e7b6c657420653d732e756e69666f726d735b325d3b652e76616c75653d5b682e69782e6d6f7573652e782c682e69782e6d6f7573652e795d2c652e64697274793d21307d2c682e69782e7365743d28652c74293d3e7b682e69782e6d6f7573653d7b783a652c793a747d2c682e69782e7361766528297d2c682e69782e73746172743d653d3e7b682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74593b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e6164644576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e69782e6d6f76653d653d3e7b682e69782e6d6f7573652e782b3d28652e636c69656e74582d682e69782e73746172742e78292a77696e646f772e646576696365506978656c526174696f2c682e69782e6d6f7573652e792d3d28652e636c69656e74592d682e69782e73746172742e79292a77696e646f772e646576696365506978656c526174696f2c682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74592c682e69782e7361766528297d2c682e69782e73746f703d28293d3e7b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e72656d6f76654576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e6275696c645368616465723d28652c74293d3e7b6c657420723d676c2e6372656174655368616465722865293b72657475726e20676c2e736861646572536f7572636528722c74292c676c2e636f6d70696c655368616465722872292c727d2c682e696e697450726f6772616d3d28652c74293d3e7b77696e646f772e70726f6772616d3d732e70726f6772616d3d676c2e63726561746550726f6772616d28293b636f6e737420723d682e6275696c6453686164657228676c2e5645525445585f5348414445522c74292c6f3d682e6275696c6453686164657228676c2e465241474d454e545f5348414445522c65293b676c2e61747461636853686164657228732e70726f6772616d2c72292c676c2e61747461636853686164657228732e70726f6772616d2c6f292c676c2e6c696e6b50726f6772616d28732e70726f6772616d292c676c2e676574536861646572506172616d6574657228722c676c2e434f4d50494c455f535441545553297c7c636f6e736f6c652e6572726f722822563a20222b676c2e676574536861646572496e666f4c6f67287229292c676c2e676574536861646572506172616d65746572286f2c676c2e434f4d50494c455f535441545553297c7c636f6e736f6c652e6572726f722822463a20222b676c2e676574536861646572496e666f4c6f67286f29292c676c2e67657450726f6772616d506172616d6574657228732e70726f6772616d2c676c2e4c494e4b5f535441545553297c7c636f6e736f6c652e6572726f722822503a20222b676c2e67657450726f6772616d496e666f4c6f6728732e70726f6772616d29293b666f72286c6574206520696e20732e756e69666f726d73297b6c657420743d732e756e69666f726d735b655d3b742e6c6f636174696f6e3d676c2e676574556e69666f726d4c6f636174696f6e28732e70726f6772616d2c742e6e616d65292c742e64697274793d21307d6c657420693d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c633d676c2e63726561746542756666657228292c6e3d676c2e6765744174747269624c6f636174696f6e28732e70726f6772616d2c227022293b676c2e62696e6442756666657228676c2e41525241595f4255464645522c63292c676c2e6275666665724461746128676c2e41525241595f4255464645522c692c676c2e5354415449435f44524157292c676c2e656e61626c655665727465784174747269624172726179286e292c676c2e766572746578417474726962506f696e746572286e2c322c676c2e464c4f41542c21312c302c30292c676c2e75736550726f6772616d28732e70726f6772616d297d2c732e706978656c3d6e65772055696e743841727261792834292c682e72656e6465723d28293d3e7b676c2e76696577706f727428302c302c632e77696474682c632e686569676874293b6c657420653d732e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420743d732e756e69666f726d732e66696c7465722828653d3e652e646972747929293b666f72286c6574206520696e207429676c5b745b655d2e747970655d28745b655d2e6c6f636174696f6e2c745b655d2e76616c7565292c745b655d2e64697274793d21313b676c2e6472617741727261797328676c2e545249414e474c455f53545249502c302c34292c676c2e72656164506978656c7328302c302c312c312c676c2e524742412c676c2e554e5349474e45445f425954452c732e706978656c292c72657175657374416e696d6174696f6e4672616d6528682e72656e646572297d3b636f6e737420696e69743d6173796e6328293d3e7b696628676c297b636f6e737420653d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c743d22707265636973696f6e20686967687020666c6f61743b636f6e7374207665633320763d76656333282e353830333932313536383632373435292c663d76656333282e393031393630373834333133373236293b756e69666f726d207665633220755f7265736f6c7574696f6e3b756e69666f726d20666c6f617420755f74696d653b756e69666f726d207665633220755f6d6f7573653b636f6e73742076656333206d3d766563332831302c32302c3530292c693d7665633328352c32302c3430293b766563332074287665633320762c766563342066297b72657475726e20762b322e2a63726f737328662e78797a2c63726f737328662e78797a2c76292b762a662e77293b7d766563332073287665633320762c666c6f61742066297b72657475726e207428762c7665633428302c302c73696e28662f322e292c636f7328662f322e2929293b7d666c6f6174207328666c6f61742076297b7665633320663d667261637428766563332876292a3434332e38393735293b662b3d646f7428662c662e797a782b31392e3139293b72657475726e2066726163742828662e782b662e79292a662e7a293b7d666c6f6174207428666c6f61742076297b666c6f617420663d666c6f6f722876293b72657475726e206d697828732866292c7328662b312e292c736d6f6f74687374657028302e2c312e2c667261637428762929293b7d666c6f61742073287665633320762c7665633320662c7665633320792c666c6f61742063297b666c6f617420733d646f7428662c66292c692c723b76656333206d3d762d793b693d322e2a646f7428662c6d293b723d646f74286d2c6d292d632a633b72657475726e20692a692d342e2a732a723c302e3f2d312e3a282d692d7371727428692a692d342e2a732a7229292f28322e2a73293b7d766563322073287665633320762c7665633320662c6f75742076656333206d297b666c6f617420723d2e373b7665633320693d7665633328302c302c2d72293b666f7228696e7420753d303b753c383b752b2b297b666c6f617420633d7328762c662c692c72293b69662863213d2d312e2972657475726e206d3d6e6f726d616c697a6528762b662a632d69292c7665633228632c30293b692e7a2d3d723b722a3d312e353b692e7a2d3d723b7d72657475726e2076656332283165332c30293b7d76656332206e28766563332076297b666c6f617420663d3165332c723d2e373b7665633320693d7665633328302c302c2d72293b666f7228696e7420753d303b753c373b752b2b297b76656333206d3d762d693b666c6f617420633d6c656e677468286d292d723b696628633c6629663d633b692e7a2d3d723b722a3d312e353b692e7a2d3d723b7d72657475726e207665633228662c30293b7d666c6f6174206e287665633320762c766563332066297b666c6f617420693d312e2c723d2e30312c753d312e2c6d3d6c656e6774682876293b753d6d3c3d312e313f302e3a6d3c342e30353f2e33373a6d3c372e343f2e3437363a6d3c31322e353f2e3732383a2e3437363b666f7228696e7420633d303b633c31303b632b2b297b666c6f617420733d6e28762b722a66292e782c643d732f723b693d6d696e28692c64293b722b3d636c616d7028732c752c312e293b696628693c3d2d312e7c7c723e31653329627265616b3b7d72657475726e20636c616d7028692c302e2c312e293b7d76656333206e28297b7665633320763d676c5f46726167436f6f72642e7879792c663b763d7665633328646f7428762c76656333283132372e312c3331312e372c37342e3729292c646f7428762c76656333283236392e352c3138332e332c3234362e3129292c646f7428762c76656333283131332e352c3237312e392c3132342e362929293b663d2d312e2b322e2a66726163742873696e2876292a34333735382e35343533313233293b72657475726e206672616374283535352e2a73696e283737372e2a6629292f3235362e3b7d76656333206428766563332076297b7665633220663d676c5f46726167436f6f72642e78792f755f7265736f6c7574696f6e2e78793b666c6f617420693d28662e782b342e292a28662e792b342e292a283165322b755f74696d65293b7665633320723d76656333286d6f6428286d6f6428692c31332e292b312e292a286d6f6428692c3132332e292b312e292c2e3031292d2e303035292a2e30312a3165323b762a3d312e2d723b72657475726e20762a28312e2d72293b7d76656333206528766563332076297b763d642876293b762b3d6e28293b72657475726e20763b7d76656333206428696e6f7574207665633320632c696e6f7574207665633320722c666c6f61742064297b7665633320752c792c653b7665633220743d7328632c722c75293b793d632b742e782a723b653d766563332830293b696628742e783e3d31653329653d663b656c73657b792b3d752a2e30313b76656333207a3d7665633328302c312c2d2e35292c673d6e6f726d616c697a6528692d79292c6f3d6e6f726d616c697a65286d293b7a3d73287a2c2d64293b673d7328672c64293b6f3d73286f2c64293b672e7a2b3d2e352b2e362a636f7328642a322e293b7a2e7a2b3d2e322b2e322a636f7328642a332e35293b6f2e7a2b3d2e322b2e352a636f732864292a73696e28642a322e293b666c6f617420783d646f7428752c6e6f726d616c697a65287a29292c433d646f7428672c75292c773d28782b432b312e292f322e2c463d6e28792c6f293b772a3d6d697828312e2c462c2e3931293b653d6d697828662c762c77293b7d72657475726e20653b7d76656333206428666c6f617420762c666c6f61742066297b666c6f617420633d73696e2866293b72657475726e20766563332835302e2a632a636f732876292c35302e2a636f732866292c35302e2a632a73696e287629293b7d766563332065287665633220762c666c6f61742066297b666c6f617420723d2e352b2e352a73696e28662d312e353730373935292c633d722a287428662f322e292d2e35292c693b762e782b3d2e30303337352a632a322e3b693d722a287428662f322e2b31372e292d2e35293b762e792b3d2e30303337352a692a322e3b72657475726e2064282d762e782a28322e2a61636f73282d312e29292c762e792a332e3134313539293b7d6d6174332072287665633320762c766563322066297b7665633320693d6e6f726d616c697a6528766563332830292d76292c6d3d6e6f726d616c697a652863726f7373287665633328302c666c6f6f72286d6f6428662e792c322e29293d3d302e3f2d312e3a312e2c30292c6929293b72657475726e206d617433286d2c63726f737328692c6d292c69293b7d76656333206428297b666c6f617420763d755f74696d652c662c693b7665633320633d766563332830292c6d3b7665633220753d76656332282e32352c2d2e35292c673b6d3d6528752c322e2a61636f73282d312e292a28762f31302e29293b6d61743320733d72286d2c75293b673d676c5f46726167436f6f72642e78793b663d2e352b2e352a73696e28672e782a3134372e292a73696e28672e792a3133312e293b693d736d6f6f74687374657028302e2c312e2c342e2a636f7328322e2a61636f73282d312e292a762f32302e29293b666f7228696e7420793d303b793c313b792b2b29666f7228696e74207a3d303b7a3c313b7a2b2b297b7665633220743d7665633228792c7a292f666c6f61742831292d2e352c6f3d28676c5f46726167436f6f72642e78792b742d2e352a755f7265736f6c7574696f6e2e7879292a2e303739393537333734323436353830312f755f7265736f6c7574696f6e2e793b7665633320463d6e6f726d616c697a6528732a76656333286f2c3129293b666c6f617420783d762d2e312a28666c6f6174287a2b79292b66292f666c6f61742831292c773b773d322e2a61636f73282d312e292a28782d69292f31302e3b632e782b3d64286d2c462c77292e783b773d322e2a61636f73282d312e292a782f31302e3b632e792b3d64286d2c462c77292e793b773d322e2a61636f73282d312e292a28782b69292f31302e3b632e7a2b3d64286d2c462c77292e7a3b7d632f3d666c6f61742831293b72657475726e20633b7d766f6964206d61696e28297b7665633320763d6428293b676c5f46726167436f6c6f723d7665633428652876292c31293b7d223b682e696e697450726f6772616d28742c65292c682e726573697a6528292c682e69782e73657428632e77696474682f322c632e6865696768742f32292c682e72656e64657228293b666f72286c65742065206f6620682e69782e6576656e74732e737461727429642e6164644576656e744c697374656e657228652c682e69782e7374617274293b666f72286c65742065206f6620682e69782e6576656e74732e73746f7029642e6164644576656e744c697374656e657228652c682e69782e73746f70293b77696e646f772e6164644576656e744c697374656e65722822726573697a65222c682e726573697a65292c617070656e645369676e617475726528297d656c73657b636f6e737420653d642e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d22596f75722062726f7773657220646f6573206e6f7420737570706f727420576562474c2e222c622e617070656e642865297d7d3b696e697428293ba2646970667358221220276b121a0cf58fdd3f144645b706371f22261e1c953b4ca66aa409f8b150cfc164736f6c634300081500330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def1810114610320578063e52a787414610370578063ecfc7ecc14610384578063f2fde38b1461038c578063f3f43703146103ab578063fa4e28f6146103d6575f80fd5b80638a71bb2d1461028f5780638da5cb5b146102b257806395d89b41146102d05780639c3962f0146102f9578063c7857fb514610301575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101fd57806341e42f301461021157806342c47217146102305780634c00de82146102445780636b6c07741461027b575f80fd5b806306fdde031461012a5780630dca550e1461016c57806337271cc71461018d57806337a908fc146101a157806338739dad146101b5575b5f80fd5b348015610135575f80fd5b5060408051808201909152600881526724b6363ab9b4b7b760c11b60208201525b6040516101639190610db1565b60405180910390f35b348015610177575f80fd5b5061018b610186366004610dfe565b610400565b005b348015610198575f80fd5b5061018b6104b0565b3480156101ac575f80fd5b50610156610557565b3480156101c0575f80fd5b506101566040518060400160405280601781526020017f446f20796f752073656520776861742049207365653f0a00000000000000000081525081565b348015610208575f80fd5b5061018b610599565b34801561021c575f80fd5b5061018b61022b366004610e28565b6105b8565b34801561023b575f80fd5b5061018b61062c565b34801561024f575f80fd5b50600754610263906001600160a01b031681565b6040516001600160a01b039091168152602001610163565b348015610286575f80fd5b50610156610704565b34801561029a575f80fd5b506102a460085481565b604051908152602001610163565b3480156102bd575f80fd5b505f54610263906001600160a01b031681565b3480156102db575f80fd5b506040805180820190915260018152604960f81b6020820152610156565b61018b610723565b34801561030c575f80fd5b5061018b61031b366004610e48565b61089d565b34801561032b575f80fd5b5060045460055460065461034a9260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610163565b34801561037b575f80fd5b5061018b610936565b61018b610ac5565b348015610397575f80fd5b5061018b6103a6366004610e28565b610b99565b3480156103b6575f80fd5b506102a46103c5366004610e28565b60096020525f908152604090205481565b3480156103e1575f80fd5b5060015460025460035461034a9260ff1691906001600160a01b031683565b5f546001600160a01b0316331461042a576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104a49086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104db5760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b031916905561051f81610cb5565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b606060405180611de00160405280611dbf8152602001611053611dbf91396040516020016105859190610e5f565b604051602081830303815290604052905090565b335f90815260096020526040812080549190556105b581610cb5565b50565b6007546001600160a01b031633146105e357604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b03811661060a5760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610656576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106f991815260200190565b60405180910390a350565b60405180611de00160405280611dbf8152602001611053611dbf913981565b60015460ff1661074657604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061076b57506003546001600160a01b03163314155b156107895760405163d6da33db60e01b815260040160405180910390fd5b60025434146107ab5760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107ed34610d1f565b90506107f98134610ff6565b5f80546001600160a01b031681526009602052604081208054909190610820908490611009565b90915550506007546001600160a01b03165f908152600960205260408120805483929061084e908490611009565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105b533610d40565b5f546001600160a01b031633146108c7576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106f99085815260200190565b5f546001600160a01b03163314610960576040516330cd747160e01b815260040160405180910390fd5b60045460ff16610983576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b0390911690610a0e83610d1f565b9050610a1a8184610ff6565b5f80546001600160a01b031681526009602052604081208054909190610a41908490611009565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a6f908490611009565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610ac082610d40565b505050565b6005543411610ae75760405163356680b760e01b815260040160405180910390fd5b60055415610b21576005546006546001600160a01b03165f9081526009602052604081208054909190610b1b908490611009565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610bc3576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bea5760405163e99d5ac560e01b815260040160405180910390fd5b610bf381610d40565b6006546001600160a01b03808316911603610c705760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c69908490611009565b9091555050505b60015460ff16156105b557604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610cf4576040519150601f19603f3d011682016040523d82523d5f602084013e610cf9565b606091505b5050905080610d1b576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d30919061101c565b610d3a9190611033565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610da9578181015183820152602001610d91565b50505f910152565b602081525f8251806020840152610dcf816040850160208701610d8f565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610df9575f80fd5b919050565b5f8060408385031215610e0f575f80fd5b82359150610e1f60208401610de3565b90509250929050565b5f60208284031215610e38575f80fd5b610e4182610de3565b9392505050565b5f60208284031215610e58575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b60208201526724b6363ab9b4b7b760c11b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602a8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604a8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606a8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608a8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60aa8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160ca820152693b30b9b1b934b83a111f60b11b60ea8201525f8251610fa98160f4850160208701610d8f565b8201610fd760f482017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010b019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d3a57610d3a610fe2565b80820180821115610d3a57610d3a610fe2565b8082028115828204841417610d3a57610d3a610fe2565b5f8261104d57634e487b7160e01b5f52601260045260245ffd5b50049056fe2275736520737472696374223b6c657420773d77696e646f772c643d646f63756d656e742c623d642e626f64793b642e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c642e626f64792e7374796c652e7573657253656c6563743d226e6f6e65223b6c657420633d642e717565727953656c6563746f72282263616e76617322293b637c7c28633d642e637265617465456c656d656e74282263616e76617322292c632e7374796c652e646973706c61793d22626c6f636b222c622e617070656e644368696c64286329293b636f6e7374206d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c5349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a45794969426f5a576c6e61485139496a49784e6949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a3438634746306143426d615778734c584a3162475539496d56325a5735765a47516949474e7361584174636e56735a5430695a585a6c626d396b5a4349675a44306954544d30494449774d6934344d544e574d6a4532614445334f46597a4f4767744d544d754d546731646a45324e4334344d5456494e4463754d546731646930754d44417953444d30576b30784f5463754e6a6b31494445304c6a59304e565977534442324d546b334c6a59354e5767784e4334324e4456574d5451754e6a5130614445344d7934774e566f6949475a706247773949694e6d5a6d59694c7a3438634746306143426b50534a4e4f5451674f5456684d79417a494441674d43417849444d744d3267794d5334304e5468684d79417a494441674d43417849444d674d3359794d5334304e5468684d79417a494441674d4341784c544d674d3067354e32457a49444d674d434177494445744d79307a566a6b31576949675a6d6c736244306949325a6d5a694976506a777663335a6e5067222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d642e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c622e617070656e644368696c642865297d3b6c657420683d7b7d2c733d7b7d3b636f6e737420676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d3b6d6f62696c65262664656c65746520676c4f7074696f6e732e706f776572507265666572656e63652c77696e646f772e676c3d632e676574436f6e746578742822776562676c222c676c4f7074696f6e73292c682e756e69666f726d3d28652c74293d3e7b6c657420723d41727261792e697341727261792874293f742e6c656e6774682d313a302c6f3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c693d7b7d3b72657475726e20692e6e616d653d652c692e747970653d6f5b725d5b305d2c692e76616c75653d747c7c6f5b725d5b315d2c692e696e6e65725f747970653d6f5b725d5b325d2c692e6c6f636174696f6e3d22222c692e64697274793d21312c697d2c732e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c305d2c5b22755f6d6f757365222c5b302c305d5d5d2c732e756e69666f726d732e666f7245616368282828652c74293d3e732e756e69666f726d735b745d3d682e756e69666f726d28655b305d2c655b315d2929292c682e726573697a653d28293d3e7b6c657420653d732e756e69666f726d735b305d2c743d7b783a682e69782e6d6f7573652e782f652e76616c75655b305d2c793a682e69782e6d6f7573652e792f652e76616c75655b315d7d2c723d77696e646f772e696e6e657257696474682c6f3d77696e646f772e696e6e65724865696768743b732e617370656374262628723e6f2a732e6173706563743f723d6f2a732e6173706563743a6f3d722f732e617370656374293b6c657420693d77696e646f772e646576696365506978656c526174696f3b652e76616c75655b305d3d632e77696474683d722a692c652e76616c75655b315d3d632e6865696768743d6f2a692c632e7374796c652e77696474683d722b227078222c632e7374796c652e6865696768743d6f2b227078222c652e64697274793d21302c682e69782e73657428632e77696474682a742e782c632e6865696768742a742e79297d2c682e69783d7b73746172743a7b783a302c793a307d2c6d6f7573653a7b783a302c793a307d7d2c682e69782e6576656e74733d7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c73746f703a5b22706f696e7465727570225d7d2c682e69782e736176653d28293d3e7b6c657420653d732e756e69666f726d735b325d3b652e76616c75653d5b682e69782e6d6f7573652e782c682e69782e6d6f7573652e795d2c652e64697274793d21307d2c682e69782e7365743d28652c74293d3e7b682e69782e6d6f7573653d7b783a652c793a747d2c682e69782e7361766528297d2c682e69782e73746172743d653d3e7b682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74593b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e6164644576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e69782e6d6f76653d653d3e7b682e69782e6d6f7573652e782b3d28652e636c69656e74582d682e69782e73746172742e78292a77696e646f772e646576696365506978656c526174696f2c682e69782e6d6f7573652e792d3d28652e636c69656e74592d682e69782e73746172742e79292a77696e646f772e646576696365506978656c526174696f2c682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74592c682e69782e7361766528297d2c682e69782e73746f703d28293d3e7b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e72656d6f76654576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e6275696c645368616465723d28652c74293d3e7b6c657420723d676c2e6372656174655368616465722865293b72657475726e20676c2e736861646572536f7572636528722c74292c676c2e636f6d70696c655368616465722872292c727d2c682e696e697450726f6772616d3d28652c74293d3e7b77696e646f772e70726f6772616d3d732e70726f6772616d3d676c2e63726561746550726f6772616d28293b636f6e737420723d682e6275696c6453686164657228676c2e5645525445585f5348414445522c74292c6f3d682e6275696c6453686164657228676c2e465241474d454e545f5348414445522c65293b676c2e61747461636853686164657228732e70726f6772616d2c72292c676c2e61747461636853686164657228732e70726f6772616d2c6f292c676c2e6c696e6b50726f6772616d28732e70726f6772616d292c676c2e676574536861646572506172616d6574657228722c676c2e434f4d50494c455f535441545553297c7c636f6e736f6c652e6572726f722822563a20222b676c2e676574536861646572496e666f4c6f67287229292c676c2e676574536861646572506172616d65746572286f2c676c2e434f4d50494c455f535441545553297c7c636f6e736f6c652e6572726f722822463a20222b676c2e676574536861646572496e666f4c6f67286f29292c676c2e67657450726f6772616d506172616d6574657228732e70726f6772616d2c676c2e4c494e4b5f535441545553297c7c636f6e736f6c652e6572726f722822503a20222b676c2e67657450726f6772616d496e666f4c6f6728732e70726f6772616d29293b666f72286c6574206520696e20732e756e69666f726d73297b6c657420743d732e756e69666f726d735b655d3b742e6c6f636174696f6e3d676c2e676574556e69666f726d4c6f636174696f6e28732e70726f6772616d2c742e6e616d65292c742e64697274793d21307d6c657420693d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c633d676c2e63726561746542756666657228292c6e3d676c2e6765744174747269624c6f636174696f6e28732e70726f6772616d2c227022293b676c2e62696e6442756666657228676c2e41525241595f4255464645522c63292c676c2e6275666665724461746128676c2e41525241595f4255464645522c692c676c2e5354415449435f44524157292c676c2e656e61626c655665727465784174747269624172726179286e292c676c2e766572746578417474726962506f696e746572286e2c322c676c2e464c4f41542c21312c302c30292c676c2e75736550726f6772616d28732e70726f6772616d297d2c732e706978656c3d6e65772055696e743841727261792834292c682e72656e6465723d28293d3e7b676c2e76696577706f727428302c302c632e77696474682c632e686569676874293b6c657420653d732e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420743d732e756e69666f726d732e66696c7465722828653d3e652e646972747929293b666f72286c6574206520696e207429676c5b745b655d2e747970655d28745b655d2e6c6f636174696f6e2c745b655d2e76616c7565292c745b655d2e64697274793d21313b676c2e6472617741727261797328676c2e545249414e474c455f53545249502c302c34292c676c2e72656164506978656c7328302c302c312c312c676c2e524742412c676c2e554e5349474e45445f425954452c732e706978656c292c72657175657374416e696d6174696f6e4672616d6528682e72656e646572297d3b636f6e737420696e69743d6173796e6328293d3e7b696628676c297b636f6e737420653d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c743d22707265636973696f6e20686967687020666c6f61743b636f6e7374207665633320763d76656333282e353830333932313536383632373435292c663d76656333282e393031393630373834333133373236293b756e69666f726d207665633220755f7265736f6c7574696f6e3b756e69666f726d20666c6f617420755f74696d653b756e69666f726d207665633220755f6d6f7573653b636f6e73742076656333206d3d766563332831302c32302c3530292c693d7665633328352c32302c3430293b766563332074287665633320762c766563342066297b72657475726e20762b322e2a63726f737328662e78797a2c63726f737328662e78797a2c76292b762a662e77293b7d766563332073287665633320762c666c6f61742066297b72657475726e207428762c7665633428302c302c73696e28662f322e292c636f7328662f322e2929293b7d666c6f6174207328666c6f61742076297b7665633320663d667261637428766563332876292a3434332e38393735293b662b3d646f7428662c662e797a782b31392e3139293b72657475726e2066726163742828662e782b662e79292a662e7a293b7d666c6f6174207428666c6f61742076297b666c6f617420663d666c6f6f722876293b72657475726e206d697828732866292c7328662b312e292c736d6f6f74687374657028302e2c312e2c667261637428762929293b7d666c6f61742073287665633320762c7665633320662c7665633320792c666c6f61742063297b666c6f617420733d646f7428662c66292c692c723b76656333206d3d762d793b693d322e2a646f7428662c6d293b723d646f74286d2c6d292d632a633b72657475726e20692a692d342e2a732a723c302e3f2d312e3a282d692d7371727428692a692d342e2a732a7229292f28322e2a73293b7d766563322073287665633320762c7665633320662c6f75742076656333206d297b666c6f617420723d2e373b7665633320693d7665633328302c302c2d72293b666f7228696e7420753d303b753c383b752b2b297b666c6f617420633d7328762c662c692c72293b69662863213d2d312e2972657475726e206d3d6e6f726d616c697a6528762b662a632d69292c7665633228632c30293b692e7a2d3d723b722a3d312e353b692e7a2d3d723b7d72657475726e2076656332283165332c30293b7d76656332206e28766563332076297b666c6f617420663d3165332c723d2e373b7665633320693d7665633328302c302c2d72293b666f7228696e7420753d303b753c373b752b2b297b76656333206d3d762d693b666c6f617420633d6c656e677468286d292d723b696628633c6629663d633b692e7a2d3d723b722a3d312e353b692e7a2d3d723b7d72657475726e207665633228662c30293b7d666c6f6174206e287665633320762c766563332066297b666c6f617420693d312e2c723d2e30312c753d312e2c6d3d6c656e6774682876293b753d6d3c3d312e313f302e3a6d3c342e30353f2e33373a6d3c372e343f2e3437363a6d3c31322e353f2e3732383a2e3437363b666f7228696e7420633d303b633c31303b632b2b297b666c6f617420733d6e28762b722a66292e782c643d732f723b693d6d696e28692c64293b722b3d636c616d7028732c752c312e293b696628693c3d2d312e7c7c723e31653329627265616b3b7d72657475726e20636c616d7028692c302e2c312e293b7d76656333206e28297b7665633320763d676c5f46726167436f6f72642e7879792c663b763d7665633328646f7428762c76656333283132372e312c3331312e372c37342e3729292c646f7428762c76656333283236392e352c3138332e332c3234362e3129292c646f7428762c76656333283131332e352c3237312e392c3132342e362929293b663d2d312e2b322e2a66726163742873696e2876292a34333735382e35343533313233293b72657475726e206672616374283535352e2a73696e283737372e2a6629292f3235362e3b7d76656333206428766563332076297b7665633220663d676c5f46726167436f6f72642e78792f755f7265736f6c7574696f6e2e78793b666c6f617420693d28662e782b342e292a28662e792b342e292a283165322b755f74696d65293b7665633320723d76656333286d6f6428286d6f6428692c31332e292b312e292a286d6f6428692c3132332e292b312e292c2e3031292d2e303035292a2e30312a3165323b762a3d312e2d723b72657475726e20762a28312e2d72293b7d76656333206528766563332076297b763d642876293b762b3d6e28293b72657475726e20763b7d76656333206428696e6f7574207665633320632c696e6f7574207665633320722c666c6f61742064297b7665633320752c792c653b7665633220743d7328632c722c75293b793d632b742e782a723b653d766563332830293b696628742e783e3d31653329653d663b656c73657b792b3d752a2e30313b76656333207a3d7665633328302c312c2d2e35292c673d6e6f726d616c697a6528692d79292c6f3d6e6f726d616c697a65286d293b7a3d73287a2c2d64293b673d7328672c64293b6f3d73286f2c64293b672e7a2b3d2e352b2e362a636f7328642a322e293b7a2e7a2b3d2e322b2e322a636f7328642a332e35293b6f2e7a2b3d2e322b2e352a636f732864292a73696e28642a322e293b666c6f617420783d646f7428752c6e6f726d616c697a65287a29292c433d646f7428672c75292c773d28782b432b312e292f322e2c463d6e28792c6f293b772a3d6d697828312e2c462c2e3931293b653d6d697828662c762c77293b7d72657475726e20653b7d76656333206428666c6f617420762c666c6f61742066297b666c6f617420633d73696e2866293b72657475726e20766563332835302e2a632a636f732876292c35302e2a636f732866292c35302e2a632a73696e287629293b7d766563332065287665633220762c666c6f61742066297b666c6f617420723d2e352b2e352a73696e28662d312e353730373935292c633d722a287428662f322e292d2e35292c693b762e782b3d2e30303337352a632a322e3b693d722a287428662f322e2b31372e292d2e35293b762e792b3d2e30303337352a692a322e3b72657475726e2064282d762e782a28322e2a61636f73282d312e29292c762e792a332e3134313539293b7d6d6174332072287665633320762c766563322066297b7665633320693d6e6f726d616c697a6528766563332830292d76292c6d3d6e6f726d616c697a652863726f7373287665633328302c666c6f6f72286d6f6428662e792c322e29293d3d302e3f2d312e3a312e2c30292c6929293b72657475726e206d617433286d2c63726f737328692c6d292c69293b7d76656333206428297b666c6f617420763d755f74696d652c662c693b7665633320633d766563332830292c6d3b7665633220753d76656332282e32352c2d2e35292c673b6d3d6528752c322e2a61636f73282d312e292a28762f31302e29293b6d61743320733d72286d2c75293b673d676c5f46726167436f6f72642e78793b663d2e352b2e352a73696e28672e782a3134372e292a73696e28672e792a3133312e293b693d736d6f6f74687374657028302e2c312e2c342e2a636f7328322e2a61636f73282d312e292a762f32302e29293b666f7228696e7420793d303b793c313b792b2b29666f7228696e74207a3d303b7a3c313b7a2b2b297b7665633220743d7665633228792c7a292f666c6f61742831292d2e352c6f3d28676c5f46726167436f6f72642e78792b742d2e352a755f7265736f6c7574696f6e2e7879292a2e303739393537333734323436353830312f755f7265736f6c7574696f6e2e793b7665633320463d6e6f726d616c697a6528732a76656333286f2c3129293b666c6f617420783d762d2e312a28666c6f6174287a2b79292b66292f666c6f61742831292c773b773d322e2a61636f73282d312e292a28782d69292f31302e3b632e782b3d64286d2c462c77292e783b773d322e2a61636f73282d312e292a782f31302e3b632e792b3d64286d2c462c77292e793b773d322e2a61636f73282d312e292a28782b69292f31302e3b632e7a2b3d64286d2c462c77292e7a3b7d632f3d666c6f61742831293b72657475726e20633b7d766f6964206d61696e28297b7665633320763d6428293b676c5f46726167436f6c6f723d7665633428652876292c31293b7d223b682e696e697450726f6772616d28742c65292c682e726573697a6528292c682e69782e73657428632e77696474682f322c632e6865696768742f32292c682e72656e64657228293b666f72286c65742065206f6620682e69782e6576656e74732e737461727429642e6164644576656e744c697374656e657228652c682e69782e7374617274293b666f72286c65742065206f6620682e69782e6576656e74732e73746f7029642e6164644576656e744c697374656e657228652c682e69782e73746f70293b77696e646f772e6164644576656e744c697374656e65722822726573697a65222c682e726573697a65292c617070656e645369676e617475726528297d656c73657b636f6e737420653d642e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d22596f75722062726f7773657220646f6573206e6f7420737570706f727420576562474c2e222c622e617070656e642865297d7d3b696e697428293ba2646970667358221220276b121a0cf58fdd3f144645b706371f22261e1c953b4ca66aa409f8b150cfc164736f6c63430008150033

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royaltyPercentage (uint256): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.