Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
GridArt
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "../interfaces/IHoneycombs.sol"; import "./Utilities.sol"; /** @title GridArt @notice Generates the grid for a given Honeycomb. */ library GridArt { enum HEXAGON_TYPE { FLAT, POINTY } // prettier-ignore enum SHAPE { TRIANGLE, DIAMOND, HEXAGON, RANDOM } // prettier-ignore /// @dev The paths for a 72x72 px hexagon. function getHexagonPath(uint8 pathType) public pure returns (string memory path) { if (pathType == uint8(HEXAGON_TYPE.FLAT)) { return "M22.2472 7.32309L4.82457 37.5C3.93141 39.047 3.93141 40.953 4.82457 42.5L22.2472 72.6769C23.1404 74.2239 24.791 75.1769 26.5774 75.1769H61.4226C63.209 75.1769 64.8596 74.2239 65.7528 72.6769L83.1754 42.5C84.0686 40.953 84.0686 39.047 83.1754 37.5L65.7528 7.32309C64.8596 5.77608 63.209 4.82309 61.4226 4.82309H26.5774C24.791 4.82309 23.1404 5.77608 22.2472 7.32309Z"; // prettier-ignore } else if (pathType == uint8(HEXAGON_TYPE.POINTY)) { return "M72.6769 22.2472L42.5 4.82457C40.953 3.93141 39.047 3.93141 37.5 4.82457L7.32309 22.2472C5.77608 23.1404 4.82309 24.791 4.82309 26.5774V61.4226C4.82309 63.209 5.77608 64.8596 7.32309 65.7528L37.5 83.1754C39.047 84.0686 40.953 84.0686 42.5 83.1754L72.6769 65.7528C74.2239 64.8596 75.1769 63.209 75.1769 61.4226V26.5774C75.1769 24.791 74.2239 23.1404 72.6769 22.2472Z"; // prettier-ignore } } /// @dev Get hexagon from given grid and hexagon properties. /// @param grid The grid metadata. /// @param xIndex The x index in the grid. /// @param yIndex The y index in the grid. /// @param gradientId The gradient id for the hexagon. function getUpdatedHexagonsSvg( IHoneycombs.Grid memory grid, uint16 xIndex, uint16 yIndex, uint16 gradientId ) public pure returns (bytes memory) { uint16 x = grid.gridX + xIndex * grid.columnDistance; uint16 y = grid.gridY + yIndex * grid.rowDistance; // prettier-ignore return abi.encodePacked(grid.hexagonsSvg, abi.encodePacked( '<use href="#hexagon" stroke="url(#gradient', Utilities.uint2str(gradientId), ')" ', 'x="', Utilities.uint2str(x), '" y="', Utilities.uint2str(y), '"', '/>' )); } /// @dev Add positioning to the grid (for centering on canvas). /// @dev Note this function appends attributes to grid object, so returned object has original grid + positioning. /// @param honeycomb The honeycomb data used for rendering. /// @param grid The grid metadata. function addGridPositioning( IHoneycombs.Honeycomb memory honeycomb, IHoneycombs.Grid memory grid ) public pure returns (IHoneycombs.Grid memory) { // Compute grid properties. grid.rowDistance = ((3 * honeycomb.canvas.hexagonSize) / 4) + 7; // 7 is a relatively arbitrary buffer grid.columnDistance = honeycomb.canvas.hexagonSize / 2 - 1; uint16 gridHeight = honeycomb.canvas.hexagonSize + 7 + ((grid.rows - 1) * grid.rowDistance); uint16 gridWidth = grid.longestRowCount * (honeycomb.canvas.hexagonSize - 2); /** * Swap variables if it is a flat top hexagon (this math assumes pointy top as default). Rotating a flat top * hexagon 90 degrees clockwise results in a pointy top hexagon. This effectively swaps the x and y axis. */ if (honeycomb.baseHexagon.hexagonType == uint8(HEXAGON_TYPE.FLAT)) { (grid.rowDistance, grid.columnDistance) = Utilities.swap(grid.rowDistance, grid.columnDistance); (gridWidth, gridHeight) = Utilities.swap(gridWidth, gridHeight); } // Compute grid positioning. grid.gridX = (honeycomb.canvas.size - gridWidth) / 2; grid.gridY = (honeycomb.canvas.size - gridHeight) / 2; return grid; } /// @dev Get the honeycomb grid for a random shape. /// @dev Note: can only be called for pointy tops (flat tops are not supported as they would be redundant). /// @param honeycomb The honeycomb data used for rendering. function getRandomGrid(IHoneycombs.Honeycomb memory honeycomb) public pure returns (IHoneycombs.Grid memory) { IHoneycombs.Grid memory grid; // Get random rows from 1 to honeycomb.canvas.maxHexagonsPerline. grid.rows = uint8(Utilities.random(honeycomb.seed, "rows", honeycomb.canvas.maxHexagonsPerLine) + 1); // Get random hexagons in each row from 1 to honeycomb.canvas.maxHexagonsPerLine - 1. uint8[] memory hexagonsInRow = new uint8[](grid.rows); for (uint8 i; i < grid.rows; ) { hexagonsInRow[i] = uint8(Utilities.random( honeycomb.seed, abi.encodePacked("hexagonsInRow", Utilities.uint2str(i)), honeycomb.canvas.maxHexagonsPerLine - 1 ) + 1); // prettier-ignore grid.longestRowCount = Utilities.max(hexagonsInRow[i], grid.longestRowCount); unchecked { ++i; } } // Determine positioning of entire grid, which is based on the longest row. grid = addGridPositioning(honeycomb, grid); // appends to grid object int8 lastRowEvenOdd = -1; // Helps avoid overlapping hexagons: -1 = unset, 0 = even, 1 = odd // Create random grid. Only working with pointy tops for simplicity. for (uint8 i; i < grid.rows; ) { uint8 firstX = grid.longestRowCount - hexagonsInRow[i]; // Increment firstX if last row's evenness/oddness is same as this rows and update with current. if (lastRowEvenOdd == int8(firstX % 2)) ++firstX; lastRowEvenOdd = int8(firstX % 2); // Assign indexes for each hexagon. for (uint8 j; j < hexagonsInRow[i]; ) { uint8 xIndex = firstX + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } grid.totalGradients = grid.rows; return grid; } /// @dev Get the honeycomb grid for a hexagon shape. /// @param honeycomb The honeycomb data used for rendering. function getHexagonGrid(IHoneycombs.Honeycomb memory honeycomb) public pure returns (IHoneycombs.Grid memory) { IHoneycombs.Grid memory grid; // Get random rows from 3 to honeycomb.canvas.maxHexagonsPerLine, only odd. grid.rows = uint8( Utilities.random(honeycomb.seed, "rows", (honeycomb.canvas.maxHexagonsPerLine / 2) - 1) * 2 + 3 ); // Determine positioning of entire grid, which is based on the longest row. grid.longestRowCount = grid.rows; grid = addGridPositioning(honeycomb, grid); // appends to grid object // Create grid based on hexagon base type. if (honeycomb.baseHexagon.hexagonType == uint8(HEXAGON_TYPE.POINTY)) { grid.totalGradients = grid.rows; for (uint8 i; i < grid.rows; ) { // Compute hexagons in row. uint8 hexagonsInRow = grid.rows - Utilities.absDiff(grid.rows / 2, i); // Assign indexes for each hexagon. for (uint8 j; j < hexagonsInRow; ) { uint8 xIndex = (grid.rows - hexagonsInRow) + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } } else if (honeycomb.baseHexagon.hexagonType == uint8(HEXAGON_TYPE.FLAT)) { uint8 flatTopRows = grid.rows * 2 - 1; grid.totalGradients = flatTopRows; uint8 halfRows = grid.rows / 2; for (uint8 i; i < flatTopRows; ) { // Determine hexagons in row. uint8 hexagonsInRow; if (i <= grid.rows / 2) { // ascending, i.e. rows = 1 2 3 4 5 when rows = 5 hexagonsInRow = i + 1; } else if (i < flatTopRows - halfRows - 1) { // alternate between rows / 2 + 1 and rows / 2 every other row hexagonsInRow = (halfRows + i) % 2 == 0 ? halfRows + 1 : halfRows; } else { // descending, i.e. rows = 5, 4, 3, 2, 1 when rows = 5 hexagonsInRow = flatTopRows - i; } // Assign indexes for each hexagon. for (uint8 j; j < hexagonsInRow; ) { uint8 xIndex = (grid.rows - hexagonsInRow) - halfRows + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } } return grid; } /// @dev Get the honeycomb grid for a diamond shape. /// @param honeycomb The honeycomb data used for rendering. function getDiamondGrid(IHoneycombs.Honeycomb memory honeycomb) public pure returns (IHoneycombs.Grid memory) { IHoneycombs.Grid memory grid; // Get random rows from 3 to honeycomb.canvas.maxHexagonsPerLine, only odd. grid.rows = uint8( Utilities.random(honeycomb.seed, "rows", (honeycomb.canvas.maxHexagonsPerLine / 2) - 1) * 2 + 3 ); // Determine positioning of entire grid, which is based on the longest row. grid.longestRowCount = grid.rows / 2 + 1; grid = addGridPositioning(honeycomb, grid); // appends to grid object // Create diamond grid. Both flat top and pointy top result in the same grid, so no need to check hexagon type. for (uint8 i; i < grid.rows; ) { // Determine hexagons in row. Pattern is ascending/descending sequence, i.e 1 2 3 2 1 when rows = 5. uint8 hexagonsInRow = i < grid.rows / 2 ? i + 1 : grid.rows - i; uint8 firstXInRow = i < grid.rows / 2 ? grid.rows / 2 - i : i - grid.rows / 2; // Assign indexes for each hexagon. for (uint8 j; j < hexagonsInRow; ) { uint8 xIndex = firstXInRow + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } grid.totalGradients = grid.rows; return grid; } /// @dev Get the honeycomb grid for a triangle shape. /// @param honeycomb The honeycomb data used for rendering. function getTriangleGrid(IHoneycombs.Honeycomb memory honeycomb) public pure returns (IHoneycombs.Grid memory) { IHoneycombs.Grid memory grid; // Get random rows from 2 to honeycomb.canvas.maxHexagonsPerLine. grid.rows = uint8(Utilities.random(honeycomb.seed, "rows", honeycomb.canvas.maxHexagonsPerLine - 1) + 2); // Determine positioning of entire grid, which is based on the longest row. grid.longestRowCount = grid.rows; grid = addGridPositioning(honeycomb, grid); // appends to grid object // Create grid based on hexagon base type. if (honeycomb.baseHexagon.hexagonType == uint8(HEXAGON_TYPE.POINTY)) { grid.totalGradients = grid.rows; // Iterate through rows - will only be north/south facing (design). for (uint8 i; i < grid.rows; ) { // Assign indexes for each hexagon. Each row has i + 1 hexagons. for (uint8 j; j < i + 1; ) { uint8 xIndex = grid.rows - 1 - i + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } } else if (honeycomb.baseHexagon.hexagonType == uint8(HEXAGON_TYPE.FLAT)) { uint8 flatTopRows = grid.rows * 2 - 1; grid.totalGradients = flatTopRows; // Iterate through rows - will only be west/east facing (design). for (uint8 i; i < flatTopRows; ) { // Determine hexagons in row. First half is ascending. Second half is descending. uint8 hexagonsInRow; if (i <= flatTopRows / 2) { // ascending with peak, i.e. rows = 1 1 2 2 3 when rows = 5 hexagonsInRow = i / 2 + 1; } else { // descending with peak, i.e. rows = 2 2 1 1 when rows = 5 hexagonsInRow = ((flatTopRows - i - 1) / 2) + 1; } // Assign indexes for each hexagon. Each row has i + 1 hexagons. for (uint8 j; j < hexagonsInRow; ) { uint8 xIndex = (i % 2) + (j * 2); grid.hexagonsSvg = getUpdatedHexagonsSvg(grid, xIndex, i, i + 1); unchecked { ++j; } } unchecked { ++i; } } } return grid; } /// @dev Generate the overall honeycomb grid, including the final svg. /// @dev Using double coordinates: https://www.redblobgames.com/grids/hexagons/#coordinates-doubled /// @param honeycomb The honeycomb data used for rendering. /// @return (bytes, uint8, uint8) The svg, totalGradients, and rows. function generateGrid(IHoneycombs.Honeycomb memory honeycomb) public pure returns (bytes memory, uint8, uint8) { // Partial grid object used to store supportive variables IHoneycombs.Grid memory gridData; // Get grid data based on shape. if (honeycomb.grid.shape == uint8(SHAPE.TRIANGLE)) { gridData = getTriangleGrid(honeycomb); } else if (honeycomb.grid.shape == uint8(SHAPE.DIAMOND)) { gridData = getDiamondGrid(honeycomb); } else if (honeycomb.grid.shape == uint8(SHAPE.HEXAGON)) { gridData = getHexagonGrid(honeycomb); } else if (honeycomb.grid.shape == uint8(SHAPE.RANDOM)) { gridData = getRandomGrid(honeycomb); } // Generate grid svg. // prettier-ignore bytes memory svg = abi.encodePacked( '<g transform="scale(1) rotate(', Utilities.uint2str(honeycomb.grid.rotation) ,',', Utilities.uint2str(honeycomb.canvas.size / 2) ,',', Utilities.uint2str(honeycomb.canvas.size / 2), ')">', gridData.hexagonsSvg, '</g>' ); return (svg, gridData.totalGradients, gridData.rows); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; interface IHoneycombs { /// @dev The minimal honeycomb data stored on-chain, the rest is generated. struct StoredHoneycomb { uint32 epoch; // Each honeycomb is revealed in an epoch uint24 day; // The days since token was created uint16 seed; // A unique identifier (this is the token ID since it is pre-reveal) } struct Honeycomb { StoredHoneycomb stored; // We carry over the honeycomb from storage bool isRevealed; // Whether the honeycomb is revealed uint256 seed; // The instantiated seed for pseudo-randomisation (post-reveal) bytes svg; // final svg for the honeycomb Canvas canvas; // all data relevant to the canvas BaseHexagon baseHexagon; // all data relevant to the base hexagon Grid grid; // all data relevant to the grid Gradients gradients; // all data relevant to the gradients } struct Honeycombs { mapping(uint256 => StoredHoneycomb) all; // All honeycombs uint32 maxSupply; // The maximum number of honeycombs that can be minted uint32 minted; // The number of honeycombs that have been minted uint32 burned; // The number of honeycombs that have been burned uint32 day0; // Marks the start of this journey mapping(uint256 => Epoch) epochs; // All epochs uint256 epoch; // The current epoch index } struct Canvas { string color; // background color of canvas uint16 size; // size or length of canvas in user units (pixels) uint16 hexagonSize; // size or length of hexagon in user units (pixels) uint16 maxHexagonsPerLine; // max number of hexagons per line } struct BaseHexagon { string path; // path of base hexagon string fillColor; // fill color of base hexagon uint8 strokeWidth; // stroke width size in user units (pixels) uint8 hexagonType; // type of base hexagon, i.e. flat or pointy } struct Grid { bytes hexagonsSvg; // final svg for all hexagons bytes svg; // final svg for the grid uint16 gridX; // x coordinate of the grid uint16 gridY; // y coordinate of the grid uint16 rowDistance; // distance between rows in user units (pixels) uint16 columnDistance; // distance between columns in user units (pixels) uint16 rotation; // rotation of entire shape in degrees uint8 shape; // shape of the grid, i.e. triangle, diamond, hexagon, random uint8 totalGradients; // number of gradients required based on the grid size and shape uint8 rows; // number of rows in the grid uint8 longestRowCount; // largest row size in the grid for centering purposes } struct Gradients { bytes svg; // final svg for the gradients uint16 duration; // duration of animation in seconds uint8 direction; // direction of animation, i.e. forward or backward uint8 chrome; // max number of colors in all the gradients, aka chrome } struct Epoch { uint128 randomness; // The source of randomness for tokens from this epoch uint64 revealBlock; // The block at which this epoch was / is revealed bool committed; // Whether the epoch has been instantiated bool revealed; // Whether the epoch has been revealed } event NewEpoch(uint256 indexed epoch, uint64 indexed revealBlock); error NotAllowed(); error MaxSupplyReached(); error NotExactEth(); error MaxMintPerAddressReached(); }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.17; library Utilities { /// @dev Zero-index based pseudorandom number based on one input and max bound function random(uint256 input, uint256 _max) internal pure returns (uint256) { return (uint256(keccak256(abi.encodePacked(input))) % _max); } /// @dev Zero-index based salted pseudorandom number based on two inputs and max bound function random(uint256 input, bytes memory salt, uint256 _max) internal pure returns (uint256) { return (uint256(keccak256(abi.encodePacked(input, salt))) % _max); } /// @dev Convert an integer to a string function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { ++len; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_i != 0) { k = k - 1; uint8 temp = (48 + uint8(_i - (_i / 10) * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } /// @dev Get the larger number function max(uint8 one, uint8 two) internal pure returns (uint8) { return one > two ? one : two; } /// @dev Get the absolute difference between two numbers function absDiff(uint8 one, uint8 two) internal pure returns (uint8) { return one > two ? one - two : two - one; } /// @dev Swap two numbers function swap(uint16 one, uint16 two) internal pure returns (uint16, uint16) { return (two, one); } /// @dev Get the days since another date (input is seconds) function day(uint256 from, uint256 to) internal pure returns (uint24) { return uint24((to - from) / 24 hours + 1); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"}],"name":"addGridPositioning","outputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"}],"name":"generateGrid","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"}],"name":"getDiamondGrid","outputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"}],"name":"getHexagonGrid","outputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"pathType","type":"uint8"}],"name":"getHexagonPath","outputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"}],"name":"getRandomGrid","outputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint24","name":"day","type":"uint24"},{"internalType":"uint16","name":"seed","type":"uint16"}],"internalType":"struct IHoneycombs.StoredHoneycomb","name":"stored","type":"tuple"},{"internalType":"bool","name":"isRevealed","type":"bool"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"bytes","name":"svg","type":"bytes"},{"components":[{"internalType":"string","name":"color","type":"string"},{"internalType":"uint16","name":"size","type":"uint16"},{"internalType":"uint16","name":"hexagonSize","type":"uint16"},{"internalType":"uint16","name":"maxHexagonsPerLine","type":"uint16"}],"internalType":"struct IHoneycombs.Canvas","name":"canvas","type":"tuple"},{"components":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"fillColor","type":"string"},{"internalType":"uint8","name":"strokeWidth","type":"uint8"},{"internalType":"uint8","name":"hexagonType","type":"uint8"}],"internalType":"struct IHoneycombs.BaseHexagon","name":"baseHexagon","type":"tuple"},{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"components":[{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"duration","type":"uint16"},{"internalType":"uint8","name":"direction","type":"uint8"},{"internalType":"uint8","name":"chrome","type":"uint8"}],"internalType":"struct IHoneycombs.Gradients","name":"gradients","type":"tuple"}],"internalType":"struct IHoneycombs.Honeycomb","name":"honeycomb","type":"tuple"}],"name":"getTriangleGrid","outputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"hexagonsSvg","type":"bytes"},{"internalType":"bytes","name":"svg","type":"bytes"},{"internalType":"uint16","name":"gridX","type":"uint16"},{"internalType":"uint16","name":"gridY","type":"uint16"},{"internalType":"uint16","name":"rowDistance","type":"uint16"},{"internalType":"uint16","name":"columnDistance","type":"uint16"},{"internalType":"uint16","name":"rotation","type":"uint16"},{"internalType":"uint8","name":"shape","type":"uint8"},{"internalType":"uint8","name":"totalGradients","type":"uint8"},{"internalType":"uint8","name":"rows","type":"uint8"},{"internalType":"uint8","name":"longestRowCount","type":"uint8"}],"internalType":"struct IHoneycombs.Grid","name":"grid","type":"tuple"},{"internalType":"uint16","name":"xIndex","type":"uint16"},{"internalType":"uint16","name":"yIndex","type":"uint16"},{"internalType":"uint16","name":"gradientId","type":"uint16"}],"name":"getUpdatedHexagonsSvg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
612e4f610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c806384645d8b1161006557806384645d8b146101575780638a96513e14610187578063d9e3455e146101b9578063ee2ede62146101e957610092565b806315e97f84146100975780635c5ae0bb146100c7578063613ae4df146100f7578063823c317514610127575b600080fd5b6100b160048036038101906100ac919061158c565b610219565b6040516100be9190611649565b60405180910390f35b6100e160048036038101906100dc9190611e42565b6102a6565b6040516100ee9190611ff4565b60405180910390f35b610111600480360381019061010c9190611e42565b6105a9565b60405161011e9190611ff4565b60405180910390f35b610141600480360381019061013c9190612016565b61093a565b60405161014e9190611ff4565b60405180910390f35b610171600480360381019061016c9190611e42565b610b09565b60405161017e9190611ff4565b60405180910390f35b6101a1600480360381019061019c9190611e42565b610e21565b6040516101b0939291906120e7565b60405180910390f35b6101d360048036038101906101ce9190611e42565b610faa565b6040516101e09190611ff4565b60405180910390f35b61020360048036038101906101fe9190612125565b6111d8565b60405161021091906121a8565b60405180910390f35b60606000600181111561022f5761022e6121ca565b5b60ff168260ff160361025e57604051806101a0016040528061016d8152602001612cad61016d913990506102a1565b600180811115610271576102706121ca565b5b60ff168260ff16036102a057604051806101a0016040528061016d8152602001612b4061016d913990506102a1565b5b919050565b6102ae6114c5565b6102b66114c5565b600261031484604001516040518060400160405280600481526020017f726f777300000000000000000000000000000000000000000000000000000000815250600187608001516060015161030b9190612228565b61ffff16611299565b61031e919061225e565b81610120019060ff16908160ff168152505080610120015181610140019060ff16908160ff1681525050610352838261093a565b9050600180811115610367576103666121ca565b5b60ff168360a001516060015160ff16036104455780610120015181610100019060ff16908160ff168152505060005b81610120015160ff168160ff16101561043f5760005b6001826103b99190612292565b60ff168160ff1610156104335760006002826103d591906122c7565b8360018661012001516103e89190612304565b6103f29190612304565b6103fc9190612292565b905061041f848260ff168560ff166001876104179190612292565b60ff166111d8565b8460000181905250816001019150506103ac565b50806001019050610396565b506105a0565b60006001811115610459576104586121ca565b5b60ff168360a001516060015160ff160361059f5760006001600283610120015161048391906122c7565b61048d9190612304565b90508082610100019060ff16908160ff168152505060005b8160ff168160ff16101561059c5760006002836104c29190612368565b60ff168260ff16116104ee5760016002836104dd9190612368565b6104e79190612292565b9050610521565b60016002600184866105009190612304565b61050a9190612304565b6105149190612368565b61051e9190612292565b90505b60005b8160ff168160ff16101561058f57600060028261054191906122c7565b60028561054e9190612399565b6105589190612292565b905061057b868260ff168660ff166001886105739190612292565b60ff166111d8565b866000018190525081600101915050610524565b50816001019150506104a5565b50505b5b80915050919050565b6105b16114c5565b6105b96114c5565b6003600261062585604001516040518060400160405280600481526020017f726f7773000000000000000000000000000000000000000000000000000000008152506001600289608001516060015161061291906123ca565b61061c9190612228565b61ffff16611299565b61062f91906123fb565b610639919061225e565b81610120019060ff16908160ff168152505080610120015181610140019060ff16908160ff168152505061066d838261093a565b9050600180811115610682576106816121ca565b5b60ff168360a001516060015160ff16036107785780610120015181610100019060ff16908160ff168152505060005b81610120015160ff168160ff1610156107725760006106e160028461012001516106db9190612368565b836112db565b8361012001516106f19190612304565b905060005b8160ff168160ff16101561076557600060028261071391906122c7565b838661012001516107249190612304565b61072e9190612292565b9050610751858260ff168660ff166001886107499190612292565b60ff166111d8565b8560000181905250816001019150506106f6565b50816001019150506106b1565b50610931565b6000600181111561078c5761078b6121ca565b5b60ff168360a001516060015160ff1603610930576000600160028361012001516107b691906122c7565b6107c09190612304565b90508082610100019060ff16908160ff1681525050600060028361012001516107e99190612368565b905060005b8260ff168160ff16101561092c57600060028561012001516108109190612368565b60ff168260ff1611610830576001826108299190612292565b90506108a2565b6001838561083e9190612304565b6108489190612304565b60ff168260ff161015610892576000600283856108659190612292565b61086f9190612399565b60ff161461087d578261088b565b60018361088a9190612292565b5b90506108a1565b818461089e9190612304565b90505b5b60005b8160ff168160ff16101561091f5760006002826108c291906122c7565b85848961012001516108d49190612304565b6108de9190612304565b6108e89190612292565b905061090b878260ff168660ff166001886109039190612292565b60ff166111d8565b8760000181905250816001019150506108a5565b50816001019150506107ee565b5050505b5b80915050919050565b6109426114c5565b60076004846080015160400151600361095b919061243d565b61096591906123ca565b61096f919061247a565b826080019061ffff16908161ffff16815250506001600284608001516040015161099991906123ca565b6109a39190612228565b8260a0019061ffff16908161ffff16815250506000826080015160018461012001516109cf9190612304565b60ff166109dc919061243d565b60078560800151604001516109f1919061247a565b6109fb919061247a565b905060006002856080015160400151610a149190612228565b84610140015160ff16610a27919061243d565b905060006001811115610a3d57610a3c6121ca565b5b60ff168560a001516060015160ff1603610a9857610a6384608001518560a00151611310565b856080018660a0018261ffff1661ffff168152508261ffff1661ffff168152505050610a8f8183611310565b80935081925050505b600281866080015160200151610aae9190612228565b610ab891906123ca565b846040019061ffff16908161ffff1681525050600282866080015160200151610ae19190612228565b610aeb91906123ca565b846060019061ffff16908161ffff1681525050839250505092915050565b610b116114c5565b610b196114c5565b6001610b6b84604001516040518060400160405280600481526020017f726f77730000000000000000000000000000000000000000000000000000000081525086608001516060015161ffff16611299565b610b75919061225e565b81610120019060ff16908160ff1681525050600081610120015160ff1667ffffffffffffffff811115610bab57610baa611670565b5b604051908082528060200260200182016040528015610bd95781602001602082028036833780820191505090505b50905060005b82610120015160ff168160ff161015610cc2576001610c458660400151610c088460ff16611320565b604051602001610c189190612538565b6040516020818303038152906040526001896080015160600151610c3c9190612228565b61ffff16611299565b610c4f919061225e565b828260ff1681518110610c6557610c6461255a565b5b602002602001019060ff16908160ff1681525050610ca5828260ff1681518110610c9257610c9161255a565b5b60200260200101518461014001516114a6565b83610140019060ff16908160ff1681525050806001019050610bdf565b50610ccd848361093a565b915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b83610120015160ff168160ff161015610dfd576000838260ff1681518110610d2257610d2161255a565b5b6020026020010151856101400151610d3a9190612304565b9050600281610d499190612399565b60000b8360000b03610d625780610d5f90612589565b90505b600281610d6f9190612399565b925060005b848360ff1681518110610d8a57610d8961255a565b5b602002602001015160ff168160ff161015610df0576000600282610dae91906122c7565b83610db99190612292565b9050610ddc878260ff168660ff16600188610dd49190612292565b60ff166111d8565b876000018190525081600101915050610d74565b5081600101915050610cf7565b5082610120015183610100019060ff16908160ff1681525050829350505050919050565b6060600080610e2e6114c5565b60006003811115610e4257610e416121ca565b5b60ff168560c0015160e0015160ff1603610e6657610e5f856102a6565b9050610f0c565b60016003811115610e7a57610e796121ca565b5b60ff168560c0015160e0015160ff1603610e9e57610e9785610faa565b9050610f0b565b60026003811115610eb257610eb16121ca565b5b60ff168560c0015160e0015160ff1603610ed657610ecf856105a9565b9050610f0a565b600380811115610ee957610ee86121ca565b5b60ff168560c0015160e0015160ff1603610f0957610f0685610b09565b90505b5b5b5b6000610f238660c0015160c0015161ffff16611320565b610f446002886080015160200151610f3b91906123ca565b61ffff16611320565b610f656002896080015160200151610f5c91906123ca565b61ffff16611320565b8460000151604051602001610f7d949392919061271e565b60405160208183030381529060405290508082610100015183610120015194509450945050509193909250565b610fb26114c5565b610fba6114c5565b6003600261102685604001516040518060400160405280600481526020017f726f7773000000000000000000000000000000000000000000000000000000008152506001600289608001516060015161101391906123ca565b61101d9190612228565b61ffff16611299565b61103091906123fb565b61103a919061225e565b81610120019060ff16908160ff1681525050600160028261012001516110609190612368565b61106a9190612292565b81610140019060ff16908160ff1681525050611086838261093a565b905060005b81610120015160ff168160ff1610156111b657600060028361012001516110b29190612368565b60ff168260ff16106110d457818361012001516110cf9190612304565b6110e2565b6001826110e19190612292565b5b9050600060028461012001516110f89190612368565b60ff168360ff16106111265760028461012001516111169190612368565b836111219190612304565b611144565b8260028561012001516111399190612368565b6111439190612304565b5b905060005b8260ff168160ff1610156111a857600060028261116691906122c7565b836111719190612292565b9050611194868260ff168760ff1660018961118c9190612292565b60ff166111d8565b866000018190525081600101915050611149565b50826001019250505061108b565b5080610120015181610100019060ff16908160ff168152505080915050919050565b606060008560a00151856111ec919061243d565b86604001516111fb919061247a565b9050600086608001518561120f919061243d565b876060015161121e919061247a565b905086600001516112328561ffff16611320565b61123f8461ffff16611320565b61124c8461ffff16611320565b60405160200161125e93929190612981565b60405160208183030381529060405260405160200161127e9291906129f4565b60405160208183030381529060405292505050949350505050565b60008184846040516020016112af929190612a39565b6040516020818303038152906040528051906020012060001c6112d29190612a61565b90509392505050565b60008160ff168360ff16116112fb5782826112f69190612304565b611308565b81836113079190612304565b5b905092915050565b6000808284915091509250929050565b606060008203611367576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506114a1565b600082905060005b60008214611397578061138190612a92565b9050600a826113909190612ada565b915061136f565b60008167ffffffffffffffff8111156113b3576113b2611670565b5b6040519080825280601f01601f1916602001820160405280156113e55781602001600182028036833780820191505090505b50905060008290505b60008614611499576001816114039190612b0b565b90506000600a80886114159190612ada565b61141f91906123fb565b8761142a9190612b0b565b60306114369190612292565b905060008160f81b9050808484815181106114545761145361255a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886114909190612ada565b975050506113ee565b819450505050505b919050565b60008160ff168360ff16116114bb57816114bd565b825b905092915050565b6040518061016001604052806060815260200160608152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b61156981611553565b811461157457600080fd5b50565b60008135905061158681611560565b92915050565b6000602082840312156115a2576115a1611549565b5b60006115b084828501611577565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115f35780820151818401526020810190506115d8565b60008484015250505050565b6000601f19601f8301169050919050565b600061161b826115b9565b61162581856115c4565b93506116358185602086016115d5565b61163e816115ff565b840191505092915050565b600060208201905081810360008301526116638184611610565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116a8826115ff565b810181811067ffffffffffffffff821117156116c7576116c6611670565b5b80604052505050565b60006116da61153f565b90506116e6828261169f565b919050565b600080fd5b600063ffffffff82169050919050565b611709816116f0565b811461171457600080fd5b50565b60008135905061172681611700565b92915050565b600062ffffff82169050919050565b6117448161172c565b811461174f57600080fd5b50565b6000813590506117618161173b565b92915050565b600061ffff82169050919050565b61177e81611767565b811461178957600080fd5b50565b60008135905061179b81611775565b92915050565b6000606082840312156117b7576117b661166b565b5b6117c160606116d0565b905060006117d184828501611717565b60008301525060206117e584828501611752565b60208301525060406117f98482850161178c565b60408301525092915050565b60008115159050919050565b61181a81611805565b811461182557600080fd5b50565b60008135905061183781611811565b92915050565b6000819050919050565b6118508161183d565b811461185b57600080fd5b50565b60008135905061186d81611847565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561189857611897611670565b5b6118a1826115ff565b9050602081019050919050565b82818337600083830152505050565b60006118d06118cb8461187d565b6116d0565b9050828152602081018484840111156118ec576118eb611878565b5b6118f78482856118ae565b509392505050565b600082601f83011261191457611913611873565b5b81356119248482602086016118bd565b91505092915050565b600067ffffffffffffffff82111561194857611947611670565b5b611951826115ff565b9050602081019050919050565b600061197161196c8461192d565b6116d0565b90508281526020810184848401111561198d5761198c611878565b5b6119988482856118ae565b509392505050565b600082601f8301126119b5576119b4611873565b5b81356119c584826020860161195e565b91505092915050565b6000608082840312156119e4576119e361166b565b5b6119ee60806116d0565b9050600082013567ffffffffffffffff811115611a0e57611a0d6116eb565b5b611a1a848285016119a0565b6000830152506020611a2e8482850161178c565b6020830152506040611a428482850161178c565b6040830152506060611a568482850161178c565b60608301525092915050565b600060808284031215611a7857611a7761166b565b5b611a8260806116d0565b9050600082013567ffffffffffffffff811115611aa257611aa16116eb565b5b611aae848285016119a0565b600083015250602082013567ffffffffffffffff811115611ad257611ad16116eb565b5b611ade848285016119a0565b6020830152506040611af284828501611577565b6040830152506060611b0684828501611577565b60608301525092915050565b60006101608284031215611b2957611b2861166b565b5b611b346101606116d0565b9050600082013567ffffffffffffffff811115611b5457611b536116eb565b5b611b60848285016118ff565b600083015250602082013567ffffffffffffffff811115611b8457611b836116eb565b5b611b90848285016118ff565b6020830152506040611ba48482850161178c565b6040830152506060611bb88482850161178c565b6060830152506080611bcc8482850161178c565b60808301525060a0611be08482850161178c565b60a08301525060c0611bf48482850161178c565b60c08301525060e0611c0884828501611577565b60e083015250610100611c1d84828501611577565b61010083015250610120611c3384828501611577565b61012083015250610140611c4984828501611577565b6101408301525092915050565b600060808284031215611c6c57611c6b61166b565b5b611c7660806116d0565b9050600082013567ffffffffffffffff811115611c9657611c956116eb565b5b611ca2848285016118ff565b6000830152506020611cb68482850161178c565b6020830152506040611cca84828501611577565b6040830152506060611cde84828501611577565b60608301525092915050565b60006101408284031215611d0157611d0061166b565b5b611d0c6101006116d0565b90506000611d1c848285016117a1565b6000830152506060611d3084828501611828565b6020830152506080611d448482850161185e565b60408301525060a082013567ffffffffffffffff811115611d6857611d676116eb565b5b611d74848285016118ff565b60608301525060c082013567ffffffffffffffff811115611d9857611d976116eb565b5b611da4848285016119ce565b60808301525060e082013567ffffffffffffffff811115611dc857611dc76116eb565b5b611dd484828501611a62565b60a08301525061010082013567ffffffffffffffff811115611df957611df86116eb565b5b611e0584828501611b12565b60c08301525061012082013567ffffffffffffffff811115611e2a57611e296116eb565b5b611e3684828501611c56565b60e08301525092915050565b600060208284031215611e5857611e57611549565b5b600082013567ffffffffffffffff811115611e7657611e7561154e565b5b611e8284828501611cea565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000611eb282611e8b565b611ebc8185611e96565b9350611ecc8185602086016115d5565b611ed5816115ff565b840191505092915050565b611ee981611767565b82525050565b611ef881611553565b82525050565b6000610160830160008301518482036000860152611f1c8282611ea7565b91505060208301518482036020860152611f368282611ea7565b9150506040830151611f4b6040860182611ee0565b506060830151611f5e6060860182611ee0565b506080830151611f716080860182611ee0565b5060a0830151611f8460a0860182611ee0565b5060c0830151611f9760c0860182611ee0565b5060e0830151611faa60e0860182611eef565b50610100830151611fbf610100860182611eef565b50610120830151611fd4610120860182611eef565b50610140830151611fe9610140860182611eef565b508091505092915050565b6000602082019050818103600083015261200e8184611efe565b905092915050565b6000806040838503121561202d5761202c611549565b5b600083013567ffffffffffffffff81111561204b5761204a61154e565b5b61205785828601611cea565b925050602083013567ffffffffffffffff8111156120785761207761154e565b5b61208485828601611b12565b9150509250929050565b600082825260208201905092915050565b60006120aa82611e8b565b6120b4818561208e565b93506120c48185602086016115d5565b6120cd816115ff565b840191505092915050565b6120e181611553565b82525050565b60006060820190508181036000830152612101818661209f565b905061211060208301856120d8565b61211d60408301846120d8565b949350505050565b6000806000806080858703121561213f5761213e611549565b5b600085013567ffffffffffffffff81111561215d5761215c61154e565b5b61216987828801611b12565b945050602061217a8782880161178c565b935050604061218b8782880161178c565b925050606061219c8782880161178c565b91505092959194509250565b600060208201905081810360008301526121c2818461209f565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061223382611767565b915061223e83611767565b9250828203905061ffff811115612258576122576121f9565b5b92915050565b60006122698261183d565b91506122748361183d565b925082820190508082111561228c5761228b6121f9565b5b92915050565b600061229d82611553565b91506122a883611553565b9250828201905060ff8111156122c1576122c06121f9565b5b92915050565b60006122d282611553565b91506122dd83611553565b92508282026122eb81611553565b91508082146122fd576122fc6121f9565b5b5092915050565b600061230f82611553565b915061231a83611553565b9250828203905060ff811115612333576123326121f9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237382611553565b915061237e83611553565b92508261238e5761238d612339565b5b828204905092915050565b60006123a482611553565b91506123af83611553565b9250826123bf576123be612339565b5b828206905092915050565b60006123d582611767565b91506123e083611767565b9250826123f0576123ef612339565b5b828204905092915050565b60006124068261183d565b91506124118361183d565b925082820261241f8161183d565b91508282048414831517612436576124356121f9565b5b5092915050565b600061244882611767565b915061245383611767565b925082820261246181611767565b9150808214612473576124726121f9565b5b5092915050565b600061248582611767565b915061249083611767565b9250828201905061ffff8111156124aa576124a96121f9565b5b92915050565b600081905092915050565b7f68657861676f6e73496e526f7700000000000000000000000000000000000000600082015250565b60006124f1600d836124b0565b91506124fc826124bb565b600d82019050919050565b6000612512826115b9565b61251c81856124b0565b935061252c8185602086016115d5565b80840191505092915050565b6000612543826124e4565b915061254f8284612507565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061259482611553565b915060ff82036125a7576125a66121f9565b5b600182019050919050565b7f3c67207472616e73666f726d3d227363616c6528312920726f74617465280000600082015250565b60006125e8601e836124b0565b91506125f3826125b2565b601e82019050919050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006126346001836124b0565b915061263f826125fe565b600182019050919050565b7f29223e0000000000000000000000000000000000000000000000000000000000600082015250565b60006126806003836124b0565b915061268b8261264a565b600382019050919050565b600081905092915050565b60006126ac82611e8b565b6126b68185612696565b93506126c68185602086016115d5565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006127086004836124b0565b9150612713826126d2565b600482019050919050565b6000612729826125db565b91506127358287612507565b915061274082612627565b915061274c8286612507565b915061275782612627565b91506127638285612507565b915061276e82612673565b915061277a82846126a1565b9150612785826126fb565b915081905095945050505050565b7f3c75736520687265663d222368657861676f6e22207374726f6b653d2275726c60008201527f28236772616469656e7400000000000000000000000000000000000000000000602082015250565b60006127ef602a836124b0565b91506127fa82612793565b602a82019050919050565b7f2922200000000000000000000000000000000000000000000000000000000000600082015250565b600061283b6003836124b0565b915061284682612805565b600382019050919050565b7f783d220000000000000000000000000000000000000000000000000000000000600082015250565b60006128876003836124b0565b915061289282612851565b600382019050919050565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b60006128d36005836124b0565b91506128de8261289d565b600582019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061291f6001836124b0565b915061292a826128e9565b600182019050919050565b7f2f3e000000000000000000000000000000000000000000000000000000000000600082015250565b600061296b6002836124b0565b915061297682612935565b600282019050919050565b600061298c826127e2565b91506129988286612507565b91506129a38261282e565b91506129ae8261287a565b91506129ba8285612507565b91506129c5826128c6565b91506129d18284612507565b91506129dc82612912565b91506129e78261295e565b9150819050949350505050565b6000612a0082856126a1565b9150612a0c82846126a1565b91508190509392505050565b6000819050919050565b612a33612a2e8261183d565b612a18565b82525050565b6000612a458285612a22565b602082019150612a5582846126a1565b91508190509392505050565b6000612a6c8261183d565b9150612a778361183d565b925082612a8757612a86612339565b5b828206905092915050565b6000612a9d8261183d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612acf57612ace6121f9565b5b600182019050919050565b6000612ae58261183d565b9150612af08361183d565b925082612b0057612aff612339565b5b828204905092915050565b6000612b168261183d565b9150612b218361183d565b9250828203905081811115612b3957612b386121f9565b5b9291505056fe4d37322e363736392032322e323437324c34322e3520342e38323435374334302e39353320332e39333134312033392e30343720332e39333134312033372e3520342e38323435374c372e33323330392032322e3234373243352e37373630382032332e3134303420342e38323330392032342e37393120342e38323330392032362e353737345636312e3432323643342e38323330392036332e32303920352e37373630382036342e3835393620372e33323330392036352e373532384c33372e352038332e313735344333392e3034372038342e303638362034302e3935332038342e303638362034322e352038332e313735344c37322e363736392036352e373532384337342e323233392036342e383539362037352e313736392036332e3230392037352e313736392036312e343232365632362e353737344337352e313736392032342e3739312037342e323233392032332e313430342037322e363736392032322e323437325a4d32322e3234373220372e33323330394c342e38323435372033372e3543332e39333134312033392e30343720332e39333134312034302e39353320342e38323435372034322e354c32322e323437322037322e363736394332332e313430342037342e323233392032342e3739312037352e313736392032362e353737342037352e313736394836312e343232364336332e3230392037352e313736392036342e383539362037342e323233392036352e373532382037322e363736394c38332e313735342034322e354338342e303638362034302e3935332038342e303638362033392e3034372038332e313735342033372e354c36352e3735323820372e33323330394336342e3835393620352e37373630382036332e32303920342e38323330392036312e3432323620342e38323330394832362e353737344332342e37393120342e38323330392032332e3134303420352e37373630382032322e3234373220372e33323330395aa2646970667358221220ca149cb2112d00791785fa3345d9c8c45cf1930892fcd26316f89d78dc9eaa1f64736f6c63430008110033
Deployed Bytecode
0x73d5b21584d06a6052230e1c2d049ed39796706ad330146080604052600436106100925760003560e01c806384645d8b1161006557806384645d8b146101575780638a96513e14610187578063d9e3455e146101b9578063ee2ede62146101e957610092565b806315e97f84146100975780635c5ae0bb146100c7578063613ae4df146100f7578063823c317514610127575b600080fd5b6100b160048036038101906100ac919061158c565b610219565b6040516100be9190611649565b60405180910390f35b6100e160048036038101906100dc9190611e42565b6102a6565b6040516100ee9190611ff4565b60405180910390f35b610111600480360381019061010c9190611e42565b6105a9565b60405161011e9190611ff4565b60405180910390f35b610141600480360381019061013c9190612016565b61093a565b60405161014e9190611ff4565b60405180910390f35b610171600480360381019061016c9190611e42565b610b09565b60405161017e9190611ff4565b60405180910390f35b6101a1600480360381019061019c9190611e42565b610e21565b6040516101b0939291906120e7565b60405180910390f35b6101d360048036038101906101ce9190611e42565b610faa565b6040516101e09190611ff4565b60405180910390f35b61020360048036038101906101fe9190612125565b6111d8565b60405161021091906121a8565b60405180910390f35b60606000600181111561022f5761022e6121ca565b5b60ff168260ff160361025e57604051806101a0016040528061016d8152602001612cad61016d913990506102a1565b600180811115610271576102706121ca565b5b60ff168260ff16036102a057604051806101a0016040528061016d8152602001612b4061016d913990506102a1565b5b919050565b6102ae6114c5565b6102b66114c5565b600261031484604001516040518060400160405280600481526020017f726f777300000000000000000000000000000000000000000000000000000000815250600187608001516060015161030b9190612228565b61ffff16611299565b61031e919061225e565b81610120019060ff16908160ff168152505080610120015181610140019060ff16908160ff1681525050610352838261093a565b9050600180811115610367576103666121ca565b5b60ff168360a001516060015160ff16036104455780610120015181610100019060ff16908160ff168152505060005b81610120015160ff168160ff16101561043f5760005b6001826103b99190612292565b60ff168160ff1610156104335760006002826103d591906122c7565b8360018661012001516103e89190612304565b6103f29190612304565b6103fc9190612292565b905061041f848260ff168560ff166001876104179190612292565b60ff166111d8565b8460000181905250816001019150506103ac565b50806001019050610396565b506105a0565b60006001811115610459576104586121ca565b5b60ff168360a001516060015160ff160361059f5760006001600283610120015161048391906122c7565b61048d9190612304565b90508082610100019060ff16908160ff168152505060005b8160ff168160ff16101561059c5760006002836104c29190612368565b60ff168260ff16116104ee5760016002836104dd9190612368565b6104e79190612292565b9050610521565b60016002600184866105009190612304565b61050a9190612304565b6105149190612368565b61051e9190612292565b90505b60005b8160ff168160ff16101561058f57600060028261054191906122c7565b60028561054e9190612399565b6105589190612292565b905061057b868260ff168660ff166001886105739190612292565b60ff166111d8565b866000018190525081600101915050610524565b50816001019150506104a5565b50505b5b80915050919050565b6105b16114c5565b6105b96114c5565b6003600261062585604001516040518060400160405280600481526020017f726f7773000000000000000000000000000000000000000000000000000000008152506001600289608001516060015161061291906123ca565b61061c9190612228565b61ffff16611299565b61062f91906123fb565b610639919061225e565b81610120019060ff16908160ff168152505080610120015181610140019060ff16908160ff168152505061066d838261093a565b9050600180811115610682576106816121ca565b5b60ff168360a001516060015160ff16036107785780610120015181610100019060ff16908160ff168152505060005b81610120015160ff168160ff1610156107725760006106e160028461012001516106db9190612368565b836112db565b8361012001516106f19190612304565b905060005b8160ff168160ff16101561076557600060028261071391906122c7565b838661012001516107249190612304565b61072e9190612292565b9050610751858260ff168660ff166001886107499190612292565b60ff166111d8565b8560000181905250816001019150506106f6565b50816001019150506106b1565b50610931565b6000600181111561078c5761078b6121ca565b5b60ff168360a001516060015160ff1603610930576000600160028361012001516107b691906122c7565b6107c09190612304565b90508082610100019060ff16908160ff1681525050600060028361012001516107e99190612368565b905060005b8260ff168160ff16101561092c57600060028561012001516108109190612368565b60ff168260ff1611610830576001826108299190612292565b90506108a2565b6001838561083e9190612304565b6108489190612304565b60ff168260ff161015610892576000600283856108659190612292565b61086f9190612399565b60ff161461087d578261088b565b60018361088a9190612292565b5b90506108a1565b818461089e9190612304565b90505b5b60005b8160ff168160ff16101561091f5760006002826108c291906122c7565b85848961012001516108d49190612304565b6108de9190612304565b6108e89190612292565b905061090b878260ff168660ff166001886109039190612292565b60ff166111d8565b8760000181905250816001019150506108a5565b50816001019150506107ee565b5050505b5b80915050919050565b6109426114c5565b60076004846080015160400151600361095b919061243d565b61096591906123ca565b61096f919061247a565b826080019061ffff16908161ffff16815250506001600284608001516040015161099991906123ca565b6109a39190612228565b8260a0019061ffff16908161ffff16815250506000826080015160018461012001516109cf9190612304565b60ff166109dc919061243d565b60078560800151604001516109f1919061247a565b6109fb919061247a565b905060006002856080015160400151610a149190612228565b84610140015160ff16610a27919061243d565b905060006001811115610a3d57610a3c6121ca565b5b60ff168560a001516060015160ff1603610a9857610a6384608001518560a00151611310565b856080018660a0018261ffff1661ffff168152508261ffff1661ffff168152505050610a8f8183611310565b80935081925050505b600281866080015160200151610aae9190612228565b610ab891906123ca565b846040019061ffff16908161ffff1681525050600282866080015160200151610ae19190612228565b610aeb91906123ca565b846060019061ffff16908161ffff1681525050839250505092915050565b610b116114c5565b610b196114c5565b6001610b6b84604001516040518060400160405280600481526020017f726f77730000000000000000000000000000000000000000000000000000000081525086608001516060015161ffff16611299565b610b75919061225e565b81610120019060ff16908160ff1681525050600081610120015160ff1667ffffffffffffffff811115610bab57610baa611670565b5b604051908082528060200260200182016040528015610bd95781602001602082028036833780820191505090505b50905060005b82610120015160ff168160ff161015610cc2576001610c458660400151610c088460ff16611320565b604051602001610c189190612538565b6040516020818303038152906040526001896080015160600151610c3c9190612228565b61ffff16611299565b610c4f919061225e565b828260ff1681518110610c6557610c6461255a565b5b602002602001019060ff16908160ff1681525050610ca5828260ff1681518110610c9257610c9161255a565b5b60200260200101518461014001516114a6565b83610140019060ff16908160ff1681525050806001019050610bdf565b50610ccd848361093a565b915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b83610120015160ff168160ff161015610dfd576000838260ff1681518110610d2257610d2161255a565b5b6020026020010151856101400151610d3a9190612304565b9050600281610d499190612399565b60000b8360000b03610d625780610d5f90612589565b90505b600281610d6f9190612399565b925060005b848360ff1681518110610d8a57610d8961255a565b5b602002602001015160ff168160ff161015610df0576000600282610dae91906122c7565b83610db99190612292565b9050610ddc878260ff168660ff16600188610dd49190612292565b60ff166111d8565b876000018190525081600101915050610d74565b5081600101915050610cf7565b5082610120015183610100019060ff16908160ff1681525050829350505050919050565b6060600080610e2e6114c5565b60006003811115610e4257610e416121ca565b5b60ff168560c0015160e0015160ff1603610e6657610e5f856102a6565b9050610f0c565b60016003811115610e7a57610e796121ca565b5b60ff168560c0015160e0015160ff1603610e9e57610e9785610faa565b9050610f0b565b60026003811115610eb257610eb16121ca565b5b60ff168560c0015160e0015160ff1603610ed657610ecf856105a9565b9050610f0a565b600380811115610ee957610ee86121ca565b5b60ff168560c0015160e0015160ff1603610f0957610f0685610b09565b90505b5b5b5b6000610f238660c0015160c0015161ffff16611320565b610f446002886080015160200151610f3b91906123ca565b61ffff16611320565b610f656002896080015160200151610f5c91906123ca565b61ffff16611320565b8460000151604051602001610f7d949392919061271e565b60405160208183030381529060405290508082610100015183610120015194509450945050509193909250565b610fb26114c5565b610fba6114c5565b6003600261102685604001516040518060400160405280600481526020017f726f7773000000000000000000000000000000000000000000000000000000008152506001600289608001516060015161101391906123ca565b61101d9190612228565b61ffff16611299565b61103091906123fb565b61103a919061225e565b81610120019060ff16908160ff1681525050600160028261012001516110609190612368565b61106a9190612292565b81610140019060ff16908160ff1681525050611086838261093a565b905060005b81610120015160ff168160ff1610156111b657600060028361012001516110b29190612368565b60ff168260ff16106110d457818361012001516110cf9190612304565b6110e2565b6001826110e19190612292565b5b9050600060028461012001516110f89190612368565b60ff168360ff16106111265760028461012001516111169190612368565b836111219190612304565b611144565b8260028561012001516111399190612368565b6111439190612304565b5b905060005b8260ff168160ff1610156111a857600060028261116691906122c7565b836111719190612292565b9050611194868260ff168760ff1660018961118c9190612292565b60ff166111d8565b866000018190525081600101915050611149565b50826001019250505061108b565b5080610120015181610100019060ff16908160ff168152505080915050919050565b606060008560a00151856111ec919061243d565b86604001516111fb919061247a565b9050600086608001518561120f919061243d565b876060015161121e919061247a565b905086600001516112328561ffff16611320565b61123f8461ffff16611320565b61124c8461ffff16611320565b60405160200161125e93929190612981565b60405160208183030381529060405260405160200161127e9291906129f4565b60405160208183030381529060405292505050949350505050565b60008184846040516020016112af929190612a39565b6040516020818303038152906040528051906020012060001c6112d29190612a61565b90509392505050565b60008160ff168360ff16116112fb5782826112f69190612304565b611308565b81836113079190612304565b5b905092915050565b6000808284915091509250929050565b606060008203611367576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506114a1565b600082905060005b60008214611397578061138190612a92565b9050600a826113909190612ada565b915061136f565b60008167ffffffffffffffff8111156113b3576113b2611670565b5b6040519080825280601f01601f1916602001820160405280156113e55781602001600182028036833780820191505090505b50905060008290505b60008614611499576001816114039190612b0b565b90506000600a80886114159190612ada565b61141f91906123fb565b8761142a9190612b0b565b60306114369190612292565b905060008160f81b9050808484815181106114545761145361255a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886114909190612ada565b975050506113ee565b819450505050505b919050565b60008160ff168360ff16116114bb57816114bd565b825b905092915050565b6040518061016001604052806060815260200160608152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b61156981611553565b811461157457600080fd5b50565b60008135905061158681611560565b92915050565b6000602082840312156115a2576115a1611549565b5b60006115b084828501611577565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115f35780820151818401526020810190506115d8565b60008484015250505050565b6000601f19601f8301169050919050565b600061161b826115b9565b61162581856115c4565b93506116358185602086016115d5565b61163e816115ff565b840191505092915050565b600060208201905081810360008301526116638184611610565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116a8826115ff565b810181811067ffffffffffffffff821117156116c7576116c6611670565b5b80604052505050565b60006116da61153f565b90506116e6828261169f565b919050565b600080fd5b600063ffffffff82169050919050565b611709816116f0565b811461171457600080fd5b50565b60008135905061172681611700565b92915050565b600062ffffff82169050919050565b6117448161172c565b811461174f57600080fd5b50565b6000813590506117618161173b565b92915050565b600061ffff82169050919050565b61177e81611767565b811461178957600080fd5b50565b60008135905061179b81611775565b92915050565b6000606082840312156117b7576117b661166b565b5b6117c160606116d0565b905060006117d184828501611717565b60008301525060206117e584828501611752565b60208301525060406117f98482850161178c565b60408301525092915050565b60008115159050919050565b61181a81611805565b811461182557600080fd5b50565b60008135905061183781611811565b92915050565b6000819050919050565b6118508161183d565b811461185b57600080fd5b50565b60008135905061186d81611847565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561189857611897611670565b5b6118a1826115ff565b9050602081019050919050565b82818337600083830152505050565b60006118d06118cb8461187d565b6116d0565b9050828152602081018484840111156118ec576118eb611878565b5b6118f78482856118ae565b509392505050565b600082601f83011261191457611913611873565b5b81356119248482602086016118bd565b91505092915050565b600067ffffffffffffffff82111561194857611947611670565b5b611951826115ff565b9050602081019050919050565b600061197161196c8461192d565b6116d0565b90508281526020810184848401111561198d5761198c611878565b5b6119988482856118ae565b509392505050565b600082601f8301126119b5576119b4611873565b5b81356119c584826020860161195e565b91505092915050565b6000608082840312156119e4576119e361166b565b5b6119ee60806116d0565b9050600082013567ffffffffffffffff811115611a0e57611a0d6116eb565b5b611a1a848285016119a0565b6000830152506020611a2e8482850161178c565b6020830152506040611a428482850161178c565b6040830152506060611a568482850161178c565b60608301525092915050565b600060808284031215611a7857611a7761166b565b5b611a8260806116d0565b9050600082013567ffffffffffffffff811115611aa257611aa16116eb565b5b611aae848285016119a0565b600083015250602082013567ffffffffffffffff811115611ad257611ad16116eb565b5b611ade848285016119a0565b6020830152506040611af284828501611577565b6040830152506060611b0684828501611577565b60608301525092915050565b60006101608284031215611b2957611b2861166b565b5b611b346101606116d0565b9050600082013567ffffffffffffffff811115611b5457611b536116eb565b5b611b60848285016118ff565b600083015250602082013567ffffffffffffffff811115611b8457611b836116eb565b5b611b90848285016118ff565b6020830152506040611ba48482850161178c565b6040830152506060611bb88482850161178c565b6060830152506080611bcc8482850161178c565b60808301525060a0611be08482850161178c565b60a08301525060c0611bf48482850161178c565b60c08301525060e0611c0884828501611577565b60e083015250610100611c1d84828501611577565b61010083015250610120611c3384828501611577565b61012083015250610140611c4984828501611577565b6101408301525092915050565b600060808284031215611c6c57611c6b61166b565b5b611c7660806116d0565b9050600082013567ffffffffffffffff811115611c9657611c956116eb565b5b611ca2848285016118ff565b6000830152506020611cb68482850161178c565b6020830152506040611cca84828501611577565b6040830152506060611cde84828501611577565b60608301525092915050565b60006101408284031215611d0157611d0061166b565b5b611d0c6101006116d0565b90506000611d1c848285016117a1565b6000830152506060611d3084828501611828565b6020830152506080611d448482850161185e565b60408301525060a082013567ffffffffffffffff811115611d6857611d676116eb565b5b611d74848285016118ff565b60608301525060c082013567ffffffffffffffff811115611d9857611d976116eb565b5b611da4848285016119ce565b60808301525060e082013567ffffffffffffffff811115611dc857611dc76116eb565b5b611dd484828501611a62565b60a08301525061010082013567ffffffffffffffff811115611df957611df86116eb565b5b611e0584828501611b12565b60c08301525061012082013567ffffffffffffffff811115611e2a57611e296116eb565b5b611e3684828501611c56565b60e08301525092915050565b600060208284031215611e5857611e57611549565b5b600082013567ffffffffffffffff811115611e7657611e7561154e565b5b611e8284828501611cea565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000611eb282611e8b565b611ebc8185611e96565b9350611ecc8185602086016115d5565b611ed5816115ff565b840191505092915050565b611ee981611767565b82525050565b611ef881611553565b82525050565b6000610160830160008301518482036000860152611f1c8282611ea7565b91505060208301518482036020860152611f368282611ea7565b9150506040830151611f4b6040860182611ee0565b506060830151611f5e6060860182611ee0565b506080830151611f716080860182611ee0565b5060a0830151611f8460a0860182611ee0565b5060c0830151611f9760c0860182611ee0565b5060e0830151611faa60e0860182611eef565b50610100830151611fbf610100860182611eef565b50610120830151611fd4610120860182611eef565b50610140830151611fe9610140860182611eef565b508091505092915050565b6000602082019050818103600083015261200e8184611efe565b905092915050565b6000806040838503121561202d5761202c611549565b5b600083013567ffffffffffffffff81111561204b5761204a61154e565b5b61205785828601611cea565b925050602083013567ffffffffffffffff8111156120785761207761154e565b5b61208485828601611b12565b9150509250929050565b600082825260208201905092915050565b60006120aa82611e8b565b6120b4818561208e565b93506120c48185602086016115d5565b6120cd816115ff565b840191505092915050565b6120e181611553565b82525050565b60006060820190508181036000830152612101818661209f565b905061211060208301856120d8565b61211d60408301846120d8565b949350505050565b6000806000806080858703121561213f5761213e611549565b5b600085013567ffffffffffffffff81111561215d5761215c61154e565b5b61216987828801611b12565b945050602061217a8782880161178c565b935050604061218b8782880161178c565b925050606061219c8782880161178c565b91505092959194509250565b600060208201905081810360008301526121c2818461209f565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061223382611767565b915061223e83611767565b9250828203905061ffff811115612258576122576121f9565b5b92915050565b60006122698261183d565b91506122748361183d565b925082820190508082111561228c5761228b6121f9565b5b92915050565b600061229d82611553565b91506122a883611553565b9250828201905060ff8111156122c1576122c06121f9565b5b92915050565b60006122d282611553565b91506122dd83611553565b92508282026122eb81611553565b91508082146122fd576122fc6121f9565b5b5092915050565b600061230f82611553565b915061231a83611553565b9250828203905060ff811115612333576123326121f9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237382611553565b915061237e83611553565b92508261238e5761238d612339565b5b828204905092915050565b60006123a482611553565b91506123af83611553565b9250826123bf576123be612339565b5b828206905092915050565b60006123d582611767565b91506123e083611767565b9250826123f0576123ef612339565b5b828204905092915050565b60006124068261183d565b91506124118361183d565b925082820261241f8161183d565b91508282048414831517612436576124356121f9565b5b5092915050565b600061244882611767565b915061245383611767565b925082820261246181611767565b9150808214612473576124726121f9565b5b5092915050565b600061248582611767565b915061249083611767565b9250828201905061ffff8111156124aa576124a96121f9565b5b92915050565b600081905092915050565b7f68657861676f6e73496e526f7700000000000000000000000000000000000000600082015250565b60006124f1600d836124b0565b91506124fc826124bb565b600d82019050919050565b6000612512826115b9565b61251c81856124b0565b935061252c8185602086016115d5565b80840191505092915050565b6000612543826124e4565b915061254f8284612507565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061259482611553565b915060ff82036125a7576125a66121f9565b5b600182019050919050565b7f3c67207472616e73666f726d3d227363616c6528312920726f74617465280000600082015250565b60006125e8601e836124b0565b91506125f3826125b2565b601e82019050919050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006126346001836124b0565b915061263f826125fe565b600182019050919050565b7f29223e0000000000000000000000000000000000000000000000000000000000600082015250565b60006126806003836124b0565b915061268b8261264a565b600382019050919050565b600081905092915050565b60006126ac82611e8b565b6126b68185612696565b93506126c68185602086016115d5565b80840191505092915050565b7f3c2f673e00000000000000000000000000000000000000000000000000000000600082015250565b60006127086004836124b0565b9150612713826126d2565b600482019050919050565b6000612729826125db565b91506127358287612507565b915061274082612627565b915061274c8286612507565b915061275782612627565b91506127638285612507565b915061276e82612673565b915061277a82846126a1565b9150612785826126fb565b915081905095945050505050565b7f3c75736520687265663d222368657861676f6e22207374726f6b653d2275726c60008201527f28236772616469656e7400000000000000000000000000000000000000000000602082015250565b60006127ef602a836124b0565b91506127fa82612793565b602a82019050919050565b7f2922200000000000000000000000000000000000000000000000000000000000600082015250565b600061283b6003836124b0565b915061284682612805565b600382019050919050565b7f783d220000000000000000000000000000000000000000000000000000000000600082015250565b60006128876003836124b0565b915061289282612851565b600382019050919050565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b60006128d36005836124b0565b91506128de8261289d565b600582019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061291f6001836124b0565b915061292a826128e9565b600182019050919050565b7f2f3e000000000000000000000000000000000000000000000000000000000000600082015250565b600061296b6002836124b0565b915061297682612935565b600282019050919050565b600061298c826127e2565b91506129988286612507565b91506129a38261282e565b91506129ae8261287a565b91506129ba8285612507565b91506129c5826128c6565b91506129d18284612507565b91506129dc82612912565b91506129e78261295e565b9150819050949350505050565b6000612a0082856126a1565b9150612a0c82846126a1565b91508190509392505050565b6000819050919050565b612a33612a2e8261183d565b612a18565b82525050565b6000612a458285612a22565b602082019150612a5582846126a1565b91508190509392505050565b6000612a6c8261183d565b9150612a778361183d565b925082612a8757612a86612339565b5b828206905092915050565b6000612a9d8261183d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612acf57612ace6121f9565b5b600182019050919050565b6000612ae58261183d565b9150612af08361183d565b925082612b0057612aff612339565b5b828204905092915050565b6000612b168261183d565b9150612b218361183d565b9250828203905081811115612b3957612b386121f9565b5b9291505056fe4d37322e363736392032322e323437324c34322e3520342e38323435374334302e39353320332e39333134312033392e30343720332e39333134312033372e3520342e38323435374c372e33323330392032322e3234373243352e37373630382032332e3134303420342e38323330392032342e37393120342e38323330392032362e353737345636312e3432323643342e38323330392036332e32303920352e37373630382036342e3835393620372e33323330392036352e373532384c33372e352038332e313735344333392e3034372038342e303638362034302e3935332038342e303638362034322e352038332e313735344c37322e363736392036352e373532384337342e323233392036342e383539362037352e313736392036332e3230392037352e313736392036312e343232365632362e353737344337352e313736392032342e3739312037342e323233392032332e313430342037322e363736392032322e323437325a4d32322e3234373220372e33323330394c342e38323435372033372e3543332e39333134312033392e30343720332e39333134312034302e39353320342e38323435372034322e354c32322e323437322037322e363736394332332e313430342037342e323233392032342e3739312037352e313736392032362e353737342037352e313736394836312e343232364336332e3230392037352e313736392036342e383539362037342e323233392036352e373532382037322e363736394c38332e313735342034322e354338342e303638362034302e3935332038342e303638362033392e3034372038332e313735342033372e354c36352e3735323820372e33323330394336342e3835393620352e37373630382036332e32303920342e38323330392036312e3432323620342e38323330394832362e353737344332342e37393120342e38323330392032332e3134303420352e37373630382032322e3234373220372e33323330395aa2646970667358221220ca149cb2112d00791785fa3345d9c8c45cf1930892fcd26316f89d78dc9eaa1f64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.