Contract 0x9Fd512B2D53Ef5F6A01D3029a856Fb549BAe0645 2

Contract Overview

Balance:
0 Ether

Txn Hash
Method
Block
From
To
Value
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x457e5de8d5ff60fac3573eafc89124cad2956bb7f5527080195d9fd7f91f02a8114714342022-09-30 16:38:157 hrs ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xdcfc4885b4653d9960eee5d7f5aa0323b4903abd1ef3ca0fbade937264a9faca114714272022-09-30 16:36:287 hrs 2 mins ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x9ba3af71d24b70e1127a611df57e06a21edf4a415c2c950da5ad843d7e797299114714232022-09-30 16:35:257 hrs 3 mins ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x1c53764482972e68f82652277279e8c4c4cefdbb5f6d9a02865f4bc6642a1f21114714202022-09-30 16:34:407 hrs 4 mins ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xdf73f47111671388e7bcbf5815cee4321ad1da48986716ac2e14fa90a2b673ac114714182022-09-30 16:34:107 hrs 4 mins ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xb2e1b9e7aef95977ef6d16841be1d13bb62da188662710925c24a896fd628644114713922022-09-30 16:27:407 hrs 11 mins ago 0xd32cba756c09ba0a1a02cea335bb334350fbf1cb 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x88c014dced821c7ab01a477dfee4d353f4e523d9f835a0d6b708084e2b33b11e114713752022-09-30 16:23:257 hrs 15 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x3ebdcc86de48186d655609e5d6c8a3356fcca8c307c822ffb3f8d716ba68f558114713592022-09-30 16:19:237 hrs 19 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xfb8d3b6538ce29e3a68f21cf5846928356aaeaa177a806ffea7e0251cecf16f6114713562022-09-30 16:18:317 hrs 20 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xdc32b7e44451d99a397deafe0b078cc64c44d271d801414f6b5171580870cc0b114713532022-09-30 16:17:467 hrs 20 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xa036ec7838c5a2e89dd575a0997dbe87c2412e8483e51af38de81633133294c4114713502022-09-30 16:16:587 hrs 21 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x267603bc3e8d33129e3f10d2c09d37e6a15bd8fe2c8cbe38d07872af46054ac7114713422022-09-30 16:14:577 hrs 23 mins ago 0x0718b29db52862aa7f19e345ad9998ae6e26767f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xe53700cea5251f176c69ade5786a2ad53aec0502b0a35661fb376c999f879448114712842022-09-30 16:00:217 hrs 38 mins ago 0x1790990b3f5ee29ff3b7ecc09a6ea283448c934f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xd57f34d39ffb1d4843a8e1e2332679cc8879cac1a7ab04a8b15b89dff073bdaa114712792022-09-30 15:59:067 hrs 39 mins ago 0x1790990b3f5ee29ff3b7ecc09a6ea283448c934f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x384c1f15bd649835e4e2ee5ca0227d80c4f88b09bd28ecdfedf9d00307857a23114712672022-09-30 15:56:037 hrs 42 mins ago 0x1790990b3f5ee29ff3b7ecc09a6ea283448c934f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xa21dc60f4823bd354d4c19d6abc615081aaf9e21727ab0eb15f0d466fade35cc114711402022-09-30 15:23:538 hrs 14 mins ago 0x933167843367379658e416cdd275ef5fba9221a8 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x9a414c0d879c6ffebb3716cadc1d5c410796d15be469a72ee517f34f40c22462114711372022-09-30 15:23:088 hrs 15 mins ago 0x933167843367379658e416cdd275ef5fba9221a8 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xf66b1e9800309a2e6e08359ad6cd085b2ec8ad7f9aa301306ff3e89dcc005307114711362022-09-30 15:22:538 hrs 15 mins ago 0x97a7efe5bb811984d0f5b3772a3f32b50a6fcc1f 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xb8d083edb7cceed23f0f75e338613ccd7be62983e8d2d23d47ba1abc09f6b9bb114711352022-09-30 15:22:348 hrs 16 mins ago 0x9f1cfffa51371f0ec2722a5f436968f431189434 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xcfc3f369af85d3f19f8ee2a2526e64480555ee8e195a82cee47529473467e090114711352022-09-30 15:22:348 hrs 16 mins ago 0x933167843367379658e416cdd275ef5fba9221a8 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x8d1d293e410c02d5e47f61a591c771b023a3f7b22108e6491ee56fba3a053820114711332022-09-30 15:22:048 hrs 16 mins ago 0x933167843367379658e416cdd275ef5fba9221a8 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x7042786cbfe4ef2521fa75fc98586cd24ab98768b8822a87d817bccd35dbf71f114711332022-09-30 15:22:048 hrs 16 mins ago 0x9f1cfffa51371f0ec2722a5f436968f431189434 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x37c6eb3bdd9c2be5626b29992403bfec2a3c237eb2bab084e3e47a8dcb7e39bf114711312022-09-30 15:21:348 hrs 17 mins ago 0xbf39f39fae2db1de0aca0283f1e75f40817c12ec 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0xc34381245f1a77b4cb069bd345d2d901ada8a06f507eccdcbfef033fb4455016114711302022-09-30 15:21:198 hrs 17 mins ago 0x9f1cfffa51371f0ec2722a5f436968f431189434 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
0x98a6faeb9f3a0cfa415871fbb37b6c9ff0a5ff6f2d4ec8364e691a958a1acb87114711282022-09-30 15:20:498 hrs 17 mins ago 0xbf39f39fae2db1de0aca0283f1e75f40817c12ec 0x9fd512b2d53ef5f6a01d3029a856fb549bae06450 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CxipERC721

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion
File 1 of 17 : CxipERC721.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

import "../abstract/ERC721H.sol";

import "../enum/TokenUriType.sol";

import "../interface/ERC721Holograph.sol";
import "../interface/IInterfaces.sol";
import "../interface/IHolograph.sol";
import "../interface/IHolographer.sol";

/**
 * @title CXIP ERC-721 Collection that is bridgeable via Holograph
 * @author CXIP-Labs
 * @notice A smart contract for minting and managing Holograph Bridgeable ERC721 NFTs.
 * @dev The entire logic and functionality of the smart contract is self-contained.
 */
contract CxipERC721 is ERC721H {
  /**
   * @dev Internal reference used for minting incremental token ids.
   */
  uint224 private _currentTokenId;

  /**
   * @dev Enum of type of token URI to use globally for the entire contract.
   */
  TokenUriType private _uriType;

  /**
   * @dev Enum mapping of type of token URI to use for specific tokenId.
   */
  mapping(uint256 => TokenUriType) private _tokenUriType;

  /**
   * @dev Mapping of IPFS URIs for tokenIds.
   */
  mapping(uint256 => mapping(TokenUriType => string)) private _tokenURIs;

  /**
   * @notice Constructor is empty and not utilised.
   * @dev To make exact CREATE2 deployment possible, constructor is left empty. We utilize the "init" function instead.
   */
  constructor() {}

  /**
   * @notice Initializes the collection.
   * @dev Special function to allow a one time initialisation on deployment. Also configures and deploys royalties.
   */
  function init(bytes memory data) external override returns (bytes4) {
    // we set this as default type since that's what Mint is currently using
    _uriType = TokenUriType.IPFS;
    address owner = abi.decode(data, (address));
    _owner = owner;
    // run underlying initializer logic
    return _init(data);
  }

  /**
   * @notice Get's the URI of the token.
   * @return string The URI.
   */
  function tokenURI(uint256 _tokenId) external view onlyHolographer returns (string memory) {
    TokenUriType uriType = _tokenUriType[_tokenId];
    if (uriType == TokenUriType.UNDEFINED) {
      uriType = _uriType;
    }
    return
      string(
        abi.encodePacked(
          IInterfaces(IHolograph(IHolographer(holographer()).getHolograph()).getInterfaces()).getUriPrepend(uriType),
          _tokenURIs[_tokenId][uriType]
        )
      );
  }

  function cxipMint(
    uint224 tokenId,
    TokenUriType uriType,
    string calldata tokenUri
  ) external onlyHolographer onlyOwner {
    ERC721Holograph H721 = ERC721Holograph(holographer());
    uint256 chainPrepend = H721.sourceGetChainPrepend();
    if (tokenId == 0) {
      _currentTokenId += 1;
      while (
        H721.exists(chainPrepend + uint256(_currentTokenId)) || H721.burned(chainPrepend + uint256(_currentTokenId))
      ) {
        _currentTokenId += 1;
      }
      tokenId = _currentTokenId;
    }
    H721.sourceMint(msgSender(), tokenId);
    uint256 id = chainPrepend + uint256(tokenId);
    if (uriType == TokenUriType.UNDEFINED) {
      uriType = _uriType;
    }
    _tokenUriType[id] = uriType;
    _tokenURIs[id][uriType] = tokenUri;
  }

  function bridgeIn(
    uint32, /* _chainId*/
    address, /* _from*/
    address, /* _to*/
    uint256 _tokenId,
    bytes calldata _data
  ) external onlyHolographer returns (bool) {
    (TokenUriType uriType, string memory tokenUri) = abi.decode(_data, (TokenUriType, string));
    _tokenUriType[_tokenId] = uriType;
    _tokenURIs[_tokenId][uriType] = tokenUri;
    return true;
  }

  function bridgeOut(
    uint32, /* _chainId*/
    address, /* _from*/
    address, /* _to*/
    uint256 _tokenId
  ) external view onlyHolographer returns (bytes memory _data) {
    TokenUriType uriType = _tokenUriType[_tokenId];
    if (uriType == TokenUriType.UNDEFINED) {
      uriType = _uriType;
    }
    _data = abi.encode(uriType, _tokenURIs[_tokenId][uriType]);
  }

  function afterBurn(
    address, /* _owner*/
    uint256 _tokenId
  ) external onlyHolographer returns (bool) {
    TokenUriType uriType = _tokenUriType[_tokenId];
    if (uriType == TokenUriType.UNDEFINED) {
      uriType = _uriType;
    }
    delete _tokenURIs[_tokenId][uriType];
    return true;
  }
}

File 2 of 17 : ERC721H.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

import "../abstract/Initializable.sol";

abstract contract ERC721H is Initializable {
  /**
   * @dev Address of initial creator/owner of the collection.
   */
  address internal _owner;

  modifier onlyHolographer() {
    require(msg.sender == holographer(), "ERC721: holographer only");
    _;
  }

  modifier onlyOwner() {
    if (msg.sender == holographer()) {
      require(msgSender() == _owner, "ERC721: owner only function");
    } else {
      require(msg.sender == _owner, "ERC721: owner only function");
    }
    _;
  }

  /**
   * @notice Constructor is empty and not utilised.
   * @dev To make exact CREATE2 deployment possible, constructor is left empty. We utilize the "init" function instead.
   */
  constructor() {}

  /**
   * @notice Initializes the collection.
   * @dev Special function to allow a one time initialisation on deployment. Also configures and deploys royalties.
   */
  function init(bytes memory data) external virtual override returns (bytes4) {
    return _init(data);
  }

  function _init(
    bytes memory /* data*/
  ) internal returns (bytes4) {
    require(!_isInitialized(), "ERC721: already initialized");
    address _holographer = msg.sender;
    assembly {
      sstore(0xe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd9250, _holographer)
    }
    _setInitialized();
    return IInitializable.init.selector;
  }

  /**
   * @dev The Holographer passes original msg.sender via calldata. This function extracts it.
   */
  function msgSender() internal pure returns (address sender) {
    assembly {
      sender := calldataload(sub(calldatasize(), 0x20))
    }
  }

  /**
   * @dev Address of Holograph ERC721 standards enforcer smart contract.
   */
  function holographer() internal view returns (address _holographer) {
    assembly {
      _holographer := sload(0xe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd9250)
    }
  }

  function supportsInterface(bytes4) external pure returns (bool) {
    return false;
  }

  function owner() external view returns (address) {
    return _owner;
  }

  function isOwner() external view returns (bool) {
    if (msg.sender == holographer()) {
      return msgSender() == _owner;
    } else {
      return msg.sender == _owner;
    }
  }

  function isOwner(address wallet) external view returns (bool) {
    return wallet == _owner;
  }

  /**
   * @dev Defined here to suppress compiler warnings
   */
  receive() external payable {}

  /**
   * @dev Return true for any un-implemented event hooks
   */
  fallback() external payable {
    assembly {
      switch eq(sload(0xe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd9250), caller())
      case 1 {
        mstore(0x80, 0x0000000000000000000000000000000000000000000000000000000000000001)
        return(0x80, 0x20)
      }
      default {
        revert(0x00, 0x00)
      }
    }
  }
}

File 3 of 17 : TokenUriType.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

enum TokenUriType {
  UNDEFINED, //   0
  IPFS, //        1
  HTTPS, //       2
  ARWEAVE //      3
}

File 4 of 17 : ERC721Holograph.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

import "./CollectionURI.sol";
import "./ERC165.sol";
import "./ERC721.sol";
import "./ERC721Enumerable.sol";
import "./ERC721Metadata.sol";
import "./ERC721TokenReceiver.sol";

interface ERC721Holograph is ERC165, ERC721, ERC721Enumerable, ERC721Metadata, ERC721TokenReceiver, CollectionURI {
  function approve(address to, uint256 tokenId) external payable;

  function burn(uint256 tokenId) external;

  function holographBridgeIn(
    uint32 chainType,
    address from,
    address to,
    uint256 tokenId,
    bytes calldata data
  ) external returns (bytes4);

  function holographBridgeOut(
    uint32 chainType,
    address from,
    address to,
    uint256 tokenId
  ) external returns (bytes4, bytes memory data);

  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) external payable;

  function setApprovalForAll(address to, bool approved) external;

  function sourceBurn(uint256 tokenId) external;

  function sourceMint(address to, uint224 tokenId) external;

  function sourceGetChainPrepend() external view returns (uint256);

  function sourceTransfer(address to, uint256 tokenId) external;

  function transfer(address to, uint256 tokenId) external payable;

  function contractURI() external view returns (string memory);

  function getApproved(uint256 tokenId) external view returns (address);

  function isApprovedForAll(address wallet, address operator) external view returns (bool);

  function name() external view returns (string memory);

  function burned(uint256 tokenId) external view returns (bool);

  function decimals() external pure returns (uint256);

  function exists(uint256 tokenId) external view returns (bool);

  function ownerOf(uint256 tokenId) external view returns (address);

  function supportsInterface(bytes4 interfaceId) external view returns (bool);

  function symbol() external view returns (string memory);

  function tokenByIndex(uint256 index) external view returns (uint256);

  function tokenOfOwnerByIndex(address wallet, uint256 index) external view returns (uint256);

  function tokensOfOwner(address wallet) external view returns (uint256[] memory);

  function tokenURI(uint256 tokenId) external view returns (string memory);

  function totalSupply() external view returns (uint256);
}

File 5 of 17 : IInterfaces.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

import "../enum/ChainIdType.sol";
import "../enum/InterfaceType.sol";
import "../enum/TokenUriType.sol";

interface IInterfaces {
  function contractURI(
    string calldata name,
    string calldata imageURL,
    string calldata externalLink,
    uint16 bps,
    address contractAddress
  ) external pure returns (string memory);

  function supportsInterface(InterfaceType interfaceType, bytes4 interfaceId) external view returns (bool);

  function updateInterface(
    InterfaceType interfaceType,
    bytes4 interfaceId,
    bool supported
  ) external;

  function getChainId(
    ChainIdType fromChainType,
    uint256 fromChainId,
    ChainIdType toChainType
  ) external view returns (uint256 toChainId);

  function getUriPrepend(TokenUriType uriType) external view returns (string memory prepend);

  function updateChainIdMap(
    ChainIdType fromChainType,
    uint256 fromChainId,
    ChainIdType toChainType,
    uint256 toChainId
  ) external;

  function updateChainIdMaps(
    ChainIdType[] calldata fromChainType,
    uint256[] calldata fromChainId,
    ChainIdType[] calldata toChainType,
    uint256[] calldata toChainId
  ) external;
}

File 6 of 17 : IHolograph.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

interface IHolograph {
  function getChainType() external view returns (uint32 chainType);

  function getBridge() external view returns (address bridgeAddress);

  function getFactory() external view returns (address factoryAddress);

  function getInterfaces() external view returns (address interfacesAddress);

  function getOperator() external view returns (address operatorAddress);

  function getRegistry() external view returns (address registryAddress);
}

File 7 of 17 : IHolographer.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

interface IHolographer {
  function getOriginChain() external view returns (uint32);

  function getHolograph() external view returns (address);

  function getHolographEnforcer() external view returns (address payable);

  function getSecureStorage() external pure returns (address);

  function getSourceContract() external pure returns (address payable);
}

File 8 of 17 : Initializable.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

import "../interface/IInitializable.sol";

abstract contract Initializable is IInitializable {
  function init(bytes memory _data) external virtual returns (bytes4);

  function _isInitialized() internal view returns (bool) {
    // The slot hash has been precomputed for gas optimizaion
    // bytes32 slot = bytes32(uint256(keccak256('eip1967.Holograph.initialized')) - 1);
    uint256 initialized;
    assembly {
      initialized := sload(0x4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a01)
    }
    return (initialized > 0);
  }

  function _setInitialized() internal {
    // The slot hash has been precomputed for gas optimizaion
    // bytes32 slot = bytes32(uint256(keccak256('eip1967.Holograph.initialized')) - 1);
    uint256 initialized = 1;
    assembly {
      sstore(
        /* slot */
        0x4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a01,
        initialized
      )
    }
  }
}

File 9 of 17 : IInitializable.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

interface IInitializable {
  function init(bytes memory _data) external returns (bytes4);
}

File 10 of 17 : CollectionURI.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

interface CollectionURI {
  function contractURI() external view returns (string memory);
}

File 11 of 17 : ERC165.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.13;

interface ERC165 {
  /// @notice Query if a contract implements an interface
  /// @param interfaceID The interface identifier, as specified in ERC-165
  /// @dev Interface identification is specified in ERC-165. This function
  ///  uses less than 30,000 gas.
  /// @return `true` if the contract implements `interfaceID` and
  ///  `interfaceID` is not 0xffffffff, `false` otherwise
  function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

File 12 of 17 : ERC721.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.13;

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x80ac58cd.
/* is ERC165 */
interface ERC721 {
  /// @dev This emits when ownership of any NFT changes by any mechanism.
  ///  This event emits when NFTs are created (`from` == 0) and destroyed
  ///  (`to` == 0). Exception: during contract creation, any number of NFTs
  ///  may be created and assigned without emitting Transfer. At the time of
  ///  any transfer, the approved address for that NFT (if any) is reset to none.
  event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

  /// @dev This emits when the approved address for an NFT is changed or
  ///  reaffirmed. The zero address indicates there is no approved address.
  ///  When a Transfer event emits, this also indicates that the approved
  ///  address for that NFT (if any) is reset to none.
  event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

  /// @dev This emits when an operator is enabled or disabled for an owner.
  ///  The operator can manage all NFTs of the owner.
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /// @notice Count all NFTs assigned to an owner
  /// @dev NFTs assigned to the zero address are considered invalid, and this
  ///  function throws for queries about the zero address.
  /// @param _owner An address for whom to query the balance
  /// @return The number of NFTs owned by `_owner`, possibly zero
  function balanceOf(address _owner) external view returns (uint256);

  /// @notice Find the owner of an NFT
  /// @dev NFTs assigned to zero address are considered invalid, and queries
  ///  about them do throw.
  /// @param _tokenId The identifier for an NFT
  /// @return The address of the owner of the NFT
  function ownerOf(uint256 _tokenId) external view returns (address);

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
  ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
  ///  `onERC721Received` on `_to` and throws if the return value is not
  ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  /// @param data Additional data with no specified format, sent in call to `_to`
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata data
  ) external payable;

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev This works identically to the other function with an extra data parameter,
  ///  except this function just sets data to "".
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  ) external payable;

  /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
  ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
  ///  THEY MAY BE PERMANENTLY LOST
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  ) external payable;

  /// @notice Change or reaffirm the approved address for an NFT
  /// @dev The zero address indicates there is no approved address.
  ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
  ///  operator of the current owner.
  /// @param _approved The new approved NFT controller
  /// @param _tokenId The NFT to approve
  function approve(address _approved, uint256 _tokenId) external payable;

  /// @notice Enable or disable approval for a third party ("operator") to manage
  ///  all of `msg.sender`'s assets
  /// @dev Emits the ApprovalForAll event. The contract MUST allow
  ///  multiple operators per owner.
  /// @param _operator Address to add to the set of authorized operators
  /// @param _approved True if the operator is approved, false to revoke approval
  function setApprovalForAll(address _operator, bool _approved) external;

  /// @notice Get the approved address for a single NFT
  /// @dev Throws if `_tokenId` is not a valid NFT.
  /// @param _tokenId The NFT to find the approved address for
  /// @return The approved address for this NFT, or the zero address if there is none
  function getApproved(uint256 _tokenId) external view returns (address);

  /// @notice Query if an address is an authorized operator for another address
  /// @param _owner The address that owns the NFTs
  /// @param _operator The address that acts on behalf of the owner
  /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
  function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

File 13 of 17 : ERC721Enumerable.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.13;

/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x780e9d63.
/* is ERC721 */
interface ERC721Enumerable {
  /// @notice Count NFTs tracked by this contract
  /// @return A count of valid NFTs tracked by this contract, where each one of
  ///  them has an assigned and queryable owner not equal to the zero address
  function totalSupply() external view returns (uint256);

  /// @notice Enumerate valid NFTs
  /// @dev Throws if `_index` >= `totalSupply()`.
  /// @param _index A counter less than `totalSupply()`
  /// @return The token identifier for the `_index`th NFT,
  ///  (sort order not specified)
  function tokenByIndex(uint256 _index) external view returns (uint256);

  /// @notice Enumerate NFTs assigned to an owner
  /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
  ///  `_owner` is the zero address, representing invalid NFTs.
  /// @param _owner An address where we are interested in NFTs owned by them
  /// @param _index A counter less than `balanceOf(_owner)`
  /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
  ///   (sort order not specified)
  function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

File 14 of 17 : ERC721Metadata.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.13;

/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x5b5e139f.
/* is ERC721 */
interface ERC721Metadata {
  /// @notice A descriptive name for a collection of NFTs in this contract
  function name() external view returns (string memory _name);

  /// @notice An abbreviated name for NFTs in this contract
  function symbol() external view returns (string memory _symbol);

  /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
  /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
  ///  3986. The URI may point to a JSON file that conforms to the "ERC721
  ///  Metadata JSON Schema".
  function tokenURI(uint256 _tokenId) external view returns (string memory);
}

File 15 of 17 : ERC721TokenReceiver.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface ERC721TokenReceiver {
  /// @notice Handle the receipt of an NFT
  /// @dev The ERC721 smart contract calls this function on the recipient
  ///  after a `transfer`. This function MAY throw to revert and reject the
  ///  transfer. Return of other than the magic value MUST result in the
  ///  transaction being reverted.
  ///  Note: the contract address is always the message sender.
  /// @param _operator The address which called `safeTransferFrom` function
  /// @param _from The address which previously owned the token
  /// @param _tokenId The NFT identifier which is being transferred
  /// @param _data Additional data with no specified format
  /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
  ///  unless throwing
  function onERC721Received(
    address _operator,
    address _from,
    uint256 _tokenId,
    bytes calldata _data
  ) external returns (bytes4);
}

File 16 of 17 : ChainIdType.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

enum ChainIdType {
  UNDEFINED, //  0
  EVM, //        1
  HOLOGRAPH, //  2
  LAYERZERO, //  3
  SYNAPSE, //    4
  CONNECTX, //   5
  ABACUS //      6
}

File 17 of 17 : InterfaceType.sol
// SPDX-License-Identifier: UNLICENSED
/*

                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚ HOLOGRAPH โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘                                                             โ•‘
โ•‘                            / ^ \                            โ•‘
โ•‘                            ~~*~~            ¸               โ•‘
โ•‘                         [ '<>:<>' ]         โ”‚โ–‘โ–‘โ–‘            โ•‘
โ•‘               โ•”โ•—           _/"\_           โ•”โ•ฃ               โ•‘
โ•‘             โ”Œโ”€โ•ฌโ•ฌโ”€โ”          """          โ”Œโ”€โ•ฌโ•ฌโ”€โ”             โ•‘
โ•‘          โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”       \_/       โ”Œโ”€โ”ฌโ”˜ โ• โ•ฃ โ””โ”ฌโ”€โ”          โ•‘
โ•‘       โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”           โ”Œโ”€โ”ฌโ”˜ โ”‚  โ• โ•ฃ  โ”‚ โ””โ”ฌโ”€โ”       โ•‘
โ•‘    โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”     โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚ โ””โ”ฌโ”€โ”    โ•‘
โ•‘ โ”Œโ”€โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ” โ”Œโ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ”€โ” โ•‘
โ• โ”ฌโ”˜ โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚โ””¤โ”˜โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚ โ””โ”ฌโ•ฃ
โ•‘โ”‚  โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚   โ”‚  โ”‚  โ”‚  โ”‚  โ• โ•ฃ  โ”‚  โ”‚  โ”‚  โ”‚  โ”‚โ•‘
โ• โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฌโ•ฌโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•โ•โ•ฉโ•ฃ
โ• โ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฌโ•ฌโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ”ดโ•ฃ
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘               โ• โ•ฃ                           โ• โ•ฃ               โ•‘
โ•‘    ,          โ• โ•ฃ     ,        ,'      *    โ• โ•ฃ               โ•‘
โ•‘~~~~~^~~~~~~~~โ”Œโ•ฌโ•ฌโ”~~~^~~~~~~~~^^~~~~~~~~^~~โ”Œโ•ฌโ•ฌโ”~~~~~~~^~~~~~~โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฉโ•ฉโ•ฉโ•ฉโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
     - one protocol, one bridge = infinite possibilities -


 ***************************************************************

 DISCLAIMER: U.S Patent Pending

 LICENSE: Holograph Limited Public License (H-LPL)

 https://holograph.xyz/licenses/h-lpl/1.0.0

 This license governs use of the accompanying software. If you
 use the software, you accept this license. If you do not accept
 the license, you are not permitted to use the software.

 1. Definitions

 The terms "reproduce," "reproduction," "derivative works," and
 "distribution" have the same meaning here as under U.S.
 copyright law. A "contribution" is the original software, or
 any additions or changes to the software. A "contributor" is
 any person that distributes its contribution under this
 license. "Licensed patents" are a contributorโ€™s patent claims
 that read directly on its contribution.

 2. Grant of Rights

 A) Copyright Grant- Subject to the terms of this license,
 including the license conditions and limitations in sections 3
 and 4, each contributor grants you a non-exclusive, worldwide,
 royalty-free copyright license to reproduce its contribution,
 prepare derivative works of its contribution, and distribute
 its contribution or any derivative works that you create.
 B) Patent Grant- Subject to the terms of this license,
 including the license conditions and limitations in section 3,
 each contributor grants you a non-exclusive, worldwide,
 royalty-free license under its licensed patents to make, have
 made, use, sell, offer for sale, import, and/or otherwise
 dispose of its contribution in the software or derivative works
 of the contribution in the software.

 3. Conditions and Limitations

 A) No Trademark License- This license does not grant you rights
 to use any contributorsโ€™ name, logo, or trademarks.
 B) If you bring a patent claim against any contributor over
 patents that you claim are infringed by the software, your
 patent license from such contributor is terminated with
 immediate effect.
 C) If you distribute any portion of the software, you must
 retain all copyright, patent, trademark, and attribution
 notices that are present in the software.
 D) If you distribute any portion of the software in source code
 form, you may do so only under this license by including a
 complete copy of this license with your distribution. If you
 distribute any portion of the software in compiled or object
 code form, you may only do so under a license that complies
 with this license.
 E) The software is licensed โ€œas-is.โ€ You bear all risks of
 using it. The contributors give no express warranties,
 guarantees, or conditions. You may have additional consumer
 rights under your local laws which this license cannot change.
 To the extent permitted under your local laws, the contributors
 exclude all implied warranties, including those of
 merchantability, fitness for a particular purpose and
 non-infringement.

 4. (F) Platform Limitation- The licenses granted in sections
 2.A & 2.B extend only to the software or derivative works that
 you create that run on a Holograph system product.

 ***************************************************************

*/

pragma solidity 0.8.13;

enum InterfaceType {
  UNDEFINED, // 0
  ERC20, //     1
  ERC721, //    2
  ERC1155, //   3
  PA1D //       4
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"afterBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"bridgeIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"bridgeOut","outputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint224","name":"tokenId","type":"uint224"},{"internalType":"enum TokenUriType","name":"uriType","type":"uint8"},{"internalType":"string","name":"tokenUri","type":"string"}],"name":"cxipMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"init","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50611def806100206000396000f3fe6080604052600436106100b55760003560e01c80638f32d59b11610069578063c87b56dd1161004e578063c87b56dd14610254578063e003ba4514610274578063f0f5407314610294576100bc565b80638f32d59b1461021f578063971c34b414610234576100bc565b80634ddf47d41161009a5780634ddf47d41461016c5780638b1465c6146101bd5780638da5cb5b146101ea576100bc565b806301ffc9a7146100fa5780632f54bf6e14610130576100bc565b366100bc57005b337fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505414600181146100ed57600080fd5b600160805260206080f35b005b34801561010657600080fd5b5061011b61011536600461159e565b50600090565b60405190151581526020015b60405180910390f35b34801561013c57600080fd5b5061011b61014b366004611602565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b34801561017857600080fd5b5061018c610187366004611721565b6102b4565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610127565b3480156101c957600080fd5b506101dd6101d8366004611786565b610367565b604051610127919061184f565b3480156101f657600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610127565b34801561022b57600080fd5b5061011b6104ee565b34801561024057600080fd5b5061011b61024f366004611862565b6105ac565b34801561026057600080fd5b506101dd61026f36600461188e565b610716565b34801561028057600080fd5b506100f861028f3660046118ff565b610a2a565b3480156102a057600080fd5b5061011b6102af366004611983565b6111a3565b600180547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000179055805160009081906103159060209085018101908501611a35565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905590506103608361132d565b9392505050565b60606103917fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20686f6c6f67726170686572206f6e6c79000000000000000060448201526064015b60405180910390fd5b60008281526002602052604081205460ff169081600381111561044f5761044f611a06565b0361047c57506001547c0100000000000000000000000000000000000000000000000000000000900460ff165b806003600085815260200190815260200160002060008360038111156104a4576104a4611a06565b60038111156104b5576104b5611a06565b81526020019081526020016000206040516020016104d4929190611ae0565b604051602081830303815290604052915050949350505050565b60006105187fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b73ffffffffffffffffffffffffffffffffffffffff16330361058d5760005473ffffffffffffffffffffffffffffffffffffffff16367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0013573ffffffffffffffffffffffffffffffffffffffff1614905090565b5060005473ffffffffffffffffffffffffffffffffffffffff16331490565b60006105d67fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20686f6c6f67726170686572206f6e6c7900000000000000006044820152606401610421565b60008281526002602052604081205460ff169081600381111561068f5761068f611a06565b036106bc57506001547c0100000000000000000000000000000000000000000000000000000000900460ff165b60008381526003602081905260408220919083908111156106df576106df611a06565b60038111156106f0576106f0611a06565b8152602001908152602001600020600061070a9190611436565b60019150505b92915050565b60606107407fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20686f6c6f67726170686572206f6e6c7900000000000000006044820152606401610421565b60008281526002602052604081205460ff16908160038111156107f9576107f9611a06565b0361082657506001547c0100000000000000000000000000000000000000000000000000000000900460ff165b7fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505473ffffffffffffffffffffffffffffffffffffffff16634827ae0c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190611a35565b73ffffffffffffffffffffffffffffffffffffffff1663ebac15f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109249190611a35565b73ffffffffffffffffffffffffffffffffffffffff16630a2bb379826040518263ffffffff1660e01b815260040161095c9190611b92565b600060405180830381865afa158015610979573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526109bf9190810190611ba0565b60008481526003602081905260408220919084908111156109e2576109e2611a06565b60038111156109f3576109f3611a06565b8152602001908152602001600020604051602001610a12929190611c17565b6040516020818303038152906040529150505b919050565b7fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20686f6c6f67726170686572206f6e6c7900000000000000006044820152606401610421565b7fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505473ffffffffffffffffffffffffffffffffffffffff163303610bdd5760005473ffffffffffffffffffffffffffffffffffffffff16367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0013573ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206f776e6572206f6e6c792066756e6374696f6e00000000006044820152606401610421565b610c5e565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206f776e6572206f6e6c792066756e6374696f6e00000000006044820152606401610421565b6000610c887fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b905060008173ffffffffffffffffffffffffffffffffffffffff166377dbd8636040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190611cbe565b9050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003610fa857600180548190600090610d559083907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d06565b92506101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055505b60015473ffffffffffffffffffffffffffffffffffffffff831690634f558e7990610ded907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1684611d46565b6040518263ffffffff1660e01b8152600401610e0b91815260200190565b602060405180830381865afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c9190611d5e565b80610efa575060015473ffffffffffffffffffffffffffffffffffffffff8316906323250cae90610e9b907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1684611d46565b6040518263ffffffff1660e01b8152600401610eb991815260200190565b602060405180830381865afa158015610ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efa9190611d5e565b15610f8457600180548190600090610f319083907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d06565b92506101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550610da4565b6001547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695505b73ffffffffffffffffffffffffffffffffffffffff8216633b4f1b26367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001356040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff89166024820152604401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b505050506000867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16826110b69190611d46565b905060008660038111156110cc576110cc611a06565b036110fa576001547c0100000000000000000000000000000000000000000000000000000000900460ff1695505b600081815260026020526040902080548791907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600381111561114357611143611a06565b021790555060008181526003602081905260408220879287928a9081111561116d5761116d611a06565b600381111561117e5761117e611a06565b81526020019081526020016000209190611199929190611473565b5050505050505050565b60006111cd7fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd92505490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20686f6c6f67726170686572206f6e6c7900000000000000006044820152606401610421565b60008061127084860186611d80565b6000888152600260205260409020805492945090925083917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360038111156112be576112be611a06565b0217905550806003600088815260200190815260200160002060008460038111156112eb576112eb611a06565b60038111156112fc576112fc611a06565b8152602001908152602001600020908051906020019061131d929190611515565b5060019998505050505050505050565b60006113597f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0154151590565b156113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a20616c726561647920696e697469616c697a656400000000006044820152606401610421565b337fe860eb97addcc8d7a4df2e57474b879e6fae678a490e3807075a99030ddd925081905561140e60017f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0155565b507f4ddf47d40000000000000000000000000000000000000000000000000000000092915050565b50805461144290611a8d565b6000825580601f10611452575050565b601f0160209004906000526020600020908101906114709190611589565b50565b82805461147f90611a8d565b90600052602060002090601f0160209004810192826114a15760008555611505565b82601f106114d8578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611505565b82800160010185558215611505579182015b828111156115055782358255916020019190600101906114ea565b50611511929150611589565b5090565b82805461152190611a8d565b90600052602060002090601f0160209004810192826115435760008555611505565b82601f1061155c57805160ff1916838001178555611505565b82800160010185558215611505579182015b8281111561150557825182559160200191906001019061156e565b5b80821115611511576000815560010161158a565b6000602082840312156115b057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461036057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461147057600080fd5b60006020828403121561161457600080fd5b8135610360816115e0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116955761169561161f565b604052919050565b600067ffffffffffffffff8211156116b7576116b761161f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006116f66116f18461169d565b61164e565b905082815283838301111561170a57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561173357600080fd5b813567ffffffffffffffff81111561174a57600080fd5b8201601f8101841361175b57600080fd5b61176a848235602084016116e3565b949350505050565b803563ffffffff81168114610a2557600080fd5b6000806000806080858703121561179c57600080fd5b6117a585611772565b935060208501356117b5816115e0565b925060408501356117c5816115e0565b9396929550929360600135925050565b60005b838110156117f05781810151838201526020016117d8565b838111156117ff576000848401525b50505050565b6000815180845261181d8160208601602086016117d5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006103606020830184611805565b6000806040838503121561187557600080fd5b8235611880816115e0565b946020939093013593505050565b6000602082840312156118a057600080fd5b5035919050565b803560048110610a2557600080fd5b60008083601f8401126118c857600080fd5b50813567ffffffffffffffff8111156118e057600080fd5b6020830191508360208285010111156118f857600080fd5b9250929050565b6000806000806060858703121561191557600080fd5b84357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461194157600080fd5b935061194f602086016118a7565b9250604085013567ffffffffffffffff81111561196b57600080fd5b611977878288016118b6565b95989497509550505050565b60008060008060008060a0878903121561199c57600080fd5b6119a587611772565b955060208701356119b5816115e0565b945060408701356119c5816115e0565b935060608701359250608087013567ffffffffffffffff8111156119e857600080fd5b6119f489828a016118b6565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a4757600080fd5b8151610360816115e0565b60048110611a89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600181811c90821680611aa157607f821691505b602082108103611ada577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b611aea8184611a52565b6000602060408184015260008454611b0181611a8d565b8060408701526060600180841660008114611b235760018114611b5557611b83565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a0152608089019550611b83565b896000528660002060005b85811015611b7b5781548b8201860152908301908801611b60565b8a0184019650505b50939998505050505050505050565b602081016107108284611a52565b600060208284031215611bb257600080fd5b815167ffffffffffffffff811115611bc957600080fd5b8201601f81018413611bda57600080fd5b8051611be86116f18261169d565b818152856020838501011115611bfd57600080fd5b611c0e8260208301602086016117d5565b95945050505050565b600083516020611c2a82858389016117d5565b818401915060008554611c3c81611a8d565b60018281168015611c545760018114611c8357611caf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528287019450611caf565b896000528560002060005b84811015611ca757815489820152908301908701611c8e565b505082870194505b50929998505050505050505050565b600060208284031215611cd057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316818516808303821115611d3d57611d3d611cd7565b01949350505050565b60008219821115611d5957611d59611cd7565b500190565b600060208284031215611d7057600080fd5b8151801515811461036057600080fd5b60008060408385031215611d9357600080fd5b611d9c836118a7565b9150602083013567ffffffffffffffff811115611db857600080fd5b8301601f81018513611dc957600080fd5b611dd8858235602084016116e3565b915050925092905056fea164736f6c634300080d000a

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
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.