ETH Price: $3,564.18 (-0.25%)
Gas: 19 Gwei

Contract

0x4A10307E221781570E4B7E409EB315F11E8D0385
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer192884752024-02-23 6:22:3535 days ago1708669355IN
Fake_Phishing234655
0 ETH0.0019235332.44342248
Approve189395962024-01-05 7:27:5983 days ago1704439679IN
Fake_Phishing234655
0 ETH0.0007104616
Approve189395962024-01-05 7:27:5983 days ago1704439679IN
Fake_Phishing234655
0 ETH0.0010841916.86053175
Transfer187276932023-12-06 13:49:35113 days ago1701870575IN
Fake_Phishing234655
0 ETH0.0040627456.75091877
Transfer187182622023-12-05 6:08:59115 days ago1701756539IN
Fake_Phishing234655
0 ETH0.0033270743.55443165
Transfer186101792023-11-20 3:00:23130 days ago1700449223IN
Fake_Phishing234655
0 ETH0.0017897823.43358554
Transfer182187362023-09-26 8:22:59184 days ago1695716579IN
Fake_Phishing234655
0 ETH0.000788411.01107416
Transfer182105652023-09-25 4:57:35186 days ago1695617855IN
Fake_Phishing234655
0 ETH0.00064529.01111042
Transfer181157762023-09-11 21:24:47199 days ago1694467487IN
Fake_Phishing234655
0 ETH0.0011771521.60829558
Transfer181157442023-09-11 21:17:47199 days ago1694467067IN
Fake_Phishing234655
0 ETH0.0013078718.27227308
Transfer172881982023-05-18 18:24:59315 days ago1684434299IN
Fake_Phishing234655
0 ETH0.003784769.47343695
Transfer172881742023-05-18 18:20:11315 days ago1684434011IN
Fake_Phishing234655
0 ETH0.0048404267.62538189
Transfer172879802023-05-18 17:40:47315 days ago1684431647IN
Fake_Phishing234655
0 ETH0.0055023976.87383215
Transfer172078902023-05-07 9:51:11326 days ago1683453071IN
Fake_Phishing234655
0 ETH0.0043080979.08105781
Transfer171432812023-04-28 7:56:35335 days ago1682668595IN
Fake_Phishing234655
0 ETH0.0018820934.54082524
Transfer166963972023-02-24 6:22:11399 days ago1677219731IN
Fake_Phishing234655
0 ETH0.003167941.4772689
Transfer166818862023-02-22 5:23:23401 days ago1677043403IN
Fake_Phishing234655
0 ETH0.0018171433.3635662
Transfer165092422023-01-29 1:37:35425 days ago1674956255IN
Fake_Phishing234655
0 ETH0.0009245416.9713053
Transfer165064492023-01-28 16:16:11425 days ago1674922571IN
Fake_Phishing234655
0 ETH0.0014433326.494355
Transfer163840852023-01-11 14:11:59442 days ago1673446319IN
Fake_Phishing234655
0 ETH0.0012286122.5479674
Transfer163840002023-01-11 13:54:59442 days ago1673445299IN
Fake_Phishing234655
0 ETH0.0015420221.53993252
Transfer162889562022-12-29 7:34:47455 days ago1672299287IN
Fake_Phishing234655
0 ETH0.0008089614.84642856
Transfer162889562022-12-29 7:34:47455 days ago1672299287IN
Fake_Phishing234655
0 ETH0.0008089614.84642856
Transfer162889282022-12-29 7:28:59455 days ago1672298939IN
Fake_Phishing234655
0 ETH0.0008158214.97894752
Transfer162889282022-12-29 7:28:59455 days ago1672298939IN
Fake_Phishing234655
0 ETH0.00081614.97894752
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
193746432024-03-06 7:29:3522 days ago1709710175
0x4A10307E...11E8D0385
0 ETH
193746432024-03-06 7:29:3522 days ago1709710175
0x4A10307E...11E8D0385
0 ETH
192884752024-02-23 6:22:3535 days ago1708669355
0x4A10307E...11E8D0385
0 ETH
189395962024-01-05 7:27:5983 days ago1704439679
0x4A10307E...11E8D0385
0 ETH
189395962024-01-05 7:27:5983 days ago1704439679
0x4A10307E...11E8D0385
0 ETH
187276932023-12-06 13:49:35113 days ago1701870575
0x4A10307E...11E8D0385
0 ETH
187182622023-12-05 6:08:59115 days ago1701756539
0x4A10307E...11E8D0385
0 ETH
186101792023-11-20 3:00:23130 days ago1700449223
0x4A10307E...11E8D0385
0 ETH
182187362023-09-26 8:22:59184 days ago1695716579
0x4A10307E...11E8D0385
0 ETH
182105652023-09-25 4:57:35186 days ago1695617855
0x4A10307E...11E8D0385
0 ETH
181157762023-09-11 21:24:47199 days ago1694467487
0x4A10307E...11E8D0385
0 ETH
181157442023-09-11 21:17:47199 days ago1694467067
0x4A10307E...11E8D0385
0 ETH
172881982023-05-18 18:24:59315 days ago1684434299
0x4A10307E...11E8D0385
0 ETH
172881742023-05-18 18:20:11315 days ago1684434011
0x4A10307E...11E8D0385
0 ETH
172879802023-05-18 17:40:47315 days ago1684431647
0x4A10307E...11E8D0385
0 ETH
172078902023-05-07 9:51:11326 days ago1683453071
0x4A10307E...11E8D0385
0 ETH
172010842023-05-06 10:54:23327 days ago1683370463
0x4A10307E...11E8D0385
0 ETH
172010842023-05-06 10:54:23327 days ago1683370463
0x4A10307E...11E8D0385
0 ETH
171432812023-04-28 7:56:35335 days ago1682668595
0x4A10307E...11E8D0385
0 ETH
171432592023-04-28 7:52:11335 days ago1682668331
0x4A10307E...11E8D0385
0 ETH
171432592023-04-28 7:52:11335 days ago1682668331
0x4A10307E...11E8D0385
0 ETH
171432252023-04-28 7:45:23335 days ago1682667923
0x4A10307E...11E8D0385
0 ETH
171432252023-04-28 7:45:23335 days ago1682667923
0x4A10307E...11E8D0385
0 ETH
168960282023-03-24 7:59:11370 days ago1679644751
0x4A10307E...11E8D0385
0 ETH
168960282023-03-24 7:59:11370 days ago1679644751
0x4A10307E...11E8D0385
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HXTZToken

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 5 of 8: HXTZToken.sol
pragma solidity ^0.5.11;

import "./IERC20Token.sol";
import "./HXTZAdmin.sol";
import "./HXTZLogic.sol";
import "./HXTZStorage.sol";
import "./Pausable.sol";

contract HXTZToken is IERC20Token,Pausable, HXTZAdmin{
    string public constant name = "Huobi XTZ";

    string public constant symbol = "HXTZ";

    uint8 public constant decimals = 18;

    HXTZLogic private logic;

    event Burning(address indexed from, uint256 value, string proof, string  xtzAddress, address burner);
    event Burned(address indexed from, uint256 value, string proof, string  xtzAddress);
    event Minting(address indexed to, uint256 value, string proof, address  minter);
    event Minted(address indexed to, uint256 value, string proof);

    constructor(address owner0, address owner1, address owner2) public{
        initAdmin(owner0, owner1, owner2);
    }


    function totalSupply() public view returns (uint256 supply) {
        return logic.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return logic.balanceOf(owner);
    }

    function mint(address to, uint256 value, string memory proof,bytes32 taskHash) public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.mintLogic(value,to,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
            emit Minting(to, value, proof, msg.sender);
        }else if (status == 3) {
            emit Minting(to, value, proof, msg.sender);
            emit Minted(to, value, proof);
            emit Transfer(address(0x0),to,value);
        }
        return true;
    }


    function burn(address from,uint256 value,string memory xtzAddress,string memory proof, bytes32 taskHash)
    public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.burnLogic(from,value,xtzAddress,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
           emit Burning(from, value, proof,xtzAddress, msg.sender);
        }else if (status == 3) {
           emit Burning(from, value, proof,xtzAddress,  msg.sender);
           emit Burned(from, value, proof,xtzAddress);
           emit Transfer(from, address(0x0),value);
        }
        return true;
    }

    function cancelTask(bytes32 taskHash)  public returns(uint256){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        return logic.cancelTask(taskHash);
    }

    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        bool flag = logic.transferLogic(msg.sender,to,value);
        require(flag, "transfer failed");
        emit Transfer(msg.sender,to,value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public whenNotPaused  returns (bool){
        bool flag = logic.transferFromLogic(msg.sender,from,to,value);
        require(flag,"transferFrom failed");
        emit Transfer(from, to, value);
        return true;
    }


    function approve(address spender, uint256 value) public whenNotPaused returns (bool){
        bool flag = logic.approveLogic(msg.sender,spender,value);
        require(flag, "approve failed");
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256 remaining){
        return logic.getAllowed(owner,spender);
    }

    function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused{
        require(newAddress != address(0x0), "wrong address");
        bool flag = modifyAddress(class, oldAddress, newAddress);
        if(flag){
            bytes32 classHash = keccak256(abi.encodePacked(class));
            if(classHash == LOGICHASH){
                logic = HXTZLogic(newAddress);
            }else if(classHash == STOREHASH){
                logic.resetStoreLogic(newAddress);
            }
        }
    }

    function getLogicAddress() public view returns(address){
        return address(logic);
    }

    function getStoreAddress() public view returns(address){
        return logic.getStoreAddress();
    }

    function pause() public{
        require(itemAddressExists(PAUSERHASH, msg.sender), "wrong user to pauser");
        doPause();
    }

}

File 1 of 8: Container.sol
pragma solidity ^0.5.11;

contract Container{
    struct Item{
        uint256 itemType;
        uint256 status;
        address[] addresses;
    }
    uint256 MaxItemAdressNum = 255;

    mapping (bytes32 => Item) private container;

    function itemAddressExists(bytes32 id, address oneAddress) internal view returns(bool){
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress)
                return true;
        }
        return false;
    }
    function getItemAddresses(bytes32 id) internal view returns(address[] memory){
        return container[id].addresses;
    }

    function getItemInfo(bytes32 id) internal view returns(uint256, uint256, uint256){
        return (container[id].itemType, container[id].status, container[id].addresses.length);
    }

    function getItemAddressCount(bytes32 id) internal view returns(uint256){
        return container[id].addresses.length;
    }

    function setItemInfo(bytes32 id, uint256 itemType, uint256 status) internal{
        container[id].itemType = itemType;
        container[id].status = status;
    }

    function addItemAddress(bytes32 id, address oneAddress) internal{
        require(!itemAddressExists(id, oneAddress), "dup address added");
        require(container[id].addresses.length < MaxItemAdressNum, "too many addresses");
        container[id].addresses.push(oneAddress);
    }
    function removeItemAddresses(bytes32 id) internal{
        container[id].addresses.length = 0;
    }

    function removeOneItemAddress(bytes32 id, address oneAddress) internal{
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = container[id].addresses[container[id].addresses.length - 1];
                container[id].addresses.length--;
                return;
            }
        }
        revert("not exist address");
    }

    function removeItem(bytes32 id) internal{
        delete container[id];
    }

    function replaceItemAddress(bytes32 id, address oneAddress, address anotherAddress) internal{
        require(!itemAddressExists(id,anotherAddress),"dup address added");
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = anotherAddress;
                return;
            }
        }
        revert("not exist address");
    }
}

File 2 of 8: HXTZAdmin.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HXTZAdmin is Container{

    bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;
    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f;
    bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680;
    bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182;
    uint256 internal constant MAXUSERNUM = 255;
    bytes32[] private classHashArray;

    uint256 internal ownerRequireNum;
    uint256 internal operatorRequireNum;

    event AdminChanged(string TaskType, string class, address oldAddress, address newAddress);
    event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum);
    event AdminTaskDropped(bytes32 taskHash);

    function initAdmin(address owner0, address owner1, address owner2) internal{
        addItemAddress(OWNERHASH, owner0);
        addItemAddress(OWNERHASH, owner1);
        addItemAddress(OWNERHASH, owner2);
        addItemAddress(LOGICHASH, address(0x0));
        addItemAddress(STOREHASH, address(0x1));

        classHashArray.push(OWNERHASH);
        classHashArray.push(OPERATORHASH);
        classHashArray.push(PAUSERHASH);
        classHashArray.push(STOREHASH);
        classHashArray.push(LOGICHASH);
        ownerRequireNum = 2;
        operatorRequireNum = 2;
    }

    function classHashExist(bytes32 aHash) private view returns(bool){
        for(uint256 i = 0; i < classHashArray.length; i++)
            if(classHashArray[i] == aHash) return true;
        return false;
    }
    function getAdminAddresses(string memory class) public view returns(address[] memory) {
        bytes32 classHash = getClassHash(class);
        return getItemAddresses(classHash);
    }
    function getOwnerRequiredNum() public view returns(uint256){
        return ownerRequireNum;
    }
    function getOperatorRequiredNum() public view returns(uint256){
        return operatorRequireNum;
    }

    function resetRequiredNum(string memory class, uint256 requiredNum)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require((classHash == OPERATORHASH) || (classHash == OWNERHASH),"wrong class");
        if (classHash == OWNERHASH)
            require(requiredNum <= getItemAddressCount(OWNERHASH),"num larger than existed owners");

        bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum));
        addItemAddress(taskHash, msg.sender);

        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeItem(taskHash);
            uint256 previousNum = 0;
            if (classHash == OWNERHASH){
                previousNum = ownerRequireNum;
                ownerRequireNum = requiredNum;
            }
            else if(classHash == OPERATORHASH){
                previousNum = operatorRequireNum;
                operatorRequireNum = requiredNum;
            }else{
                revert("wrong class");
            }
            emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum);
        }
        return true;
    }


    function modifyAddress(string memory class, address oldAddress, address newAddress)
        internal onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(!itemAddressExists(classHash,newAddress),"address existed already");
        require(itemAddressExists(classHash,oldAddress),"address not existed");
        bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            replaceItemAddress(classHash, oldAddress, newAddress);
            emit AdminChanged("modifyAddress", class, oldAddress, newAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function getClassHash(string memory class) private view returns (bytes32){
        bytes32 classHash = keccak256(abi.encodePacked(class));
        require(classHashExist(classHash), "invalid class");
        return classHash;
    }

    function dropAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(itemAddressExists(classHash, oneAddress), "no such address exist");

        if(classHash == OWNERHASH)
            require(getItemAddressCount(classHash) > ownerRequireNum, "insuffience addresses");

        bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeOneItemAddress(classHash, oneAddress);
            emit AdminChanged("dropAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;

    }

    function addAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(!itemAddressExists(classHash,oneAddress),"address existed already");

        bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            addItemAddress(classHash, oneAddress);
            emit AdminChanged("addAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }


    function dropTask(bytes32 taskHash)
    public onlyOwner returns (bool){
        removeItem(taskHash);
        emit AdminTaskDropped(taskHash);
        return true;
    }

    modifier onlyOwner() {
        require(itemAddressExists(OWNERHASH, msg.sender), "only use owner to call");
        _;
    }

}

File 3 of 8: HXTZLogic.sol
pragma solidity ^0.5.11;

import "./SafeMath.sol";
import "./HXTZStorage.sol";

contract HXTZLogic {

    using SafeMath for uint256;

    string public constant name = "HXTZLogic";

    uint256 public constant TASKINIT = 0;
    uint256 public constant TASKPROCESSING = 1;
    uint256 public constant TASKCANCELLED = 2;
    uint256 public constant TASKDONE = 3;
    uint256 public constant MINTTASK = 1;
    uint256 public constant BURNTASK = 2;

    address private caller;
    HXTZStorage private store;

    constructor(address aCaller) public{
        caller = aCaller;
    }

    modifier onlyCaller(){
        require(msg.sender == caller, "only main contract can call");
        _;
    }

    function mintLogic(uint256 value,address to,string calldata proof,
        bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){
        require(to != address(0), "cannot be burned from zero address");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong");
        uint256 status = supportTask(MINTTASK, taskHash, supportAddress, requireNum);

        if( status == TASKDONE){
            uint256 totalSupply = store.getTotalSupply();
            uint256 balanceTo = store.balanceOf(to);
            balanceTo = balanceTo.safeAdd(value);
            totalSupply = totalSupply.safeAdd(value);
            store.setBalance(to,balanceTo);
            store.setTotalSupply(totalSupply);
        }
        return status;
    }

    function burnLogic(address from, uint256 value,string calldata xtzAddress,
        string calldata proof,bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){

        uint256 balance = store.balanceOf(from);
        require(balance >= value,"sender address not have enough HXTZ");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(from,value,xtzAddress,proof))),"taskHash is wrong");
        uint256 status = supportTask(BURNTASK, taskHash, supportAddress, requireNum);

        if ( status == TASKDONE ){
            uint256 totalSupply = store.getTotalSupply();
            totalSupply = totalSupply.safeSub(value);
            balance = balance.safeSub(value);
            store.setBalance(from,balance);
            store.setTotalSupply(totalSupply);

        }
        return status;
    }

    function transferLogic(address sender,address to,uint256 value) external onlyCaller returns(bool) {
        require(to != address(0), "cannot transfer to address zero");
        require(sender != to, "sender need != to");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(sender);
        uint256 balanceTo = store.balanceOf(to);
        require(value <= balanceFrom, "insufficient funds");
        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        store.setBalance(sender,balanceFrom);
        store.setBalance(to,balanceTo);
        return true;
    }

    function transferFromLogic(address sender,address from,address to,uint256 value) external onlyCaller returns(bool) {
        require(from != address(0), "cannot transfer from address zero");
        require(to != address(0), "cannot transfer to address zero");
        require(value > 0, "can not tranfer zero Token");
        require(from!=to,"from and to can not be be the same ");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(from);
        uint256 balanceTo = store.balanceOf(to);
        uint256 allowedvalue = store.getAllowed(from,sender);

        require(value <= allowedvalue, "insufficient allowance");
        require(value <= balanceFrom, "insufficient funds");

        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        allowedvalue = allowedvalue.safeSub(value);

        store.setBalance(from,balanceFrom);
        store.setBalance(to,balanceTo);
        store.setAllowed(from,sender,allowedvalue);
        return true;
    }

    function approveLogic(address sender,address spender,uint256 value)  external onlyCaller returns(bool success){
        require(spender != address(0), "spender address zero");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        store.setAllowed(sender,spender,value);
        return true;
    }

    function resetStoreLogic(address storeAddress) external onlyCaller {
        store = HXTZStorage(storeAddress);
    }

    function getTotalSupply() public view returns (uint256 supply) {
        return store.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return store.balanceOf(owner);
    }

    function getAllowed(address owner, address spender) public view returns (uint256 remaining){
        return store.getAllowed(owner,spender);
    }

    function getStoreAddress() public view returns(address){
        return address(store);
    }

    function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) private returns(uint256){
        require(!store.supporterExists(taskHash, oneAddress), "supporter already exists");
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus < TASKDONE, "wrong status");

        if (theTaskStatus != TASKINIT)
            require(theTaskType == taskType, "task type not match");
        store.addSupporter(taskHash, oneAddress);
        theSupporterNum++;
        if(theSupporterNum >= requireNum)
            theTaskStatus = TASKDONE;
        else
            theTaskStatus = TASKPROCESSING;
        store.setTaskInfo(taskHash, taskType, theTaskStatus);
        return theTaskStatus;
    }

    function cancelTask(bytes32 taskHash)  external onlyCaller returns(uint256){
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus == TASKPROCESSING, "wrong status");
        if(theSupporterNum > 0) store.removeAllSupporter(taskHash);
        theTaskStatus = TASKCANCELLED;
        store.setTaskInfo(taskHash, theTaskType, theTaskStatus);
        return theTaskStatus;
    }
}

File 4 of 8: HXTZStorage.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HXTZStorage is Container{

    string public constant name = "HXTZStorage";

    address private caller;

    constructor(address aCaller) public{
        totalSupply = 0;
        caller = aCaller;
    }
    uint256 public totalSupply;

    mapping (address => uint256) private balances;

    mapping (address => mapping (address => uint256)) private allowed;

    function supporterExists(bytes32 taskHash, address user) public view returns(bool){
        return itemAddressExists(taskHash, user);
    }

    function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller{
        setItemInfo(taskHash, taskType, status);
    }

    function getTaskInfo(bytes32 taskHash) public view returns(uint256, uint256, uint256){
        return getItemInfo(taskHash);
    }

    function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller{
        addItemAddress(taskHash, oneAddress);
    }

    function removeAllSupporter(bytes32 taskHash) external onlyCaller{
        removeItemAddresses(taskHash);
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "only use main main contract to call");
        _;
    }

    function getTotalSupply() external view returns(uint256) {
        return totalSupply;
    }

    function setTotalSupply(uint256 amount) external onlyCaller {
        totalSupply = amount;
    }

    function balanceOf(address account) external view returns(uint256) {
        return balances[account];
    }

    function setBalance(address account,uint256 amount) external onlyCaller {
        require(account != address(0),"account address error");
        balances[account] = amount;
    }

    function getAllowed(address owner,address spender) external view returns(uint256) {
        return allowed[owner][spender];
    }

    function setAllowed(address owner,address spender,uint256 amount) external onlyCaller {
        require(owner != address(0),"owner address error");
        require(spender != address(0),"spender address error");
        allowed[owner][spender] = amount;
    }
}

File 6 of 8: IERC20Token.sol
pragma solidity ^0.5.11;

contract IERC20Token {
    function totalSupply() public view returns (uint256 supply);
    /// @param owner The address from which the balance will be retrieved
    /// @return The balance
    //solium-disable security/enforce-explicit-visibility
    function balanceOf(address owner) public view returns (uint256 balance);

    /// @notice send `value` token to `to` from `msg.sender`
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address to, uint256 value) public returns (bool success);

    /// @notice send `value` token to `to` from `from` on the condition it is approved by `from`
    /// @param from The address of the sender
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address from, address to, uint256 value) public returns (bool success);

    /// @notice `msg.sender` approves `spender` to spend `value` tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @param value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address spender, uint256 value) public returns (bool success);

    /// @param owner The address of the account owning tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address owner, address spender) public view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

File 7 of 8: Pausable.sol
pragma solidity ^0.5.11;

contract Pausable {

    bool private pauseState = true;

    event PauseChangedTo(bool pauseState);

    function doPause() internal {
        pauseState = !pauseState;
        emit PauseChangedTo(pauseState);
    }

    function isPaused() public view returns (bool) {
        return pauseState;
    }

    modifier whenPaused() {
        require(pauseState, "it is not paused now");
        _;
    }

    modifier whenNotPaused() {
        require(!pauseState, "it is paused now");
        _;
    }

}

File 8 of 8: SafeMath.sol
// solium-disable linebreak-style
pragma solidity ^0.5.11;

library SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a,"");
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a,"");
        c = a - b;
    }
    function safeMul(uint a, uint b) public pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b,"");
    }
    function safeDiv(uint a, uint b) public pure returns (uint c) {
        require(b > 0,"");
        c = a / b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner0","type":"address"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"xtzAddress","type":"string"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"xtzAddress","type":"string"},{"indexed":false,"internalType":"address","name":"burner","type":"address"}],"name":"Burning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"Minting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pauseState","type":"bool"}],"name":"PauseChangedTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"xtzAddress","type":"string"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"cancelTask","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperatorRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwnerRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405260016000806101000a81548160ff02191690831515021790555060ff6001553480156200003057600080fd5b5060405162004f3e38038062004f3e833981810160405260608110156200005657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506200008e8383836200009760201b60201c565b505050620005a7565b620000cc7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b846200034260201b60201c565b620001017f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b836200034260201b60201c565b620001367f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b826200034260201b60201c565b6200016c7f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200034260201b60201c565b620001a27fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200034260201b60201c565b60037f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060026004819055506002600581905550505050565b620003548282620004d760201b60201c565b15620003c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501062000459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600090505b60026000858152602001908152602001600020600201805490508110156200059b578273ffffffffffffffffffffffffffffffffffffffff166002600086815260200190815260200160002060020182815481106200053a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200058d576001915050620005a1565b8080600101915050620004df565b50600090505b92915050565b61498780620005b76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f62692058545a000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f4858545a0000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a723158206d43a9f50aec6b90a4c579d68bee70d530561916f1efa3e8dc1b7985facdb91b64736f6c63430005110032000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765000000000000000000000000e597f83558c3b4b9cd9df9bd4ef6901adf13e63e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f62692058545a000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f4858545a0000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a723158206d43a9f50aec6b90a4c579d68bee70d530561916f1efa3e8dc1b7985facdb91b64736f6c63430005110032

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

000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765000000000000000000000000e597f83558c3b4b9cd9df9bd4ef6901adf13e63e

-----Decoded View---------------
Arg [0] : owner0 (address): 0x338637A1431F42243ffB8C39807e8D7cdA0478a0
Arg [1] : owner1 (address): 0x95a6EBdacD70B37b4dabb3504E5D817580E6E765
Arg [2] : owner2 (address): 0xE597F83558C3B4B9cD9df9BD4EF6901aDF13e63E

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a0
Arg [1] : 00000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765
Arg [2] : 000000000000000000000000e597f83558c3b4b9cd9df9bd4ef6901adf13e63e


Deployed Bytecode Sourcemap

160:4276:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;160:4276:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;219:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;219:41:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3125:270;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3125:270:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;855:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2835:283;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2835:283:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3552:535;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3552:535:4;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3552:535:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3552:535:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;312:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6094:170:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6094:170:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2048:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;967:118:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;967:118:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4300:133;;;:::i;:::-;;4464:879:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4464:879:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4464:879:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4464:879:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;267:38:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;267:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:257;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2572:257:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4093:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4192:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;248:81:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2151:104:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1857:186;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1857:186:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1857:186:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1857:186:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1857:186:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1857:186:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1857:186:1;;;;;;;;;;;;;;;;;5349:738;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5349:738:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5349:738:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5349:738:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1091:594:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1091:594:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1091:594:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3401:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3401:145:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2261:1159:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2261:1159:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2261:1159:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2261:1159:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2374:192:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2374:192:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1692:676;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:41;;;;;;;;;;;;;;;;;;;:::o;3125:270::-;3204:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3219:9:4;3231:5;;;;;;;;;;;:18;;;3250:10;3261:7;3269:5;3231:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3231:44:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3231:44:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3231:44:4;;;;;;;;;;;;;;;;3219:56;;3293:4;3285:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:7;3331:36;;3340:10;3331:36;;;3361:5;3331:36;;;;;;;;;;;;;;;;;;3384:4;3377:11;;;3125:270;;;;:::o;855:106::-;899:14;932:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;932:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;932:22:4;;;;;;;;;;;;;;;;925:29;;855:106;:::o;2835:283::-;2929:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:9:4;2956:5;;;;;;;;;;;:23;;;2980:10;2991:4;2996:2;2999:5;2956:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2956:49:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2956:49:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2956:49:4;;;;;;;;;;;;;;;;2944:61;;3023:4;3015:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3080:2;3065:25;;3074:4;3065:25;;;3084:5;3065:25;;;;;;;;;;;;;;;;;;3107:4;3100:11;;;2835:283;;;;;:::o;3552:535::-;375:10:6;;;;;;;;;;;367:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:3:4;3676:26;;:10;:26;;;;3668:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3730:9;3742:44;3756:5;3763:10;3775;3742:13;:44::i;:::-;3730:56;;3799:4;3796:285;;;3818:17;3865:5;3848:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3848:23:4;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3848:23:4;;;3838:34;;;;;;3818:54;;573:66:1;3902:9:4;;3889;:22;3886:185;;;3948:10;3930:5;;:29;;;;;;;;;;;;;;;;;;3886:185;;;463:66:1;3995:9:4;;3982;:22;3979:92;;;4023:5;;;;;;;;;;;:21;;;4045:10;4023:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4023:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4023:33:4;;;;3979:92;3886:185;3796:285;;420:1:6;3552:535:4;;;:::o;312:35::-;345:2;312:35;:::o;6094:170:1:-;6160:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6175:20;6186:8;6175:10;:20::i;:::-;6210:26;6227:8;6210:26;;;;;;;;;;;;;;;;;;6253:4;6246:11;;6094:170;;;:::o;2048:98::-;2099:7;2124:15;;2117:22;;2048:98;:::o;967:118:4:-;1022:15;1056:5;;;;;;;;;;;:15;;;1072:5;1056:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1056:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1056:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1056:22:4;;;;;;;;;;;;;;;;1049:29;;967:118;;;:::o;4300:133::-;4341:41;353:66:1;4359:10:4;;4371;4341:17;:41::i;:::-;4333:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4417:9;:7;:9::i;:::-;4300:133::o;4464:879:1:-;4559:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4574:17;4594:19;4607:5;4594:12;:19::i;:::-;4574:39;;463:66;4644:9;;4631;:22;;:48;;;;;573:66;4670:9;;4657;:22;;4631:48;4623:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4713:40;4731:9;4742:10;4713:17;:40::i;:::-;4705:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;4806:9;;4793;:22;4790:121;;;4870:15;;4837:30;4857:9;4837:19;:30::i;:::-;:48;4829:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4790:121;4922:16;4983:5;4990:10;4951:50;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4951:50:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4951:50:1;;;4941:61;;;;;;4922:80;;5012:36;5027:8;5037:10;5012:14;:36::i;:::-;5094:15;;5061:29;5081:8;5061:19;:29::i;:::-;:48;5058:256;;5124:43;5145:9;5156:10;5124:20;:43::i;:::-;5186:58;5214:5;5221:10;5233;5186:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5186:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:20;5269:8;5258:10;:20::i;:::-;5299:4;5292:11;;;;;;5058:256;5330:5;5323:12;;;;6386:1;4464:879;;;;:::o;267:38:4:-;;;;;;;;;;;;;;;;;;;:::o;2572:257::-;2647:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:9:4;2675:5;;;;;;;;;;;:19;;;2695:10;2706:2;2709:5;2675:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2675:40:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2675:40:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2675:40:4;;;;;;;;;;;;;;;;2663:52;;2733:4;2725:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2792:2;2772:29;;2781:10;2772:29;;;2795:5;2772:29;;;;;;;;;;;;;;;;;;2818:4;2811:11;;;2572:257;;;;:::o;4093:93::-;4140:7;4173:5;;;;;;;;;;;4158:21;;4093:93;:::o;4192:102::-;4239:7;4264:5;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4264:23:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4264:23:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4264:23:4;;;;;;;;;;;;;;;;4257:30;;4192:102;:::o;248:81:6:-;289:4;312:10;;;;;;;;;;;305:17;;248:81;:::o;2151:104:1:-;2205:7;2230:18;;2223:25;;2151:104;:::o;1857:186::-;1925:16;1953:17;1973:19;1986:5;1973:12;:19::i;:::-;1953:39;;2009:27;2026:9;2009:16;:27::i;:::-;2002:34;;;1857:186;;;:::o;5349:738::-;5443:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5458:17;5478:19;5491:5;5478:12;:19::i;:::-;5458:39;;463:66;5528:9;;5515;:22;;:48;;;;;573:66;5554:9;;5541;:22;;5515:48;5507:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:39;5616:9;5626:10;5598:17;:39::i;:::-;5597:40;5589:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5675:16;5735:5;5742:10;5704:49;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5704:49:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5704::1;;;5694:60;;;;;;5675:79;;5764:36;5779:8;5789:10;5764:14;:36::i;:::-;5846:15;;5813:29;5833:8;5813:19;:29::i;:::-;:48;5810:249;;5876:37;5891:9;5902:10;5876:14;:37::i;:::-;5932:57;5959:5;5966:10;5978;5932:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5932:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6003:20;6014:8;6003:10;:20::i;:::-;6044:4;6037:11;;;;;;5810:249;6075:5;6068:12;;;;6386:1;5349:738;;;;:::o;1091:594:4:-;1199:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:43:4;242:66:1;1240:12:4;;1254:10;1222:17;:43::i;:::-;1214:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:14;1311:5;;;;;;;;;;;:15;;;1327:5;1333:2;1336:5;1342:8;1352:10;1364:18;;1311:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1311:72:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:72:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1311:72:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1311:72:4;;;;;;;;;;;;;;;;1294:89;;1407:1;1397:6;:11;1393:265;;;1436:2;1428:37;;;1440:5;1447;1454:10;1428:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1428:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:265;;;1495:1;1485:6;:11;1481:177;;;1525:2;1517:37;;;1529:5;1536;1543:10;1517:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1517:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:2;1573:24;;;1584:5;1591;1573:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1573:24:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1638:2;1616:31;;1633:3;1616:31;;;1641:5;1616:31;;;;;;;;;;;;;;;;;;1481:177;1393:265;1674:4;1667:11;;;1091:594;;;;;;:::o;3401:145::-;3473:17;3508:5;;;;;;;;;;;:16;;;3525:5;3531:7;3508:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3508:31:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3508:31:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3508:31:4;;;;;;;;;;;;;;;;3501:38;;3401:145;;;;:::o;2261:1159:1:-;2362:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:17;2397:19;2410:5;2397:12;:19::i;:::-;2377:39;;242:66;2448:12;;2435:9;:25;2434:55;;;;129:66;2479:9;;2466;:22;2434:55;2426:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;2531:9;;2518;:22;2514:127;;;2577:30;129:66;2597:9;;2577:19;:30::i;:::-;2562:11;:45;;2554:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:127;2652:16;2718:5;2725:11;2681:56;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2681:56:1;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2681:56:1;;;2671:67;;;;;;2652:86;;2748:36;2763:8;2773:10;2748:14;:36::i;:::-;2831:15;;2798:29;2818:8;2798:19;:29::i;:::-;:48;2795:598;;2861:20;2872:8;2861:10;:20::i;:::-;2895:19;2917:1;2895:23;;129:66;2949:9;;2936;:22;2932:356;;;2991:15;;2977:29;;3042:11;3024:15;:29;;;;2932:356;;;242:66;3102:12;;3089:9;:25;3086:202;;;3147:18;;3133:32;;3204:11;3183:18;:32;;;;3086:202;;;3252:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3086:202;2932:356;3306:76;3350:5;3357:11;3370;3306:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3306:76:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2795:598;;3409:4;3402:11;;;;2261:1159;;;;:::o;2374:192:4:-;2428:7;2454:43;242:66:1;2472:12:4;;2486:10;2454:17;:43::i;:::-;2446:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2533:5;;;;;;;;;;;:16;;;2550:8;2533:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2533:26:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2533:26:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2533:26:4;;;;;;;;;;;;;;;;2526:33;;2374:192;;;:::o;1692:676::-;1830:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:43:4;242:66:1;1871:12:4;;1885:10;1853:17;:43::i;:::-;1845:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:14;1942:5;;;;;;;;;;;:15;;;1958:4;1963:5;1969:10;1980:5;1986:8;1996:10;2008:18;;1942:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1942:85:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1942:85:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1942:85:4;;;;;;;;;;;;;;;;1925:102;;2051:1;2041:6;:11;2037:304;;;2079:4;2071:50;;;2085:5;2092;2098:10;2110;2071:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:304;;;2151:1;2141:6;:11;2137:204;;;2180:4;2172:51;;;2186:5;2193;2199:10;2212;2172:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:4;2241:37;;;2254:5;2261;2267:10;2241:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:3;2296:34;;2305:4;2296:34;;;2324:5;2296:34;;;;;;;;;;;;;;;;;;2137:204;2037:304;2357:4;2350:11;;;1692:676;;;;;;;:::o;3427:794:1:-;3546:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:17;3581:19;3594:5;3581:12;:19::i;:::-;3561:39;;3619;3637:9;3647:10;3619:17;:39::i;:::-;3618:40;3610:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:39;3721:9;3731:10;3703:17;:39::i;:::-;3695:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3775:16;3838:5;3845:10;3857;3804:64;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3804:64:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3804:64:1;;;3794:75;;;;;;3775:94;;3879:36;3894:8;3904:10;3879:14;:36::i;:::-;3961:15;;3928:29;3948:8;3928:19;:29::i;:::-;:48;3925:268;;3991:53;4010:9;4021:10;4033;3991:18;:53::i;:::-;4063:60;4093:5;4100:10;4112;4063:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4063:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4137:20;4148:8;4137:10;:20::i;:::-;4178:4;4171:11;;;;;;3925:268;4209:5;4202:12;;;;6386:1;3427:794;;;;;:::o;239:280:0:-;320:4;339:9;351:1;339:13;;335:156;358:9;:13;368:2;358:13;;;;;;;;;;;:23;;:30;;;;354:1;:34;335:156;;;441:10;411:40;;:9;:13;421:2;411:13;;;;;;;;;;;:23;;435:1;411:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;408:72;;;476:4;469:11;;;;;408:72;390:3;;;;;;;335:156;;;;507:5;500:12;;239:280;;;;;:::o;1991:77::-;2048:9;:13;2058:2;2048:13;;;;;;;;;;;;2041:20;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1991:77;:::o;132:110:6:-;184:10;;;;;;;;;;;183:11;170:10;;:24;;;;;;;;;;;;;;;;;;209:26;224:10;;;;;;;;;;;209:26;;;;;;;;;;;;;;;;;;;;;;132:110::o;4227:231:1:-;4292:7;4310:17;4357:5;4340:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4340:23:1;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4340:23:1;;;4330:34;;;;;;4310:54;;4382:25;4397:9;4382:14;:25::i;:::-;4374:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4442:9;4435:16;;;4227:231;;;:::o;843:125:0:-;906:7;931:9;:13;941:2;931:13;;;;;;;;;;;:23;;:30;;;;924:37;;843:125;;;:::o;1144:285::-;1227:33;1245:2;1249:10;1227:17;:33::i;:::-;1226:34;1218:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1333:16;;1300:9;:13;1310:2;1300:13;;;;;;;;;;;:23;;:30;;;;:49;1292:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:9;:13;1392:2;1382:13;;;;;;;;;;;:23;;1411:10;1382:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1382:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:285;;:::o;1540:445::-;1624:9;1636:1;1624:13;;1620:322;1643:9;:13;1653:2;1643:13;;;;;;;;;;;:23;;:30;;;;1639:1;:34;1620:322;;;1726:10;1696:40;;:9;:13;1706:2;1696:13;;;;;;;;;;;:23;;1720:1;1696:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;1693:239;;;1784:9;:13;1794:2;1784:13;;;;;;;;;;;:23;;1841:1;1808:9;:13;1818:2;1808:13;;;;;;;;;;;:23;;:30;;;;:34;1784:59;;;;;;;;;;;;;;;;;;;;;;;;;1755:9;:13;1765:2;1755:13;;;;;;;;;;;:23;;1779:1;1755:26;;;;;;;;;;;;;;;;:88;;;;;;;;;;;;;;;;;;1861:9;:13;1871:2;1861:13;;;;;;;;;;;:23;;:32;;;;;;;;;;;;:::i;:::-;;1911:7;;;1693:239;1675:3;;;;;;;1620:322;;;;1951:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1540:445;;;:::o;524:124::-;584:16;618:9;:13;628:2;618:13;;;;;;;;;;;:23;;611:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;524:124;;;:::o;2074:448::-;2185:36;2203:2;2206:14;2185:17;:36::i;:::-;2184:37;2176:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2256:9;2268:1;2256:13;;2252:227;2275:9;:13;2285:2;2275:13;;;;;;;;;;;:23;;:30;;;;2271:1;:34;2252:227;;;2358:10;2328:40;;:9;:13;2338:2;2328:13;;;;;;;;;;;:23;;2352:1;2328:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;2325:144;;;2416:14;2387:9;:13;2397:2;2387:13;;;;;;;;;;;:23;;2411:1;2387:26;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2448:7;;;2325:144;2307:3;;;;;;;2252:227;;;;2488:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:448;;;;:::o;1643:209:1:-;1703:4;1722:9;1734:1;1722:13;;1718:105;1741:14;:21;;;;1737:1;:25;1718:105;;;1805:5;1784:14;1799:1;1784:17;;;;;;;;;;;;;;;;:26;1781:42;;;1819:4;1812:11;;;;;1781:42;1764:3;;;;;;;1718:105;;;;1840:5;1833:12;;1643:209;;;;:::o;160:4276:4:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://6d43a9f50aec6b90a4c579d68bee70d530561916f1efa3e8dc1b7985facdb91b

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.