Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 22 from a total of 22 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Confirm Burn Req... | 12599624 | 1756 days ago | IN | 0 ETH | 0.00420407 | ||||
| Confirm Burn Req... | 12598416 | 1756 days ago | IN | 0 ETH | 0.00471114 | ||||
| Burn | 12591639 | 1757 days ago | IN | 0 ETH | 0.01275727 | ||||
| Burn | 12591624 | 1757 days ago | IN | 0 ETH | 0.01413672 | ||||
| Set Merchant Btc... | 12591570 | 1757 days ago | IN | 0 ETH | 0.00264322 | ||||
| Confirm Mint Req... | 11912133 | 1862 days ago | IN | 0 ETH | 0.03296286 | ||||
| Request Mint | 11912052 | 1862 days ago | IN | 0 ETH | 0.05897177 | ||||
| Confirm Mint Req... | 11910986 | 1862 days ago | IN | 0 ETH | 0.05596057 | ||||
| Request Mint | 11910539 | 1862 days ago | IN | 0 ETH | 0.08696125 | ||||
| Confirm Burn Req... | 11644414 | 1903 days ago | IN | 0 ETH | 0.01251978 | ||||
| Burn | 11637354 | 1904 days ago | IN | 0 ETH | 0.028002 | ||||
| Burn | 11633514 | 1905 days ago | IN | 0 ETH | 0.03631179 | ||||
| Burn | 11633053 | 1905 days ago | IN | 0 ETH | 0.04535584 | ||||
| Confirm Mint Req... | 11607179 | 1909 days ago | IN | 0 ETH | 0.01507238 | ||||
| Request Mint | 11607015 | 1909 days ago | IN | 0 ETH | 0.03868036 | ||||
| Set Merchant Btc... | 11606914 | 1909 days ago | IN | 0 ETH | 0.01207453 | ||||
| Set Custodian Bt... | 11606694 | 1909 days ago | IN | 0 ETH | 0.01356559 | ||||
| Confirm Mint Req... | 11566905 | 1915 days ago | IN | 0 ETH | 0.00977756 | ||||
| Request Mint | 11566726 | 1915 days ago | IN | 0 ETH | 0.01446972 | ||||
| Request Mint | 11566709 | 1915 days ago | IN | 0 ETH | 0.01 | ||||
| Request Mint | 11566688 | 1915 days ago | IN | 0 ETH | 0.00459 | ||||
| Set Custodian Bt... | 11566130 | 1915 days ago | IN | 0 ETH | 0.00711914 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 11549036 | 1918 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MintFactory
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
//pragma experimental ABIEncoderV2;
import "Ownable.sol";
import "MTokenControllerIf.sol";
import "MintFactoryIfView.sol";
import "CanReclaimToken.sol";
/// @title MintFactory
contract MintFactory is Ownable, MintFactoryIfView, CanReclaimToken {
function getStatusString(RequestStatus status) internal pure returns (string memory) {
if (status == RequestStatus.PENDING) {
return "pending";
} else if (status == RequestStatus.CANCELED) {
return "canceled";
} else if (status == RequestStatus.APPROVED) {
return "approved";
} else if (status == RequestStatus.REJECTED) {
return "rejected";
} else {
// unreachable.
return "unknown";
}
}
function getMintRequest(uint seq) override
external
view
returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status,
bytes32 requestHash
)
{
require(seq > 0, "seq from 1");
require(seq < mintRequests.length, "invalid seq");
Request memory request = mintRequests[seq];
string memory statusString = getStatusString(request.status);
requestSeq = seq;
requester = request.requester;
amount = request.amount;
btcAddress = request.btcAddress;
btcTxId = request.btcTxId;
requestBlockNo = request.requestBlockNo;
confirmedBlockNo = request.confirmedBlockNo;
status = statusString;
requestHash = calcRequestHash(request);
}
function getMintRequestsLength() override external view returns (uint length) {
return mintRequests.length;
}
function getBurnRequest(uint seq) override
external
view
returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status,
bytes32 requestHash
)
{
require(seq > 0, "seq from 1");
require(seq < burnRequests.length, "invalid seq");
Request storage request = burnRequests[seq];
string memory statusString = getStatusString(request.status);
requestSeq = seq;
requester = request.requester;
amount = request.amount;
btcAddress = request.btcAddress;
btcTxId = request.btcTxId;
requestBlockNo = request.requestBlockNo;
confirmedBlockNo = request.confirmedBlockNo;
status = statusString;
requestHash = calcRequestHash(request);
}
function getBurnRequestsLength() override external view returns (uint length) {
return burnRequests.length;
}
constructor() {
controller = (MTokenControllerIf)(owner);
Request memory request = Request({
requester : (address)(0),
amount : 0,
btcAddress : "invalid.address",
btcTxId : "invalid.tx",
seq : 0,
requestBlockNo : 0,
confirmedBlockNo : 0,
status : RequestStatus.REJECTED
});
mintRequests.push(request);
burnRequests.push(request);
}
modifier onlyMerchant() {
controller.requireMerchant(msg.sender);
_;
}
modifier onlyCustodian() {
controller.requireCustodian(msg.sender);
_;
}
function compareStrings(string memory a, string memory b) internal pure returns (bool) {
if (bytes(a).length != bytes(b).length) {
return false;
}
for (uint i = 0; i < bytes(a).length; i ++) {
if (bytes(a)[i] != bytes(b)[i]) {
return false;
}
}
return true;
}
function isEmptyString(string memory a) internal pure returns (bool) {
return (compareStrings(a, ""));
}
event CustodianBtcAddressForMerchantSet(address indexed merchant,
address indexed sender,
string btcDepositAddress);
function setCustodianBtcAddressForMerchant(
address merchant,
string memory btcAddress
)
external
onlyCustodian
returns (bool)
{
require((address)(merchant) != address(0), "invalid merchant address");
controller.requireMerchant(merchant);
require(!isEmptyString(btcAddress), "invalid btc address");
custodianBtcAddressForMerchant[merchant] = btcAddress;
emit CustodianBtcAddressForMerchantSet(merchant, msg.sender, btcAddress);
return true;
}
event BtcDepositAddressOfMerchantSet(address indexed merchant,
string btcDepositAddress);
function setMerchantBtcDepositAddress(string memory btcAddress)
external
onlyMerchant
returns (bool) {
require(!isEmptyString(btcAddress), "invalid btc address");
btcDepositAddressOfMerchant[msg.sender] = btcAddress;
emit BtcDepositAddressOfMerchantSet(msg.sender, btcAddress);
return true;
}
event NewMintRequest(
uint indexed seq,
address indexed requester,
string btcAddress,
string btcTxId,
uint blockNo,
bytes32 requestHash
);
function requestMint(
uint amount,
string memory btcTxId
)
external
onlyMerchant
returns (bool)
{
require(!isEmptyString(btcTxId), "invalid btcTxId");
require(!isEmptyString(custodianBtcAddressForMerchant[msg.sender]), "invalid btc deposit address");
uint seq = mintRequests.length;
uint blockNo = block.number;
Request memory request = Request({
requester : msg.sender,
amount : amount,
btcAddress : custodianBtcAddressForMerchant[msg.sender],
btcTxId : btcTxId,
seq : seq,
requestBlockNo : blockNo,
confirmedBlockNo : 0,
status : RequestStatus.PENDING
});
bytes32 requestHash = calcRequestHash(request);
mintRequestSeqMap[requestHash] = seq;
mintRequests.push(request);
emit NewMintRequest(seq, msg.sender, request.btcAddress, btcTxId, blockNo, requestHash);
return true;
}
function calcRequestHash(Request memory request) internal pure returns (bytes32) {
return keccak256(abi.encode(
request.requester,
request.btcAddress,
request.btcTxId,
request.seq,
request.requestBlockNo
));
}
event MintRequestCancel(uint indexed seq, address indexed requester, bytes32 requestHash);
function getPendingMintRequest(bytes32 _requestHash) view private returns (Request memory) {
uint seq = mintRequestSeqMap[_requestHash];
require(mintRequests.length > seq, "invalid seq");
require(seq > 0, "invalid requestHash");
Request memory request = mintRequests[seq];
require(request.status == RequestStatus.PENDING, "status not pending.");
require(_requestHash == calcRequestHash(request), "invalid hash");
return request;
}
function getPendingMintRequestV(bytes32 _requestHash) override view public returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status) {
Request memory request = getPendingMintRequest(_requestHash);
requestSeq = request.seq;
requester = request.requester;
amount = request.amount;
btcAddress = request.btcAddress;
btcTxId = request.btcTxId;
requestBlockNo = request.requestBlockNo;
confirmedBlockNo = request.confirmedBlockNo;
status = getStatusString(request.status);
}
function cancelMintRequest(bytes32 requestHash) external onlyMerchant returns (bool) {
Request memory request = getPendingMintRequest(requestHash);
uint seq = request.seq;
require(msg.sender == request.requester, "cancel sender is different than pending request initiator");
mintRequests[seq].status = RequestStatus.CANCELED;
emit MintRequestCancel(request.seq, msg.sender, calcRequestHash(request));
return true;
}
event MintConfirmed(
uint indexed seq,
address indexed requester,
uint amount,
string btcDepositAddress,
string btcTxid,
uint blockNo,
bytes32 requestHash
);
function confirmMintRequest(bytes32 requestHash) external onlyCustodian returns (bool) {
uint blockNo = block.number;
Request memory request = getPendingMintRequest(requestHash);
require(blockNo > request.requestBlockNo, "confirmMintRequest failed");
require(blockNo - 20 >= request.requestBlockNo, "confirmMintRequest failed, wait for 20 blocks");
uint seq = request.seq;
mintRequests[seq].status = RequestStatus.APPROVED;
uint amount = mintRequests[seq].amount;
mintRequests[seq].confirmedBlockNo = blockNo;
require(controller.mint(request.requester, amount), "mint failed");
emit MintConfirmed(
request.seq,
request.requester,
amount,
request.btcAddress,
request.btcTxId,
blockNo,
calcRequestHash(request)
);
return true;
}
event MintRejected(
uint indexed seq,
address indexed requester,
uint amount,
string btcDepositAddress,
string btcTxid,
uint blockNo,
bytes32 requestHash
);
function rejectMintRequest(bytes32 requestHash) external onlyCustodian returns (bool) {
Request memory request = getPendingMintRequest(requestHash);
uint seq = request.seq;
mintRequests[seq].status = RequestStatus.REJECTED;
uint blockNo = block.number;
mintRequests[seq].confirmedBlockNo = blockNo;
emit MintRejected(
request.seq,
request.requester,
request.amount,
request.btcAddress,
request.btcTxId,
blockNo,
calcRequestHash(request)
);
return true;
}
event Burned(
uint indexed seq,
address indexed requester,
uint amount,
string btcAddress,
uint blockNo,
bytes32 requestHash
);
function burn(uint amount) external onlyMerchant returns (bool) {
string memory btcDepositAddress = btcDepositAddressOfMerchant[msg.sender];
require(!isEmptyString(btcDepositAddress), "merchant btc deposit address was not set");
uint seq = burnRequests.length;
uint blockNo = block.number;
Request memory request = Request({
requester : msg.sender,
amount : amount,
btcAddress : btcDepositAddress,
btcTxId : "",
seq : seq,
requestBlockNo : blockNo,
confirmedBlockNo : 0, //由确认阶段回填
status : RequestStatus.PENDING
});
bytes32 requestHash = calcRequestHash(request);
burnRequestSeqMap[requestHash] = seq;
burnRequests.push(request);
require(controller.getMToken().transferFrom(msg.sender, (address)(controller), amount), "trasnfer tokens to burn failed");
require(controller.burn(amount), "burn failed");
emit Burned(seq, msg.sender, amount, btcDepositAddress, blockNo, requestHash);
return true;
}
event BurnConfirmed(
uint indexed seq,
address indexed requester,
uint amount,
string btcAddress,
string btcTxId,
uint blockNo
);
function confirmBurnRequest(bytes32 requestHash, string memory btcTxId) external onlyCustodian returns (bool) {
uint seq = burnRequestSeqMap[requestHash];
require(burnRequests.length > seq, "invalid seq");
require(seq > 0, "invalid requestHash");
Request memory request = burnRequests[seq];
require(requestHash == calcRequestHash(request), "invalid requestHash");
require(request.status == RequestStatus.PENDING, "status not pending.");
burnRequests[seq].btcTxId = btcTxId;
burnRequests[seq].status = RequestStatus.APPROVED;
uint blockNo = block.number;
burnRequests[seq].confirmedBlockNo = blockNo;
request.btcTxId = btcTxId;
burnRequestSeqMap[calcRequestHash(request)] = seq;
emit BurnConfirmed(
request.seq,
request.requester,
request.amount,
request.btcAddress,
btcTxId,
blockNo
);
return true;
}
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
import "ERC20If.sol";
import "OwnableIf.sol";
/// @title CanReclaimToken
abstract contract CanReclaimToken is OwnableIf {
function reclaimToken(ERC20If _token) external onlyOwner {
uint256 balance = _token.balanceOf((address)(this));
require(_token.transfer(_owner(), balance));
}
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
/// @title ERC20If
abstract contract ERC20If {
function totalSupply() virtual public view returns (uint256);
function balanceOf(address _who) virtual public view returns (uint256);
function transfer(address _to, uint256 _value) virtual public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
function allowance(address _owner, address _spender) virtual public view returns (uint256);
function transferFrom(address _from, address _to, uint256 _value) virtual public returns (bool);
function approve(address _spender, uint256 _value) virtual public returns (bool);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
//SPDX-License-Identifier: MIT
/// @title MemberMgrIf
abstract contract MemberMgrIf {
function requireMerchant(address _who) virtual public view;
function requireCustodian(address _who) virtual public view;
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
//pragma experimental ABIEncoderV2;
import "Ownable.sol";
import "MTokenControllerIf.sol";
/// @title MintFactoryIfView
abstract contract MintFactoryIfView {
MTokenControllerIf public controller;
mapping(address => string) public custodianBtcAddressForMerchant;
mapping(address => string) public btcDepositAddressOfMerchant;
enum RequestStatus {PENDING, CANCELED, APPROVED, REJECTED}
struct Request {
address requester;
uint amount;
string btcAddress;
string btcTxId;
uint seq;
uint requestBlockNo;
uint confirmedBlockNo;
RequestStatus status;
}
mapping(bytes32 => uint) public mintRequestSeqMap;
mapping(bytes32 => uint) public burnRequestSeqMap;
Request[] public mintRequests;
Request[] public burnRequests;
function getMintRequest(uint seq)
external
view
virtual
returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status,
bytes32 requestHash
);
function getMintRequestsLength() virtual external view returns (uint length);
function getBurnRequest(uint seq)
external
view
virtual
returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status,
bytes32 requestHash
);
function getBurnRequestsLength() virtual external view returns (uint length);
function getPendingMintRequestV(bytes32 _requestHash)
virtual
view public returns (
uint requestSeq,
address requester,
uint amount,
string memory btcAddress,
string memory btcTxId,
uint requestBlockNo,
uint confirmedBlockNo,
string memory status);
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
import "MemberMgrIf.sol";
import "ERC20If.sol";
/// @title ERC20ControllerViewIf
abstract contract ERC20ControllerViewIf {
function blocked(address _who) virtual public view returns (bool);
function paused() virtual public view returns (bool);
}
/// @title MTokenControllerIf
abstract contract MTokenControllerIf is MemberMgrIf, ERC20ControllerViewIf {
function mint(address to, uint amount) virtual external returns (bool);
function burn(uint value) virtual external returns (bool);
function getMToken() virtual external returns (ERC20If);
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
import "OwnableIf.sol";
// File: openzeppelin-solidity/contracts/ownership/Ownable.sol
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable is OwnableIf {
address public owner;
function _owner() view override public returns (address){
return owner;
}
// event OwnershipRenounced(address indexed previousOwner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor() {
owner = msg.sender;
}
// /**
// * @dev Throws if called by any account other than the owner.
// */
// modifier onlyOwner() {
// require(msg.sender == owner);
// _;
// }
/**
* @dev Allows the current owner to relinquish control of the contract.
* @notice Renouncing to ownership will leave the contract without an owner.
* It will not be possible to call the functions with the `onlyOwner`
* modifier anymore.
*/
// function renounceOwnership() public onlyOwner {
// emit OwnershipRenounced(owner);
// owner = address(0);
// }
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function transferOwnership(address _newOwner) virtual public onlyOwner {
_transferOwnership(_newOwner);
}
/**
* @dev Transfers control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function _transferOwnership(address _newOwner) internal {
require(_newOwner != address(0), "invalid _newOwner");
emit OwnershipTransferred(owner, _newOwner);
owner = _newOwner;
}
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
pragma experimental SMTChecker;
// File: openzeppelin-solidity/contracts/ownership/Ownable.sol
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
abstract contract OwnableIf {
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == _owner(), "not owner......");
_;
}
function _owner() view virtual public returns (address);
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"merchant","type":"address"},{"indexed":false,"internalType":"string","name":"btcDepositAddress","type":"string"}],"name":"BtcDepositAddressOfMerchantSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"btcAddress","type":"string"},{"indexed":false,"internalType":"string","name":"btcTxId","type":"string"},{"indexed":false,"internalType":"uint256","name":"blockNo","type":"uint256"}],"name":"BurnConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"btcAddress","type":"string"},{"indexed":false,"internalType":"uint256","name":"blockNo","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"merchant","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"btcDepositAddress","type":"string"}],"name":"CustodianBtcAddressForMerchantSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"btcDepositAddress","type":"string"},{"indexed":false,"internalType":"string","name":"btcTxid","type":"string"},{"indexed":false,"internalType":"uint256","name":"blockNo","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"MintConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"btcDepositAddress","type":"string"},{"indexed":false,"internalType":"string","name":"btcTxid","type":"string"},{"indexed":false,"internalType":"uint256","name":"blockNo","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"MintRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"MintRequestCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"seq","type":"uint256"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"string","name":"btcAddress","type":"string"},{"indexed":false,"internalType":"string","name":"btcTxId","type":"string"},{"indexed":false,"internalType":"uint256","name":"blockNo","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"NewMintRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"btcDepositAddressOfMerchant","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"burnRequestSeqMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnRequests","outputs":[{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"btcTxId","type":"string"},{"internalType":"uint256","name":"seq","type":"uint256"},{"internalType":"uint256","name":"requestBlockNo","type":"uint256"},{"internalType":"uint256","name":"confirmedBlockNo","type":"uint256"},{"internalType":"enum MintFactoryIfView.RequestStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"cancelMintRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"},{"internalType":"string","name":"btcTxId","type":"string"}],"name":"confirmBurnRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"confirmMintRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract MTokenControllerIf","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"custodianBtcAddressForMerchant","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"seq","type":"uint256"}],"name":"getBurnRequest","outputs":[{"internalType":"uint256","name":"requestSeq","type":"uint256"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"btcTxId","type":"string"},{"internalType":"uint256","name":"requestBlockNo","type":"uint256"},{"internalType":"uint256","name":"confirmedBlockNo","type":"uint256"},{"internalType":"string","name":"status","type":"string"},{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnRequestsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"seq","type":"uint256"}],"name":"getMintRequest","outputs":[{"internalType":"uint256","name":"requestSeq","type":"uint256"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"btcTxId","type":"string"},{"internalType":"uint256","name":"requestBlockNo","type":"uint256"},{"internalType":"uint256","name":"confirmedBlockNo","type":"uint256"},{"internalType":"string","name":"status","type":"string"},{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintRequestsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestHash","type":"bytes32"}],"name":"getPendingMintRequestV","outputs":[{"internalType":"uint256","name":"requestSeq","type":"uint256"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"btcTxId","type":"string"},{"internalType":"uint256","name":"requestBlockNo","type":"uint256"},{"internalType":"uint256","name":"confirmedBlockNo","type":"uint256"},{"internalType":"string","name":"status","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintRequestSeqMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintRequests","outputs":[{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"btcTxId","type":"string"},{"internalType":"uint256","name":"seq","type":"uint256"},{"internalType":"uint256","name":"requestBlockNo","type":"uint256"},{"internalType":"uint256","name":"confirmedBlockNo","type":"uint256"},{"internalType":"enum MintFactoryIfView.RequestStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20If","name":"_token","type":"address"}],"name":"reclaimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"rejectMintRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"btcTxId","type":"string"}],"name":"requestMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"merchant","type":"address"},{"internalType":"string","name":"btcAddress","type":"string"}],"name":"setCustodianBtcAddressForMerchant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"btcAddress","type":"string"}],"name":"setMerchantBtcDepositAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000bd6200039b565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016040518060400160405280600f81526020017f696e76616c69642e61646472657373000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f696e76616c69642e74780000000000000000000000000000000000000000000081525081526020016000815260200160008152602001600081526020016003808111156200018557fe5b8152509050600681908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020190805190602001906200022592919062000402565b5060608201518160030190805190602001906200024492919062000402565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff021916908360038111156200028857fe5b02179055505050600781908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020190805190602001906200032a92919062000402565b5060608201518160030190805190602001906200034992919062000402565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff021916908360038111156200038d57fe5b0217905550505050620004a8565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081526020016060815260200160008152602001600081526020016000815260200160006003811115620003fc57fe5b81525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200044557805160ff191683800117855562000476565b8280016001018555821562000476579182015b828111156200047557825182559160200191906001019062000458565b5b50905062000485919062000489565b5090565b5b80821115620004a45760008160009055506001016200048a565b5090565b6150f580620004b86000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806372f69a72116100c3578063b2bdfa7b1161007c578063b2bdfa7b14610cc7578063b69b22d814610cfb578063c06e2d2414610eba578063e21c40c014610efe578063f2fde38b146110bd578063f77c47911461110157610158565b806372f69a72146109dc578063799517d1146109fa57806383935eac14610ab7578063861f92a814610b745780638da5cb5b14610bb85780639355f0a414610bec57610158565b8063311104f311610115578063311104f314610512578063321d0f7e14610530578063424e65751461060157806342966c681461075f578063474caf25146107a35780636406c10c1461087e57610158565b80630a9bbc6f1461015d57806317ffc3201461019f5780631b1a888d146101e35780631d2d8fda146102d45780632232da93146103165780632bf90baa146104ce575b600080fd5b6101896004803603602081101561017357600080fd5b8101908080359060200190929190505050611135565b6040518082815260200191505060405180910390f35b6101e1600480360360208110156101b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061114d565b005b6102bc600480360360408110156101f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023657600080fd5b82018360208201111561024857600080fd5b8035906020019184600183028401116401000000008311171561026a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061135b565b60405180821515815260200191505060405180910390f35b610300600480360360208110156102ea57600080fd5b81019080803590602001909291905050506116e6565b6040518082815260200191505060405180910390f35b6103426004803603602081101561032c57600080fd5b81019080803590602001909291905050506116fe565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152602001806020018060200186815260200185815260200180602001848103845289818151815260200191508051906020019080838360005b838110156103be5780820151818401526020810190506103a3565b50505050905090810190601f1680156103eb5780820380516001836020036101000a031916815260200191505b50848103835288818151815260200191508051906020019080838360005b83811015610424578082015181840152602081019050610409565b50505050905090810190601f1680156104515780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561048a57808201518184015260208101905061046f565b50505050905090810190601f1680156104b75780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b6104fa600480360360208110156104e457600080fd5b810190808035906020019092919050505061176a565b60405180821515815260200191505060405180910390f35b61051a611c2f565b6040518082815260200191505060405180910390f35b6105e96004803603602081101561054657600080fd5b810190808035906020019064010000000081111561056357600080fd5b82018360208201111561057557600080fd5b8035906020019184600183028401116401000000008311171561059757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3c565b60405180821515815260200191505060405180910390f35b61062d6004803603602081101561061757600080fd5b8101908080359060200190929190505050611e6b565b604051808973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001806020018060200187815260200186815260200185815260200184600381111561067957fe5b8152602001838103835289818151815260200191508051906020019080838360005b838110156106b657808201518184015260208101905061069b565b50505050905090810190601f1680156106e35780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561071c578082015181840152602081019050610701565b50505050905090810190601f1680156107495780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b61078b6004803603602081101561077557600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610866600480360360408110156107b957600080fd5b8101908080359060200190929190803590602001906401000000008111156107e057600080fd5b8201836020820111156107f257600080fd5b8035906020019184600183028401116401000000008311171561081457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127a3565b60405180821515815260200191505060405180910390f35b6108aa6004803603602081101561089457600080fd5b8101908080359060200190929190505050612dca565b604051808973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018581526020018460038111156108f657fe5b8152602001838103835289818151815260200191508051906020019080838360005b83811015610933578082015181840152602081019050610918565b50505050905090810190601f1680156109605780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561099957808201518184015260208101905061097e565b50505050905090810190601f1680156109c65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b6109e4612f7c565b6040518082815260200191505060405180910390f35b610a3c60048036036020811015610a1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f89565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a7c578082015181840152602081019050610a61565b50505050905090810190601f168015610aa95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610af960048036036020811015610acd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613039565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b39578082015181840152602081019050610b1e565b50505050905090810190601f168015610b665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ba060048036036020811015610b8a57600080fd5b81019080803590602001909291905050506130e9565b60405180821515815260200191505060405180910390f35b610bc0613371565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610caf60048036036040811015610c0257600080fd5b810190808035906020019092919080359060200190640100000000811115610c2957600080fd5b820183602082011115610c3b57600080fd5b80359060200191846001830284011164010000000083111715610c5d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613395565b60405180821515815260200191505060405180910390f35b610ccf613a7f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d2760048036036020811015610d1157600080fd5b8101908080359060200190929190505050613aa8565b604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018060200185815260200184810384528a818151815260200191508051906020019080838360005b83811015610da9578082015181840152602081019050610d8e565b50505050905090810190601f168015610dd65780820380516001836020036101000a031916815260200191505b50848103835289818151815260200191508051906020019080838360005b83811015610e0f578082015181840152602081019050610df4565b50505050905090810190601f168015610e3c5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b83811015610e75578082015181840152602081019050610e5a565b50505050905090810190601f168015610ea25780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b610ee660048036036020811015610ed057600080fd5b8101908080359060200190929190505050613e21565b60405180821515815260200191505060405180910390f35b610f2a60048036036020811015610f1457600080fd5b810190808035906020019092919050505061400e565b604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018060200185815260200184810384528a818151815260200191508051906020019080838360005b83811015610fac578082015181840152602081019050610f91565b50505050905090810190601f168015610fd95780820380516001836020036101000a031916815260200191505b50848103835289818151815260200191508051906020019080838360005b83811015611012578082015181840152602081019050610ff7565b50505050905090810190601f16801561103f5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b8381101561107857808201518184015260208101905061105d565b50505050905090810190601f1680156110a55780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b6110ff600480360360208110156110d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506144de565b005b611109614592565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60046020528060005260406000206000915090505481565b611155613a7f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112bf613a7f565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b505050506040513d602081101561133d57600080fd5b810190808051906020019092919050505061135757600080fd5b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156113e657600080fd5b505afa1580156113fa573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f696e76616c6964206d65726368616e742061646472657373000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b5050505061154b826145b8565b156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642062746320616464726573730000000000000000000000000081525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611611929190614f2e565b503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9593cff0340c586aed5ede331b5e64e70a4b8265b4fea5f4e037d99d2f8f40ba846040518080602001828103825283818151815260200191508051906020019080838360005b838110156116a2578082015181840152602081019050611687565b50505050905090810190601f1680156116cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390a36001905092915050565b60056020528060005260406000206000915090505481565b60008060006060806000806060611713614fae565b61171c8a6145da565b905080608001519850806000015197508060200151965080604001519550806060015194508060a0015193508060c00151925061175c8160e00151614a21565b915050919395975091939597565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156117f557600080fd5b505afa158015611809573d6000803e3d6000fd5b50505050600043905061181a614fae565b611823846145da565b90508060a00151821161189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f636f6e6669726d4d696e7452657175657374206661696c65640000000000000081525060200191505060405180910390fd5b8060a001516014830310156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061505a602d913960400191505060405180910390fd5b60008160800151905060026006828154811061191657fe5b906000526020600020906008020160070160006101000a81548160ff0219169083600381111561194257fe5b021790555060006006828154811061195657fe5b9060005260206000209060080201600101549050836006838154811061197857fe5b906000526020600020906008020160060181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198460000151836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050506040513d6020811015611a4e57600080fd5b8101908080519060200190929190505050611ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d696e74206661696c656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b826000015173ffffffffffffffffffffffffffffffffffffffff1683608001517f051f4ba27061b0e6dc829669a7baa8bba9cf7f6cd2f95e1f0bdd9c22126d8b21838660400151876060015189611b278a614bd0565b604051808681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015611b7d578082015181840152602081019050611b62565b50505050905090810190601f168015611baa5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015611be3578082015181840152602081019050611bc8565b50505050905090810190601f168015611c105780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a36001945050505050919050565b6000600680549050905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b50505050611ce8826145b8565b15611d5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642062746320616464726573730000000000000000000000000081525060200191505060405180910390fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611dae929190614f2e565b503373ffffffffffffffffffffffffffffffffffffffff167f7c5830d5d5c9a76e85100a3f43c02cab573e0a830caf0a4a890b3f48ae88dd71836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611e28578082015181840152602081019050611e0d565b50505050905090810190601f168015611e555780820380516001836020036101000a031916815260200191505b509250505060405180910390a260019050919050565b60068181548110611e7857fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fee5780601f10611fc357610100808354040283529160200191611fee565b820191906000526020600020905b815481529060010190602001808311611fd157829003601f168201915b5050505050908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156120a857600080fd5b505afa1580156120bc573d6000803e3d6000fd5b505050506060600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121955780601f1061216a57610100808354040283529160200191612195565b820191906000526020600020905b81548152906001019060200180831161217857829003601f168201915b505050505090506121a5816145b8565b156121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806150326028913960400191505060405180910390fd5b600060078054905090506000439050612212614fae565b6040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001878152602001858152602001604051806020016040528060008152508152602001848152602001838152602001600081526020016000600381111561227b57fe5b8152509050600061228b82614bd0565b9050836005600083815260200190815260200160002081905550600782908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201908051906020019061233e929190614f2e565b50606082015181600301908051906020019061235b929190614f2e565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff0219169083600381111561239e57fe5b02179055505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d6662ed66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561240f57600080fd5b505af1158015612423573d6000803e3d6000fd5b505050506040513d602081101561243957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166323b872dd33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156124fa57600080fd5b505af115801561250e573d6000803e3d6000fd5b505050506040513d602081101561252457600080fd5b81019080805190602001909291905050506125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f747261736e66657220746f6b656e7320746f206275726e206661696c6564000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68886040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b81019080805190602001909291905050506126c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6275726e206661696c656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16847f865e64c3fa22a0daee479fc02875d3e97d581930b9679232344d4d5dcce6a7b2898887866040518085815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b8381101561275857808201518184015260208101905061273d565b50505050905090810190601f1680156127855780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3600195505050505050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561282e57600080fd5b505afa158015612842573d6000803e3d6000fd5b5050505061284f826145b8565b156128c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642062746354784964000000000000000000000000000000000081525060200191505060405180910390fd5b6129a2600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b50505050506145b8565b15612a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f696e76616c696420627463206465706f7369742061646472657373000000000081525060200191505060405180910390fd5b600060068054905090506000439050612a2c614fae565b6040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001878152602001600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b2d5780601f10612b0257610100808354040283529160200191612b2d565b820191906000526020600020905b815481529060010190602001808311612b1057829003601f168201915b505050505081526020018681526020018481526020018381526020016000815260200160006003811115612b5d57fe5b81525090506000612b6d82614bd0565b9050836004600083815260200190815260200160002081905550600682908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190612c20929190614f2e565b506060820151816003019080519060200190612c3d929190614f2e565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff02191690836003811115612c8057fe5b021790555050503373ffffffffffffffffffffffffffffffffffffffff16847f49170f208befe4d2562ddfb4ff22551e10b945ddbd22f492db69999a6a3ea84c8460400151898786604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015612d18578082015181840152602081019050612cfd565b50505050905090810190601f168015612d455780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015612d7e578082015181840152602081019050612d63565b50505050905090810190601f168015612dab5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3600194505050505092915050565b60078181548110612dd757fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612eaf5780601f10612e8457610100808354040283529160200191612eaf565b820191906000526020600020905b815481529060010190602001808311612e9257829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f4d5780601f10612f2257610100808354040283529160200191612f4d565b820191906000526020600020905b815481529060010190602001808311612f3057829003601f168201915b5050505050908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b6000600780549050905090565b60026020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130315780601f1061300657610100808354040283529160200191613031565b820191906000526020600020905b81548152906001019060200180831161301457829003601f168201915b505050505081565b60036020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130e15780601f106130b6576101008083540402835291602001916130e1565b820191906000526020600020905b8154815290600101906020018083116130c457829003601f168201915b505050505081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561317457600080fd5b505afa158015613188573d6000803e3d6000fd5b50505050613194614fae565b61319d836145da565b90506000816080015190506003600682815481106131b757fe5b906000526020600020906008020160070160006101000a81548160ff021916908360038111156131e357fe5b0217905550600043905080600683815481106131fb57fe5b906000526020600020906008020160060181905550826000015173ffffffffffffffffffffffffffffffffffffffff1683608001517fdadc06f5b98131083e96b856c044184efd23ae2e797a876fd80aa5dae4f724558560200151866040015187606001518661326a8a614bd0565b604051808681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156132c05780820151818401526020810190506132a5565b50505050905090810190601f1680156132ed5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b8381101561332657808201518184015260208101905061330b565b50505050905090810190601f1680156133535780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a360019350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561342057600080fd5b505afa158015613434573d6000803e3d6000fd5b5050505060006005600085815260200190815260200160002054905080600780549050116134ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008111613540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b613548614fae565b6007828154811061355557fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136685780601f1061363d57610100808354040283529160200191613668565b820191906000526020600020905b81548152906001019060200180831161364b57829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561370a5780601f106136df5761010080835404028352916020019161370a565b820191906000526020600020905b8154815290600101906020018083116136ed57829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff16600381111561374f57fe5b600381111561375a57fe5b81525050905061376981614bd0565b85146137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b600060038111156137ea57fe5b8160e0015160038111156137fa57fe5b1461386d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f737461747573206e6f742070656e64696e672e0000000000000000000000000081525060200191505060405180910390fd5b836007838154811061387b57fe5b9060005260206000209060080201600301908051906020019061389f929190614f2e565b506002600783815481106138af57fe5b906000526020600020906008020160070160006101000a81548160ff021916908360038111156138db57fe5b0217905550600043905080600784815481106138f357fe5b906000526020600020906008020160060181905550848260600181905250826005600061391f85614bd0565b815260200190815260200160002081905550816000015173ffffffffffffffffffffffffffffffffffffffff1682608001517f49c4644e2cb963931815bac2db74ab639e463edbdc647972315d27ff83660c41846020015185604001518986604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156139ce5780820151818401526020810190506139b3565b50505050905090810190601f1680156139fb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613a34578082015181840152602081019050613a19565b50505050905090810190601f168015613a615780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36001935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600060608060008060606000808a11613b2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7365712066726f6d20310000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6006805490508a10613ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b613bae614fae565b60068b81548110613bbb57fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613cce5780601f10613ca357610100808354040283529160200191613cce565b820191906000526020600020905b815481529060010190602001808311613cb157829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d705780601f10613d4557610100808354040283529160200191613d70565b820191906000526020600020905b815481529060010190602001808311613d5357829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff166003811115613db557fe5b6003811115613dc057fe5b8152505090506060613dd58260e00151614a21565b90508b9a50816000015199508160200151985081604001519750816060015196508160a0015195508160c001519450809350613e1082614bd0565b925050509193959799909294969850565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015613eac57600080fd5b505afa158015613ec0573d6000803e3d6000fd5b50505050613ecc614fae565b613ed5836145da565b9050600081608001519050816000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150876039913960400191505060405180910390fd5b600160068281548110613f7757fe5b906000526020600020906008020160070160006101000a81548160ff02191690836003811115613fa357fe5b02179055503373ffffffffffffffffffffffffffffffffffffffff1682608001517fb419f275eebfa354bbab2709955ee0c0e25ca95fae50a8e3672c5e3d9c931f58613fee85614bd0565b6040518082815260200191505060405180910390a3600192505050919050565b600080600060608060008060606000808a11614092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7365712066726f6d20310000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007805490508a1061410c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060078b8154811061411b57fe5b9060005260206000209060080201905060606141478260070160009054906101000a900460ff16614a21565b90508b9a508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16995081600101549850816002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142125780601f106141e757610100808354040283529160200191614212565b820191906000526020600020905b8154815290600101906020018083116141f557829003601f168201915b50505050509750816003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142b15780601f10614286576101008083540402835291602001916142b1565b820191906000526020600020905b81548152906001019060200180831161429457829003601f168201915b5050505050965081600501549550816006015494508093506144cd82604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156143d25780601f106143a7576101008083540402835291602001916143d2565b820191906000526020600020905b8154815290600101906020018083116143b557829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156144745780601f1061444957610100808354040283529160200191614474565b820191906000526020600020905b81548152906001019060200180831161445757829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff1660038111156144b957fe5b60038111156144c457fe5b81525050614bd0565b925050509193959799909294969850565b6144e6613a7f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b61458f81614d14565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006145d38260405180602001604052806000815250614e74565b9050919050565b6145e2614fae565b6000600460008481526020019081526020016000205490508060068054905011614674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b600081116146ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b6146f2614fae565b600682815481106146ff57fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156148125780601f106147e757610100808354040283529160200191614812565b820191906000526020600020905b8154815290600101906020018083116147f557829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156148b45780601f10614889576101008083540402835291602001916148b4565b820191906000526020600020905b81548152906001019060200180831161489757829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff1660038111156148f957fe5b600381111561490457fe5b8152505090506000600381111561491757fe5b8160e00151600381111561492757fe5b1461499a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f737461747573206e6f742070656e64696e672e0000000000000000000000000081525060200191505060405180910390fd5b6149a381614bd0565b8414614a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642068617368000000000000000000000000000000000000000081525060200191505060405180910390fd5b8092505050919050565b606060006003811115614a3057fe5b826003811115614a3c57fe5b1415614a7f576040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152509050614bcb565b60016003811115614a8c57fe5b826003811115614a9857fe5b1415614adb576040518060400160405280600881526020017f63616e63656c65640000000000000000000000000000000000000000000000008152509050614bcb565b60026003811115614ae857fe5b826003811115614af457fe5b1415614b37576040518060400160405280600881526020017f617070726f7665640000000000000000000000000000000000000000000000008152509050614bcb565b600380811115614b4357fe5b826003811115614b4f57fe5b1415614b92576040518060400160405280600881526020017f72656a65637465640000000000000000000000000000000000000000000000008152509050614bcb565b6040518060400160405280600781526020017f756e6b6e6f776e0000000000000000000000000000000000000000000000000081525090505b919050565b600081600001518260400151836060015184608001518560a00151604051602001808673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015614c5a578082015181840152602081019050614c3f565b50505050905090810190601f168015614c875780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015614cc0578082015181840152602081019050614ca5565b50505050905090810190601f168015614ced5780820380516001836020036101000a031916815260200191505b50975050505050505050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614db7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f696e76616c6964205f6e65774f776e657200000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008151835114614e885760009050614f28565b60005b8351811015614f2257828181518110614ea057fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110614ed957fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614f15576000915050614f28565b8080600101915050614e8b565b50600190505b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614f6f57805160ff1916838001178555614f9d565b82800160010185558215614f9d579182015b82811115614f9c578251825591602001919060010190614f81565b5b509050614faa9190615014565b5090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160608152602001606081526020016000815260200160008152602001600081526020016000600381111561500e57fe5b81525090565b5b8082111561502d576000816000905550600101615015565b509056fe6d65726368616e7420627463206465706f736974206164647265737320776173206e6f7420736574636f6e6669726d4d696e7452657175657374206661696c65642c207761697420666f7220323020626c6f636b7363616e63656c2073656e64657220697320646966666572656e74207468616e2070656e64696e67207265717565737420696e69746961746f72a264697066735822122060a1f3bb19aa5fcfafe814bb6e7523581d321167acb5e70336b4bf07feeaf0d964736f6c63430007030033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806372f69a72116100c3578063b2bdfa7b1161007c578063b2bdfa7b14610cc7578063b69b22d814610cfb578063c06e2d2414610eba578063e21c40c014610efe578063f2fde38b146110bd578063f77c47911461110157610158565b806372f69a72146109dc578063799517d1146109fa57806383935eac14610ab7578063861f92a814610b745780638da5cb5b14610bb85780639355f0a414610bec57610158565b8063311104f311610115578063311104f314610512578063321d0f7e14610530578063424e65751461060157806342966c681461075f578063474caf25146107a35780636406c10c1461087e57610158565b80630a9bbc6f1461015d57806317ffc3201461019f5780631b1a888d146101e35780631d2d8fda146102d45780632232da93146103165780632bf90baa146104ce575b600080fd5b6101896004803603602081101561017357600080fd5b8101908080359060200190929190505050611135565b6040518082815260200191505060405180910390f35b6101e1600480360360208110156101b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061114d565b005b6102bc600480360360408110156101f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023657600080fd5b82018360208201111561024857600080fd5b8035906020019184600183028401116401000000008311171561026a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061135b565b60405180821515815260200191505060405180910390f35b610300600480360360208110156102ea57600080fd5b81019080803590602001909291905050506116e6565b6040518082815260200191505060405180910390f35b6103426004803603602081101561032c57600080fd5b81019080803590602001909291905050506116fe565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152602001806020018060200186815260200185815260200180602001848103845289818151815260200191508051906020019080838360005b838110156103be5780820151818401526020810190506103a3565b50505050905090810190601f1680156103eb5780820380516001836020036101000a031916815260200191505b50848103835288818151815260200191508051906020019080838360005b83811015610424578082015181840152602081019050610409565b50505050905090810190601f1680156104515780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561048a57808201518184015260208101905061046f565b50505050905090810190601f1680156104b75780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b6104fa600480360360208110156104e457600080fd5b810190808035906020019092919050505061176a565b60405180821515815260200191505060405180910390f35b61051a611c2f565b6040518082815260200191505060405180910390f35b6105e96004803603602081101561054657600080fd5b810190808035906020019064010000000081111561056357600080fd5b82018360208201111561057557600080fd5b8035906020019184600183028401116401000000008311171561059757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3c565b60405180821515815260200191505060405180910390f35b61062d6004803603602081101561061757600080fd5b8101908080359060200190929190505050611e6b565b604051808973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001806020018060200187815260200186815260200185815260200184600381111561067957fe5b8152602001838103835289818151815260200191508051906020019080838360005b838110156106b657808201518184015260208101905061069b565b50505050905090810190601f1680156106e35780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561071c578082015181840152602081019050610701565b50505050905090810190601f1680156107495780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b61078b6004803603602081101561077557600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610866600480360360408110156107b957600080fd5b8101908080359060200190929190803590602001906401000000008111156107e057600080fd5b8201836020820111156107f257600080fd5b8035906020019184600183028401116401000000008311171561081457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127a3565b60405180821515815260200191505060405180910390f35b6108aa6004803603602081101561089457600080fd5b8101908080359060200190929190505050612dca565b604051808973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018581526020018460038111156108f657fe5b8152602001838103835289818151815260200191508051906020019080838360005b83811015610933578082015181840152602081019050610918565b50505050905090810190601f1680156109605780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561099957808201518184015260208101905061097e565b50505050905090810190601f1680156109c65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b6109e4612f7c565b6040518082815260200191505060405180910390f35b610a3c60048036036020811015610a1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f89565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a7c578082015181840152602081019050610a61565b50505050905090810190601f168015610aa95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610af960048036036020811015610acd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613039565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b39578082015181840152602081019050610b1e565b50505050905090810190601f168015610b665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ba060048036036020811015610b8a57600080fd5b81019080803590602001909291905050506130e9565b60405180821515815260200191505060405180910390f35b610bc0613371565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610caf60048036036040811015610c0257600080fd5b810190808035906020019092919080359060200190640100000000811115610c2957600080fd5b820183602082011115610c3b57600080fd5b80359060200191846001830284011164010000000083111715610c5d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613395565b60405180821515815260200191505060405180910390f35b610ccf613a7f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d2760048036036020811015610d1157600080fd5b8101908080359060200190929190505050613aa8565b604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018060200185815260200184810384528a818151815260200191508051906020019080838360005b83811015610da9578082015181840152602081019050610d8e565b50505050905090810190601f168015610dd65780820380516001836020036101000a031916815260200191505b50848103835289818151815260200191508051906020019080838360005b83811015610e0f578082015181840152602081019050610df4565b50505050905090810190601f168015610e3c5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b83811015610e75578082015181840152602081019050610e5a565b50505050905090810190601f168015610ea25780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b610ee660048036036020811015610ed057600080fd5b8101908080359060200190929190505050613e21565b60405180821515815260200191505060405180910390f35b610f2a60048036036020811015610f1457600080fd5b810190808035906020019092919050505061400e565b604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200180602001806020018781526020018681526020018060200185815260200184810384528a818151815260200191508051906020019080838360005b83811015610fac578082015181840152602081019050610f91565b50505050905090810190601f168015610fd95780820380516001836020036101000a031916815260200191505b50848103835289818151815260200191508051906020019080838360005b83811015611012578082015181840152602081019050610ff7565b50505050905090810190601f16801561103f5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b8381101561107857808201518184015260208101905061105d565b50505050905090810190601f1680156110a55780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b6110ff600480360360208110156110d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506144de565b005b611109614592565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60046020528060005260406000206000915090505481565b611155613a7f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112bf613a7f565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b505050506040513d602081101561133d57600080fd5b810190808051906020019092919050505061135757600080fd5b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156113e657600080fd5b505afa1580156113fa573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f696e76616c6964206d65726368616e742061646472657373000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b5050505061154b826145b8565b156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642062746320616464726573730000000000000000000000000081525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611611929190614f2e565b503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9593cff0340c586aed5ede331b5e64e70a4b8265b4fea5f4e037d99d2f8f40ba846040518080602001828103825283818151815260200191508051906020019080838360005b838110156116a2578082015181840152602081019050611687565b50505050905090810190601f1680156116cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390a36001905092915050565b60056020528060005260406000206000915090505481565b60008060006060806000806060611713614fae565b61171c8a6145da565b905080608001519850806000015197508060200151965080604001519550806060015194508060a0015193508060c00151925061175c8160e00151614a21565b915050919395975091939597565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156117f557600080fd5b505afa158015611809573d6000803e3d6000fd5b50505050600043905061181a614fae565b611823846145da565b90508060a00151821161189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f636f6e6669726d4d696e7452657175657374206661696c65640000000000000081525060200191505060405180910390fd5b8060a001516014830310156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061505a602d913960400191505060405180910390fd5b60008160800151905060026006828154811061191657fe5b906000526020600020906008020160070160006101000a81548160ff0219169083600381111561194257fe5b021790555060006006828154811061195657fe5b9060005260206000209060080201600101549050836006838154811061197857fe5b906000526020600020906008020160060181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198460000151836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050506040513d6020811015611a4e57600080fd5b8101908080519060200190929190505050611ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d696e74206661696c656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b826000015173ffffffffffffffffffffffffffffffffffffffff1683608001517f051f4ba27061b0e6dc829669a7baa8bba9cf7f6cd2f95e1f0bdd9c22126d8b21838660400151876060015189611b278a614bd0565b604051808681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015611b7d578082015181840152602081019050611b62565b50505050905090810190601f168015611baa5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015611be3578082015181840152602081019050611bc8565b50505050905090810190601f168015611c105780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a36001945050505050919050565b6000600680549050905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b50505050611ce8826145b8565b15611d5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642062746320616464726573730000000000000000000000000081525060200191505060405180910390fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611dae929190614f2e565b503373ffffffffffffffffffffffffffffffffffffffff167f7c5830d5d5c9a76e85100a3f43c02cab573e0a830caf0a4a890b3f48ae88dd71836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611e28578082015181840152602081019050611e0d565b50505050905090810190601f168015611e555780820380516001836020036101000a031916815260200191505b509250505060405180910390a260019050919050565b60068181548110611e7857fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fee5780601f10611fc357610100808354040283529160200191611fee565b820191906000526020600020905b815481529060010190602001808311611fd157829003601f168201915b5050505050908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156120a857600080fd5b505afa1580156120bc573d6000803e3d6000fd5b505050506060600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121955780601f1061216a57610100808354040283529160200191612195565b820191906000526020600020905b81548152906001019060200180831161217857829003601f168201915b505050505090506121a5816145b8565b156121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806150326028913960400191505060405180910390fd5b600060078054905090506000439050612212614fae565b6040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001878152602001858152602001604051806020016040528060008152508152602001848152602001838152602001600081526020016000600381111561227b57fe5b8152509050600061228b82614bd0565b9050836005600083815260200190815260200160002081905550600782908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201908051906020019061233e929190614f2e565b50606082015181600301908051906020019061235b929190614f2e565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff0219169083600381111561239e57fe5b02179055505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d6662ed66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561240f57600080fd5b505af1158015612423573d6000803e3d6000fd5b505050506040513d602081101561243957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166323b872dd33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156124fa57600080fd5b505af115801561250e573d6000803e3d6000fd5b505050506040513d602081101561252457600080fd5b81019080805190602001909291905050506125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f747261736e66657220746f6b656e7320746f206275726e206661696c6564000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68886040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b81019080805190602001909291905050506126c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6275726e206661696c656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16847f865e64c3fa22a0daee479fc02875d3e97d581930b9679232344d4d5dcce6a7b2898887866040518085815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b8381101561275857808201518184015260208101905061273d565b50505050905090810190601f1680156127855780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3600195505050505050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561282e57600080fd5b505afa158015612842573d6000803e3d6000fd5b5050505061284f826145b8565b156128c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642062746354784964000000000000000000000000000000000081525060200191505060405180910390fd5b6129a2600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b50505050506145b8565b15612a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f696e76616c696420627463206465706f7369742061646472657373000000000081525060200191505060405180910390fd5b600060068054905090506000439050612a2c614fae565b6040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001878152602001600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b2d5780601f10612b0257610100808354040283529160200191612b2d565b820191906000526020600020905b815481529060010190602001808311612b1057829003601f168201915b505050505081526020018681526020018481526020018381526020016000815260200160006003811115612b5d57fe5b81525090506000612b6d82614bd0565b9050836004600083815260200190815260200160002081905550600682908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190612c20929190614f2e565b506060820151816003019080519060200190612c3d929190614f2e565b506080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff02191690836003811115612c8057fe5b021790555050503373ffffffffffffffffffffffffffffffffffffffff16847f49170f208befe4d2562ddfb4ff22551e10b945ddbd22f492db69999a6a3ea84c8460400151898786604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015612d18578082015181840152602081019050612cfd565b50505050905090810190601f168015612d455780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015612d7e578082015181840152602081019050612d63565b50505050905090810190601f168015612dab5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3600194505050505092915050565b60078181548110612dd757fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612eaf5780601f10612e8457610100808354040283529160200191612eaf565b820191906000526020600020905b815481529060010190602001808311612e9257829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f4d5780601f10612f2257610100808354040283529160200191612f4d565b820191906000526020600020905b815481529060010190602001808311612f3057829003601f168201915b5050505050908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b6000600780549050905090565b60026020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130315780601f1061300657610100808354040283529160200191613031565b820191906000526020600020905b81548152906001019060200180831161301457829003601f168201915b505050505081565b60036020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130e15780601f106130b6576101008083540402835291602001916130e1565b820191906000526020600020905b8154815290600101906020018083116130c457829003601f168201915b505050505081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561317457600080fd5b505afa158015613188573d6000803e3d6000fd5b50505050613194614fae565b61319d836145da565b90506000816080015190506003600682815481106131b757fe5b906000526020600020906008020160070160006101000a81548160ff021916908360038111156131e357fe5b0217905550600043905080600683815481106131fb57fe5b906000526020600020906008020160060181905550826000015173ffffffffffffffffffffffffffffffffffffffff1683608001517fdadc06f5b98131083e96b856c044184efd23ae2e797a876fd80aa5dae4f724558560200151866040015187606001518661326a8a614bd0565b604051808681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156132c05780820151818401526020810190506132a5565b50505050905090810190601f1680156132ed5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b8381101561332657808201518184015260208101905061330b565b50505050905090810190601f1680156133535780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a360019350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de6fa68d336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561342057600080fd5b505afa158015613434573d6000803e3d6000fd5b5050505060006005600085815260200190815260200160002054905080600780549050116134ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008111613540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b613548614fae565b6007828154811061355557fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136685780601f1061363d57610100808354040283529160200191613668565b820191906000526020600020905b81548152906001019060200180831161364b57829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561370a5780601f106136df5761010080835404028352916020019161370a565b820191906000526020600020905b8154815290600101906020018083116136ed57829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff16600381111561374f57fe5b600381111561375a57fe5b81525050905061376981614bd0565b85146137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b600060038111156137ea57fe5b8160e0015160038111156137fa57fe5b1461386d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f737461747573206e6f742070656e64696e672e0000000000000000000000000081525060200191505060405180910390fd5b836007838154811061387b57fe5b9060005260206000209060080201600301908051906020019061389f929190614f2e565b506002600783815481106138af57fe5b906000526020600020906008020160070160006101000a81548160ff021916908360038111156138db57fe5b0217905550600043905080600784815481106138f357fe5b906000526020600020906008020160060181905550848260600181905250826005600061391f85614bd0565b815260200190815260200160002081905550816000015173ffffffffffffffffffffffffffffffffffffffff1682608001517f49c4644e2cb963931815bac2db74ab639e463edbdc647972315d27ff83660c41846020015185604001518986604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156139ce5780820151818401526020810190506139b3565b50505050905090810190601f1680156139fb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613a34578082015181840152602081019050613a19565b50505050905090810190601f168015613a615780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36001935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600060608060008060606000808a11613b2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7365712066726f6d20310000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6006805490508a10613ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b613bae614fae565b60068b81548110613bbb57fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613cce5780601f10613ca357610100808354040283529160200191613cce565b820191906000526020600020905b815481529060010190602001808311613cb157829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d705780601f10613d4557610100808354040283529160200191613d70565b820191906000526020600020905b815481529060010190602001808311613d5357829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff166003811115613db557fe5b6003811115613dc057fe5b8152505090506060613dd58260e00151614a21565b90508b9a50816000015199508160200151985081604001519750816060015196508160a0015195508160c001519450809350613e1082614bd0565b925050509193959799909294969850565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d8464b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015613eac57600080fd5b505afa158015613ec0573d6000803e3d6000fd5b50505050613ecc614fae565b613ed5836145da565b9050600081608001519050816000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150876039913960400191505060405180910390fd5b600160068281548110613f7757fe5b906000526020600020906008020160070160006101000a81548160ff02191690836003811115613fa357fe5b02179055503373ffffffffffffffffffffffffffffffffffffffff1682608001517fb419f275eebfa354bbab2709955ee0c0e25ca95fae50a8e3672c5e3d9c931f58613fee85614bd0565b6040518082815260200191505060405180910390a3600192505050919050565b600080600060608060008060606000808a11614092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7365712066726f6d20310000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007805490508a1061410c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060078b8154811061411b57fe5b9060005260206000209060080201905060606141478260070160009054906101000a900460ff16614a21565b90508b9a508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16995081600101549850816002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142125780601f106141e757610100808354040283529160200191614212565b820191906000526020600020905b8154815290600101906020018083116141f557829003601f168201915b50505050509750816003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142b15780601f10614286576101008083540402835291602001916142b1565b820191906000526020600020905b81548152906001019060200180831161429457829003601f168201915b5050505050965081600501549550816006015494508093506144cd82604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156143d25780601f106143a7576101008083540402835291602001916143d2565b820191906000526020600020905b8154815290600101906020018083116143b557829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156144745780601f1061444957610100808354040283529160200191614474565b820191906000526020600020905b81548152906001019060200180831161445757829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff1660038111156144b957fe5b60038111156144c457fe5b81525050614bd0565b925050509193959799909294969850565b6144e6613a7f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b61458f81614d14565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006145d38260405180602001604052806000815250614e74565b9050919050565b6145e2614fae565b6000600460008481526020019081526020016000205490508060068054905011614674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642073657100000000000000000000000000000000000000000081525060200191505060405180910390fd5b600081116146ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e76616c69642072657175657374486173680000000000000000000000000081525060200191505060405180910390fd5b6146f2614fae565b600682815481106146ff57fe5b9060005260206000209060080201604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156148125780601f106147e757610100808354040283529160200191614812565b820191906000526020600020905b8154815290600101906020018083116147f557829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156148b45780601f10614889576101008083540402835291602001916148b4565b820191906000526020600020905b81548152906001019060200180831161489757829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff1660038111156148f957fe5b600381111561490457fe5b8152505090506000600381111561491757fe5b8160e00151600381111561492757fe5b1461499a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f737461747573206e6f742070656e64696e672e0000000000000000000000000081525060200191505060405180910390fd5b6149a381614bd0565b8414614a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642068617368000000000000000000000000000000000000000081525060200191505060405180910390fd5b8092505050919050565b606060006003811115614a3057fe5b826003811115614a3c57fe5b1415614a7f576040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152509050614bcb565b60016003811115614a8c57fe5b826003811115614a9857fe5b1415614adb576040518060400160405280600881526020017f63616e63656c65640000000000000000000000000000000000000000000000008152509050614bcb565b60026003811115614ae857fe5b826003811115614af457fe5b1415614b37576040518060400160405280600881526020017f617070726f7665640000000000000000000000000000000000000000000000008152509050614bcb565b600380811115614b4357fe5b826003811115614b4f57fe5b1415614b92576040518060400160405280600881526020017f72656a65637465640000000000000000000000000000000000000000000000008152509050614bcb565b6040518060400160405280600781526020017f756e6b6e6f776e0000000000000000000000000000000000000000000000000081525090505b919050565b600081600001518260400151836060015184608001518560a00151604051602001808673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015614c5a578082015181840152602081019050614c3f565b50505050905090810190601f168015614c875780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015614cc0578082015181840152602081019050614ca5565b50505050905090810190601f168015614ced5780820380516001836020036101000a031916815260200191505b50975050505050505050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614db7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f696e76616c6964205f6e65774f776e657200000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008151835114614e885760009050614f28565b60005b8351811015614f2257828181518110614ea057fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110614ed957fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614f15576000915050614f28565b8080600101915050614e8b565b50600190505b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614f6f57805160ff1916838001178555614f9d565b82800160010185558215614f9d579182015b82811115614f9c578251825591602001919060010190614f81565b5b509050614faa9190615014565b5090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160608152602001606081526020016000815260200160008152602001600081526020016000600381111561500e57fe5b81525090565b5b8082111561502d576000816000905550600101615015565b509056fe6d65726368616e7420627463206465706f736974206164647265737320776173206e6f7420736574636f6e6669726d4d696e7452657175657374206661696c65642c207761697420666f7220323020626c6f636b7363616e63656c2073656e64657220697320646966666572656e74207468616e2070656e64696e67207265717565737420696e69746961746f72a264697066735822122060a1f3bb19aa5fcfafe814bb6e7523581d321167acb5e70336b4bf07feeaf0d964736f6c63430007030033
Deployed Bytecode Sourcemap
265:12812:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;731:49:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;217:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4282:532:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;787:49:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7392:726:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8823:912;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1793:121;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4923:342;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;843:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10762:1122:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5467:1007;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;879:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:121:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;294:64:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;365:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9963:608:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;405:20:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12077:998:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;432:85:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;857:930:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8125:469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1920:931;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1670:117:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;251:36:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;731:49;;;;;;;;;;;;;;;;;:::o;217:178:0:-;513:8:7;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;284:15:0::1;302:6;:16;;;329:4;302:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;284:51;;353:6;:15;;;369:8;:6;:8::i;:::-;379:7;353:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;345:43;;;::::0;::::1;;551:1:7;217:178:0::0;:::o;4282:532:4:-;4436:4;3598:10;;;;;;;;;;;:27;;;3626:10;3598:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4495:1:::1;4464:33;;4474:8;4464:33;;;;4456:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4536:10;;;;;;;;;;;:26;;;4563:8;4536:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4591:25;4605:10;4591:13;:25::i;:::-;4590:26;4582:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4694:10;4651:30;:40;4682:8;4651:40;;;;;;;;;;;;;;;:53;;;;;;;;;;;;:::i;:::-;;4763:10;4719:67;;4753:8;4719:67;;;4775:10;4719:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:4;4796:11;;4282:532:::0;;;;:::o;787:49:5:-;;;;;;;;;;;;;;;;;:::o;7392:726:4:-;7485:15;7510:17;7537:11;7558:24;7592:21;7623:19;7652:21;7683;7716:22;;:::i;:::-;7741:35;7763:12;7741:21;:35::i;:::-;7716:60;;7800:7;:11;;;7787:24;;7833:7;:17;;;7821:29;;7869:7;:14;;;7860:23;;7906:7;:18;;;7893:31;;7944:7;:15;;;7934:25;;7986:7;:22;;;7969:39;;8037:7;:24;;;8018:43;;8080:31;8096:7;:14;;;8080:15;:31::i;:::-;8071:40;;7392:726;;;;;;;;;;:::o;8823:912::-;8904:4;3598:10;;;;;;;;;;;:27;;;3626:10;3598:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8920:12:::1;8935;8920:27;;8957:22;;:::i;:::-;8982:34;9004:11;8982:21;:34::i;:::-;8957:59;;9044:7;:22;;;9034:7;:32;9026:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9131:7;:22;;;9125:2;9115:7;:12;:38;;9107:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9213:8;9224:7;:11;;;9213:22;;9272;9245:12;9258:3;9245:17;;;;;;;;;;;;;;;;;;:24;;;:49;;;;;;;;;;;;;;;;;;;;;;;;9304:11;9318:12;9331:3;9318:17;;;;;;;;;;;;;;;;;;:24;;;9304:38;;9389:7;9352:12;9365:3;9352:17;;;;;;;;;;;;;;;;;;:34;;:44;;;;9415:10;;;;;;;;;;;:15;;;9431:7;:17;;;9450:6;9415:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;9407:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9540:7;:17;;;9488:219;;9515:7;:11;;;9488:219;9571:6;9591:7;:18;;;9623:7;:15;;;9652:7;9673:24;9689:7;9673:15;:24::i;:::-;9488:219;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9724:4;9717:11;;;;;;8823:912:::0;;;:::o;1793:121::-;1858:11;1888:12;:19;;;;1881:26;;1793:121;:::o;4923:342::-;5031:4;3501:10;;;;;;;;;;;:26;;;3528:10;3501:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5056:25:::1;5070:10;5056:13;:25::i;:::-;5055:26;5047:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5158:10;5116:27;:39;5144:10;5116:39;;;;;;;;;;;;;;;:52;;;;;;;;;;;;:::i;:::-;;5214:10;5183:54;;;5226:10;5183:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5254:4;5247:11;;4923:342:::0;;;:::o;843:29:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10762:1122:4:-;10820:4;3501:10;;;;;;;;;;;:26;;;3528:10;3501:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10836:31:::1;10870:27;:39;10898:10;10870:39;;;;;;;;;;;;;;;10836:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10928:32;10942:17;10928:13;:32::i;:::-;10927:33;10919:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11016:8;11027:12;:19;;;;11016:30;;11056:12;11071;11056:27;;11094:22;;:::i;:::-;11119:321;;;;;;;;11153:10;11119:321;;;;;;11186:6;11119:321;;;;11219:17;11119:321;;;;;;;;;;;;;;;::::0;::::1;;;;11282:3;11119:321;;;;11316:7;11119:321;;;;11356:1;11119:321;;;;11404:21;11119:321;;;;;;;;;;::::0;11094:346:::1;;11451:19;11473:24;11489:7;11473:15;:24::i;:::-;11451:46;;11540:3;11507:17;:30;11525:11;11507:30;;;;;;;;;;;:36;;;;11553:12;11571:7;11553:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11598:10;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:35;;;11634:10;11656;;;;;;;;;;;11669:6;11598:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;11590:121;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11729:10;;;;;;;;;;;:15;;;11745:6;11729:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;11721:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11796:10;11784:72;;11791:3;11784:72;11808:6;11816:17;11835:7;11844:11;11784:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11873:4;11866:11;;;;;;;10762:1122:::0;;;:::o;5467:1007::-;5589:4;3501:10;;;;;;;;;;;:26;;;3528:10;3501:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5618:22:::1;5632:7;5618:13;:22::i;:::-;5617:23;5609:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5679:57;5693:30;:42;5724:10;5693:42;;;;;;;;;;;;;;;5679:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:57::i;:::-;5678:58;5670:98;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5779:8;5790:12;:19;;;;5779:30;;5819:12;5834;5819:27;;5857:22;;:::i;:::-;5882:327;;;;;;;;5916:10;5882:327;;;;;;5949:6;5882:327;;;;5982:30;:42;6013:10;5982:42;;;;;;;;;;;;;;;5882:327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6048:7;5882:327;;;;6075:3;5882:327;;;;6109:7;5882:327;;;;6149:1;5882:327;;;;6173:21;5882:327;;;;;;;;;;::::0;5857:352:::1;;6220:19;6242:24;6258:7;6242:15;:24::i;:::-;6220:46;;6309:3;6276:17;:30;6294:11;6276:30;;;;;;;;;;;:36;;;;6322:12;6340:7;6322:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6384:10;6364:82;;6379:3;6364:82;6396:7;:18;;;6416:7;6425;6434:11;6364:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6463:4;6456:11;;;;;;5467:1007:::0;;;;:::o;879:29:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2857:121:4:-;2922:11;2952:12;:19;;;;2945:26;;2857:121;:::o;294:64:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;365:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9963:608:4:-;10043:4;3598:10;;;;;;;;;;;:27;;;3626:10;3598:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10059:22:::1;;:::i;:::-;10084:34;10106:11;10084:21;:34::i;:::-;10059:59;;10128:8;10139:7;:11;;;10128:22;;10188;10161:12;10174:3;10161:17;;;;;;;;;;;;;;;;;;:24;;;:49;;;;;;;;;;;;;;;;;;;;;;;;10220:12;10235;10220:27;;10294:7;10257:12;10270:3;10257:17;;;;;;;;;;;;;;;;;;:34;;:44;;;;10368:7;:17;;;10317:226;;10343:7;:11;;;10317:226;10399:7;:14;;;10427:7;:18;;;10459:7;:15;;;10488:7;10509:24;10525:7;10509:15;:24::i;:::-;10317:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10560:4;10553:11;;;;;9963:608:::0;;;:::o;405:20:6:-;;;;;;;;;;;;:::o;12077:998:4:-;12181:4;3598:10;;;;;;;;;;;:27;;;3626:10;3598:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12197:8:::1;12208:17;:30;12226:11;12208:30;;;;;;;;;;;;12197:41;;12278:3;12256:12;:19;;;;:25;12248:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12321:1;12315:3;:7;12307:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12356:22;;:::i;:::-;12381:12;12394:3;12381:17;;;;;;;;;;;;;;;;;;12356:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;12431:24;12447:7;12431:15;:24::i;:::-;12416:11;:39;12408:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12515:21;12497:39;;;;;;;;:7;:14;;;:39;;;;;;;;;12489:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12599:7;12571:12;12584:3;12571:17;;;;;;;;;;;;;;;;;;:25;;:35;;;;;;;;;;;;:::i;:::-;;12643:22;12616:12;12629:3;12616:17;;;;;;;;;;;;;;;;;;:24;;;:49;;;;;;;;;;;;;;;;;;;;;;;;12675:12;12690;12675:27;;12749:7;12712:12;12725:3;12712:17;;;;;;;;;;;;;;;;;;:34;;:44;;;;12784:7;12766;:15;;:25;;;;12847:3;12801:17;:43;12819:24;12835:7;12819:15;:24::i;:::-;12801:43;;;;;;;;;;;:49;;;;12918:7;:17;;;12866:181;;12893:7;:11;;;12866:181;12949:7;:14;;;12977:7;:18;;;13009:7;13030;12866:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13064:4;13057:11;;;;;12077:998:::0;;;;:::o;432:85:6:-;480:7;505:5;;;;;;;;;;;498:12;;432:85;:::o;857:930:4:-;944:15;969:17;996:11;1017:24;1051:21;1082:19;1111:21;1142;1173:19;1227:1;1221:3;:7;1213:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1267:12;:19;;;;1261:3;:25;1253:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:22;;:::i;:::-;1337:12;1350:3;1337:17;;;;;;;;;;;;;;;;;;1312:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1364:26;1393:31;1409:7;:14;;;1393:15;:31::i;:::-;1364:60;;1448:3;1435:16;;1473:7;:17;;;1461:29;;1509:7;:14;;;1500:23;;1546:7;:18;;;1533:31;;1584:7;:15;;;1574:25;;1626:7;:22;;;1609:39;;1677:7;:24;;;1658:43;;1720:12;1711:21;;1756:24;1772:7;1756:15;:24::i;:::-;1742:38;;857:930;;;;;;;;;;;;;:::o;8125:469::-;8204:4;3501:10;;;;;;;;;;;:26;;;3528:10;3501:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8220:22:::1;;:::i;:::-;8245:34;8267:11;8245:21;:34::i;:::-;8220:59;;8289:8;8300:7;:11;;;8289:22;;8343:7;:17;;;8329:31;;:10;:31;;;8321:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8460:22;8433:12;8446:3;8433:17;;;;;;;;;;;;;;;;;;:24;;;:49;;;;;;;;;;;;;;;;;;;;;;;;8529:10;8498:68;;8516:7;:11;;;8498:68;8541:24;8557:7;8541:15;:24::i;:::-;8498:68;;;;;;;;;;;;;;;;;;8583:4;8576:11;;;;8125:469:::0;;;:::o;1920:931::-;2007:15;2032:17;2059:11;2080:24;2114:21;2145:19;2174:21;2205;2236:19;2290:1;2284:3;:7;2276:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2330:12;:19;;;;2324:3;:25;2316:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:23;2401:12;2414:3;2401:17;;;;;;;;;;;;;;;;;;2375:43;;2428:26;2457:31;2473:7;:14;;;;;;;;;;;;2457:15;:31::i;:::-;2428:60;;2512:3;2499:16;;2537:7;:17;;;;;;;;;;;;2525:29;;2573:7;:14;;;2564:23;;2610:7;:18;;2597:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2648:7;:15;;2638:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2690:7;:22;;;2673:39;;2741:7;:24;;;2722:43;;2784:12;2775:21;;2820:24;2836:7;2820:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:24::i;:::-;2806:38;;1920:931;;;;;;;;;;;;;:::o;1670:117:6:-;513:8:7;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1751:29:6::1;1770:9;1751:18;:29::i;:::-;1670:117:::0;:::o;251:36:5:-;;;;;;;;;;;;;:::o;4022:116:4:-;4085:4;4109:21;4124:1;4109:21;;;;;;;;;;;;:14;:21::i;:::-;4101:30;;4022:116;;;:::o;6895:491::-;6970:14;;:::i;:::-;6996:8;7007:17;:31;7025:12;7007:31;;;;;;;;;;;;6996:42;;7078:3;7056:12;:19;;;;:25;7048:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7121:1;7115:3;:7;7107:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7156:22;;:::i;:::-;7181:12;7194:3;7181:17;;;;;;;;;;;;;;;;;;7156:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7234:21;7216:39;;;;;;;;:7;:14;;;:39;;;;;;;;;7208:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7313:24;7329:7;7313:15;:24::i;:::-;7297:12;:40;7289:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7372:7;7365:14;;;;6895:491;;;:::o;339:512::-;409:13;448:21;438:31;;;;;;;;:6;:31;;;;;;;;;434:411;;;485:16;;;;;;;;;;;;;;;;;;;;;434:411;532:22;522:32;;;;;;;;:6;:32;;;;;;;;;518:327;;;570:17;;;;;;;;;;;;;;;;;;;;;518:327;618:22;608:32;;;;;;;;:6;:32;;;;;;;;;604:241;;;656:17;;;;;;;;;;;;;;;;;;;;;604:241;704:22;694:32;;;;;;;;:6;:32;;;;;;;;;690:155;;;742:17;;;;;;;;;;;;;;;;;;;;;690:155;818:16;;;;;;;;;;;;;;;;;;;339:512;;;;:::o;6480:313::-;6552:7;6616;:17;;;6651:7;:18;;;6687:7;:15;;;6720:7;:11;;;6749:7;:22;;;6588:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6578:208;;;;;;6571:215;;6480:313;;;:::o;1932:206:6:-;2027:1;2006:23;;:9;:23;;;;1998:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2094:9;2066:38;;2087:5;;;;;;;;;;2066:38;;;;;;;;;;;;2122:9;2114:5;;:17;;;;;;;;;;;;;;;;;;1932:206;:::o;3661:355:4:-;3742:4;3787:1;3781:15;3768:1;3762:15;:34;3758:77;;3819:5;3812:12;;;;3758:77;3849:6;3844:145;3871:1;3865:15;3861:1;:19;3844:145;;;3927:1;3930;3921:11;;;;;;;;;;;;;;;;3906:26;;;3912:1;3915;3906:11;;;;;;;;;;;;;;;;:26;;;;3902:77;;3959:5;3952:12;;;;;3902:77;3882:4;;;;;;;3844:145;;;;4005:4;3998:11;;3661:355;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
://60a1f3bb19aa5fcfafe814bb6e7523581d321167acb5e70336b4bf07feeaf0d9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.