Contract 0xf2B701062CeF0ebBBFF6d388fd793E176e7ab185 15

 
Txn Hash Method
Block
From
To
Value
0x7b5d2362e3d7100a67bb0283cf6cb7e51c5a908987b5a3e9b333a52156503788Set Admin12609272023-07-14 5:06:41315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.0000313994190.1
0xc80bab53373e721ec0e34b8c5a279f328d375b675ef93a905f83d977988add4dUpdate Interface...12601162023-07-14 4:39:39315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.0001227550880.1
0x3a211c3796a78ad6c7abc5c7ce1c5a1b8e254c199d39b80b07b38382a74e4721Update Interface...12601122023-07-14 4:39:31315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.0001458462990.1
0xec8f1866e9c5c8ebe3e877f55b3dd6d8b9861583aa2d1ec6c797fc1712b48938Update Interface...12601082023-07-14 4:39:23315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.000152586830.1
0x6a80a0266ede3d3d02195a250ec06726724cbc4024a4a9f3e372b85a08605b48Update Uri Prepe...12601042023-07-14 4:39:15315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.0000637579490.1
0xda0622b4dfa6ce3d93a23ecf879d943bf0f885e6171c95c54c2f37535218c4afUpdate Chain Id ...12601012023-07-14 4:39:09315 days 2 hrs ago0xc0ffee78121f208475abdd2cf0853a7afed64749 IN  0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH0.0017412051920.1
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0x97c1ce060c70750695343811ef925b5cf95a22a0e736104aeae40721098ea64712600742023-07-14 4:38:15315 days 2 hrs ago 0x0c8af56f7650a6e3685188d212044338c21d3f73 0xf2b701062cef0ebbbff6d388fd793e176e7ab1850 ETH
0x97c1ce060c70750695343811ef925b5cf95a22a0e736104aeae40721098ea64712600742023-07-14 4:38:15315 days 2 hrs ago 0x0c8af56f7650a6e3685188d212044338c21d3f73  Contract Creation0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HolographInterfaces

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion
File 1 of 9 : Admin.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;

abstract contract Admin {
  /**
   * @dev bytes32(uint256(keccak256('eip1967.Holograph.admin')) - 1)
   */
  bytes32 constant _adminSlot = 0x3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9;

  modifier onlyAdmin() {
    require(msg.sender == getAdmin(), "HOLOGRAPH: admin only function");
    _;
  }

  constructor() {}

  function admin() public view returns (address) {
    return getAdmin();
  }

  function getAdmin() public view returns (address adminAddress) {
    assembly {
      adminAddress := sload(_adminSlot)
    }
  }

  function setAdmin(address adminAddress) public onlyAdmin {
    assembly {
      sstore(_adminSlot, adminAddress)
    }
  }

  function adminCall(address target, bytes calldata data) external payable onlyAdmin {
    assembly {
      calldatacopy(0, data.offset, data.length)
      let result := call(gas(), target, callvalue(), 0, data.length, 0, 0)
      returndatacopy(0, 0, returndatasize())
      switch result
      case 0 {
        revert(0, returndatasize())
      }
      default {
        return(0, returndatasize())
      }
    }
  }
}

File 2 of 9 : 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/InitializableInterface.sol";

/**
 * @title Initializable
 * @author https://github.com/holographxyz
 * @notice Use init instead of constructor
 * @dev This allows for use of init function to make one time initializations without the need for a constructor
 */
abstract contract Initializable is InitializableInterface {
  /**
   * @dev bytes32(uint256(keccak256('eip1967.Holograph.initialized')) - 1)
   */
  bytes32 constant _initializedSlot = 0x4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a01;

  /**
   * @dev Constructor is left empty and init is used instead
   */
  constructor() {}

  /**
   * @notice Used internally to initialize the contract instead of through a constructor
   * @dev This function is called by the deployer/factory when creating a contract
   * @param initPayload abi encoded payload to use for contract initilaization
   */
  function init(bytes memory initPayload) external virtual returns (bytes4);

  function _isInitialized() internal view returns (bool initialized) {
    assembly {
      initialized := sload(_initializedSlot)
    }
  }

  function _setInitialized() internal {
    assembly {
      sstore(_initializedSlot, 0x0000000000000000000000000000000000000000000000000000000000000001)
    }
  }
}

File 3 of 9 : 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
  HYPERLANE //   4
}

File 4 of 9 : 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
  ROYALTIES, // 4
  GENERIC //    5
}

File 5 of 9 : 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 6 of 9 : HolographInterfaces.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/Admin.sol";
import "./abstract/Initializable.sol";

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

import "./interface/InitializableInterface.sol";

import "./library/Base64.sol";
import "./library/Strings.sol";

/**
 * @title Holograph Interfaces
 * @author https://github.com/holographxyz
 * @notice Get universal Holograph Protocol variables
 * @dev The contract stores a reference of all supported: chains, interfaces, functions, etc.
 */
contract HolographInterfaces is Admin, Initializable {
  /**
   * @dev Internal mapping of all InterfaceType interfaces
   */
  mapping(InterfaceType => mapping(bytes4 => bool)) private _supportedInterfaces;

  /**
   * @dev Internal mapping of all ChainIdType conversions
   */
  mapping(ChainIdType => mapping(uint256 => mapping(ChainIdType => uint256))) private _chainIdMap;

  /**
   * @dev Internal mapping of all TokenUriType prepends
   */
  mapping(TokenUriType => string) private _prependURI;

  /**
   * @dev Constructor is left empty and init is used instead
   */
  constructor() {}

  /**
   * @notice Used internally to initialize the contract instead of through a constructor
   * @dev This function is called by the deployer/factory when creating a contract
   * @param initPayload abi encoded payload to use for contract initilaization
   */
  function init(bytes memory initPayload) external override returns (bytes4) {
    require(!_isInitialized(), "HOLOGRAPH: already initialized");
    address contractAdmin = abi.decode(initPayload, (address));
    assembly {
      sstore(_adminSlot, contractAdmin)
    }
    _setInitialized();
    return InitializableInterface.init.selector;
  }

  /**
   * @notice Get a base64 encoded contract URI JSON string
   * @dev Used to dynamically generate contract JSON payload
   * @param name the name of the smart contract
   * @param imageURL string pointing to the primary contract image, can be: https, ipfs, or ar (arweave)
   * @param externalLink url to website/page related to smart contract
   * @param bps basis points used for specifying royalties percentage
   * @param contractAddress address of the smart contract
   * @return a base64 encoded json string representing the smart contract
   */
  function contractURI(
    string calldata name,
    string calldata imageURL,
    string calldata externalLink,
    uint16 bps,
    address contractAddress
  ) external pure returns (string memory) {
    return
      string(
        abi.encodePacked(
          "data:application/json;base64,",
          Base64.encode(
            abi.encodePacked(
              '{"name":"',
              name,
              '","description":"',
              name,
              '","image":"',
              imageURL,
              '","external_link":"',
              externalLink,
              '","seller_fee_basis_points":',
              Strings.uint2str(bps),
              ',"fee_recipient":"0x',
              Strings.toAsciiString(contractAddress),
              '"}'
            )
          )
        )
      );
  }

  /**
   * @notice Get the prepend to use for tokenURI
   * @dev Provides the prepend to use with TokenUriType URI
   */
  function getUriPrepend(TokenUriType uriType) external view returns (string memory prepend) {
    prepend = _prependURI[uriType];
  }

  /**
   * @notice Update the tokenURI prepend
   * @param uriType specify which TokenUriType to set for
   * @param prepend the string to use for the prepend
   */
  function updateUriPrepend(TokenUriType uriType, string calldata prepend) external onlyAdmin {
    _prependURI[uriType] = prepend;
  }

  /**
   * @notice Update the tokenURI prepends
   * @param uriTypes specify array of TokenUriTypes to set for
   * @param prepends array string to use for the prepends
   */
  function updateUriPrepends(TokenUriType[] calldata uriTypes, string[] calldata prepends) external onlyAdmin {
    for (uint256 i = 0; i < uriTypes.length; i++) {
      _prependURI[uriTypes[i]] = prepends[i];
    }
  }

  function getChainId(
    ChainIdType fromChainType,
    uint256 fromChainId,
    ChainIdType toChainType
  ) external view returns (uint256 toChainId) {
    return _chainIdMap[fromChainType][fromChainId][toChainType];
  }

  function updateChainIdMap(
    ChainIdType fromChainType,
    uint256 fromChainId,
    ChainIdType toChainType,
    uint256 toChainId
  ) external onlyAdmin {
    _chainIdMap[fromChainType][fromChainId][toChainType] = toChainId;
  }

  function updateChainIdMaps(
    ChainIdType[] calldata fromChainType,
    uint256[] calldata fromChainId,
    ChainIdType[] calldata toChainType,
    uint256[] calldata toChainId
  ) external onlyAdmin {
    uint256 length = fromChainType.length;
    for (uint256 i = 0; i < length; i++) {
      _chainIdMap[fromChainType[i]][fromChainId[i]][toChainType[i]] = toChainId[i];
    }
  }

  function supportsInterface(InterfaceType interfaceType, bytes4 interfaceId) external view returns (bool) {
    return _supportedInterfaces[interfaceType][interfaceId];
  }

  function updateInterface(InterfaceType interfaceType, bytes4 interfaceId, bool supported) external onlyAdmin {
    _supportedInterfaces[interfaceType][interfaceId] = supported;
  }

  function updateInterfaces(
    InterfaceType interfaceType,
    bytes4[] calldata interfaceIds,
    bool supported
  ) external onlyAdmin {
    for (uint256 i = 0; i < interfaceIds.length; i++) {
      _supportedInterfaces[interfaceType][interfaceIds[i]] = supported;
    }
  }

  /**
   * @dev Purposefully reverts to prevent having any type of ether transfered into the contract
   */
  receive() external payable {
    revert();
  }

  /**
   * @dev Purposefully reverts to prevent any calls to undefined functions
   */
  fallback() external payable {
    revert();
  }
}

File 7 of 9 : InitializableInterface.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;

/**
 * @title Initializable
 * @author https://github.com/holographxyz
 * @notice Use init instead of constructor
 * @dev This allows for use of init function to make one time initializations without the need of a constructor
 */
interface InitializableInterface {
  /**
   * @notice Used internally to initialize the contract instead of through a constructor
   * @dev This function is called by the deployer/factory when creating a contract
   * @param initPayload abi encoded payload to use for contract initilaization
   */
  function init(bytes memory initPayload) external returns (bytes4);
}

File 8 of 9 : Base64.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;

library Base64 {
  bytes private constant base64stdchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  bytes private constant base64urlchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";

  function encode(string memory _str) internal pure returns (string memory) {
    bytes memory _bs = bytes(_str);
    return encode(_bs);
  }

  function encode(bytes memory _bs) internal pure returns (string memory) {
    uint256 rem = _bs.length % 3;

    uint256 res_length = ((_bs.length + 2) / 3) * 4 - ((3 - rem) % 3);
    bytes memory res = new bytes(res_length);

    uint256 i = 0;
    uint256 j = 0;

    for (; i + 3 <= _bs.length; i += 3) {
      (res[j], res[j + 1], res[j + 2], res[j + 3]) = encode3(uint8(_bs[i]), uint8(_bs[i + 1]), uint8(_bs[i + 2]));

      j += 4;
    }

    if (rem != 0) {
      uint8 la0 = uint8(_bs[_bs.length - rem]);
      uint8 la1 = 0;

      if (rem == 2) {
        la1 = uint8(_bs[_bs.length - 1]);
      }

      (bytes1 b0, bytes1 b1, bytes1 b2 /* bytes1 b3*/, ) = encode3(la0, la1, 0);
      res[j] = b0;
      res[j + 1] = b1;
      if (rem == 2) {
        res[j + 2] = b2;
      }
    }

    return string(res);
  }

  function encode3(
    uint256 a0,
    uint256 a1,
    uint256 a2
  ) private pure returns (bytes1 b0, bytes1 b1, bytes1 b2, bytes1 b3) {
    uint256 n = (a0 << 16) | (a1 << 8) | a2;

    uint256 c0 = (n >> 18) & 63;
    uint256 c1 = (n >> 12) & 63;
    uint256 c2 = (n >> 6) & 63;
    uint256 c3 = (n) & 63;

    b0 = base64urlchars[c0];
    b1 = base64urlchars[c1];
    b2 = base64urlchars[c2];
    b3 = base64urlchars[c3];
  }
}

File 9 of 9 : Strings.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;

library Strings {
  function toHexString(address account) internal pure returns (string memory) {
    return toHexString(uint256(uint160(account)));
  }

  function toHexString(uint256 value) internal pure returns (string memory) {
    if (value == 0) {
      return "0x00";
    }
    uint256 temp = value;
    uint256 length = 0;
    while (temp != 0) {
      length++;
      temp >>= 8;
    }
    return toHexString(value, length);
  }

  function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
    bytes memory buffer = new bytes(2 * length + 2);
    buffer[0] = "0";
    buffer[1] = "x";
    for (uint256 i = 2 * length + 1; i > 1; --i) {
      buffer[i] = bytes16("0123456789abcdef")[value & 0xf];
      value >>= 4;
    }
    require(value == 0, "Strings: hex length insufficient");
    return string(buffer);
  }

  function toAsciiString(address x) internal pure returns (string memory) {
    bytes memory s = new bytes(40);
    for (uint256 i = 0; i < 20; i++) {
      bytes1 b = bytes1(uint8(uint256(uint160(x)) / (2 ** (8 * (19 - i)))));
      bytes1 hi = bytes1(uint8(b) / 16);
      bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
      s[2 * i] = char(hi);
      s[2 * i + 1] = char(lo);
    }
    return string(s);
  }

  function char(bytes1 b) internal pure returns (bytes1 c) {
    if (uint8(b) < 10) {
      return bytes1(uint8(b) + 0x30);
    } else {
      return bytes1(uint8(b) + 0x57);
    }
  }

  function uint2str(uint256 _i) internal pure returns (string memory _uint256AsString) {
    if (_i == 0) {
      return "0";
    }
    uint256 j = _i;
    uint256 len;
    while (j != 0) {
      len++;
      j /= 10;
    }
    bytes memory bstr = new bytes(len);
    uint256 k = len;
    while (_i != 0) {
      k = k - 1;
      uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
      bytes1 b1 = bytes1(temp);
      bstr[k] = b1;
      _i /= 10;
    }
    return string(bstr);
  }

  function toString(uint256 value) internal pure returns (string memory) {
    if (value == 0) {
      return "0";
    }
    uint256 temp = value;
    uint256 digits;
    while (temp != 0) {
      digits++;
      temp /= 10;
    }
    bytes memory buffer = new bytes(digits);
    while (value != 0) {
      digits -= 1;
      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
      value /= 10;
    }
    return string(buffer);
  }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc721a-upgradeable/=erc721a-upgradeable/",
    "forge-std/=lib/forge-std/src/"
  ],
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"adminCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"imageURL","type":"string"},{"internalType":"string","name":"externalLink","type":"string"},{"internalType":"uint16","name":"bps","type":"uint16"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"adminAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ChainIdType","name":"fromChainType","type":"uint8"},{"internalType":"uint256","name":"fromChainId","type":"uint256"},{"internalType":"enum ChainIdType","name":"toChainType","type":"uint8"}],"name":"getChainId","outputs":[{"internalType":"uint256","name":"toChainId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum TokenUriType","name":"uriType","type":"uint8"}],"name":"getUriPrepend","outputs":[{"internalType":"string","name":"prepend","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"initPayload","type":"bytes"}],"name":"init","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adminAddress","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum InterfaceType","name":"interfaceType","type":"uint8"},{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ChainIdType","name":"fromChainType","type":"uint8"},{"internalType":"uint256","name":"fromChainId","type":"uint256"},{"internalType":"enum ChainIdType","name":"toChainType","type":"uint8"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"updateChainIdMap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ChainIdType[]","name":"fromChainType","type":"uint8[]"},{"internalType":"uint256[]","name":"fromChainId","type":"uint256[]"},{"internalType":"enum ChainIdType[]","name":"toChainType","type":"uint8[]"},{"internalType":"uint256[]","name":"toChainId","type":"uint256[]"}],"name":"updateChainIdMaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum InterfaceType","name":"interfaceType","type":"uint8"},{"internalType":"bytes4","name":"interfaceId","type":"bytes4"},{"internalType":"bool","name":"supported","type":"bool"}],"name":"updateInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum InterfaceType","name":"interfaceType","type":"uint8"},{"internalType":"bytes4[]","name":"interfaceIds","type":"bytes4[]"},{"internalType":"bool","name":"supported","type":"bool"}],"name":"updateInterfaces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TokenUriType","name":"uriType","type":"uint8"},{"internalType":"string","name":"prepend","type":"string"}],"name":"updateUriPrepend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TokenUriType[]","name":"uriTypes","type":"uint8[]"},{"internalType":"string[]","name":"prepends","type":"string[]"}],"name":"updateUriPrepends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506126b4806100206000396000f3fe6080604052600436106100ec5760003560e01c80638ca3abf61161008a578063aec117ac11610059578063aec117ac146102f7578063bf64a82d14610317578063d63e93b91461032a578063f851a4401461034a57600080fd5b80638ca3abf6146102675780639cf149da146102875780639fe7303f146102a7578063a1a0d960146102d757600080fd5b80636d7db627116100c65780636d7db627146101b05780636d97233f146101d25780636e9960c3146101f2578063704b6c021461024757600080fd5b80630a2bb379146100fb57806320fc06ea146101315780634ddf47d41461015f57600080fd5b366100f657600080fd5b600080fd5b34801561010757600080fd5b5061011b6101163660046119d4565b61035f565b6040516101289190611a22565b60405180910390f35b34801561013d57600080fd5b5061015161014c366004611a82565b610426565b604051908152602001610128565b34801561016b57600080fd5b5061017f61017a366004611aed565b6104ab565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610128565b3480156101bc57600080fd5b506101d06101cb366004611c08565b6105cd565b005b3480156101de57600080fd5b506101d06101ed366004611d1b565b6107a6565b3480156101fe57600080fd5b507f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b34801561025357600080fd5b506101d0610262366004611d7a565b6108f8565b34801561027357600080fd5b506101d0610282366004611dd9565b6109d2565b34801561029357600080fd5b5061011b6102a2366004611e2c565b610ad2565b3480156102b357600080fd5b506102c76102c2366004611ef3565b610b4f565b6040519015158152602001610128565b3480156102e357600080fd5b506101d06102f2366004611f26565b610bc3565b34801561030357600080fd5b506101d0610312366004611f6a565b610cfc565b6101d0610325366004611fcf565b610e93565b34801561033657600080fd5b506101d0610345366004611fef565b610f6e565b34801561035657600080fd5b506102226110ce565b6060600260008360038111156103775761037761205b565b60038111156103885761038861205b565b815260200190815260200160002080546103a19061208a565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd9061208a565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050509050919050565b60006001600085600481111561043e5761043e61205b565b600481111561044f5761044f61205b565b8152602001908152602001600020600084815260200190815260200160002060008360048111156104825761048261205b565b60048111156104935761049361205b565b81526020019081526020016000205490509392505050565b60006104d57f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a015490565b15610541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a20616c726561647920696e697469616c697a6564000060448201526064015b60405180910390fd5b60008280602001905181019061055791906120dd565b9050807f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9556105a560017f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0155565b507f4ddf47d40000000000000000000000000000000000000000000000000000000092915050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b8660005b8181101561079a578383828181106106a1576106a16120fa565b90506020020135600160008c8c858181106106be576106be6120fa565b90506020020160208101906106d39190612129565b60048111156106e4576106e461205b565b60048111156106f5576106f561205b565b815260200190815260200160002060008a8a85818110610717576107176120fa565b9050602002013581526020019081526020016000206000888885818110610740576107406120fa565b90506020020160208101906107559190612129565b60048111156107665761076661205b565b60048111156107775761077761205b565b81526020810191909152604001600020558061079281612173565b915050610687565b50505050505050505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b806000808560058111156108725761087261205b565b60058111156108835761088361205b565b8152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000009690961681529490915290922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091555050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c955565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b818160026000866003811115610aa057610aa061205b565b6003811115610ab157610ab161205b565b81526020019081526020016000209190610acc92919061190e565b50505050565b6060610b2289898b8b8b8b8b8b610aec8c61ffff166110fd565b610af58c61125d565b604051602001610b0e9a999897969594939291906121ab565b6040516020818303038152906040526113e1565b604051602001610b329190612328565b604051602081830303815290604052905098975050505050505050565b6000806000846005811115610b6657610b6661205b565b6005811115610b7757610b7761205b565b8152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205460ff1690505b92915050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b8060016000866004811115610c9057610c9061205b565b6004811115610ca157610ca161205b565b815260200190815260200160002060008581526020019081526020016000206000846004811115610cd457610cd461205b565b6004811115610ce557610ce561205b565b815260208101919091526040016000205550505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b60005b82811015610e8c5781600080876005811115610dd357610dd361205b565b6005811115610de457610de461205b565b81526020019081526020016000206000868685818110610e0657610e066120fa565b9050602002016020810190610e1b919061236d565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610e8481612173565b915050610db5565b5050505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b808260003760008082600034875af13d6000803e808015610f69573d6000f35b3d6000fd5b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b60005b83811015610e8c57828282818110611041576110416120fa565b90506020028101906110539190612388565b60026000888886818110611069576110696120fa565b905060200201602081019061107e91906119d4565b600381111561108f5761108f61205b565b60038111156110a0576110a061205b565b815260200190815260200160002091906110bb92919061190e565b50806110c681612173565b915050611027565b60006110f87f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95490565b905090565b60608160000361114057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561116a578061115481612173565b91506111639050600a8361241c565b9150611144565b60008167ffffffffffffffff81111561118557611185611abe565b6040519080825280601f01601f1916602001820160405280156111af576020820181803683370190505b509050815b8515611254576111c5600182612430565b905060006111d4600a8861241c565b6111df90600a612447565b6111e99088612430565b6111f4906030612484565b905060008160f81b905080848481518110611211576112116120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061124b600a8961241c565b975050506111b4565b50949350505050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156113da57600061129a826013612430565b6112a5906008612447565b6112b09060026125c9565b6112d09073ffffffffffffffffffffffffffffffffffffffff871661241c565b60f81b9050600060108260f81c6112e791906125d5565b60f81b905060008160f81c60106112fe91906125f7565b8360f81c61130c9190612618565b60f81b905061131a826117b8565b85611326866002612447565b81518110611336576113366120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061136e816117b8565b8561137a866002612447565b61138590600161263b565b81518110611395576113956120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050505080806113d290612173565b915050611284565b5092915050565b60606000600383516113f39190612653565b9050600060036114038382612430565b61140d9190612653565b60038551600261141d919061263b565b611427919061241c565b611432906004612447565b61143c9190612430565b905060008167ffffffffffffffff81111561145957611459611abe565b6040519080825280601f01601f191660200182016040528015611483576020820181803683370190505b5090506000805b865161149783600361263b565b11611641576115068783815181106114b1576114b16120fa565b016020015160f81c886114c585600161263b565b815181106114d5576114d56120fa565b016020015160f81c896114e986600261263b565b815181106114f9576114f96120fa565b016020015160f81c6117f3565b868581518110611518576115186120fa565b016020018761152887600161263b565b81518110611538576115386120fa565b016020018861154888600261263b565b81518110611558576115586120fa565b016020018961156889600361263b565b81518110611578576115786120fa565b7fff00000000000000000000000000000000000000000000000000000000000000861660001a9101602001537fff00000000000000000000000000000000000000000000000000000000000000851660001a90537fff00000000000000000000000000000000000000000000000000000000000000851660001a90537fff00000000000000000000000000000000000000000000000000000000000000851660001a90535050505060048161162d919061263b565b905061163a60038361263b565b915061148a565b84156117ad576000878689516116579190612430565b81518110611667576116676120fa565b016020015160f81c9050600060028790036116a6578860018a5161168b9190612430565b8151811061169b5761169b6120fa565b016020015160f81c90505b60008060006116bd8560ff168560ff1660006117f3565b50925092509250828887815181106116d7576116d76120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818861171388600161263b565b81518110611723576117236120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350896002036117a757808861176788600261263b565b81518110611777576117776120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b50505050505b509095945050505050565b6000600a60f883901c10156117df576117d660f883901c6030612484565b60f81b92915050565b6117d660f883901c6057612484565b919050565b60408051606081018252818152600091829182918291601089901b600889901b17871791603f601284901c811692600c85901c821692600686901c831692861691906126686020830139848151811061184e5761184e6120fa565b602001015160f81c60f81b9850604051806060016040528060408152602001612668604091398381518110611885576118856120fa565b602001015160f81c60f81b97506040518060600160405280604081526020016126686040913982815181106118bc576118bc6120fa565b602001015160f81c60f81b96506040518060600160405280604081526020016126686040913981815181106118f3576118f36120fa565b602001015160f81c60f81b9550505050505093509350935093565b82805461191a9061208a565b90600052602060002090601f01602090048101928261193c57600085556119a0565b82601f10611973578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556119a0565b828001600101855582156119a0579182015b828111156119a0578235825591602001919060010190611985565b506119ac9291506119b0565b5090565b5b808211156119ac57600081556001016119b1565b8035600481106117ee57600080fd5b6000602082840312156119e657600080fd5b6119ef826119c5565b9392505050565b60005b83811015611a115781810151838201526020016119f9565b83811115610acc5750506000910152565b6020815260008251806020840152611a418160408501602087016119f6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b8035600581106117ee57600080fd5b600080600060608486031215611a9757600080fd5b611aa084611a73565b925060208401359150611ab560408501611a73565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611aff57600080fd5b813567ffffffffffffffff80821115611b1757600080fd5b818401915084601f830112611b2b57600080fd5b813581811115611b3d57611b3d611abe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b8357611b83611abe565b81604052828152876020848701011115611b9c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008083601f840112611bce57600080fd5b50813567ffffffffffffffff811115611be657600080fd5b6020830191508360208260051b8501011115611c0157600080fd5b9250929050565b6000806000806000806000806080898b031215611c2457600080fd5b883567ffffffffffffffff80821115611c3c57600080fd5b611c488c838d01611bbc565b909a50985060208b0135915080821115611c6157600080fd5b611c6d8c838d01611bbc565b909850965060408b0135915080821115611c8657600080fd5b611c928c838d01611bbc565b909650945060608b0135915080821115611cab57600080fd5b50611cb88b828c01611bbc565b999c989b5096995094979396929594505050565b8035600681106117ee57600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146117ee57600080fd5b803580151581146117ee57600080fd5b600080600060608486031215611d3057600080fd5b611d3984611ccc565b9250611d4760208501611cdb565b9150611ab560408501611d0b565b73ffffffffffffffffffffffffffffffffffffffff81168114611d7757600080fd5b50565b600060208284031215611d8c57600080fd5b81356119ef81611d55565b60008083601f840112611da957600080fd5b50813567ffffffffffffffff811115611dc157600080fd5b602083019150836020828501011115611c0157600080fd5b600080600060408486031215611dee57600080fd5b611df7846119c5565b9250602084013567ffffffffffffffff811115611e1357600080fd5b611e1f86828701611d97565b9497909650939450505050565b60008060008060008060008060a0898b031215611e4857600080fd5b883567ffffffffffffffff80821115611e6057600080fd5b611e6c8c838d01611d97565b909a50985060208b0135915080821115611e8557600080fd5b611e918c838d01611d97565b909850965060408b0135915080821115611eaa57600080fd5b50611eb78b828c01611d97565b909550935050606089013561ffff81168114611ed257600080fd5b91506080890135611ee281611d55565b809150509295985092959890939650565b60008060408385031215611f0657600080fd5b611f0f83611ccc565b9150611f1d60208401611cdb565b90509250929050565b60008060008060808587031215611f3c57600080fd5b611f4585611a73565b935060208501359250611f5a60408601611a73565b9396929550929360600135925050565b60008060008060608587031215611f8057600080fd5b611f8985611ccc565b9350602085013567ffffffffffffffff811115611fa557600080fd5b611fb187828801611bbc565b9094509250611fc4905060408601611d0b565b905092959194509250565b600080600060408486031215611fe457600080fd5b8335611df781611d55565b6000806000806040858703121561200557600080fd5b843567ffffffffffffffff8082111561201d57600080fd5b61202988838901611bbc565b9096509450602087013591508082111561204257600080fd5b5061204f87828801611bbc565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181811c9082168061209e57607f821691505b6020821081036120d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120ef57600080fd5b81516119ef81611d55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561213b57600080fd5b6119ef82611a73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121a4576121a4612144565b5060010190565b7f7b226e616d65223a2200000000000000000000000000000000000000000000008152898b600983013760008a82017f222c226465736372697074696f6e223a220000000000000000000000000000006009820152898b601a8301377f222c22696d616765223a22000000000000000000000000000000000000000000601a918b0191820152878960258301377f222c2265787465726e616c5f6c696e6b223a2200000000000000000000000000602591890191820152858760388301377f222c2273656c6c65725f6665655f62617369735f706f696e7473223a0000000060389187019182015284516122a68160548401602089016119f6565b7f2c226665655f726563697069656e74223a2230780000000000000000000000006054929091019182015283516122e48160688401602088016119f6565b6123166068828401017f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9e9d5050505050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161236081601d8501602087016119f6565b91909101601d0192915050565b60006020828403121561237f57600080fd5b6119ef82611cdb565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123bd57600080fd5b83018035915067ffffffffffffffff8211156123d857600080fd5b602001915036819003821315611c0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261242b5761242b6123ed565b500490565b60008282101561244257612442612144565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561247f5761247f612144565b500290565b600060ff821660ff84168060ff038211156124a1576124a1612144565b019392505050565b600181815b8085111561250257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156124e8576124e8612144565b808516156124f557918102915b93841c93908002906124ae565b509250929050565b60008261251957506001610bbd565b8161252657506000610bbd565b816001811461253c576002811461254657612562565b6001915050610bbd565b60ff84111561255757612557612144565b50506001821b610bbd565b5060208310610133831016604e8410600b8410161715612585575081810a610bbd565b61258f83836124a9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156125c1576125c1612144565b029392505050565b60006119ef838361250a565b600060ff8316806125e8576125e86123ed565b8060ff84160491505092915050565b600060ff821660ff84168160ff04811182151516156125c1576125c1612144565b600060ff821660ff84168082101561263257612632612144565b90039392505050565b6000821982111561264e5761264e612144565b500190565b600082612662576126626123ed565b50069056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa164736f6c634300080d000a

Deployed Bytecode

0x6080604052600436106100ec5760003560e01c80638ca3abf61161008a578063aec117ac11610059578063aec117ac146102f7578063bf64a82d14610317578063d63e93b91461032a578063f851a4401461034a57600080fd5b80638ca3abf6146102675780639cf149da146102875780639fe7303f146102a7578063a1a0d960146102d757600080fd5b80636d7db627116100c65780636d7db627146101b05780636d97233f146101d25780636e9960c3146101f2578063704b6c021461024757600080fd5b80630a2bb379146100fb57806320fc06ea146101315780634ddf47d41461015f57600080fd5b366100f657600080fd5b600080fd5b34801561010757600080fd5b5061011b6101163660046119d4565b61035f565b6040516101289190611a22565b60405180910390f35b34801561013d57600080fd5b5061015161014c366004611a82565b610426565b604051908152602001610128565b34801561016b57600080fd5b5061017f61017a366004611aed565b6104ab565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610128565b3480156101bc57600080fd5b506101d06101cb366004611c08565b6105cd565b005b3480156101de57600080fd5b506101d06101ed366004611d1b565b6107a6565b3480156101fe57600080fd5b507f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b34801561025357600080fd5b506101d0610262366004611d7a565b6108f8565b34801561027357600080fd5b506101d0610282366004611dd9565b6109d2565b34801561029357600080fd5b5061011b6102a2366004611e2c565b610ad2565b3480156102b357600080fd5b506102c76102c2366004611ef3565b610b4f565b6040519015158152602001610128565b3480156102e357600080fd5b506101d06102f2366004611f26565b610bc3565b34801561030357600080fd5b506101d0610312366004611f6a565b610cfc565b6101d0610325366004611fcf565b610e93565b34801561033657600080fd5b506101d0610345366004611fef565b610f6e565b34801561035657600080fd5b506102226110ce565b6060600260008360038111156103775761037761205b565b60038111156103885761038861205b565b815260200190815260200160002080546103a19061208a565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd9061208a565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050509050919050565b60006001600085600481111561043e5761043e61205b565b600481111561044f5761044f61205b565b8152602001908152602001600020600084815260200190815260200160002060008360048111156104825761048261205b565b60048111156104935761049361205b565b81526020019081526020016000205490509392505050565b60006104d57f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a015490565b15610541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a20616c726561647920696e697469616c697a6564000060448201526064015b60405180910390fd5b60008280602001905181019061055791906120dd565b9050807f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9556105a560017f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0155565b507f4ddf47d40000000000000000000000000000000000000000000000000000000092915050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b8660005b8181101561079a578383828181106106a1576106a16120fa565b90506020020135600160008c8c858181106106be576106be6120fa565b90506020020160208101906106d39190612129565b60048111156106e4576106e461205b565b60048111156106f5576106f561205b565b815260200190815260200160002060008a8a85818110610717576107176120fa565b9050602002013581526020019081526020016000206000888885818110610740576107406120fa565b90506020020160208101906107559190612129565b60048111156107665761076661205b565b60048111156107775761077761205b565b81526020810191909152604001600020558061079281612173565b915050610687565b50505050505050505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b806000808560058111156108725761087261205b565b60058111156108835761088361205b565b8152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000009690961681529490915290922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091555050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c955565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b818160026000866003811115610aa057610aa061205b565b6003811115610ab157610ab161205b565b81526020019081526020016000209190610acc92919061190e565b50505050565b6060610b2289898b8b8b8b8b8b610aec8c61ffff166110fd565b610af58c61125d565b604051602001610b0e9a999897969594939291906121ab565b6040516020818303038152906040526113e1565b604051602001610b329190612328565b604051602081830303815290604052905098975050505050505050565b6000806000846005811115610b6657610b6661205b565b6005811115610b7757610b7761205b565b8152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205460ff1690505b92915050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b8060016000866004811115610c9057610c9061205b565b6004811115610ca157610ca161205b565b815260200190815260200160002060008581526020019081526020016000206000846004811115610cd457610cd461205b565b6004811115610ce557610ce561205b565b815260208101919091526040016000205550505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b60005b82811015610e8c5781600080876005811115610dd357610dd361205b565b6005811115610de457610de461205b565b81526020019081526020016000206000868685818110610e0657610e066120fa565b9050602002016020810190610e1b919061236d565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610e8481612173565b915050610db5565b5050505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b808260003760008082600034875af13d6000803e808015610f69573d6000f35b3d6000fd5b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610538565b60005b83811015610e8c57828282818110611041576110416120fa565b90506020028101906110539190612388565b60026000888886818110611069576110696120fa565b905060200201602081019061107e91906119d4565b600381111561108f5761108f61205b565b60038111156110a0576110a061205b565b815260200190815260200160002091906110bb92919061190e565b50806110c681612173565b915050611027565b60006110f87f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95490565b905090565b60608160000361114057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561116a578061115481612173565b91506111639050600a8361241c565b9150611144565b60008167ffffffffffffffff81111561118557611185611abe565b6040519080825280601f01601f1916602001820160405280156111af576020820181803683370190505b509050815b8515611254576111c5600182612430565b905060006111d4600a8861241c565b6111df90600a612447565b6111e99088612430565b6111f4906030612484565b905060008160f81b905080848481518110611211576112116120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061124b600a8961241c565b975050506111b4565b50949350505050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156113da57600061129a826013612430565b6112a5906008612447565b6112b09060026125c9565b6112d09073ffffffffffffffffffffffffffffffffffffffff871661241c565b60f81b9050600060108260f81c6112e791906125d5565b60f81b905060008160f81c60106112fe91906125f7565b8360f81c61130c9190612618565b60f81b905061131a826117b8565b85611326866002612447565b81518110611336576113366120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061136e816117b8565b8561137a866002612447565b61138590600161263b565b81518110611395576113956120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050505080806113d290612173565b915050611284565b5092915050565b60606000600383516113f39190612653565b9050600060036114038382612430565b61140d9190612653565b60038551600261141d919061263b565b611427919061241c565b611432906004612447565b61143c9190612430565b905060008167ffffffffffffffff81111561145957611459611abe565b6040519080825280601f01601f191660200182016040528015611483576020820181803683370190505b5090506000805b865161149783600361263b565b11611641576115068783815181106114b1576114b16120fa565b016020015160f81c886114c585600161263b565b815181106114d5576114d56120fa565b016020015160f81c896114e986600261263b565b815181106114f9576114f96120fa565b016020015160f81c6117f3565b868581518110611518576115186120fa565b016020018761152887600161263b565b81518110611538576115386120fa565b016020018861154888600261263b565b81518110611558576115586120fa565b016020018961156889600361263b565b81518110611578576115786120fa565b7fff00000000000000000000000000000000000000000000000000000000000000861660001a9101602001537fff00000000000000000000000000000000000000000000000000000000000000851660001a90537fff00000000000000000000000000000000000000000000000000000000000000851660001a90537fff00000000000000000000000000000000000000000000000000000000000000851660001a90535050505060048161162d919061263b565b905061163a60038361263b565b915061148a565b84156117ad576000878689516116579190612430565b81518110611667576116676120fa565b016020015160f81c9050600060028790036116a6578860018a5161168b9190612430565b8151811061169b5761169b6120fa565b016020015160f81c90505b60008060006116bd8560ff168560ff1660006117f3565b50925092509250828887815181106116d7576116d76120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818861171388600161263b565b81518110611723576117236120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350896002036117a757808861176788600261263b565b81518110611777576117776120fa565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b50505050505b509095945050505050565b6000600a60f883901c10156117df576117d660f883901c6030612484565b60f81b92915050565b6117d660f883901c6057612484565b919050565b60408051606081018252818152600091829182918291601089901b600889901b17871791603f601284901c811692600c85901c821692600686901c831692861691906126686020830139848151811061184e5761184e6120fa565b602001015160f81c60f81b9850604051806060016040528060408152602001612668604091398381518110611885576118856120fa565b602001015160f81c60f81b97506040518060600160405280604081526020016126686040913982815181106118bc576118bc6120fa565b602001015160f81c60f81b96506040518060600160405280604081526020016126686040913981815181106118f3576118f36120fa565b602001015160f81c60f81b9550505050505093509350935093565b82805461191a9061208a565b90600052602060002090601f01602090048101928261193c57600085556119a0565b82601f10611973578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556119a0565b828001600101855582156119a0579182015b828111156119a0578235825591602001919060010190611985565b506119ac9291506119b0565b5090565b5b808211156119ac57600081556001016119b1565b8035600481106117ee57600080fd5b6000602082840312156119e657600080fd5b6119ef826119c5565b9392505050565b60005b83811015611a115781810151838201526020016119f9565b83811115610acc5750506000910152565b6020815260008251806020840152611a418160408501602087016119f6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b8035600581106117ee57600080fd5b600080600060608486031215611a9757600080fd5b611aa084611a73565b925060208401359150611ab560408501611a73565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611aff57600080fd5b813567ffffffffffffffff80821115611b1757600080fd5b818401915084601f830112611b2b57600080fd5b813581811115611b3d57611b3d611abe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b8357611b83611abe565b81604052828152876020848701011115611b9c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008083601f840112611bce57600080fd5b50813567ffffffffffffffff811115611be657600080fd5b6020830191508360208260051b8501011115611c0157600080fd5b9250929050565b6000806000806000806000806080898b031215611c2457600080fd5b883567ffffffffffffffff80821115611c3c57600080fd5b611c488c838d01611bbc565b909a50985060208b0135915080821115611c6157600080fd5b611c6d8c838d01611bbc565b909850965060408b0135915080821115611c8657600080fd5b611c928c838d01611bbc565b909650945060608b0135915080821115611cab57600080fd5b50611cb88b828c01611bbc565b999c989b5096995094979396929594505050565b8035600681106117ee57600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146117ee57600080fd5b803580151581146117ee57600080fd5b600080600060608486031215611d3057600080fd5b611d3984611ccc565b9250611d4760208501611cdb565b9150611ab560408501611d0b565b73ffffffffffffffffffffffffffffffffffffffff81168114611d7757600080fd5b50565b600060208284031215611d8c57600080fd5b81356119ef81611d55565b60008083601f840112611da957600080fd5b50813567ffffffffffffffff811115611dc157600080fd5b602083019150836020828501011115611c0157600080fd5b600080600060408486031215611dee57600080fd5b611df7846119c5565b9250602084013567ffffffffffffffff811115611e1357600080fd5b611e1f86828701611d97565b9497909650939450505050565b60008060008060008060008060a0898b031215611e4857600080fd5b883567ffffffffffffffff80821115611e6057600080fd5b611e6c8c838d01611d97565b909a50985060208b0135915080821115611e8557600080fd5b611e918c838d01611d97565b909850965060408b0135915080821115611eaa57600080fd5b50611eb78b828c01611d97565b909550935050606089013561ffff81168114611ed257600080fd5b91506080890135611ee281611d55565b809150509295985092959890939650565b60008060408385031215611f0657600080fd5b611f0f83611ccc565b9150611f1d60208401611cdb565b90509250929050565b60008060008060808587031215611f3c57600080fd5b611f4585611a73565b935060208501359250611f5a60408601611a73565b9396929550929360600135925050565b60008060008060608587031215611f8057600080fd5b611f8985611ccc565b9350602085013567ffffffffffffffff811115611fa557600080fd5b611fb187828801611bbc565b9094509250611fc4905060408601611d0b565b905092959194509250565b600080600060408486031215611fe457600080fd5b8335611df781611d55565b6000806000806040858703121561200557600080fd5b843567ffffffffffffffff8082111561201d57600080fd5b61202988838901611bbc565b9096509450602087013591508082111561204257600080fd5b5061204f87828801611bbc565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181811c9082168061209e57607f821691505b6020821081036120d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120ef57600080fd5b81516119ef81611d55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561213b57600080fd5b6119ef82611a73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121a4576121a4612144565b5060010190565b7f7b226e616d65223a2200000000000000000000000000000000000000000000008152898b600983013760008a82017f222c226465736372697074696f6e223a220000000000000000000000000000006009820152898b601a8301377f222c22696d616765223a22000000000000000000000000000000000000000000601a918b0191820152878960258301377f222c2265787465726e616c5f6c696e6b223a2200000000000000000000000000602591890191820152858760388301377f222c2273656c6c65725f6665655f62617369735f706f696e7473223a0000000060389187019182015284516122a68160548401602089016119f6565b7f2c226665655f726563697069656e74223a2230780000000000000000000000006054929091019182015283516122e48160688401602088016119f6565b6123166068828401017f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9e9d5050505050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161236081601d8501602087016119f6565b91909101601d0192915050565b60006020828403121561237f57600080fd5b6119ef82611cdb565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123bd57600080fd5b83018035915067ffffffffffffffff8211156123d857600080fd5b602001915036819003821315611c0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261242b5761242b6123ed565b500490565b60008282101561244257612442612144565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561247f5761247f612144565b500290565b600060ff821660ff84168060ff038211156124a1576124a1612144565b019392505050565b600181815b8085111561250257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156124e8576124e8612144565b808516156124f557918102915b93841c93908002906124ae565b509250929050565b60008261251957506001610bbd565b8161252657506000610bbd565b816001811461253c576002811461254657612562565b6001915050610bbd565b60ff84111561255757612557612144565b50506001821b610bbd565b5060208310610133831016604e8410600b8410161715612585575081810a610bbd565b61258f83836124a9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156125c1576125c1612144565b029392505050565b60006119ef838361250a565b600060ff8316806125e8576125e86123ed565b8060ff84160491505092915050565b600060ff821660ff84168160ff04811182151516156125c1576125c1612144565b600060ff821660ff84168082101561263257612632612144565b90039392505050565b6000821982111561264e5761264e612144565b500190565b600082612662576126626123ed565b50069056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa164736f6c634300080d000a

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.