More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 7,319 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Or Sign W... | 66939750 | 5 days ago | IN | 0 POL | 0.02585705 | ||||
Cross Out II | 66861588 | 7 days ago | IN | 0.609802 POL | 0.00323983 | ||||
Create Or Sign W... | 66825873 | 7 days ago | IN | 0 POL | 0.00621615 | ||||
Create Or Sign W... | 66817719 | 8 days ago | IN | 0 POL | 0.01935542 | ||||
Cross Out II | 66798409 | 8 days ago | IN | 0.986657 POL | 0.00168852 | ||||
Create Or Sign W... | 66739740 | 10 days ago | IN | 0 POL | 0.00527557 | ||||
Create Or Sign W... | 66639590 | 12 days ago | IN | 0 POL | 0.00601412 | ||||
Create Or Sign M... | 66582849 | 13 days ago | IN | 0 POL | 0.00759672 | ||||
Create Or Sign W... | 66537357 | 15 days ago | IN | 0 POL | 0.018388 | ||||
Cross Out II | 66445642 | 17 days ago | IN | 1.4 POL | 0.00159631 | ||||
Create Or Sign W... | 66442950 | 17 days ago | IN | 0 POL | 0.00149565 | ||||
Create Or Sign W... | 66431407 | 17 days ago | IN | 0 POL | 0.00736523 | ||||
Cross Out II | 66430976 | 17 days ago | IN | 0.527148 POL | 0.00256148 | ||||
Cross Out II | 66410922 | 18 days ago | IN | 0.427481 POL | 0.00439305 | ||||
Create Or Sign W... | 66410896 | 18 days ago | IN | 0 POL | 0.01061025 | ||||
Cross Out II | 66410561 | 18 days ago | IN | 0.427481 POL | 0.00438176 | ||||
Create Or Sign W... | 66410259 | 18 days ago | IN | 0 POL | 0.00972001 | ||||
Create Or Sign W... | 66410102 | 18 days ago | IN | 0 POL | 0.0109125 | ||||
Create Or Sign W... | 66372579 | 19 days ago | IN | 0 POL | 0.01717665 | ||||
Create Or Sign W... | 66371902 | 19 days ago | IN | 0 POL | 0.01762249 | ||||
Create Or Sign W... | 66230679 | 22 days ago | IN | 0 POL | 0.00546634 | ||||
Create Or Sign W... | 66058212 | 27 days ago | IN | 0 POL | 0.00997401 | ||||
Create Or Sign W... | 66027809 | 28 days ago | IN | 0 POL | 0.01240524 | ||||
Cross Out II | 66001692 | 28 days ago | IN | 0.35 POL | 0.002028 | ||||
Create Or Sign W... | 65844877 | 32 days ago | IN | 0 POL | 0.01936548 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
66739740 | 10 days ago | 4.23041165 POL | ||||
66639590 | 12 days ago | 23.01286879 POL | ||||
66410102 | 18 days ago | 1.99999656 POL | ||||
66372579 | 19 days ago | 11.74136381 POL | ||||
66371902 | 19 days ago | 14.90347453 POL | ||||
66230679 | 22 days ago | 7.32634232 POL | ||||
65826786 | 33 days ago | 0.32393843 POL | ||||
65635989 | 38 days ago | 2.6604502 POL | ||||
65580561 | 39 days ago | 0.80308991 POL | ||||
65336461 | 45 days ago | 82.89362744 POL | ||||
64819365 | 58 days ago | 1.34227349 POL | ||||
64657923 | 62 days ago | 3.15201241 POL | ||||
64398804 | 69 days ago | 1.28605555 POL | ||||
64358613 | 70 days ago | 0.52710009 POL | ||||
64321024 | 71 days ago | 8.77607784 POL | ||||
64240576 | 73 days ago | 28.71897268 POL | ||||
64188758 | 74 days ago | 13.31732654 POL | ||||
63948120 | 80 days ago | 2.5313656 POL | ||||
63699979 | 86 days ago | 1.49504898 POL | ||||
63624902 | 88 days ago | 1.6934168 POL | ||||
63598433 | 89 days ago | 506.97384994 POL | ||||
63598158 | 89 days ago | 1,498.78597387 POL | ||||
63546324 | 90 days ago | 1,164.08369021 POL | ||||
63376522 | 94 days ago | 1.00729403 POL | ||||
62977436 | 104 days ago | 0.18517431 POL |
Loading...
Loading
Contract Name:
NerveMultiSigWalletIII
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-17 */ pragma solidity ^0.5.5; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value, mapping(address => uint8) storage bugERC20s) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value), bugERC20s); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value, mapping(address => uint8) storage bugERC20s) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value), bugERC20s); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data, mapping(address => uint8) storage bugERC20s) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (bugERC20s[address(token)] != 0) { return; } if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // Part: ReentrancyGuard /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } library BytesLib { function concat( bytes memory _preBytes, bytes memory _postBytes ) internal pure returns (bytes memory) { bytes memory tempBytes; assembly { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // Store the length of the first bytes array at the beginning of // the memory for tempBytes. let length := mload(_preBytes) mstore(tempBytes, length) // Maintain a memory counter for the current write location in the // temp bytes array by adding the 32 bytes for the array length to // the starting location. let mc := add(tempBytes, 0x20) // Stop copying when the memory counter reaches the length of the // first bytes array. let end := add(mc, length) for { // Initialize a copy counter to the start of the _preBytes data, // 32 bytes into its memory. let cc := add(_preBytes, 0x20) } lt(mc, end) { // Increase both counters by 32 bytes each iteration. mc := add(mc, 0x20) cc := add(cc, 0x20) } { // Write the _preBytes data into the tempBytes memory 32 bytes // at a time. mstore(mc, mload(cc)) } // Add the length of _postBytes to the current length of tempBytes // and store it as the new length in the first 32 bytes of the // tempBytes memory. length := mload(_postBytes) mstore(tempBytes, add(length, mload(tempBytes))) // Move the memory counter back from a multiple of 0x20 to the // actual end of the _preBytes data. mc := end // Stop copying when the memory counter reaches the new combined // length of the arrays. end := add(mc, length) for { let cc := add(_postBytes, 0x20) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } // Update the free-memory pointer by padding our last write location // to 32 bytes: add 31 bytes to the end of tempBytes to move to the // next 32 byte block, then round down to the nearest multiple of // 32. If the sum of the length of the two arrays is zero then add // one before rounding down to leave a blank 32 bytes (the length block with 0). mstore(0x40, and( add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31) // Round down to the nearest 32 bytes. )) } return tempBytes; } function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal { assembly { // Read the first 32 bytes of _preBytes storage, which is the length // of the array. (We don't need to use the offset into the slot // because arrays use the entire slot.) let fslot := sload(_preBytes_slot) // Arrays of 31 bytes or less have an even value in their slot, // while longer arrays have an odd value. The actual length is // the slot divided by two for odd values, and the lowest order // byte divided by two for even values. // If the slot is even, bitwise and the slot with 255 and divide by // two to get the length. If the slot is odd, bitwise and the slot // with -1 and divide by two. let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) let newlength := add(slength, mlength) // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage switch add(lt(slength, 32), lt(newlength, 32)) case 2 { // Since the new array still fits in the slot, we just need to // update the contents of the slot. // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length sstore( _preBytes_slot, // all the modifications to the slot are inside this // next block add( // we can just add to the slot contents because the // bytes we want to change are the LSBs fslot, add( mul( div( // load the bytes from memory mload(add(_postBytes, 0x20)), // zero all bytes to the right exp(0x100, sub(32, mlength)) ), // and now shift left the number of bytes to // leave space for the length in the slot exp(0x100, sub(32, newlength)) ), // increase length by the double of the memory // bytes length mul(mlength, 2) ) ) ) } case 1 { // The stored value fits in the slot, but the combined value // will exceed it. // get the keccak hash to get the contents of the array mstore(0x0, _preBytes_slot) let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes_slot, add(mul(newlength, 2), 1)) // The contents of the _postBytes array start 32 bytes into // the structure. Our first read should obtain the `submod` // bytes that can fit into the unused space in the last word // of the stored array. To get this, we read 32 bytes starting // from `submod`, so the data we read overlaps with the array // contents by `submod` bytes. Masking the lowest-order // `submod` bytes allows us to add that value directly to the // stored value. let submod := sub(32, slength) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore( sc, add( and( fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ), and(mload(mc), mask) ) ) for { mc := add(mc, 0x20) sc := add(sc, 1) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } default { // get the keccak hash to get the contents of the array mstore(0x0, _preBytes_slot) // Start copying to the last used word of the stored array. let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes_slot, add(mul(newlength, 2), 1)) // Copy over the first `submod` bytes of the new data as in // case 1 above. let slengthmod := mod(slength, 32) let mlengthmod := mod(mlength, 32) let submod := sub(32, slengthmod) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore(sc, add(sload(sc), and(mload(mc), mask))) for { sc := add(sc, 1) mc := add(mc, 0x20) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } } } function slice( bytes memory _bytes, uint _start, uint _length ) internal pure returns (bytes memory) { require(_bytes.length >= (_start + _length)); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } function toAddress(bytes memory _bytes, uint _start) internal pure returns (address) { require(_bytes.length >= (_start + 20)); address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } return tempAddress; } function toUint8(bytes memory _bytes, uint _start) internal pure returns (uint8) { require(_bytes.length >= (_start + 1)); uint8 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x1), _start)) } return tempUint; } function toUint16(bytes memory _bytes, uint _start) internal pure returns (uint16) { require(_bytes.length >= (_start + 2)); uint16 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x2), _start)) } return tempUint; } function toUint32(bytes memory _bytes, uint _start) internal pure returns (uint32) { require(_bytes.length >= (_start + 4)); uint32 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x4), _start)) } return tempUint; } function toUint64(bytes memory _bytes, uint _start) internal pure returns (uint64) { require(_bytes.length >= (_start + 8)); uint64 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x8), _start)) } return tempUint; } function toUint96(bytes memory _bytes, uint _start) internal pure returns (uint96) { require(_bytes.length >= (_start + 12)); uint96 tempUint; assembly { tempUint := mload(add(add(_bytes, 0xc), _start)) } return tempUint; } function toUint128(bytes memory _bytes, uint _start) internal pure returns (uint128) { require(_bytes.length >= (_start + 16)); uint128 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x10), _start)) } return tempUint; } function toUint(bytes memory _bytes, uint _start) internal pure returns (uint256) { require(_bytes.length >= (_start + 32)); uint256 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x20), _start)) } return tempUint; } function toBytes32(bytes memory _bytes, uint _start) internal pure returns (bytes32) { require(_bytes.length >= (_start + 32)); bytes32 tempBytes32; assembly { tempBytes32 := mload(add(add(_bytes, 0x20), _start)) } return tempBytes32; } function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) { bool success = true; assembly { let length := mload(_preBytes) // if lengths don't match the arrays are not equal switch eq(length, mload(_postBytes)) case 1 { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 let mc := add(_preBytes, 0x20) let end := add(mc, length) for { let cc := add(_postBytes, 0x20) // the next line is the loop condition: // while(uint(mc < end) + cb == 2) } eq(add(lt(mc, end), cb), 2) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { // if any of these checks fails then arrays are not equal if iszero(eq(mload(mc), mload(cc))) { // unsuccess: success := 0 cb := 0 } } } default { // unsuccess: success := 0 } } return success; } function equalStorage( bytes storage _preBytes, bytes memory _postBytes ) internal view returns (bool) { bool success = true; assembly { // we know _preBytes_offset is 0 let fslot := sload(_preBytes_slot) // Decode the length of the stored array like in concatStorage(). let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) // if lengths don't match the arrays are not equal switch eq(slength, mlength) case 1 { // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage if iszero(iszero(slength)) { switch lt(slength, 32) case 1 { // blank the last byte which is the length fslot := mul(div(fslot, 0x100), 0x100) if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) { // unsuccess: success := 0 } } default { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 // get the keccak hash to get the contents of the array mstore(0x0, _preBytes_slot) let sc := keccak256(0x0, 0x20) let mc := add(_postBytes, 0x20) let end := add(mc, mlength) // the next line is the loop condition: // while(uint(mc < end) + cb == 2) for {} eq(add(lt(mc, end), cb), 2) { sc := add(sc, 1) mc := add(mc, 0x20) } { if iszero(eq(sload(sc), mload(mc))) { // unsuccess: success := 0 cb := 0 } } } } } default { // unsuccess: success := 0 } } return success; } } interface IERC20Minter { function mint(address to, uint256 amount) external; function burn(uint256 amount) external; function replaceMinter(address newMinter) external; } contract NerveMultiSigWalletIII is ReentrancyGuard { using Address for address; using SafeERC20 for IERC20; using SafeMath for uint256; using BytesLib for bytes; modifier isOwner{ require(owner == msg.sender, "Only owner can execute it"); _; } modifier isManager{ require(managers[msg.sender] == 1, "Only manager can execute it"); _; } bool public upgrade = false; address public upgradeContractAddress = address(0); // 最大管理员数量 uint public max_managers = 15; // 最小管理员数量 uint public min_managers = 3; // 最小签名比例 66% uint public rate = 66; // 签名字节长度 uint public signatureLength = 65; // 比例分母 uint constant DENOMINATOR = 100; // 当前合约版本 uint8 constant VERSION = 3; // hash计算加盐 uint public hashSalt; // 当前交易的最小签名数量 uint8 public current_min_signatures; address public owner; mapping(address => uint8) private seedManagers; address[] private seedManagerArray; mapping(address => uint8) private managers; address[] private managerArray; mapping(bytes32 => uint8) private completedKeccak256s; mapping(string => uint8) private completedTxs; mapping(address => uint8) private minterERC20s; mapping(address => uint8) public bugERC20s; bool public openCrossOutII = false; constructor(uint256 _chainid, address[] memory _managers) public{ require(_managers.length <= max_managers, "Exceeded the maximum number of managers"); require(_managers.length >= min_managers, "Not reaching the min number of managers"); owner = msg.sender; managerArray = _managers; for (uint8 i = 0; i < managerArray.length; i++) { managers[managerArray[i]] = 1; seedManagers[managerArray[i]] = 1; seedManagerArray.push(managerArray[i]); } require(managers[owner] == 0, "Contract creator cannot act as manager"); // 设置当前交易的最小签名数量 current_min_signatures = calMinSignatures(managerArray.length); hashSalt = _chainid * 2 + VERSION; } function() external payable { emit DepositFunds(msg.sender, msg.value); } function createOrSignWithdraw(string memory txKey, address payable to, uint256 amount, bool isERC20, address ERC20, bytes memory signatures) public nonReentrant isManager { require(bytes(txKey).length == 64, "Fixed length of txKey: 64"); require(to != address(0), "Withdraw: transfer to the zero address"); require(amount > 0, "Withdrawal amount must be greater than 0"); // 校验已经完成的交易 require(completedTxs[txKey] == 0, "Transaction has been completed"); // 校验提现金额 if (isERC20) { validateTransferERC20(ERC20, to, amount); } else { require(address(this).balance >= amount, "This contract address does not have sufficient balance of ether"); } bytes32 vHash = keccak256(abi.encodePacked(txKey, to, amount, isERC20, ERC20, hashSalt)); // 校验请求重复性 require(completedKeccak256s[vHash] == 0, "Invalid signatures"); // 校验签名 require(validSignature(vHash, signatures), "Valid signatures fail"); // 执行转账 if (isERC20) { transferERC20(ERC20, to, amount); } else { // 实际到账 require(address(this).balance >= amount, "This contract address does not have sufficient balance of ether"); to.transfer(amount); emit TransferFunds(to, amount); } // 保存交易数据 completeTx(txKey, vHash, 1); emit TxWithdrawCompleted(txKey); } function createOrSignManagerChange(string memory txKey, address[] memory adds, address[] memory removes, uint8 count, bytes memory signatures) public isManager { require(bytes(txKey).length == 64, "Fixed length of txKey: 64"); require(adds.length > 0 || removes.length > 0, "There are no managers joining or exiting"); // 校验已经完成的交易 require(completedTxs[txKey] == 0, "Transaction has been completed"); preValidateAddsAndRemoves(adds, removes); bytes32 vHash = keccak256(abi.encodePacked(txKey, adds, count, removes, hashSalt)); // 校验请求重复性 require(completedKeccak256s[vHash] == 0, "Invalid signatures"); // 校验签名 require(validSignature(vHash, signatures), "Valid signatures fail"); // 变更管理员 removeManager(removes); addManager(adds); // 更新当前交易的最小签名数 current_min_signatures = calMinSignatures(managerArray.length); // 保存交易数据 completeTx(txKey, vHash, 1); // add event emit TxManagerChangeCompleted(txKey); } function createOrSignUpgrade(string memory txKey, address upgradeContract, bytes memory signatures) public isManager { require(bytes(txKey).length == 64, "Fixed length of txKey: 64"); // 校验已经完成的交易 require(completedTxs[txKey] == 0, "Transaction has been completed"); require(!upgrade, "It has been upgraded"); require(upgradeContract.isContract(), "The address is not a contract address"); // 校验 bytes32 vHash = keccak256(abi.encodePacked(txKey, upgradeContract, hashSalt)); // 校验请求重复性 require(completedKeccak256s[vHash] == 0, "Invalid signatures"); // 校验签名 require(validSignature(vHash, signatures), "Valid signatures fail"); // 变更可升级 upgrade = true; upgradeContractAddress = upgradeContract; // 保存交易数据 completeTx(txKey, vHash, 1); // add event emit TxUpgradeCompleted(txKey); } function validSignature(bytes32 hash, bytes memory signatures) internal view returns (bool) { require(signatures.length <= 975, "Max length of signatures: 975"); // 获取签名列表对应的有效管理员,如果存在错误的签名、或者不是管理员的签名,就失败 uint sManagersCount = getManagerFromSignatures(hash, signatures); // 判断最小签名数量 return sManagersCount >= current_min_signatures; } function getManagerFromSignatures(bytes32 hash, bytes memory signatures) internal view returns (uint){ uint signCount = 0; uint times = signatures.length.div(signatureLength); address[] memory result = new address[](times); uint k = 0; uint8 j = 0; for (uint i = 0; i < times; i++) { bytes memory sign = signatures.slice(k, signatureLength); address mAddress = ecrecovery(hash, sign); require(mAddress != address(0), "Signatures error"); // 管理计数 if (managers[mAddress] == 1) { signCount++; result[j++] = mAddress; } k += signatureLength; } // 验证地址重复性 bool suc = repeatability(result); delete result; require(suc, "Signatures duplicate"); return signCount; } function validateRepeatability(address currentAddress, address[] memory list) internal pure returns (bool) { address tempAddress; for (uint i = 0; i < list.length; i++) { tempAddress = list[i]; if (tempAddress == address(0)) { break; } if (tempAddress == currentAddress) { return false; } } return true; } function repeatability(address[] memory list) internal pure returns (bool) { for (uint i = 0; i < list.length; i++) { address address1 = list[i]; if (address1 == address(0)) { break; } for (uint j = i + 1; j < list.length; j++) { address address2 = list[j]; if (address2 == address(0)) { break; } if (address1 == address2) { return false; } } } return true; } function ecrecovery(bytes32 hash, bytes memory sig) internal view returns (address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != signatureLength) { return address(0); } assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } if(uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) { v += 27; } if (v != 27 && v != 28) { return address(0); } return ecrecover(hash, v, r, s); } function preValidateAddsAndRemoves(address[] memory adds, address[] memory removes) internal view { // 校验adds uint addLen = adds.length; for (uint i = 0; i < addLen; i++) { address add = adds[i]; require(add != address(0), "ERROR: Detected zero address in adds"); require(managers[add] == 0, "The address list that is being added already exists as a manager"); } require(repeatability(adds), "Duplicate parameters for the address to join"); // 校验合约创建者不能被添加 require(validateRepeatability(owner, adds), "Contract creator cannot act as manager"); // 校验removes require(repeatability(removes), "Duplicate parameters for the address to exit"); uint removeLen = removes.length; for (uint i = 0; i < removeLen; i++) { address remove = removes[i]; require(seedManagers[remove] == 0, "Can't exit seed manager"); require(managers[remove] == 1, "There are addresses in the exiting address list that are not manager"); } require(managerArray.length + adds.length - removes.length <= max_managers, "Exceeded the maximum number of managers"); } /* 根据 `当前有效管理员数量` 和 `最小签名比例` 计算最小签名数量,向上取整 */ function calMinSignatures(uint managerCounts) internal view returns (uint8) { require(managerCounts > 0, "Manager Can't empty."); uint numerator = rate * managerCounts + DENOMINATOR - 1; return uint8(numerator / DENOMINATOR); } function removeManager(address[] memory removes) internal { if (removes.length == 0) { return; } for (uint i = 0; i < removes.length; i++) { delete managers[removes[i]]; } // 遍历修改前管理员列表 for (uint i = 0; i < managerArray.length; i++) { if (managers[managerArray[i]] == 0) { delete managerArray[i]; } } uint tempIndex = 0x10; for (uint i = 0; i<managerArray.length; i++) { address temp = managerArray[i]; if (temp == address(0)) { if (tempIndex == 0x10) tempIndex = i; continue; } else if (tempIndex != 0x10) { managerArray[tempIndex] = temp; tempIndex++; } } managerArray.length -= removes.length; } function addManager(address[] memory adds) internal { if (adds.length == 0) { return; } for (uint i = 0; i < adds.length; i++) { address add = adds[i]; if(managers[add] == 0) { managers[add] = 1; managerArray.push(add); } } } function completeTx(string memory txKey, bytes32 keccak256Hash, uint8 e) internal { completedTxs[txKey] = e; completedKeccak256s[keccak256Hash] = e; } function validateTransferERC20(address ERC20, address to, uint256 amount) internal view { require(to != address(0), "ERC20: transfer to the zero address"); require(address(this) != ERC20, "Do nothing by yourself"); require(ERC20.isContract(), "The address is not a contract address"); if (isMinterERC20(ERC20)) { // 定制ERC20验证结束 return; } IERC20 token = IERC20(ERC20); uint256 balance = token.balanceOf(address(this)); require(balance >= amount, "No enough balance of token"); } function transferERC20(address ERC20, address to, uint256 amount) internal { if (isMinterERC20(ERC20)) { // 定制的ERC20,跨链转入以太坊网络即增发 IERC20Minter minterToken = IERC20Minter(ERC20); minterToken.mint(to, amount); return; } IERC20 token = IERC20(ERC20); uint256 balance = token.balanceOf(address(this)); require(balance >= amount, "No enough balance of token"); token.safeTransfer(to, amount, bugERC20s); } function closeUpgrade() public isOwner { require(upgrade, "Denied"); upgrade = false; } function upgradeContractS1() public isOwner { require(upgrade, "Denied"); require(upgradeContractAddress != address(0), "ERROR: transfer to the zero address"); address(uint160(upgradeContractAddress)).transfer(address(this).balance); } function upgradeContractS2(address ERC20) public isOwner { require(upgrade, "Denied"); require(upgradeContractAddress != address(0), "ERROR: transfer to the zero address"); require(address(this) != ERC20, "Do nothing by yourself"); require(ERC20.isContract(), "The address is not a contract address"); IERC20 token = IERC20(ERC20); uint256 balance = token.balanceOf(address(this)); require(balance >= 0, "No enough balance of token"); token.safeTransfer(upgradeContractAddress, balance, bugERC20s); if (isMinterERC20(ERC20)) { // 定制的ERC20,转移增发销毁权限到新多签合约 IERC20Minter minterToken = IERC20Minter(ERC20); minterToken.replaceMinter(upgradeContractAddress); } } // 是否定制的ERC20 function isMinterERC20(address ERC20) public view returns (bool) { return minterERC20s[ERC20] > 0; } // 登记定制的ERC20 function registerMinterERC20(address ERC20) public isOwner { require(address(this) != ERC20, "Do nothing by yourself"); require(ERC20.isContract(), "The address is not a contract address"); require(!isMinterERC20(ERC20), "This address has already been registered"); minterERC20s[ERC20] = 1; } // 取消登记定制的ERC20 function unregisterMinterERC20(address ERC20) public isOwner { require(isMinterERC20(ERC20), "This address is not registered"); delete minterERC20s[ERC20]; } // 登记BUG的ERC20 function registerBugERC20(address bug) public isOwner { require(address(this) != bug, "Do nothing by yourself"); require(bug.isContract(), "The address is not a contract address"); bugERC20s[bug] = 1; } // 取消登记BUG的ERC20 function unregisterBugERC20(address bug) public isOwner { bugERC20s[bug] = 0; } // 从eth网络跨链转出资产(ETH or ERC20) function crossOut(string memory to, uint256 amount, address ERC20) public payable returns (bool) { address from = msg.sender; require(amount > 0, "ERROR: Zero amount"); if (ERC20 != address(0)) { require(msg.value == 0, "ERC20: Does not accept Ethereum Coin"); require(ERC20.isContract(), "The address is not a contract address"); IERC20 token = IERC20(ERC20); uint256 allowance = token.allowance(from, address(this)); require(allowance >= amount, "No enough amount for authorization"); uint256 fromBalance = token.balanceOf(from); require(fromBalance >= amount, "No enough balance of the token"); token.safeTransferFrom(from, address(this), amount, bugERC20s); if (isMinterERC20(ERC20)) { // 定制的ERC20,从以太坊网络跨链转出token即销毁 IERC20Minter minterToken = IERC20Minter(ERC20); minterToken.burn(amount); } } else { require(msg.value == amount, "Inconsistency Ethereum amount"); } emit CrossOutFunds(from, to, amount, ERC20); return true; } // 从eth网络跨链转出资产(ETH or ERC20) function crossOutII(string memory to, uint256 amount, address ERC20, bytes memory data) public payable returns (bool) { require(openCrossOutII, "CrossOutII: Not open"); address from = msg.sender; uint erc20Amount = 0; if (ERC20 != address(0)) { require(amount > 0, "ERROR: Zero amount"); require(ERC20.isContract(), "The address is not a contract address"); IERC20 token = IERC20(ERC20); uint256 allowance = token.allowance(from, address(this)); require(allowance >= amount, "No enough amount for authorization"); uint256 fromBalance = token.balanceOf(from); require(fromBalance >= amount, "No enough balance of the token"); token.safeTransferFrom(from, address(this), amount, bugERC20s); if (isMinterERC20(ERC20)) { // 定制的ERC20,从以太坊网络跨链转出token即销毁 IERC20Minter minterToken = IERC20Minter(ERC20); minterToken.burn(amount); } erc20Amount = amount; } else { require(msg.value > 0 && amount == 0, "CrossOutII: Illegal eth amount"); } emit CrossOutIIFunds(from, to, erc20Amount, ERC20, msg.value, data); return true; } function setCrossOutII(bool _open) public isOwner { openCrossOutII = _open; } function isCompletedTx(string memory txKey) public view returns (bool){ return completedTxs[txKey] > 0; } function ifManager(address _manager) public view returns (bool) { return managers[_manager] == 1; } function allManagers() public view returns (address[] memory) { return managerArray; } event DepositFunds(address from, uint amount); event CrossOutFunds(address from, string to, uint amount, address ERC20); event CrossOutIIFunds(address from, string to, uint amount, address ERC20, uint ethAmount, bytes data); event TransferFunds(address to, uint amount); event TxWithdrawCompleted(string txKey); event TxManagerChangeCompleted(string txKey); event TxUpgradeCompleted(string txKey); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_chainid","type":"uint256"},{"internalType":"address[]","name":"_managers","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20","type":"address"}],"name":"CrossOutFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CrossOutIIFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxManagerChangeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxUpgradeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxWithdrawCompleted","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"allManagers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bugERC20s","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address[]","name":"adds","type":"address[]"},{"internalType":"address[]","name":"removes","type":"address[]"},{"internalType":"uint8","name":"count","type":"uint8"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignManagerChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address","name":"upgradeContract","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"address","name":"ERC20","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ERC20","type":"address"}],"name":"crossOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ERC20","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"crossOutII","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"current_min_signatures","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashSalt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"ifManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"txKey","type":"string"}],"name":"isCompletedTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"isMinterERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"max_managers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"min_managers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openCrossOutII","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"bug","type":"address"}],"name":"registerBugERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"registerMinterERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setCrossOutII","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signatureLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"bug","type":"address"}],"name":"unregisterBugERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"unregisterMinterERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"upgradeContractS1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"upgradeContractS2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600180546001600160a81b0319169055600f60025560038055604260045560416005556010805460ff191690553480156200003e57600080fd5b50604051620048be380380620048be833981810160405260408110156200006457600080fd5b8151602083018051604051929492938301929190846401000000008211156200008c57600080fd5b908301906020820185811115620000a257600080fd5b8251866020820283011164010000000082111715620000c057600080fd5b82525081516020918201928201910280838360005b83811015620000ef578181015183820152602001620000d5565b505050509190910160405250506001600055505060025481511115620001475760405162461bcd60e51b8152600401808060200182810382526027815260200180620048716027913960400191505060405180910390fd5b600354815110156200018b5760405162461bcd60e51b81526004018080602001828103825260278152602001806200484a6027913960400191505060405180910390fd5b60078054610100600160a81b03191633610100021790558051620001b790600b906020840190620003be565b5060005b600b5460ff82161015620002b5576001600a6000600b8460ff1681548110620001e057fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191660ff938416179055600b805460019360089392919086169081106200022c57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff928316179055600b805460099284169081106200027257fe5b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b0390921691909117905501620001bb565b5060075461010090046001600160a01b03166000908152600a602052604090205460ff1615620003175760405162461bcd60e51b8152600401808060200182810382526026815260200180620048986026913960400191505060405180910390fd5b600b546200032e906001600160e01b036200035416565b6007805460ff9290921660ff199092169190911790555060020260030160065562000452565b6000808211620003ab576040805162461bcd60e51b815260206004820152601460248201527f4d616e616765722043616e277420656d7074792e000000000000000000000000604482015290519081900360640190fd5b6004548202606301606481049392505050565b82805482825590600052602060002090810192821562000416579160200282015b828111156200041657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003df565b506200042492915062000428565b5090565b6200044f91905b80821115620004245780546001600160a01b03191681556001016200042f565b90565b6143e880620004626000396000f3fe6080604052600436106101b65760003560e01c80638da5cb5b116100ec578063b032531f1161008a578063d55ec69711610064578063d55ec69714610c8f578063dbaeca3114610ca4578063e079cee914610cd0578063f7f2ff7414610ce5576101b6565b8063b032531f14610c1c578063b91f4bec14610c31578063d4cacbaa14610c7a576101b6565b80639dcdc978116100c65780639dcdc978146109c7578063a5e399b3146109fa578063ab6c2b1014610aab578063ad4b61a814610c07576101b6565b80638da5cb5b1461091a5780639532d8f81461092f5780639c30b35e14610962576101b6565b806334774b7111610159578063408e8b7a11610133578063408e8b7a1461073a5780635bda3fcf146108815780636a7142e1146108b457806375173b70146108e7576101b6565b806334774b711461059657806338615bb0146105c957806339269eb014610707576101b6565b80631dda9c05116101955780631dda9c05146105265780632c4e722e1461053b5780632e44d8a81461055057806330b2d84d14610565576101b6565b8062719226146101f25780630889d1f0146104395780631b9a9323146104ff575b6040805133815234602082015281517fd241e73300212f6df233a8e6d3146b88a9d4964e06621d54b5ff6afeba7b1b88929181900390910190a1005b3480156101fe57600080fd5b50610437600480360360a081101561021557600080fd5b810190602081018135600160201b81111561022f57600080fd5b82018360208201111561024157600080fd5b803590602001918460018302840111600160201b8311171561026257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102b457600080fd5b8201836020820111156102c657600080fd5b803590602001918460208302840111600160201b831117156102e757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561033657600080fd5b82018360208201111561034857600080fd5b803590602001918460208302840111600160201b8311171561036957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929560ff853516959094909350604081019250602001359050600160201b8111156103c357600080fd5b8201836020820111156103d557600080fd5b803590602001918460018302840111600160201b831117156103f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610cfa945050505050565b005b6104eb6004803603606081101561044f57600080fd5b810190602081018135600160201b81111561046957600080fd5b82018360208201111561047b57600080fd5b803590602001918460018302840111600160201b8311171561049c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316611134565b604080519115158252519081900360200190f35b34801561050b57600080fd5b50610514611580565b60408051918252519081900360200190f35b34801561053257600080fd5b50610437611586565b34801561054757600080fd5b506105146116a7565b34801561055c57600080fd5b506104eb6116ad565b34801561057157600080fd5b5061057a6116b6565b604080516001600160a01b039092168252519081900360200190f35b3480156105a257600080fd5b50610437600480360360208110156105b957600080fd5b50356001600160a01b03166116ca565b6104eb600480360360808110156105df57600080fd5b810190602081018135600160201b8111156105f957600080fd5b82018360208201111561060b57600080fd5b803590602001918460018302840111600160201b8311171561062c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435956001600160a01b0360208701351695919450925060608101915060400135600160201b81111561069357600080fd5b8201836020820111156106a557600080fd5b803590602001918460018302840111600160201b831117156106c657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611829945050505050565b34801561071357600080fd5b506104376004803603602081101561072a57600080fd5b50356001600160a01b0316611d0b565b34801561074657600080fd5b506104376004803603606081101561075d57600080fd5b810190602081018135600160201b81111561077757600080fd5b82018360208201111561078957600080fd5b803590602001918460018302840111600160201b831117156107aa57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561080d57600080fd5b82018360208201111561081f57600080fd5b803590602001918460018302840111600160201b8311171561084057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e25945050505050565b34801561088d57600080fd5b50610437600480360360208110156108a457600080fd5b50356001600160a01b0316612249565b3480156108c057600080fd5b506104eb600480360360208110156108d757600080fd5b50356001600160a01b03166124eb565b3480156108f357600080fd5b506104eb6004803603602081101561090a57600080fd5b50356001600160a01b031661250f565b34801561092657600080fd5b5061057a612530565b34801561093b57600080fd5b506104376004803603602081101561095257600080fd5b50356001600160a01b0316612544565b34801561096e57600080fd5b506109776125b7565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109b357818101518382015260200161099b565b505050509050019250505060405180910390f35b3480156109d357600080fd5b50610437600480360360208110156109ea57600080fd5b50356001600160a01b031661261a565b348015610a0657600080fd5b506104eb60048036036020811015610a1d57600080fd5b810190602081018135600160201b811115610a3757600080fd5b820183602082011115610a4957600080fd5b803590602001918460018302840111600160201b83111715610a6a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126e7945050505050565b348015610ab757600080fd5b50610437600480360360c0811015610ace57600080fd5b810190602081018135600160201b811115610ae857600080fd5b820183602082011115610afa57600080fd5b803590602001918460018302840111600160201b83111715610b1b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135966040810135151596506060810135909216945091925060a081019060800135600160201b811115610b9357600080fd5b820183602082011115610ba557600080fd5b803590602001918460018302840111600160201b83111715610bc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612757945050505050565b348015610c1357600080fd5b50610514612ce6565b348015610c2857600080fd5b50610514612cec565b348015610c3d57600080fd5b50610c6460048036036020811015610c5457600080fd5b50356001600160a01b0316612cf2565b6040805160ff9092168252519081900360200190f35b348015610c8657600080fd5b50610437612d07565b348015610c9b57600080fd5b506104eb612da5565b348015610cb057600080fd5b5061043760048036036020811015610cc757600080fd5b50351515612dae565b348015610cdc57600080fd5b50610c64612e13565b348015610cf157600080fd5b50610514612e1c565b336000908152600a602052604090205460ff16600114610d61576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8451604014610db3576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600084511180610dc4575060008351115b610dff5760405162461bcd60e51b81526004018080602001828103825260288152602001806142cb6028913960400191505060405180910390fd5b600d856040518082805190602001908083835b60208310610e315780518252601f199092019160209182019101610e12565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610eb69050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b610ec08484612e22565b6000858584866006546040516020018086805190602001908083835b60208310610efb5780518252601f199092019160209182019101610edc565b51815160209384036101000a60001901801990921691161790528851919093019288810192500280838360005b83811015610f40578181015183820152602001610f28565b505050509050018460ff1660ff1660f81b8152600101838051906020019060200280838360005b83811015610f7f578181015183820152602001610f67565b50505050919091019283525050604080518083038152602092830182528051908301206000818152600c90935291205490955060ff1615935061100292505050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61100c8183613125565b611055576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b61105e8461319d565b61106785613326565b600b54611073906133ee565b6007805460ff191660ff929092169190911790556110938682600161344e565b7fac9b82db4e104d515319a481096bfd91a4f40ee10837d5a2c8d51b9a03dc48ae866040518080602001828103825283818151815260200191508051906020019080838360005b838110156110f25781810151838201526020016110da565b50505050905090810190601f16801561111f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b6000338361117e576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6001600160a01b0383161561144c5734156111ca5760405162461bcd60e51b815260040180806020018281038252602481526020018061412c6024913960400191505060405180910390fd5b6111dc836001600160a01b03166134e2565b6112175760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038381166004830152306024830152915185926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b50519050858110156112d95760405162461bcd60e51b81526004018080602001828103825260228152602001806142466022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b50519050868110156113b4576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6113d16001600160a01b03841685308a600f63ffffffff61351e16565b6113da866124eb565b15611444576000869050806001600160a01b03166342966c68896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50505050505b5050506114a0565b8334146114a0576040805162461bcd60e51b815260206004820152601d60248201527f496e636f6e73697374656e637920457468657265756d20616d6f756e74000000604482015290519081900360640190fd5b7f5ddf9724d8fe5d9e12499be2867f93d41a582733dcd65f74a486ad7e306671468186868660405180856001600160a01b03166001600160a01b0316815260200180602001848152602001836001600160a01b03166001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015611538578181015183820152602001611520565b50505050905090810190601f1680156115655780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b60055481565b60075461010090046001600160a01b031633146115d8576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff16611618576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166116645760405162461bcd60e51b81526004018080602001828103825260238152602001806142686023913960400191505060405180910390fd5b6001546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f193505050501580156116a4573d6000803e3d6000fd5b50565b60045481565b60105460ff1681565b60015461010090046001600160a01b031681565b60075461010090046001600160a01b0316331461171c576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611773576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611785816001600160a01b03166134e2565b6117c05760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6117c9816124eb565b156118055760405162461bcd60e51b81526004018080602001828103825260288152602001806140b26028913960400191505060405180910390fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60105460009060ff1661187a576040805162461bcd60e51b815260206004820152601460248201527321b937b9b9a7baba24a49d102737ba1037b832b760611b604482015290519081900360640190fd5b3360006001600160a01b03851615611b5b57600086116118d6576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6118e8856001600160a01b03166134e2565b6119235760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915187926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d60208110156119a257600080fd5b50519050878110156119e55760405162461bcd60e51b81526004018080602001828103825260228152602001806142466022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051905088811015611ac0576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b611add6001600160a01b03841686308c600f63ffffffff61351e16565b611ae6886124eb565b15611b50576000889050806001600160a01b03166342966c688b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b3657600080fd5b505af1158015611b4a573d6000803e3d6000fd5b50505050505b889350505050611bba565b600034118015611b69575085155b611bba576040805162461bcd60e51b815260206004820152601e60248201527f43726f73734f757449493a20496c6c6567616c2065746820616d6f756e740000604482015290519081900360640190fd5b7f692e6a6e27573f2a2a757e34cb16ae101c5fca8834f9b8a6cdbcf64b8450d87082888388348960405180876001600160a01b03166001600160a01b0316815260200180602001868152602001856001600160a01b03166001600160a01b0316815260200184815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611c5e578181015183820152602001611c46565b50505050905090810190601f168015611c8b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611cbe578181015183820152602001611ca6565b50505050905090810190601f168015611ceb5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019695505050505050565b60075461010090046001600160a01b03163314611d5d576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611db4576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611dc6816001600160a01b03166134e2565b611e015760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b336000908152600a602052604090205460ff16600114611e8c576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8251604014611ede576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600d836040518082805190602001908083835b60208310611f105780518252601f199092019160209182019101611ef1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611f959050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b60015460ff1615611fe4576040805162461bcd60e51b8152602060048201526014602482015273125d081a185cc81899595b881d5c19dc9859195960621b604482015290519081900360640190fd5b611ff6826001600160a01b03166134e2565b6120315760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b600083836006546040516020018084805190602001908083835b6020831061206a5780518252601f19909201916020918201910161204b565b51815160209384036101000a600019018019909216911617905260609690961b6bffffffffffffffffffffffff1916920191825250601480820193909352604080518083039094018452603490910181528251928401929092206000818152600c909452919092205490935060ff161591506121249050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61212e8183613125565b612177576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b6001805460ff19168117610100600160a81b0319166101006001600160a01b038616021781556121aa908590839061344e565b7f5e06c4b22547d430736ce834764dbfee08f1c4cf7ae3d53178aa56effa593ed0846040518080602001828103825283818151815260200191508051906020019080838360005b838110156122095781810151838201526020016121f1565b50505050905090810190601f1680156122365780820380516001836020036101000a031916815260200191505b509250505060405180910390a150505050565b60075461010090046001600160a01b0316331461229b576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff166122db576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166123275760405162461bcd60e51b81526004018080602001828103825260238152602001806142686023913960400191505060405180910390fd5b306001600160a01b038216141561237e576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b612390816001600160a01b03166134e2565b6123cb5760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561241657600080fd5b505afa15801561242a573d6000803e3d6000fd5b505050506040513d602081101561244057600080fd5b5051905060015461246b906001600160a01b038481169161010090041683600f63ffffffff61358016565b612474836124eb565b156124e657600154604080516301fc6bd160e21b81526001600160a01b0361010090930483166004820152905185928316916307f1af4491602480830192600092919082900301818387803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b50505050505b505050565b6001600160a01b0381166000908152600e602052604090205460ff1615155b919050565b6001600160a01b03166000908152600a602052604090205460ff1660011490565b60075461010090046001600160a01b031681565b60075461010090046001600160a01b03163314612596576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561260f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125f1575b505050505090505b90565b60075461010090046001600160a01b0316331461266c576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b612675816124eb565b6126c6576040805162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f7420726567697374657265640000604482015290519081900360640190fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600080600d836040518082805190602001908083835b6020831061271c5780518252601f1990920191602091820191016126fd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1692909211949350505050565b600260005414156127af576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000908155338152600a602052604090205460ff1660011461281a576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b855160401461286c576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6001600160a01b0385166128b15760405162461bcd60e51b81526004018080602001828103825260268152602001806140da6026913960400191505060405180910390fd5b600084116128f05760405162461bcd60e51b815260040180806020018281038252602881526020018061421e6028913960400191505060405180910390fd5b600d866040518082805190602001908083835b602083106129225780518252601f199092019160209182019101612903565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506129a79050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b82156129bd576129b88286866135d3565b6129fc565b834710156129fc5760405162461bcd60e51b815260040180806020018281038252603f815260200180614150603f913960400191505060405180910390fd5b600086868686866006546040516020018087805190602001908083835b60208310612a385780518252601f199092019160209182019101612a19565b51815160209384036101000a60001901801990921691161790526060998a1b6bffffffffffffffffffffffff1990811692909401918252601482019890985295151560f81b6034870152509290951b9091166035830152604980830191909152604080518084039092018252606990920182528051908301206000818152600c90935291205490935060ff16159150612b0f9050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b612b198183613125565b612b62576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b8315612b7857612b7383878761379d565b612c33565b84471015612bb75760405162461bcd60e51b815260040180806020018281038252603f815260200180614150603f913960400191505060405180910390fd5b6040516001600160a01b0387169086156108fc029087906000818181858888f19350505050158015612bed573d6000803e3d6000fd5b50604080516001600160a01b03881681526020810187905281517fc95f8b91b103304386b955ef73fadac189f8ad66b33369b6c34a17a60db7bd0a929181900390910190a15b612c3f8782600161344e565b7f8ed8b1f0dd3babfdf1477ba2b27a5b0d2f1c9148448fd22cf2c75e658293c7b1876040518080602001828103825283818151815260200191508051906020019080838360005b83811015612c9e578181015183820152602001612c86565b50505050905090810190601f168015612ccb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505060016000555050505050565b60035481565b60065481565b600f6020526000908152604090205460ff1681565b60075461010090046001600160a01b03163314612d59576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff16612d99576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b6001805460ff19169055565b60015460ff1681565b60075461010090046001600160a01b03163314612e00576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b6010805460ff1916911515919091179055565b60075460ff1681565b60025481565b815160005b81811015612efa576000848281518110612e3d57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612e995760405162461bcd60e51b815260040180806020018281038252602481526020018061418f6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff1615612ef15760405162461bcd60e51b815260040180806020018281038252604081526020018061428b6040913960400191505060405180910390fd5b50600101612e27565b50612f0483613905565b612f3f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614100602c913960400191505060405180910390fd5b600754612f5a9061010090046001600160a01b0316846139d5565b612f955760405162461bcd60e51b81526004018080602001828103825260268152602001806143696026913960400191505060405180910390fd5b612f9e82613905565b612fd95760405162461bcd60e51b815260040180806020018281038252602c8152602001806142f3602c913960400191505060405180910390fd5b815160005b818110156130d5576000848281518110612ff457fe5b6020908102919091018101516001600160a01b0381166000908152600890925260409091205490915060ff1615613072576040805162461bcd60e51b815260206004820152601760248201527f43616e277420657869742073656564206d616e61676572000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff166001146130cc5760405162461bcd60e51b81526004018080602001828103825260448152602001806141da6044913960600191505060405180910390fd5b50600101612fde565b5060025483518551600b540103111561311f5760405162461bcd60e51b81526004018080602001828103825260278152602001806141b36027913960400191505060405180910390fd5b50505050565b60006103cf8251111561317f576040805162461bcd60e51b815260206004820152601d60248201527f4d6178206c656e677468206f66207369676e6174757265733a20393735000000604482015290519081900360640190fd5b600061318b8484613a51565b60075460ff1611159150505b92915050565b80516131a8576116a4565b60005b81518110156131f757600a60008383815181106131c457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191690556001016131ab565b5060005b600b5481101561327157600a6000600b838154811061321657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1661326957600b818154811061324f57fe5b600091825260209091200180546001600160a01b03191690555b6001016131fb565b50601060005b600b54811015613310576000600b828154811061329057fe5b6000918252602090912001546001600160a01b03169050806132bf5782601014156132b9578192505b50613308565b826010146133065780600b84815481106132d557fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600192909201915b505b600101613277565b508151600b805491909103906124e69082614051565b8051613331576116a4565b60005b81518110156133ea57600082828151811061334b57fe5b6020908102919091018101516001600160a01b0381166000908152600a90925260409091205490915060ff166133e1576001600160a01b0381166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03191690911790555b50600101613334565b5050565b600080821161343b576040805162461bcd60e51b815260206004820152601460248201527326b0b730b3b2b91021b0b713ba1032b6b83a3c9760611b604482015290519081900360640190fd5b6004548202606301606481049392505050565b80600d846040518082805190602001908083835b602083106134815780518252601f199092019160209182019101613462565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420805460ff1990811660ff978816179091556000978852600c9091529290952080549092169390921692909217909155505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061351657508115155b949350505050565b604080516001600160a01b0386811660248301528516604482015260648082018590528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261357990869083613bfc565b5050505050565b604080516001600160a01b038516602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261311f90859083613bfc565b6001600160a01b0382166136185760405162461bcd60e51b815260040180806020018281038252602381526020018061408f6023913960400191505060405180910390fd5b306001600160a01b038416141561366f576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b613681836001600160a01b03166134e2565b6136bc5760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6136c5836124eb565b156136cf576124e6565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561371a57600080fd5b505afa15801561372e573d6000803e3d6000fd5b505050506040513d602081101561374457600080fd5b5051905082811015613579576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6137a6836124eb565b1561381b57604080516340c10f1960e01b81526001600160a01b03848116600483015260248201849052915185928316916340c10f1991604480830192600092919082900301818387803b1580156137fd57600080fd5b505af1158015613811573d6000803e3d6000fd5b50505050506124e6565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561386657600080fd5b505afa15801561387a573d6000803e3d6000fd5b505050506040513d602081101561389057600080fd5b50519050828110156138e9576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6135796001600160a01b0383168585600f63ffffffff61358016565b6000805b82518110156139cc57600083828151811061392057fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561394b57506139cc565b600182015b84518110156139c257600085828151811061396757fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561399257506139c2565b806001600160a01b0316836001600160a01b031614156139b957600094505050505061250a565b50600101613950565b5050600101613909565b50600192915050565b600080805b8351811015613a46578381815181106139ef57fe5b6020026020010151915060006001600160a01b0316826001600160a01b03161415613a1957613a46565b846001600160a01b0316826001600160a01b03161415613a3e57600092505050613197565b6001016139da565b506001949350505050565b600554815160009182918291613a6d919063ffffffff613ddc16565b9050606081604051908082528060200260200182016040528015613a9b578160200160208202803883390190505b509050600080805b84811015613b94576060613ac4846005548b613e259092919063ffffffff16565b90506000613ad28b83613ea5565b90506001600160a01b038116613b22576040805162461bcd60e51b815260206004820152601060248201526f29b4b3b730ba3ab932b99032b93937b960811b604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff1660011415613b825785516001988901988501948291889160ff16908110613b6157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b50506005549290920191600101613aa3565b506000613ba084613905565b90506060935080613bef576040805162461bcd60e51b81526020600482015260146024820152735369676e617475726573206475706c696361746560601b604482015290519081900360640190fd5b5093979650505050505050565b613c0e836001600160a01b03166134e2565b613c5f576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060846001600160a01b0316846040518082805190602001908083835b60208310613c9d5780518252601f199092019160209182019101613c7e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cff576040519150601f19603f3d011682016040523d82523d6000602084013e613d04565b606091505b509150915081613d5b576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6001600160a01b03851660009081526020849052604090205460ff1615613d835750506124e6565b80511561357957808060200190516020811015613d9f57600080fd5b50516135795760405162461bcd60e51b815260040180806020018281038252602a81526020018061433f602a913960400191505060405180910390fd5b6000613e1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613faf565b9392505050565b606081830184511015613e3757600080fd5b606082158015613e5257604051915060208201604052613e9c565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613e8b578051835260209283019201613e73565b5050858452601f01601f1916604052505b50949350505050565b600080600080600554855114613ec15760009350505050613197565b50505060208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613f0a5760009350505050613197565b601b8160ff161015613f1a57601b015b8060ff16601b14158015613f3257508060ff16601c14155b15613f435760009350505050613197565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f9a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000818361403b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614000578181015183820152602001613fe8565b50505050905090810190601f16801561402d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404757fe5b0495945050505050565b8154818355818111156124e6576000838152602090206124e691810190830161261791905b8082111561408a5760008155600101614076565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320616464726573732068617320616c7265616479206265656e207265676973746572656457697468647261773a207472616e7366657220746f20746865207a65726f20616464726573734475706c696361746520706172616d657465727320666f7220746865206164647265737320746f206a6f696e45524332303a20446f6573206e6f742061636365707420457468657265756d20436f696e5468697320636f6e7472616374206164647265737320646f6573206e6f7420686176652073756666696369656e742062616c616e6365206f662065746865724552524f523a204465746563746564207a65726f206164647265737320696e2061646473457863656564656420746865206d6178696d756d206e756d626572206f66206d616e61676572735468657265206172652061646472657373657320696e207468652065786974696e672061646472657373206c697374207468617420617265206e6f74206d616e616765725769746864726177616c20616d6f756e74206d7573742062652067726561746572207468616e20304e6f20656e6f75676820616d6f756e7420666f7220617574686f72697a6174696f6e4552524f523a207472616e7366657220746f20746865207a65726f20616464726573735468652061646472657373206c6973742074686174206973206265696e6720616464656420616c7265616479206578697374732061732061206d616e61676572546865726520617265206e6f206d616e6167657273206a6f696e696e67206f722065786974696e674475706c696361746520706172616d657465727320666f7220746865206164647265737320746f20657869744f6e6c79206f776e65722063616e2065786563757465206974000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e616765725468652061646472657373206973206e6f74206120636f6e74726163742061646472657373a265627a7a7231582095362de7fdf4ec3e185dbb78fd46d56f1688dd2b375a85b3badd17bb0a57a2d864736f6c634300051100324e6f74207265616368696e6720746865206d696e206e756d626572206f66206d616e6167657273457863656564656420746865206d6178696d756d206e756d626572206f66206d616e6167657273436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e61676572000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b560000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
Deployed Bytecode
0x6080604052600436106101b65760003560e01c80638da5cb5b116100ec578063b032531f1161008a578063d55ec69711610064578063d55ec69714610c8f578063dbaeca3114610ca4578063e079cee914610cd0578063f7f2ff7414610ce5576101b6565b8063b032531f14610c1c578063b91f4bec14610c31578063d4cacbaa14610c7a576101b6565b80639dcdc978116100c65780639dcdc978146109c7578063a5e399b3146109fa578063ab6c2b1014610aab578063ad4b61a814610c07576101b6565b80638da5cb5b1461091a5780639532d8f81461092f5780639c30b35e14610962576101b6565b806334774b7111610159578063408e8b7a11610133578063408e8b7a1461073a5780635bda3fcf146108815780636a7142e1146108b457806375173b70146108e7576101b6565b806334774b711461059657806338615bb0146105c957806339269eb014610707576101b6565b80631dda9c05116101955780631dda9c05146105265780632c4e722e1461053b5780632e44d8a81461055057806330b2d84d14610565576101b6565b8062719226146101f25780630889d1f0146104395780631b9a9323146104ff575b6040805133815234602082015281517fd241e73300212f6df233a8e6d3146b88a9d4964e06621d54b5ff6afeba7b1b88929181900390910190a1005b3480156101fe57600080fd5b50610437600480360360a081101561021557600080fd5b810190602081018135600160201b81111561022f57600080fd5b82018360208201111561024157600080fd5b803590602001918460018302840111600160201b8311171561026257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102b457600080fd5b8201836020820111156102c657600080fd5b803590602001918460208302840111600160201b831117156102e757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561033657600080fd5b82018360208201111561034857600080fd5b803590602001918460208302840111600160201b8311171561036957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929560ff853516959094909350604081019250602001359050600160201b8111156103c357600080fd5b8201836020820111156103d557600080fd5b803590602001918460018302840111600160201b831117156103f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610cfa945050505050565b005b6104eb6004803603606081101561044f57600080fd5b810190602081018135600160201b81111561046957600080fd5b82018360208201111561047b57600080fd5b803590602001918460018302840111600160201b8311171561049c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316611134565b604080519115158252519081900360200190f35b34801561050b57600080fd5b50610514611580565b60408051918252519081900360200190f35b34801561053257600080fd5b50610437611586565b34801561054757600080fd5b506105146116a7565b34801561055c57600080fd5b506104eb6116ad565b34801561057157600080fd5b5061057a6116b6565b604080516001600160a01b039092168252519081900360200190f35b3480156105a257600080fd5b50610437600480360360208110156105b957600080fd5b50356001600160a01b03166116ca565b6104eb600480360360808110156105df57600080fd5b810190602081018135600160201b8111156105f957600080fd5b82018360208201111561060b57600080fd5b803590602001918460018302840111600160201b8311171561062c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435956001600160a01b0360208701351695919450925060608101915060400135600160201b81111561069357600080fd5b8201836020820111156106a557600080fd5b803590602001918460018302840111600160201b831117156106c657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611829945050505050565b34801561071357600080fd5b506104376004803603602081101561072a57600080fd5b50356001600160a01b0316611d0b565b34801561074657600080fd5b506104376004803603606081101561075d57600080fd5b810190602081018135600160201b81111561077757600080fd5b82018360208201111561078957600080fd5b803590602001918460018302840111600160201b831117156107aa57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561080d57600080fd5b82018360208201111561081f57600080fd5b803590602001918460018302840111600160201b8311171561084057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e25945050505050565b34801561088d57600080fd5b50610437600480360360208110156108a457600080fd5b50356001600160a01b0316612249565b3480156108c057600080fd5b506104eb600480360360208110156108d757600080fd5b50356001600160a01b03166124eb565b3480156108f357600080fd5b506104eb6004803603602081101561090a57600080fd5b50356001600160a01b031661250f565b34801561092657600080fd5b5061057a612530565b34801561093b57600080fd5b506104376004803603602081101561095257600080fd5b50356001600160a01b0316612544565b34801561096e57600080fd5b506109776125b7565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109b357818101518382015260200161099b565b505050509050019250505060405180910390f35b3480156109d357600080fd5b50610437600480360360208110156109ea57600080fd5b50356001600160a01b031661261a565b348015610a0657600080fd5b506104eb60048036036020811015610a1d57600080fd5b810190602081018135600160201b811115610a3757600080fd5b820183602082011115610a4957600080fd5b803590602001918460018302840111600160201b83111715610a6a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126e7945050505050565b348015610ab757600080fd5b50610437600480360360c0811015610ace57600080fd5b810190602081018135600160201b811115610ae857600080fd5b820183602082011115610afa57600080fd5b803590602001918460018302840111600160201b83111715610b1b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135966040810135151596506060810135909216945091925060a081019060800135600160201b811115610b9357600080fd5b820183602082011115610ba557600080fd5b803590602001918460018302840111600160201b83111715610bc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612757945050505050565b348015610c1357600080fd5b50610514612ce6565b348015610c2857600080fd5b50610514612cec565b348015610c3d57600080fd5b50610c6460048036036020811015610c5457600080fd5b50356001600160a01b0316612cf2565b6040805160ff9092168252519081900360200190f35b348015610c8657600080fd5b50610437612d07565b348015610c9b57600080fd5b506104eb612da5565b348015610cb057600080fd5b5061043760048036036020811015610cc757600080fd5b50351515612dae565b348015610cdc57600080fd5b50610c64612e13565b348015610cf157600080fd5b50610514612e1c565b336000908152600a602052604090205460ff16600114610d61576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8451604014610db3576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600084511180610dc4575060008351115b610dff5760405162461bcd60e51b81526004018080602001828103825260288152602001806142cb6028913960400191505060405180910390fd5b600d856040518082805190602001908083835b60208310610e315780518252601f199092019160209182019101610e12565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610eb69050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b610ec08484612e22565b6000858584866006546040516020018086805190602001908083835b60208310610efb5780518252601f199092019160209182019101610edc565b51815160209384036101000a60001901801990921691161790528851919093019288810192500280838360005b83811015610f40578181015183820152602001610f28565b505050509050018460ff1660ff1660f81b8152600101838051906020019060200280838360005b83811015610f7f578181015183820152602001610f67565b50505050919091019283525050604080518083038152602092830182528051908301206000818152600c90935291205490955060ff1615935061100292505050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61100c8183613125565b611055576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b61105e8461319d565b61106785613326565b600b54611073906133ee565b6007805460ff191660ff929092169190911790556110938682600161344e565b7fac9b82db4e104d515319a481096bfd91a4f40ee10837d5a2c8d51b9a03dc48ae866040518080602001828103825283818151815260200191508051906020019080838360005b838110156110f25781810151838201526020016110da565b50505050905090810190601f16801561111f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b6000338361117e576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6001600160a01b0383161561144c5734156111ca5760405162461bcd60e51b815260040180806020018281038252602481526020018061412c6024913960400191505060405180910390fd5b6111dc836001600160a01b03166134e2565b6112175760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038381166004830152306024830152915185926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b50519050858110156112d95760405162461bcd60e51b81526004018080602001828103825260228152602001806142466022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b50519050868110156113b4576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6113d16001600160a01b03841685308a600f63ffffffff61351e16565b6113da866124eb565b15611444576000869050806001600160a01b03166342966c68896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50505050505b5050506114a0565b8334146114a0576040805162461bcd60e51b815260206004820152601d60248201527f496e636f6e73697374656e637920457468657265756d20616d6f756e74000000604482015290519081900360640190fd5b7f5ddf9724d8fe5d9e12499be2867f93d41a582733dcd65f74a486ad7e306671468186868660405180856001600160a01b03166001600160a01b0316815260200180602001848152602001836001600160a01b03166001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015611538578181015183820152602001611520565b50505050905090810190601f1680156115655780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b60055481565b60075461010090046001600160a01b031633146115d8576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff16611618576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166116645760405162461bcd60e51b81526004018080602001828103825260238152602001806142686023913960400191505060405180910390fd5b6001546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f193505050501580156116a4573d6000803e3d6000fd5b50565b60045481565b60105460ff1681565b60015461010090046001600160a01b031681565b60075461010090046001600160a01b0316331461171c576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611773576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611785816001600160a01b03166134e2565b6117c05760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6117c9816124eb565b156118055760405162461bcd60e51b81526004018080602001828103825260288152602001806140b26028913960400191505060405180910390fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60105460009060ff1661187a576040805162461bcd60e51b815260206004820152601460248201527321b937b9b9a7baba24a49d102737ba1037b832b760611b604482015290519081900360640190fd5b3360006001600160a01b03851615611b5b57600086116118d6576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6118e8856001600160a01b03166134e2565b6119235760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915187926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d60208110156119a257600080fd5b50519050878110156119e55760405162461bcd60e51b81526004018080602001828103825260228152602001806142466022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051905088811015611ac0576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b611add6001600160a01b03841686308c600f63ffffffff61351e16565b611ae6886124eb565b15611b50576000889050806001600160a01b03166342966c688b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b3657600080fd5b505af1158015611b4a573d6000803e3d6000fd5b50505050505b889350505050611bba565b600034118015611b69575085155b611bba576040805162461bcd60e51b815260206004820152601e60248201527f43726f73734f757449493a20496c6c6567616c2065746820616d6f756e740000604482015290519081900360640190fd5b7f692e6a6e27573f2a2a757e34cb16ae101c5fca8834f9b8a6cdbcf64b8450d87082888388348960405180876001600160a01b03166001600160a01b0316815260200180602001868152602001856001600160a01b03166001600160a01b0316815260200184815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611c5e578181015183820152602001611c46565b50505050905090810190601f168015611c8b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611cbe578181015183820152602001611ca6565b50505050905090810190601f168015611ceb5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019695505050505050565b60075461010090046001600160a01b03163314611d5d576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611db4576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611dc6816001600160a01b03166134e2565b611e015760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b336000908152600a602052604090205460ff16600114611e8c576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8251604014611ede576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600d836040518082805190602001908083835b60208310611f105780518252601f199092019160209182019101611ef1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611f959050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b60015460ff1615611fe4576040805162461bcd60e51b8152602060048201526014602482015273125d081a185cc81899595b881d5c19dc9859195960621b604482015290519081900360640190fd5b611ff6826001600160a01b03166134e2565b6120315760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b600083836006546040516020018084805190602001908083835b6020831061206a5780518252601f19909201916020918201910161204b565b51815160209384036101000a600019018019909216911617905260609690961b6bffffffffffffffffffffffff1916920191825250601480820193909352604080518083039094018452603490910181528251928401929092206000818152600c909452919092205490935060ff161591506121249050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61212e8183613125565b612177576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b6001805460ff19168117610100600160a81b0319166101006001600160a01b038616021781556121aa908590839061344e565b7f5e06c4b22547d430736ce834764dbfee08f1c4cf7ae3d53178aa56effa593ed0846040518080602001828103825283818151815260200191508051906020019080838360005b838110156122095781810151838201526020016121f1565b50505050905090810190601f1680156122365780820380516001836020036101000a031916815260200191505b509250505060405180910390a150505050565b60075461010090046001600160a01b0316331461229b576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff166122db576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166123275760405162461bcd60e51b81526004018080602001828103825260238152602001806142686023913960400191505060405180910390fd5b306001600160a01b038216141561237e576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b612390816001600160a01b03166134e2565b6123cb5760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561241657600080fd5b505afa15801561242a573d6000803e3d6000fd5b505050506040513d602081101561244057600080fd5b5051905060015461246b906001600160a01b038481169161010090041683600f63ffffffff61358016565b612474836124eb565b156124e657600154604080516301fc6bd160e21b81526001600160a01b0361010090930483166004820152905185928316916307f1af4491602480830192600092919082900301818387803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b50505050505b505050565b6001600160a01b0381166000908152600e602052604090205460ff1615155b919050565b6001600160a01b03166000908152600a602052604090205460ff1660011490565b60075461010090046001600160a01b031681565b60075461010090046001600160a01b03163314612596576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561260f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125f1575b505050505090505b90565b60075461010090046001600160a01b0316331461266c576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b612675816124eb565b6126c6576040805162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f7420726567697374657265640000604482015290519081900360640190fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600080600d836040518082805190602001908083835b6020831061271c5780518252601f1990920191602091820191016126fd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1692909211949350505050565b600260005414156127af576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000908155338152600a602052604090205460ff1660011461281a576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b855160401461286c576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6001600160a01b0385166128b15760405162461bcd60e51b81526004018080602001828103825260268152602001806140da6026913960400191505060405180910390fd5b600084116128f05760405162461bcd60e51b815260040180806020018281038252602881526020018061421e6028913960400191505060405180910390fd5b600d866040518082805190602001908083835b602083106129225780518252601f199092019160209182019101612903565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506129a79050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b82156129bd576129b88286866135d3565b6129fc565b834710156129fc5760405162461bcd60e51b815260040180806020018281038252603f815260200180614150603f913960400191505060405180910390fd5b600086868686866006546040516020018087805190602001908083835b60208310612a385780518252601f199092019160209182019101612a19565b51815160209384036101000a60001901801990921691161790526060998a1b6bffffffffffffffffffffffff1990811692909401918252601482019890985295151560f81b6034870152509290951b9091166035830152604980830191909152604080518084039092018252606990920182528051908301206000818152600c90935291205490935060ff16159150612b0f9050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b612b198183613125565b612b62576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b8315612b7857612b7383878761379d565b612c33565b84471015612bb75760405162461bcd60e51b815260040180806020018281038252603f815260200180614150603f913960400191505060405180910390fd5b6040516001600160a01b0387169086156108fc029087906000818181858888f19350505050158015612bed573d6000803e3d6000fd5b50604080516001600160a01b03881681526020810187905281517fc95f8b91b103304386b955ef73fadac189f8ad66b33369b6c34a17a60db7bd0a929181900390910190a15b612c3f8782600161344e565b7f8ed8b1f0dd3babfdf1477ba2b27a5b0d2f1c9148448fd22cf2c75e658293c7b1876040518080602001828103825283818151815260200191508051906020019080838360005b83811015612c9e578181015183820152602001612c86565b50505050905090810190601f168015612ccb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505060016000555050505050565b60035481565b60065481565b600f6020526000908152604090205460ff1681565b60075461010090046001600160a01b03163314612d59576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b60015460ff16612d99576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b6001805460ff19169055565b60015460ff1681565b60075461010090046001600160a01b03163314612e00576040805162461bcd60e51b8152602060048201526019602482015260008051602061431f833981519152604482015290519081900360640190fd5b6010805460ff1916911515919091179055565b60075460ff1681565b60025481565b815160005b81811015612efa576000848281518110612e3d57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612e995760405162461bcd60e51b815260040180806020018281038252602481526020018061418f6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff1615612ef15760405162461bcd60e51b815260040180806020018281038252604081526020018061428b6040913960400191505060405180910390fd5b50600101612e27565b50612f0483613905565b612f3f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614100602c913960400191505060405180910390fd5b600754612f5a9061010090046001600160a01b0316846139d5565b612f955760405162461bcd60e51b81526004018080602001828103825260268152602001806143696026913960400191505060405180910390fd5b612f9e82613905565b612fd95760405162461bcd60e51b815260040180806020018281038252602c8152602001806142f3602c913960400191505060405180910390fd5b815160005b818110156130d5576000848281518110612ff457fe5b6020908102919091018101516001600160a01b0381166000908152600890925260409091205490915060ff1615613072576040805162461bcd60e51b815260206004820152601760248201527f43616e277420657869742073656564206d616e61676572000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff166001146130cc5760405162461bcd60e51b81526004018080602001828103825260448152602001806141da6044913960600191505060405180910390fd5b50600101612fde565b5060025483518551600b540103111561311f5760405162461bcd60e51b81526004018080602001828103825260278152602001806141b36027913960400191505060405180910390fd5b50505050565b60006103cf8251111561317f576040805162461bcd60e51b815260206004820152601d60248201527f4d6178206c656e677468206f66207369676e6174757265733a20393735000000604482015290519081900360640190fd5b600061318b8484613a51565b60075460ff1611159150505b92915050565b80516131a8576116a4565b60005b81518110156131f757600a60008383815181106131c457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191690556001016131ab565b5060005b600b5481101561327157600a6000600b838154811061321657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1661326957600b818154811061324f57fe5b600091825260209091200180546001600160a01b03191690555b6001016131fb565b50601060005b600b54811015613310576000600b828154811061329057fe5b6000918252602090912001546001600160a01b03169050806132bf5782601014156132b9578192505b50613308565b826010146133065780600b84815481106132d557fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600192909201915b505b600101613277565b508151600b805491909103906124e69082614051565b8051613331576116a4565b60005b81518110156133ea57600082828151811061334b57fe5b6020908102919091018101516001600160a01b0381166000908152600a90925260409091205490915060ff166133e1576001600160a01b0381166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03191690911790555b50600101613334565b5050565b600080821161343b576040805162461bcd60e51b815260206004820152601460248201527326b0b730b3b2b91021b0b713ba1032b6b83a3c9760611b604482015290519081900360640190fd5b6004548202606301606481049392505050565b80600d846040518082805190602001908083835b602083106134815780518252601f199092019160209182019101613462565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420805460ff1990811660ff978816179091556000978852600c9091529290952080549092169390921692909217909155505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061351657508115155b949350505050565b604080516001600160a01b0386811660248301528516604482015260648082018590528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261357990869083613bfc565b5050505050565b604080516001600160a01b038516602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261311f90859083613bfc565b6001600160a01b0382166136185760405162461bcd60e51b815260040180806020018281038252602381526020018061408f6023913960400191505060405180910390fd5b306001600160a01b038416141561366f576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b613681836001600160a01b03166134e2565b6136bc5760405162461bcd60e51b815260040180806020018281038252602581526020018061438f6025913960400191505060405180910390fd5b6136c5836124eb565b156136cf576124e6565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561371a57600080fd5b505afa15801561372e573d6000803e3d6000fd5b505050506040513d602081101561374457600080fd5b5051905082811015613579576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6137a6836124eb565b1561381b57604080516340c10f1960e01b81526001600160a01b03848116600483015260248201849052915185928316916340c10f1991604480830192600092919082900301818387803b1580156137fd57600080fd5b505af1158015613811573d6000803e3d6000fd5b50505050506124e6565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561386657600080fd5b505afa15801561387a573d6000803e3d6000fd5b505050506040513d602081101561389057600080fd5b50519050828110156138e9576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6135796001600160a01b0383168585600f63ffffffff61358016565b6000805b82518110156139cc57600083828151811061392057fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561394b57506139cc565b600182015b84518110156139c257600085828151811061396757fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561399257506139c2565b806001600160a01b0316836001600160a01b031614156139b957600094505050505061250a565b50600101613950565b5050600101613909565b50600192915050565b600080805b8351811015613a46578381815181106139ef57fe5b6020026020010151915060006001600160a01b0316826001600160a01b03161415613a1957613a46565b846001600160a01b0316826001600160a01b03161415613a3e57600092505050613197565b6001016139da565b506001949350505050565b600554815160009182918291613a6d919063ffffffff613ddc16565b9050606081604051908082528060200260200182016040528015613a9b578160200160208202803883390190505b509050600080805b84811015613b94576060613ac4846005548b613e259092919063ffffffff16565b90506000613ad28b83613ea5565b90506001600160a01b038116613b22576040805162461bcd60e51b815260206004820152601060248201526f29b4b3b730ba3ab932b99032b93937b960811b604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff1660011415613b825785516001988901988501948291889160ff16908110613b6157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b50506005549290920191600101613aa3565b506000613ba084613905565b90506060935080613bef576040805162461bcd60e51b81526020600482015260146024820152735369676e617475726573206475706c696361746560601b604482015290519081900360640190fd5b5093979650505050505050565b613c0e836001600160a01b03166134e2565b613c5f576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060846001600160a01b0316846040518082805190602001908083835b60208310613c9d5780518252601f199092019160209182019101613c7e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cff576040519150601f19603f3d011682016040523d82523d6000602084013e613d04565b606091505b509150915081613d5b576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6001600160a01b03851660009081526020849052604090205460ff1615613d835750506124e6565b80511561357957808060200190516020811015613d9f57600080fd5b50516135795760405162461bcd60e51b815260040180806020018281038252602a81526020018061433f602a913960400191505060405180910390fd5b6000613e1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613faf565b9392505050565b606081830184511015613e3757600080fd5b606082158015613e5257604051915060208201604052613e9c565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613e8b578051835260209283019201613e73565b5050858452601f01601f1916604052505b50949350505050565b600080600080600554855114613ec15760009350505050613197565b50505060208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613f0a5760009350505050613197565b601b8160ff161015613f1a57601b015b8060ff16601b14158015613f3257508060ff16601c14155b15613f435760009350505050613197565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f9a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000818361403b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614000578181015183820152602001613fe8565b50505050905090810190601f16801561402d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404757fe5b0495945050505050565b8154818355818111156124e6576000838152602090206124e691810190830161261791905b8082111561408a5760008155600101614076565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320616464726573732068617320616c7265616479206265656e207265676973746572656457697468647261773a207472616e7366657220746f20746865207a65726f20616464726573734475706c696361746520706172616d657465727320666f7220746865206164647265737320746f206a6f696e45524332303a20446f6573206e6f742061636365707420457468657265756d20436f696e5468697320636f6e7472616374206164647265737320646f6573206e6f7420686176652073756666696369656e742062616c616e6365206f662065746865724552524f523a204465746563746564207a65726f206164647265737320696e2061646473457863656564656420746865206d6178696d756d206e756d626572206f66206d616e61676572735468657265206172652061646472657373657320696e207468652065786974696e672061646472657373206c697374207468617420617265206e6f74206d616e616765725769746864726177616c20616d6f756e74206d7573742062652067726561746572207468616e20304e6f20656e6f75676820616d6f756e7420666f7220617574686f72697a6174696f6e4552524f523a207472616e7366657220746f20746865207a65726f20616464726573735468652061646472657373206c6973742074686174206973206265696e6720616464656420616c7265616479206578697374732061732061206d616e61676572546865726520617265206e6f206d616e6167657273206a6f696e696e67206f722065786974696e674475706c696361746520706172616d657465727320666f7220746865206164647265737320746f20657869744f6e6c79206f776e65722063616e2065786563757465206974000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e616765725468652061646472657373206973206e6f74206120636f6e74726163742061646472657373a265627a7a7231582095362de7fdf4ec3e185dbb78fd46d56f1688dd2b375a85b3badd17bb0a57a2d864736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b560000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
-----Decoded View---------------
Arg [0] : _chainid (uint256): 137
Arg [1] : _managers (address[]): 0xd87F2ad3EF011817319FD25454FC186CA71B3B56,0x0Eb9e4427a0Af1Fa457230bEF3481d028488363E,0xD6946039519bCCC0B302f89493bEC60F4f0B4610
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000089
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b56
Arg [4] : 0000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e
Arg [5] : 000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
Deployed Bytecode Sourcemap
34881:19567:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37209:35;;;37222:10;37209:35;;37234:9;37209:35;;;;;;;;;;;;;;;;;34881:19567;38829:1163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38829:1163:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;38829:1163:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;38829:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38829:1163:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38829:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38829:1163:0;;;;;;;;-1:-1:-1;38829:1163:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;38829:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38829:1163:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38829:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38829:1163:0;;;;;;;;-1:-1:-1;38829:1163:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;38829:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38829:1163:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38829:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38829:1163:0;;;;;;;;;;;-1:-1:-1;38829:1163:0;;;;-1:-1:-1;38829:1163:0;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;38829:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38829:1163:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38829:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38829:1163:0;;-1:-1:-1;38829:1163:0;;-1:-1:-1;;;;;38829:1163:0:i;:::-;;50943:1226;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;50943:1226:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;50943:1226:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;50943:1226:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;50943:1226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;50943:1226:0;;-1:-1:-1;;50943:1226:0;;;-1:-1:-1;;;50943:1226:0;;;-1:-1:-1;;;;;50943:1226:0;;:::i;:::-;;;;;;;;;;;;;;;;;;35608:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35608:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;48642:267;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48642:267:0;;;:::i;35553:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35553:21:0;;;:::i;36324:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36324:34:0;;;:::i;35334:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35334:50:0;;;:::i;:::-;;;;-1:-1:-1;;;;;35334:50:0;;;;;;;;;;;;;;49929:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49929:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49929:333:0;-1:-1:-1;;;;;49929:333:0;;:::i;52230:1331::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;52230:1331:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52230:1331:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52230:1331:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52230:1331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52230:1331:0;;;;;-1:-1:-1;;;;;52230:1331:0;;;;;;;;-1:-1:-1;52230:1331:0;-1:-1:-1;52230:1331:0;;;;-1:-1:-1;52230:1331:0;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52230:1331:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52230:1331:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52230:1331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52230:1331:0;;-1:-1:-1;52230:1331:0;;-1:-1:-1;;;;;52230:1331:0:i;50519:234::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50519:234:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50519:234:0;-1:-1:-1;;;;;50519:234:0;;:::i;40000:1011::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40000:1011:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40000:1011:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;40000:1011:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40000:1011:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40000:1011:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40000:1011:0;;-1:-1:-1;;;;;40000:1011:0;;;;;;;;-1:-1:-1;40000:1011:0;;;;-1:-1:-1;40000:1011:0;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;40000:1011:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40000:1011:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40000:1011:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40000:1011:0;;-1:-1:-1;40000:1011:0;;-1:-1:-1;;;;;40000:1011:0:i;48915:826::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48915:826:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48915:826:0;-1:-1:-1;;;;;48915:826:0;;:::i;49778:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49778:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49778:114:0;-1:-1:-1;;;;;49778:114:0;;:::i;53793:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53793:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53793:113:0;-1:-1:-1;;;;;53793:113:0;;:::i;35903:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35903:20:0;;;:::i;50791:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50791:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50791:93:0;-1:-1:-1;;;;;50791:93:0;;:::i;53912:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53912:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8::-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53912:100:0;;;;;;;;;;;;;;;;;50305:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50305:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50305:180:0;-1:-1:-1;;;;;50305:180:0;;:::i;53668:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53668:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;53668:119:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53668:119:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53668:119:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;53668:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;53668:119:0;;-1:-1:-1;53668:119:0;;-1:-1:-1;;;;;53668:119:0:i;37260:1559::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37260:1559:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;37260:1559:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37260:1559:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37260:1559:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;37260:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37260:1559:0;;-1:-1:-1;;;;;37260:1559:0;;;;;;;;;;;;;;;;;-1:-1:-1;37260:1559:0;;;;;;;;-1:-1:-1;37260:1559:0;;-1:-1:-1;37260:1559:0;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37260:1559:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37260:1559:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;37260:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37260:1559:0;;-1:-1:-1;37260:1559:0;;-1:-1:-1;;;;;37260:1559:0:i;35487:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35487:28:0;;;:::i;35791:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35791:20:0;;;:::i;36275:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36275:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36275:42:0;-1:-1:-1;;;;;36275:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;48526:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48526:110:0;;;:::i;35300:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35300:27:0;;;:::i;53569:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53569:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53569:91:0;;;;:::i;35861:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35861:35:0;;;:::i;35421:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35421:29:0;;;:::i;38829:1163::-;35226:10;35217:20;;;;:8;:20;;;;;;;;;:25;35209:65;;;;;-1:-1:-1;;;35209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39014:5;39008:19;39031:2;39008:25;39000:63;;;;;-1:-1:-1;;;39000:63:0;;;;;;;;;;;;-1:-1:-1;;;39000:63:0;;;;;;;;;;;;;;;39096:1;39082:4;:11;:15;:37;;;;39118:1;39101:7;:14;:18;39082:37;39074:90;;;;-1:-1:-1;;;39074:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39223:12;39236:5;39223:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39223:19:0;;;;;-1:-1:-1;39223:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;39215:67:0;;-1:-1:-1;39215:67:0;;;;-1:-1:-1;;;39215:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39293:40;39319:4;39325:7;39293:25;:40::i;:::-;39344:13;39387:5;39394:4;39400:5;39407:7;39416:8;;39370:55;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39370:55:0;;;;;;;;;;;-1:-1:-1;39370:55:0;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39370:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;39370:55:0;;;;;;;-1:-1:-1;;39370:55:0;;;26:21:-1;;;6:49;;39370:55:0;;;;;;39360:66;;;;;;22:32:-1;39479:26:0;;;:19;:26;;;;;;39360:66;;-1:-1:-1;39479:26:0;;:31;;-1:-1:-1;39471:62:0;;-1:-1:-1;;;39471:62:0;;;;-1:-1:-1;;;39471:62:0;;;;;;;;;;;;-1:-1:-1;;;39471:62:0;;;;;;;;;;;;;;;39577:33;39592:5;39599:10;39577:14;:33::i;:::-;39569:67;;;;;-1:-1:-1;;;39569:67:0;;;;;;;;;;;;-1:-1:-1;;;39569:67:0;;;;;;;;;;;;;;;39675:22;39689:7;39675:13;:22::i;:::-;39708:16;39719:4;39708:10;:16::i;:::-;39826:12;:19;39809:37;;:16;:37::i;:::-;39784:22;:62;;-1:-1:-1;;39784:62:0;;;;;;;;;;;;39888:27;39899:5;39906;-1:-1:-1;39888:10:0;:27::i;:::-;39953:31;39978:5;39953:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39953:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35285:1;38829:1163;;;;;:::o;50943:1226::-;51034:4;51066:10;51095;51087:41;;;;;-1:-1:-1;;;51087:41:0;;;;;;;;;;;;-1:-1:-1;;;51087:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;51143:19:0;;;51139:947;;51187:9;:14;51179:63;;;;-1:-1:-1;;;51179:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51265:18;:5;-1:-1:-1;;;;;51265:16:0;;:18::i;:::-;51257:68;;;;-1:-1:-1;;;51257:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51403:36;;;-1:-1:-1;;;51403:36:0;;-1:-1:-1;;;;;51403:36:0;;;;;;;51433:4;51403:36;;;;;;51362:5;;51340:12;;51403:15;;;;;;:36;;;;;;;;;;;;;;;:15;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;51403:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51403:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51403:36:0;;-1:-1:-1;51462:19:0;;;;51454:66;;;;-1:-1:-1;;;51454:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51535:19;51557:5;-1:-1:-1;;;;;51557:15:0;;51573:4;51557:21;;;;;;;;;;;;;-1:-1:-1;;;;;51557:21:0;-1:-1:-1;;;;;51557:21:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51557:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51557:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51557:21:0;;-1:-1:-1;51601:21:0;;;;51593:64;;;;;-1:-1:-1;;;51593:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;51672:62;-1:-1:-1;;;;;51672:22:0;;51695:4;51709;51716:6;51724:9;51672:62;:22;:62;:::i;:::-;51753:20;51767:5;51753:13;:20::i;:::-;51749:232;;;51876:24;51916:5;51876:46;;51941:11;-1:-1:-1;;;;;51941:16:0;;51958:6;51941:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51941:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51941:24:0;;;;51749:232;;51139:947;;;;;;52034:6;52021:9;:19;52013:61;;;;;-1:-1:-1;;;52013:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52101:38;52115:4;52121:2;52125:6;52133:5;52101:38;;;;-1:-1:-1;;;;;52101:38:0;-1:-1:-1;;;;;52101:38:0;;;;;;;;;;;;;;-1:-1:-1;;;;;52101:38:0;-1:-1:-1;;;;;52101:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;52101:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52157:4:0;;50943:1226;-1:-1:-1;;;;50943:1226:0:o;35608:32::-;;;;:::o;48642:267::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;48705:7;;;;48697:26;;;;;-1:-1:-1;;;48697:26:0;;;;;;;;;;;;-1:-1:-1;;;48697:26:0;;;;;;;;;;;;;;;48742:22;;;;;-1:-1:-1;;;;;48742:22:0;48734:84;;;;-1:-1:-1;;;48734:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48845:22;;48829:72;;-1:-1:-1;;;;;48845:22:0;;;;;;;;;48879:21;48829:72;;;;;;;;;48879:21;48845:22;48829:72;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48829:72:0;48642:267::o;35553:21::-;;;;:::o;36324:34::-;;;;;;:::o;35334:50::-;;;;;;-1:-1:-1;;;;;35334:50:0;;:::o;49929:333::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;50015:4;-1:-1:-1;;;;;50007:22:0;;;;49999:57;;;;;-1:-1:-1;;;49999:57:0;;;;;;;;;;;;-1:-1:-1;;;49999:57:0;;;;;;;;;;;;;;;50075:18;:5;-1:-1:-1;;;;;50075:16:0;;:18::i;:::-;50067:68;;;;-1:-1:-1;;;50067:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50155:20;50169:5;50155:13;:20::i;:::-;50154:21;50146:74;;;;-1:-1:-1;;;50146:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50231:19:0;;;;;:12;:19;;;;;:23;;-1:-1:-1;;50231:23:0;50253:1;50231:23;;;49929:333::o;52230:1331::-;52367:14;;52342:4;;52367:14;;52359:47;;;;;-1:-1:-1;;;52359:47:0;;;;;;;;;;;;-1:-1:-1;;;52359:47:0;;;;;;;;;;;;;;;52432:10;52417:12;-1:-1:-1;;;;;52488:19:0;;;52484:970;;52541:1;52532:6;:10;52524:41;;;;;-1:-1:-1;;;52524:41:0;;;;;;;;;;;;-1:-1:-1;;;52524:41:0;;;;;;;;;;;;;;;52588:18;:5;-1:-1:-1;;;;;52588:16:0;;:18::i;:::-;52580:68;;;;-1:-1:-1;;;52580:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52726:36;;;-1:-1:-1;;;52726:36:0;;-1:-1:-1;;;;;52726:36:0;;;;;;;52756:4;52726:36;;;;;;52685:5;;52663:12;;52726:15;;;;;;:36;;;;;;;;;;;;;;;:15;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;52726:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52726:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52726:36:0;;-1:-1:-1;52785:19:0;;;;52777:66;;;;-1:-1:-1;;;52777:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52858:19;52880:5;-1:-1:-1;;;;;52880:15:0;;52896:4;52880:21;;;;;;;;;;;;;-1:-1:-1;;;;;52880:21:0;-1:-1:-1;;;;;52880:21:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52880:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52880:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52880:21:0;;-1:-1:-1;52924:21:0;;;;52916:64;;;;;-1:-1:-1;;;52916:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52995:62;-1:-1:-1;;;;;52995:22:0;;53018:4;53032;53039:6;53047:9;52995:62;:22;:62;:::i;:::-;53076:20;53090:5;53076:13;:20::i;:::-;53072:232;;;53199:24;53239:5;53199:46;;53264:11;-1:-1:-1;;;;;53264:16:0;;53281:6;53264:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53264:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53264:24:0;;;;53072:232;;53332:6;53318:20;;52484:970;;;;;;53391:1;53379:9;:13;:28;;;;-1:-1:-1;53396:11:0;;53379:28;53371:71;;;;;-1:-1:-1;;;53371:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53469:62;53485:4;53491:2;53495:11;53508:5;53515:9;53526:4;53469:62;;;;-1:-1:-1;;;;;53469:62:0;-1:-1:-1;;;;;53469:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;53469:62:0;-1:-1:-1;;;;;53469:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53469:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53469:62:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53469:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53549:4:0;;52230:1331;-1:-1:-1;;;;;;52230:1331:0:o;50519:234::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;50600:4;-1:-1:-1;;;;;50592:20:0;;;;50584:55;;;;;-1:-1:-1;;;50584:55:0;;;;;;;;;;;;-1:-1:-1;;;50584:55:0;;;;;;;;;;;;;;;50658:16;:3;-1:-1:-1;;;;;50658:14:0;;:16::i;:::-;50650:66;;;;-1:-1:-1;;;50650:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50727:14:0;;;;;:9;:14;;;;;:18;;-1:-1:-1;;50727:18:0;50744:1;50727:18;;;50519:234::o;40000:1011::-;35226:10;35217:20;;;;:8;:20;;;;;;;;;:25;35209:65;;;;;-1:-1:-1;;;35209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40142:5;40136:19;40159:2;40136:25;40128:63;;;;;-1:-1:-1;;;40128:63:0;;;;;;;;;;;;-1:-1:-1;;;40128:63:0;;;;;;;;;;;;;;;40250:12;40263:5;40250:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;40250:19:0;;;;;-1:-1:-1;40250:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;40242:67:0;;-1:-1:-1;40242:67:0;;;;-1:-1:-1;;;40242:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40329:7;;;;40328:8;40320:41;;;;;-1:-1:-1;;;40320:41:0;;;;;;;;;;;;-1:-1:-1;;;40320:41:0;;;;;;;;;;;;;;;40380:28;:15;-1:-1:-1;;;;;40380:26:0;;:28::i;:::-;40372:78;;;;-1:-1:-1;;;40372:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40480:13;40523:5;40530:15;40547:8;;40506:50;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;40506:50:0;;;;;-1:-1:-1;;40506:50:0;;;;;;-1:-1:-1;40506:50:0;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;40506:50:0;;;;;;40496:61;;;;;;;;;-1:-1:-1;40610:26:0;;;:19;:26;;;;;;;;40496:61;;-1:-1:-1;40610:26:0;;:31;;-1:-1:-1;40602:62:0;;-1:-1:-1;40602:62:0;;;;-1:-1:-1;;;40602:62:0;;;;;;;;;;;;-1:-1:-1;;;40602:62:0;;;;;;;;;;;;;;;40708:33;40723:5;40730:10;40708:14;:33::i;:::-;40700:67;;;;;-1:-1:-1;;;40700:67:0;;;;;;;;;;;;-1:-1:-1;;;40700:67:0;;;;;;;;;;;;;;;40816:4;40806:14;;-1:-1:-1;;40806:14:0;;;-1:-1:-1;;;;;;40831:40:0;40806:14;-1:-1:-1;;;;;40831:40:0;;;;;;40913:27;;40924:5;;40931;;40913:10;:27::i;:::-;40978:25;40997:5;40978:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40978:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35285:1;40000:1011;;;:::o;48915:826::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;48991:7;;;;48983:26;;;;;-1:-1:-1;;;48983:26:0;;;;;;;;;;;;-1:-1:-1;;;48983:26:0;;;;;;;;;;;;;;;49028:22;;;;;-1:-1:-1;;;;;49028:22:0;49020:84;;;;-1:-1:-1;;;49020:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49131:4;-1:-1:-1;;;;;49123:22:0;;;;49115:57;;;;;-1:-1:-1;;;49115:57:0;;;;;;;;;;;;-1:-1:-1;;;49115:57:0;;;;;;;;;;;;;;;49191:18;:5;-1:-1:-1;;;;;49191:16:0;;:18::i;:::-;49183:68;;;;-1:-1:-1;;;49183:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49319:30;;;-1:-1:-1;;;49319:30:0;;49343:4;49319:30;;;;;;49284:5;;49262:12;;-1:-1:-1;;;;;49319:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;49319:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49319:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49319:30:0;;-1:-1:-1;49441:22:0;;49422:62;;-1:-1:-1;;;;;49422:18:0;;;;49441:22;;;;49465:7;49474:9;49422:62;:18;:62;:::i;:::-;49499:20;49513:5;49499:13;:20::i;:::-;49495:239;;;49699:22;;49673:49;;;-1:-1:-1;;;49673:49:0;;-1:-1:-1;;;;;49699:22:0;;;;;;49673:49;;;;;;49652:5;;49673:25;;;;;:49;;;;;-1:-1:-1;;49673:49:0;;;;;;;-1:-1:-1;49673:25:0;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;49673:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49673:49:0;;;;49495:239;;35165:1;;48915:826;:::o;49778:114::-;-1:-1:-1;;;;;49861:19:0;;49837:4;49861:19;;;:12;:19;;;;;;;;:23;;49778:114;;;;:::o;53793:113::-;-1:-1:-1;;;;;53875:18:0;53851:4;53875:18;;;:8;:18;;;;;;;;;:23;;53793:113::o;35903:20::-;;;;;;-1:-1:-1;;;;;35903:20:0;;:::o;50791:93::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;50858:14:0;50875:1;50858:14;;;:9;:14;;;;;:18;;-1:-1:-1;;50858:18:0;;;50791:93::o;53912:100::-;53956:16;53992:12;53985:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53985:19:0;;;;;;;;;;;;;;;;;;;;;;;53912:100;;:::o;50305:180::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;50385:20;50399:5;50385:13;:20::i;:::-;50377:63;;;;;-1:-1:-1;;;50377:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50458:19:0;;;;;:12;:19;;;;;50451:26;;-1:-1:-1;;50451:26:0;;;50305:180::o;53668:119::-;53733:4;53778:1;53756:12;53769:5;53756:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;53756:19:0;;;;;-1:-1:-1;53756:19:0;;;;;;;;;;;;;:23;;;;;53668:119;-1:-1:-1;;;;53668:119:0:o;37260:1559::-;7191:1;7797:7;;:19;;7789:63;;;;;-1:-1:-1;;;7789:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7191:1;7930:7;:18;;;35226:10;35217:20;;:8;:20;;;;;;;;;:25;35209:65;;;;;-1:-1:-1;;;35209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37456:5;37450:19;37473:2;37450:25;37442:63;;;;;-1:-1:-1;;;37442:63:0;;;;;;;;;;;;-1:-1:-1;;;37442:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37524:16:0;;37516:67;;;;-1:-1:-1;;;37516:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37611:1;37602:6;:10;37594:63;;;;-1:-1:-1;;;37594:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37716:12;37729:5;37716:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;37716:19:0;;;;;-1:-1:-1;37716:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;37708:67:0;;-1:-1:-1;37708:67:0;;;;-1:-1:-1;;;37708:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37821:7;37817:220;;;37845:40;37867:5;37874:2;37878:6;37845:21;:40::i;:::-;37817:220;;;37951:6;37926:21;:31;;37918:107;;;;-1:-1:-1;;;37918:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38047:13;38090:5;38097:2;38101:6;38109:7;38118:5;38125:8;;38073:61;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38073:61:0;;;;-1:-1:-1;;38073:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38073:61:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38073:61:0;;;;;;38063:72;;;;;;-1:-1:-1;38188:26:0;;;:19;:26;;;;;;38063:72;;-1:-1:-1;38188:26:0;;:31;;-1:-1:-1;38180:62:0;;-1:-1:-1;38180:62:0;;;;-1:-1:-1;;;38180:62:0;;;;;;;;;;;;-1:-1:-1;;;38180:62:0;;;;;;;;;;;;;;;38286:33;38301:5;38308:10;38286:14;:33::i;:::-;38278:67;;;;;-1:-1:-1;;;38278:67:0;;;;;;;;;;;;-1:-1:-1;;;38278:67:0;;;;;;;;;;;;;;;38385:7;38381:320;;;38409:32;38423:5;38430:2;38434:6;38409:13;:32::i;:::-;38381:320;;;38536:6;38511:21;:31;;38503:107;;;;-1:-1:-1;;;38503:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38625:19;;-1:-1:-1;;;;;38625:11:0;;;:19;;;;;38637:6;;38625:19;;;;38637:6;38625:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;38664:25:0;;;-1:-1:-1;;;;;38664:25:0;;;;;;;;;;;;;;;;;;;;;;;38381:320;38742:27;38753:5;38760;38767:1;38742:10;:27::i;:::-;38785:26;38805:5;38785:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38785:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7147:1:0;8109:7;:22;-1:-1:-1;;;;;37260:1559:0:o;35487:28::-;;;;:::o;35791:20::-;;;;:::o;36275:42::-;;;;;;;;;;;;;;;:::o;48526:110::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;48584:7;;;;48576:26;;;;;-1:-1:-1;;;48576:26:0;;;;;;;;;;;;-1:-1:-1;;;48576:26:0;;;;;;;;;;;;;;;48613:7;:15;;-1:-1:-1;;48613:15:0;;;48526:110::o;35300:27::-;;;;;;:::o;53569:91::-;35105:5;;;;;-1:-1:-1;;;;;35105:5:0;35114:10;35105:19;35097:57;;;;;-1:-1:-1;;;35097:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35097:57:0;;;;;;;;;;;;;;;53630:14;:22;;-1:-1:-1;;53630:22:0;;;;;;;;;;53569:91::o;35861:35::-;;;;;;:::o;35421:29::-;;;;:::o;44267:1261::-;44413:11;;44399;44435:273;44456:6;44452:1;:10;44435:273;;;44484:11;44498:4;44503:1;44498:7;;;;;;;;;;;;;;44484:21;;44543:1;-1:-1:-1;;;;;44528:17:0;:3;-1:-1:-1;;;;;44528:17:0;;;44520:66;;;;-1:-1:-1;;;44520:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44609:13:0;;;;;;:8;:13;;;;;;;;:18;44601:95;;;;-1:-1:-1;;;44601:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44464:3:0;;44435:273;;;;44726:19;44740:4;44726:13;:19::i;:::-;44718:76;;;;-1:-1:-1;;;44718:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44884:5;;44862:34;;44884:5;;;-1:-1:-1;;;;;44884:5:0;44891:4;44862:21;:34::i;:::-;44854:85;;;;-1:-1:-1;;;44854:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44984:22;44998:7;44984:13;:22::i;:::-;44976:79;;;;-1:-1:-1;;;44976:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45083:14;;45066;45108:284;45129:9;45125:1;:13;45108:284;;;45160:14;45177:7;45185:1;45177:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45210:20:0;;;;;;:12;:20;;;;;;;;45177:10;;-1:-1:-1;45210:20:0;;:25;45202:61;;;;;-1:-1:-1;;;45202:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45286:16:0;;;;;;:8;:16;;;;;;;;;:21;45278:102;;;;-1:-1:-1;;;45278:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45140:3:0;;45108:284;;;-1:-1:-1;45464:12:0;;45446:14;;45432:11;;45410:12;:19;:33;:50;:66;;45402:118;;;;-1:-1:-1;;;45402:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44267:1261;;;;:::o;41019:475::-;41105:4;41151:3;41130:10;:17;:24;;41122:66;;;;;-1:-1:-1;;;41122:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41327:19;41349:42;41374:4;41380:10;41349:24;:42::i;:::-;41464:22;;;;-1:-1:-1;41446:40:0;;-1:-1:-1;;41019:475:0;;;;;:::o;45925:911::-;45998:14;;45994:58;;46034:7;;45994:58;46067:6;46062:96;46083:7;:14;46079:1;:18;46062:96;;;46126:8;:20;46135:7;46143:1;46135:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46126:20:0;;;;;;;;;;;-1:-1:-1;46126:20:0;46119:27;;-1:-1:-1;;46119:27:0;;;;46099:3;46062:96;;;-1:-1:-1;46216:6:0;46211:166;46232:12;:19;46228:23;;46211:166;;;46277:8;:25;46286:12;46299:1;46286:15;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46286:15:0;46277:25;;;;;;;;;;;;;;;46273:93;;46335:12;46348:1;46335:15;;;;;;;;;;;;;;;;;46328:22;;-1:-1:-1;;;;;;46328:22:0;;;46273:93;46253:3;;46211:166;;;-1:-1:-1;46404:4:0;46387:14;46419:362;46438:12;:19;46436:21;;46419:362;;;46479:12;46494;46507:1;46494:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46494:15:0;;-1:-1:-1;46528:18:0;46524:246;;46571:9;46584:4;46571:17;46567:36;;;46602:1;46590:13;;46567:36;46622:8;;;46524:246;46656:9;46669:4;46656:17;46652:118;;46720:4;46694:12;46707:9;46694:23;;;;;;;;;;;;;;;;;:30;;-1:-1:-1;;;;;;46694:30:0;-1:-1:-1;;;;;46694:30:0;;;;;;;;;;-1:-1:-1;46743:11:0;;;;;46652:118;46419:362;;46459:3;;46419:362;;;-1:-1:-1;46814:14:0;;46791:12;:37;;;;;;;;;;;:::i;46842:352::-;46909:11;;46905:55;;46942:7;;46905:55;46975:6;46970:217;46991:4;:11;46987:1;:15;46970:217;;;47024:11;47038:4;47043:1;47038:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47063:13:0;;;;;;:8;:13;;;;;;;;47038:7;;-1:-1:-1;47063:13:0;;47060:116;;-1:-1:-1;;;;;47102:13:0;;;;;;:8;:13;;;;;:17;;-1:-1:-1;;47102:17:0;47118:1;47102:17;;;;;;47138:12;27:10:-1;;23:18;;;45:23;;47138:22:0;;;;;;;-1:-1:-1;;;;;;47138:22:0;;;;;;47060:116;-1:-1:-1;47004:3:0;;46970:217;;;;46842:352;:::o;45660:259::-;45729:5;45771:1;45755:13;:17;45747:50;;;;;-1:-1:-1;;;45747:50:0;;;;;;;;;;;;-1:-1:-1;;;45747:50:0;;;;;;;;;;;;;;;45825:4;;:20;;:38;;35696:3;45825:38;45887:23;;45660:259;-1:-1:-1;;;45660:259:0:o;47200:173::-;47315:1;47293:12;47306:5;47293:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47293:19:0;;;;;-1:-1:-1;47293:19:0;;;;;;;;;;;;:23;;-1:-1:-1;;47293:23:0;;;;;;;;;;;-1:-1:-1;47327:34:0;;;:19;:34;;;;;;;:38;;;;;;;;;;;;;;;;-1:-1:-1;;;47200:173:0:o;14256:619::-;14316:4;14784:20;;14627:66;14824:23;;;;;;:42;;-1:-1:-1;14851:15:0;;;14824:42;14816:51;14256:619;-1:-1:-1;;;;14256:619:0:o;3619:260::-;3791:68;;;-1:-1:-1;;;;;3791:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3791:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3765:106:0;;3784:5;;3861:9;3765:18;:106::i;:::-;3619:260;;;;;:::o;3379:232::-;3533:58;;;-1:-1:-1;;;;;3533:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3533:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3507:96:0;;3526:5;;3593:9;3507:18;:96::i;47379:592::-;-1:-1:-1;;;;;47486:16:0;;47478:64;;;;-1:-1:-1;;;47478:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47569:4;-1:-1:-1;;;;;47561:22:0;;;;47553:57;;;;;-1:-1:-1;;;47553:57:0;;;;;;;;;;;;-1:-1:-1;;;47553:57:0;;;;;;;;;;;;;;;47629:18;:5;-1:-1:-1;;;;;47629:16:0;;:18::i;:::-;47621:68;;;;-1:-1:-1;;;47621:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47704:20;47718:5;47704:13;:20::i;:::-;47700:99;;;47781:7;;47700:99;47866:30;;;-1:-1:-1;;;47866:30:0;;47890:4;47866:30;;;;;;47831:5;;47809:12;;-1:-1:-1;;;;;47866:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;47866:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47866:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47866:30:0;;-1:-1:-1;47915:17:0;;;;47907:56;;;;;-1:-1:-1;;;47907:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;47977:543;48067:20;48081:5;48067:13;:20::i;:::-;48063:233;;;48235:28;;;-1:-1:-1;;;48235:28:0;;-1:-1:-1;;;;;48235:28:0;;;;;;;;;;;;;;;48214:5;;48235:16;;;;;:28;;;;;48174:24;;48235:28;;;;;;;48174:24;48235:16;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;48235:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48235:28:0;;;;48278:7;;;48063:233;48363:30;;;-1:-1:-1;;;48363:30:0;;48387:4;48363:30;;;;;;48328:5;;48306:12;;-1:-1:-1;;;;;48363:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;48363:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48363:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48363:30:0;;-1:-1:-1;48412:17:0;;;;48404:56;;;;;-1:-1:-1;;;48404:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48471:41;-1:-1:-1;;;;;48471:18:0;;48490:2;48494:6;48502:9;48471:41;:18;:41;:::i;42880:600::-;42949:4;;42966:485;42987:4;:11;42983:1;:15;42966:485;;;43020:16;43039:4;43044:1;43039:7;;;;;;;;;;;;;;43020:26;;43085:1;-1:-1:-1;;;;;43065:22:0;:8;-1:-1:-1;;;;;43065:22:0;;43061:68;;;43108:5;;;43061:68;43161:1;43157:5;;43143:297;43168:4;:11;43164:1;:15;43143:297;;;43205:16;43224:4;43229:1;43224:7;;;;;;;;;;;;;;43205:26;;43274:1;-1:-1:-1;;;;;43254:22:0;:8;-1:-1:-1;;;;;43254:22:0;;43250:76;;;43301:5;;;43250:76;43360:8;-1:-1:-1;;;;;43348:20:0;:8;-1:-1:-1;;;;;43348:20:0;;43344:81;;;43400:5;43393:12;;;;;;;;43344:81;-1:-1:-1;43181:3:0;;43143:297;;;-1:-1:-1;;43000:3:0;;42966:485;;;-1:-1:-1;43468:4:0;;42880:600;-1:-1:-1;;42880:600:0:o;42427:445::-;42528:4;;;42575:268;42596:4;:11;42592:1;:15;42575:268;;;42643:4;42648:1;42643:7;;;;;;;;;;;;;;42629:21;;42692:1;-1:-1:-1;;;;;42669:25:0;:11;-1:-1:-1;;;;;42669:25:0;;42665:71;;;42715:5;;42665:71;42769:14;-1:-1:-1;;;;;42754:29:0;:11;-1:-1:-1;;;;;42754:29:0;;42750:82;;;42811:5;42804:12;;;;;;42750:82;42609:3;;42575:268;;;-1:-1:-1;42860:4:0;;42427:445;-1:-1:-1;;;;42427:445:0:o;41502:917::-;41678:15;;41656:17;;41598:4;;;;;;41656:38;;:17;:38;:21;:38;:::i;:::-;41643:51;;41705:23;41745:5;41731:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;41731:20:0;-1:-1:-1;41705:46:0;-1:-1:-1;41762:6:0;;;41805:432;41826:5;41822:1;:9;41805:432;;;41853:17;41873:36;41890:1;41893:15;;41873:10;:16;;:36;;;;;:::i;:::-;41853:56;;41924:16;41943:22;41954:4;41960;41943:10;:22::i;:::-;41924:41;-1:-1:-1;;;;;;41988:22:0;;41980:51;;;;;-1:-1:-1;;;41980:51:0;;;;;;;;;;;;-1:-1:-1;;;41980:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42079:18:0;;;;;;:8;:18;;;;;;;;;:23;42075:116;;;42153:11;;42123;;;;;42160:3;;;42167:8;;42153:6;;:11;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;42153:22:0;;;-1:-1:-1;;;;;42153:22:0;;;;;42075:116;-1:-1:-1;;42210:15:0;;42205:20;;;;;41833:3;;41805:432;;;;42281:8;42292:21;42306:6;42292:13;:21::i;:::-;42281:32;;42324:13;;;42356:3;42348:36;;;;;-1:-1:-1;;;42348:36:0;;;;;;;;;;;;-1:-1:-1;;;42348:36:0;;;;;;;;;;;;;;;-1:-1:-1;42402:9:0;;41502:917;-1:-1:-1;;;;;;;41502:917:0:o;4276:1238::-;4925:27;4933:5;-1:-1:-1;;;;;4925:25:0;;:27::i;:::-;4917:71;;;;;-1:-1:-1;;;4917:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5062:12;5076:23;5111:5;-1:-1:-1;;;;;5103:19:0;5123:4;5103:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5103:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;5061:67:0;;;;5147:7;5139:52;;;;;-1:-1:-1;;;5139:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5208:25:0;;;;;;;;;;;;;;;;:30;5204:69;;5255:7;;;;5204:69;5287:17;;:21;5283:224;;5429:10;5418:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5418:30:0;5410:85;;;;-1:-1:-1;;;5410:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11289:132;11347:7;11374:39;11378:1;11381;11374:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11367:46;11289:132;-1:-1:-1;;;11289:132:0:o;25285:2515::-;25420:12;25485:7;25476:6;:16;25458:6;:13;:35;;25450:44;;;;;;25507:22;25573:15;;25602:1933;;;;27679:4;27673:11;27660:24;;27732:4;27721:9;27717:20;27711:4;27704:34;25566:2187;;25602:1933;25779:4;25773:11;25760:24;;26416:2;26407:7;26403:16;26788:9;26781:17;26775:4;26771:28;26759:9;26748;26744:25;26740:60;26837:7;26833:2;26829:16;27086:6;27072:9;27065:17;27059:4;27055:28;27043:9;27035:6;27031:22;27027:57;27023:70;26865:426;27120:3;27116:2;27113:11;26865:426;;;27262:9;;27251:21;;27162:4;27154:13;;;;27195;26865:426;;;-1:-1:-1;;27311:26:0;;;27515:2;27498:11;-1:-1:-1;;27494:25:0;27488:4;27481:39;-1:-1:-1;25566:2187:0;-1:-1:-1;27783:9:0;25285:2515;-1:-1:-1;;;;25285:2515:0:o;43488:771::-;43563:7;43583:9;43603;43623:7;43659:15;;43645:3;:10;:29;43641:79;;43706:1;43691:17;;;;;;;43641:79;-1:-1:-1;;;43774:2:0;43765:12;;43759:19;43812:2;43803:12;;43797:19;43858:2;43849:12;;43843:19;43840:1;43835:28;43900:66;43887:79;;43884:128;;;43998:1;43983:17;;;;;;;43884:128;44094:2;44090:1;:6;;;44086:46;;;44118:2;44113:7;44086:46;44146:1;:7;;44151:2;44146:7;;:18;;;;;44157:1;:7;;44162:2;44157:7;;44146:18;44142:68;;;44196:1;44181:17;;;;;;;44142:68;44227:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44227:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;44227:24:0;;-1:-1:-1;;44227:24:0;;;43488:771;-1:-1:-1;;;;;;;43488:771:0:o;11951:345::-;12037:7;12139:12;12132:5;12124:28;;;;-1:-1:-1;;;12124:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12124:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12163:9;12179:1;12175;:5;;;;;;;11951:345;-1:-1:-1;;;;;11951:345:0:o;34881:19567::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://95362de7fdf4ec3e185dbb78fd46d56f1688dd2b375a85b3badd17bb0a57a2d8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 99.09% | $0.004998 | 238,501,982.5206 | $1,192,001.9 | |
POL | 0.47% | $0.005082 | 1,111,930.1229 | $5,650.92 | |
POL | Polygon (POL) | 0.41% | $0.436814 | 11,219.8774 | $4,901 |
POL | 0.03% | $0.999864 | 384.719 | $384.67 | |
POL | <0.01% | $0.00094 | 50,000 | $47 | |
POL | <0.01% | $0.005757 | 1,914.4308 | $11.02 | |
POL | <0.01% | $0.032943 | 9.9149 | $0.3266 | |
POL | <0.01% | $0.000002 | 158,310.3334 | $0.2941 | |
POL | <0.01% | $0.000515 | 489.592 | $0.2523 |
[ 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.