Contract 0x79DD97111b5eDbF4e37a985B872733CB2B116fEd 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xe109ba008083bbe60af519fb05ea39ef78b55531d5e0bb55d7ba7faa0d28a346Safe Batch Trans...414790132023-04-13 9:18:1851 days 9 hrs ago0x8d37826debbdf3a8db035b304631667efe7d1b52 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.020041268644 243.582880325
0x3d7e880ae345b6a72f91b55a37c0050af4945a0cad5feb94a36af8c8b6758582Safe Batch Trans...411714562023-04-05 12:03:2059 days 6 hrs ago0x8d37826debbdf3a8db035b304631667efe7d1b52 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.010711187676 171.228321903
0x57a542ae935f6dd4592e9d034cb0324b75884bdb0e0d9387c47760e4d88a6736Safe Batch Trans...411707612023-04-05 11:37:3859 days 6 hrs ago0x8d37826debbdf3a8db035b304631667efe7d1b52 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004465940415 145.979159126
0x10ceca052b48b2573568acdaa080de555815cb2e1406bd43ea2e8438becf7a64Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.005938442171 229.080051368
0x25c88c7c7ef2c3f56f5aab02ce51d62b2fb0ff6333986e3268c76bbacbaec988Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006282234317 242.342102275
0x3800b3195da15267ee8b86f0e0abe48cffc0840f962ab2c5c75d7b9d92aeae8cSafe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006257851876 241.401530551
0xe8a0eef43c91d99f41c49a41923a57a652c0514978783314e7d45156172e3bedSafe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006396532021 246.865501969
0x8bd208bd9c2e9fa340cdf4538990945ae2398ea5658bfe006ca2d7baf59c4734Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006396532021 246.865501969
0xdb5f27ec392ab9498760c81f2d7fa07e6acddb3875e29b41904c2de57338d9e3Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006482790407 250.310452421
0xec6e2e0cbe1ed852acd3f6cd44299c060e92b3a98033a14a4f2276ea7b5ec1ffSafe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006488797858 250.310452421
0x5f46c4604b82edb58549ddc234f3035f5a2facc3e6d6dc3ec505d92ca9b87e1bSafe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.00625638151 241.456582555
0xc6d2529ef12d4d3bce95e68828b6a0e34b946d02a912af56edcbbc248abde156Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.00622644982 240.19017167
0x28164668098e818578de0046082d9b5c58a5719c1e7cfb253eac6b96b6b805f2Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006017569636 232.239961261
0xe547cf20c2f7aa10c7dd8e683977c1561f24bf9a5b2565001f0a2128941df38dSafe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006224202963 240.10349743
0x363dd9521ce1f12737f4bd834eccf5a1c44d5a21df774350f84bb11d9719a096Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.005915665207 228.201412162
0x84523ecf77396a00b862e2adf424d5e0935a88efa24f765459137e02ff14cb91Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006012557444 232.046522508
0x2b51354c641a0f79fc44e583267043e931b690cbddbd6dfe9b754fb9ee7112f9Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.00610651256 235.672593129
0x798674c3427683ae2642262247a24950c31fbb2aa1b4cd8ad6da6f3e1d2473f7Safe Transfer Fr...395059222023-02-20 10:18:09103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.006273980041 242.135774072
0xb575d2ba243fa74c34af9f1807e50a6cfbf8c9164ea4a18fa71e40008b5a4232Safe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.005075143605 195.868303243
0xe5c17628198eb16cc964610fbd348af91b9a4fc8ef0358627078bf44ee8792d8Safe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004821651173 186.085105694
0xda00fbb3a876c6e7d3cc70731ad00fd0ab519e76a955af53aedc0e5de041cb3cSafe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004585976337 176.907624003
0xa234d86325118718004d66abb2e6060e1e1d759e47e7cf42980f104f80183a69Safe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004585976337 176.907624003
0xe5429012e39030935dfd8e73a000d24d10a6213ab7c55b09fc9420d4d9c5444cSafe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004210116199 162.483740483
0x9b5182b750c4d40a0a4b7969d1c9b9764fefed376babd8973a5f4e42d0ba334fSafe Transfer Fr...395059142023-02-20 10:17:51103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.004010881663 154.794553046
0x954da2d9fc7a8237a9889d20b470a630a670b75a6d0bdb9661d6f235070fa285Safe Transfer Fr...395053642023-02-20 9:56:59103 days 8 hrs ago0x1fc63dfcf47a305ef812dd259e2a77cc117fcc75 IN  0x79dd97111b5edbf4e37a985b872733cb2b116fed0 MATIC0.00422614477 163.026839881
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7834b911ac096372ae8d6b72a22162cff56495685c05569d6ce1b3d0c22114e3270963032022-04-13 18:05:51416 days 13 mins ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x3c3fc5b03f63548dcf5f810cf2b86a59610334785.62913907284768235 MATIC
0x7834b911ac096372ae8d6b72a22162cff56495685c05569d6ce1b3d0c22114e3270963032022-04-13 18:05:51416 days 13 mins ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026970.99337748344370865 MATIC
0xf0841cc5a563ab85d53cc192bd317b2fd28257e4f7562f182a9eb88cff6663bb270963032022-04-13 18:05:51416 days 13 mins ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x3c3fc5b03f63548dcf5f810cf2b86a59610334785.62913907284768235 MATIC
0xf0841cc5a563ab85d53cc192bd317b2fd28257e4f7562f182a9eb88cff6663bb270963032022-04-13 18:05:51416 days 13 mins ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026970.99337748344370865 MATIC
0x63da1b23077b6a3f75b49ca457f7d6f4a114fca61eadfca503c68dea67b72a9d270786632022-04-13 7:04:20416 days 11 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab779723663006.9387755102040825 MATIC
0x63da1b23077b6a3f75b49ca457f7d6f4a114fca61eadfca503c68dea67b72a9d270786632022-04-13 7:04:20416 days 11 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026971.2244897959183675 MATIC
0x799cd7c6804285f6c5c31ccb05eb51abcae71e7e2619ec418b48eda595598768248119352022-02-11 11:58:42477 days 6 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab7797236630012.23021582733813075 MATIC
0x799cd7c6804285f6c5c31ccb05eb51abcae71e7e2619ec418b48eda595598768248119352022-02-11 11:58:42477 days 6 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026972.15827338129496425 MATIC
0x82f9a22ec01ebf740c43cf4252fb9ed7afcf6529cf1518af33a653ac117c32d8246296022022-02-06 20:18:36481 days 22 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab7797236630024.4604316546762615 MATIC
0x82f9a22ec01ebf740c43cf4252fb9ed7afcf6529cf1518af33a653ac117c32d8246296022022-02-06 20:18:36481 days 22 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026974.3165467625899285 MATIC
0x728c7a1c5ecb0f7d9b11c8264957719d5c1fe0678ca7b569e534ed7973945ac5246232242022-02-06 16:26:28482 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab7797236630012.23021582733813075 MATIC
0x728c7a1c5ecb0f7d9b11c8264957719d5c1fe0678ca7b569e534ed7973945ac5246232242022-02-06 16:26:28482 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026972.15827338129496425 MATIC
0x4aa0f035f0fe47954a3444727f324aea8c5f59c10847cdaae1bd65399bb5d22d245923202022-02-05 21:02:56482 days 21 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab7797236630024.4604316546762615 MATIC
0x4aa0f035f0fe47954a3444727f324aea8c5f59c10847cdaae1bd65399bb5d22d245923202022-02-05 21:02:56482 days 21 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026974.3165467625899285 MATIC
0x1648cbba25f416ce044f7f917fceb04f986a34b27c106e4cf7168c4cb4ad7d21245853342022-02-05 16:22:26483 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab779723663006.71052631578947355 MATIC
0x1648cbba25f416ce044f7f917fceb04f986a34b27c106e4cf7168c4cb4ad7d21245853342022-02-05 16:22:26483 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026971.18421052631578945 MATIC
0xe0a3117d54d35fc54095ad4185698b112c3fcddf4d86ccacce1a136c21471d18245836922022-02-05 15:06:44483 days 3 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab779723663006.71052631578947355 MATIC
0xe0a3117d54d35fc54095ad4185698b112c3fcddf4d86ccacce1a136c21471d18245836922022-02-05 15:06:44483 days 3 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026971.18421052631578945 MATIC
0xa631ef01a7f71f0221d1d830e8323d92f469ee326ad5b5a05165251564aebcdf245469352022-02-04 16:34:33484 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x47e89193fefa33d8e69e196a235ab7797236630024.4604316546762615 MATIC
0xa631ef01a7f71f0221d1d830e8323d92f469ee326ad5b5a05165251564aebcdf245469352022-02-04 16:34:33484 days 1 hr ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026974.3165467625899285 MATIC
0x746620db35b0fedb0526b5dcb800f97454f9414d95511895efa428dd2bdc196f230192692021-12-27 9:51:37523 days 8 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x499a81d8f715d18dfdacbbbf888b822a2e4f43d220.4545454545454525 MATIC
0x746620db35b0fedb0526b5dcb800f97454f9414d95511895efa428dd2bdc196f230192692021-12-27 9:51:37523 days 8 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x93c88af066d2fd02d8bc9881cca2fc0a86fdca4c4.0909090909090905 MATIC
0x746620db35b0fedb0526b5dcb800f97454f9414d95511895efa428dd2bdc196f230192692021-12-27 9:51:37523 days 8 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026972.727272727272727 MATIC
0x17a218f8f5a904164eaaea2ddf20efd329caa9cbc3cfa1ad5aec21a2ce19bc1c229039762021-12-24 11:16:27526 days 7 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0x645da2a7bf266b463299d0732a9fabcb9272498537.4449339207048441 MATIC
0x17a218f8f5a904164eaaea2ddf20efd329caa9cbc3cfa1ad5aec21a2ce19bc1c229039762021-12-24 11:16:27526 days 7 hrs ago 0x79dd97111b5edbf4e37a985b872733cb2b116fed0xe4ab45ef3f756fd5f1e56c06d8bc5738acb026976.6079295154185019 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AuctionableERC1155

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-06
*/

pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;



/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {

    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


/**
 * @dev Storage based implementation of the {IERC165} interface.
 *
 * Contracts may inherit from this and call {_registerInterface} to declare
 * their support of an interface.
 */
abstract contract ERC165Storage is ERC165 {
    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See {IERC165-supportsInterface}.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract EIP712Base {
    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
        keccak256(
            bytes(
                "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
            )
        );

    bytes32 internal domainSeperator;

    constructor(string memory name, string memory version) public {
        domainSeperator = keccak256(
            abi.encode(
                EIP712_DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                keccak256(bytes(version)),
                getChainID(),
                address(this)
            )
        );
    }

    function getChainID() internal view returns (uint256 id) {
        assembly {
            id := chainid()
        }
    }

    function getDomainSeperator() private view returns (bytes32) {
        return domainSeperator;
    }

    /**
     * Accept message hash and returns hash message in EIP712 compatible form
     * So that it can be used to recover signer from signature signed using EIP712 formatted data
     * https://eips.ethereum.org/EIPS/eip-712
     * "\\x19" makes the encoding deterministic
     * "\\x01" is the version byte to make it compatible to EIP-191
     */
    function toTypedMessageHash(bytes32 messageHash)
        internal
        view
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash)
            );
    }
}

contract EIP712MetaTransaction is EIP712Base {
    using SafeMath for uint256;
    bytes32 private constant META_TRANSACTION_TYPEHASH =
        keccak256(
            bytes(
                "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
            )
        );

    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );
    mapping(address => uint256) nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    constructor(string memory name, string memory version)
        public
        EIP712Base(name, version)
    {}

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) public payable returns (bytes memory) {
        MetaTransaction memory metaTx =
            MetaTransaction({
                nonce: nonces[userAddress],
                from: userAddress,
                functionSignature: functionSignature
            });
        require(
            verify(userAddress, metaTx, sigR, sigS, sigV),
            "Signer and signature do not match"
        );
        // Append userAddress and relayer address at the end to extract it from calling context
        (bool success, bytes memory returnData) =
            address(this).call(
                abi.encodePacked(functionSignature, userAddress)
            );

        require(success, "Function call not successfull");
        nonces[userAddress] = nonces[userAddress].add(1);
        emit MetaTransactionExecuted(
            userAddress,
            payable(msg.sender),
            functionSignature
        );
        return returnData;
    }

    function hashMetaTransaction(MetaTransaction memory metaTx)
        internal
        view
        returns (bytes32)
    {
        return
            keccak256(
                abi.encode(
                    META_TRANSACTION_TYPEHASH,
                    metaTx.nonce,
                    metaTx.from,
                    keccak256(metaTx.functionSignature)
                )
            );
    }

    function getNonce(address user) public view returns (uint256 nonce) {
        nonce = nonces[user];
    }

    function verify(
        address signer,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) internal view returns (bool) {
        return
            signer ==
            ecrecover(
                toTypedMessageHash(hashMetaTransaction(metaTx)),
                sigV,
                sigR,
                sigS
            );
    }

    function _msgSender() internal view returns (address sender) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }

    // To recieve ether in contract
    receive() external payable {}
}

abstract contract Ownable {
    mapping(uint256 => address payable) internal _owners;

    function msgSender() private view returns (address sender) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }

    modifier notOwnerOf(uint256 _tokenId) {
        require(ownerOf(_tokenId) != msgSender());
        _;
    }

    modifier onlyOwnerOf(uint256 _tokenId) {
        require(ownerOf(_tokenId) == msgSender());
        _;
    }

    function ownerOf(uint256 _tokenId) public view returns (address payable) {
        address payable owner = _owners[_tokenId];
        require(owner != address(0));
        return owner;
    }
}

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

/**
 *
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract CreatorsHubBase is
    ERC165Storage,
    IERC1155,
    IERC1155MetadataURI,
    EIP712MetaTransaction("ERC1155", "1"),
    Ownable
{
    using SafeMath for uint256;
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Mapping from account to true / false mint approvals
    mapping(address => bool) private _mintApprovals;

    // Mapping from account to root operators approvals
    mapping(address => bool) internal _rootOperators;

    mapping(uint256 => string) private _metaFileUrl;

    // Mapping from token ID to proof checksums
    mapping(uint256 => string[]) private _proofChecksums;

    // Mapping from token ID to secret field
    mapping(uint256 => string) private _secretFields;

    // Mapping from token ID to fees lock (true/false)
    mapping(uint256 => bool) private _feesLock;

    // Mapping from token ID to flag (paused = true, active = false)
    mapping(uint256 => bool) internal _isPaused;

    struct Listing {
        uint256 initialPrice;
        uint256 price;
        bool biddingEnabled;
        uint256 activeTill;
        address payable currentBidder;
        bool operatorBid;
    }

    struct Fee {
        string name;
        address payable recipient;
        uint256 value; // 185 basis points = 1.85%
        bool percentage;
    }
    // Mapping from token ID to array of fees (initial sale)
    mapping(uint256 => Fee[]) internal _creatorFees;

    // Mapping from token ID to array of fees (reselling)
    mapping(uint256 => Fee[]) internal _resellerFees;

    // Mapping from token ID to account price
    mapping(uint256 => mapping(address => Listing)) internal _tokenListings;

    function addCreatorFees(uint256 tokenId, Fee[] memory fees) public {
        require(_feesLock[tokenId] == false, "Fees locked");
        require(
            _owners[tokenId] == _msgSender() ||
                _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );
        for (uint256 i = 0; i < fees.length; i++) {
            if (fees[i].percentage == true) {
                require(
                    fees[i].value < 10000,
                    "Fee must be between 1-10000 basis points"
                );
                require(
                    fees[i].value > 0,
                    "Fee must be between 1-10000 basis points"
                );
            }
            _creatorFees[tokenId].push(fees[i]);
        }
    }

    function addResellerFees(uint256 tokenId, Fee[] memory fees) public {
        require(_feesLock[tokenId] == false, "Fees locked");
        require(
            _owners[tokenId] == _msgSender() ||
                _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );
        for (uint256 i = 0; i < fees.length; i++) {
            _resellerFees[tokenId].push(fees[i]);
        }
    }

    modifier notPaused(uint256 _tokenId) {
        require(_isPaused[_tokenId] != true, "Cannot trade paused token");
        _;
    }

    function pauseToken(uint256 tokenId, bool isPausedFlag) public {
        require(_rootOperators[_msgSender()] == true, "Must be operator");
        _isPaused[tokenId] = isPausedFlag;
    }

    function lockFees(uint256 tokenId) public {
        require(
            _owners[tokenId] == _msgSender() ||
                _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );
        _feesLock[tokenId] = true;
    }

    function getListing(uint256 tokenId, address seller)
        public
        view
        returns (Listing memory)
    {
        return _tokenListings[tokenId][seller];
    }

    function getCreatorFees(uint256 tokenId)
        public
        view
        returns (Fee[] memory)
    {
        return _creatorFees[tokenId];
    }

    function getResellerFees(uint256 tokenId)
        public
        view
        returns (Fee[] memory)
    {
        return _resellerFees[tokenId];
    }

    function setTokenPrice(
        uint256 _tokenId,
        uint256 price,
        bool biddingEnabled,
        uint256 numberOfDays
    ) public {
        require(
            _balances[_tokenId][_msgSender()] > 0,
            "Caller must own given token"
        );
        if (_tokenListings[_tokenId][_msgSender()].biddingEnabled) {
            require(
                _tokenListings[_tokenId][_msgSender()].currentBidder ==
                    payable(0),
                "Auction in progress"
            );
        }

        if (numberOfDays > 0) {
            _tokenListings[_tokenId][_msgSender()] = Listing(
                price,
                price,
                biddingEnabled,
                block.timestamp + (numberOfDays * 1 days), // active for x days from now
                payable(0),
                false
            );
        } else {
            _tokenListings[_tokenId][_msgSender()] = Listing(
                price,
                price,
                biddingEnabled,
                0, // active for unlimited time
                payable(0),
                false
            );
        }
    }

    function addMetaFileUrl(uint256 id, string memory url) public {
        require(
            _owners[id] == _msgSender() || _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );
        require(bytes(_metaFileUrl[id]).length == 0, "File url already set");

        _metaFileUrl[id] = url;
    }

    function setSecretField(uint256 id, string memory secret) public {
        require(
            _owners[id] == _msgSender() || _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );
        require(bytes(_secretFields[id]).length == 0, "Secret already set");

        _secretFields[id] = secret;
    }

    function getSecretField(uint256 id) public view returns (string memory) {
        require(_balances[id][_msgSender()] > 0, "Caller must own given token");

        return _secretFields[id];
    }

    function getMetaFileUrl(uint256 id) public view returns (string memory) {
        return _metaFileUrl[id];
    }

    function addProofChecksums(uint256 id, string[] memory checksums) public {
        require(
            _owners[id] == _msgSender() || _rootOperators[_msgSender()] == true,
            "Must be owner or operator"
        );

        for (uint256 i = 0; i < checksums.length; i++) {
            _proofChecksums[id].push(checksums[i]);
        }
    }

    function getChecksums(uint256 id) public view returns (string[] memory) {
        return _proofChecksums[id];
    }

    // Used as the URI for all token types by relying on ID substition, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /*
     *     bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e
     *     bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a
     *     bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6
     *
     *     => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^
     *        0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26
     */
    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    /*
     *     bytes4(keccak256('uri(uint256)')) == 0x0e89341c
     */
    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    /**
     * @dev See {_setURI}.
     */
    event TokenUpgrade(uint256 oldId, uint256 newId);

    constructor(string memory tokenUri) {
        _setURI(tokenUri);

        // register the supported interfaces to conform to ERC1155 via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155);

        // register the supported interfaces to conform to ERC1155MetadataURI via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);

        _rootOperators[_msgSender()] = true;
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substituion mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256 tokenId)
        external
        view
        override
        returns (string memory)
    {
        return string(abi.encodePacked(_uri, Strings.uint2str(tokenId)));
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        public
        view
        override
        returns (uint256)
    {
        require(
            account != address(0),
            "ERC1155: balance query for the zero address"
        );
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        override
        returns (uint256[] memory)
    {
        require(
            accounts.length == ids.length,
            "ERC1155: accounts and ids length mismatch"
        );

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(
                accounts[i] != address(0),
                "ERC1155: batch balance query for the zero address"
            );
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(
            _msgSender() != operator,
            "ERC1155: setting approval status for self"
        );

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator)
        public
        view
        override
        returns (bool)
    {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            _rootOperators[_msgSender()] == true,
            "Caller is not root operator"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            from,
            to,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            data
        );

        _balances[id][from] = _balances[id][from].sub(
            amount,
            "ERC1155: insufficient balance for transfer"
        );
        _balances[id][to] = _balances[id][to].add(amount);

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount
    ) internal {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            from,
            to,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            "0x0"
        );

        _balances[id][from] = _balances[id][from].sub(
            amount,
            "ERC1155: insufficient balance for transfer"
        );
        _balances[id][to] = _balances[id][to].add(amount);

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, "0x0");
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            _rootOperators[_msgSender()] == true,
            "Caller is not root operator"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];
            _balances[id][from] = _balances[id][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[id][to] = _balances[id][to].add(amount);
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            from,
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substituion mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public {
        require(account != address(0), "ERC1155: mint to the zero address");
        require(
            _owners[id] == address(0),
            "You are not allowed to mint given id"
        );

        address caller = _msgSender();

        _beforeTokenTransfer(
            caller,
            address(0),
            account,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            data
        );

        _balances[id][account] = _balances[id][account].add(amount);
        _owners[id] = payable(caller);

        emit TransferSingle(caller, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(
            caller,
            address(0),
            account,
            id,
            amount,
            data
        );
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            account,
            address(0),
            _asSingletonArray(id),
            _asSingletonArray(amount),
            ""
        );

        _balances[id][account] = _balances[id][account].sub(
            amount,
            "ERC1155: burn amount exceeds balance"
        );

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][account] = _balances[ids[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    amount,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver(to).onERC1155Received.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    amounts,
                    data
                )
            returns (bytes4 response) {
                if (
                    response !=
                    IERC1155Receiver(to).onERC1155BatchReceived.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element)
        private
        pure
        returns (uint256[] memory)
    {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

abstract contract Auctionable is Ownable, CreatorsHubBase {
    event Bid(
        address indexed _bidder,
        uint256 indexed _amount,
        uint256 indexed _tokenId
    );
    event AcceptBid(
        address indexed _bidder,
        address indexed _seller,
        uint256 _amount,
        uint256 indexed _tokenId
    );
    event CancelBid(
        address indexed _bidder,
        uint256 indexed _amount,
        uint256 indexed _tokenId
    );
    event Sold(
        address indexed _buyer,
        address indexed _seller,
        uint256 _amount,
        uint256 indexed _tokenId
    );

    function clearBid(uint256 _tokenId, address seller) private {
        _tokenListings[_tokenId][seller].currentBidder = payable(0);
        _tokenListings[_tokenId][seller].price = _tokenListings[_tokenId][
            seller
        ]
            .initialPrice;
        _tokenListings[_tokenId][seller].operatorBid = false;
    }

    function returnCurrentBid(uint256 _tokenId, address seller) private {
        uint256 currentBid = _tokenListings[_tokenId][seller].price;
        address payable currentBidder =
            _tokenListings[_tokenId][seller].currentBidder;
        if (
            currentBidder != address(0) &&
            !_tokenListings[_tokenId][seller].operatorBid
        ) {
            currentBidder.transfer(currentBid);
        }
    }

    function isGreaterBid(uint256 _tokenId, address seller)
        private
        view
        returns (bool)
    {
        return msg.value > _tokenListings[_tokenId][seller].price;
    }

    function bid(uint256 _tokenId, address seller)
        public
        payable
        notPaused(_tokenId)
    {
        require(
            _tokenListings[_tokenId][seller].biddingEnabled,
            "Must be auction"
        );
        require(seller != _msgSender(), "Seller cannot bid");
        require(isGreaterBid(_tokenId, seller), "Current bid is higher");
        if (_tokenListings[_tokenId][seller].activeTill != 0) {
            require(
                _tokenListings[_tokenId][seller].activeTill > block.timestamp,
                "Listing expired"
            );
        }
        returnCurrentBid(_tokenId, seller);
        _tokenListings[_tokenId][seller].currentBidder = payable(_msgSender());
        _tokenListings[_tokenId][seller].price = msg.value;
        _tokenListings[_tokenId][seller].operatorBid = false;
        emit Bid(_msgSender(), msg.value, _tokenId);
    }

    function operatorBid(
        uint256 _tokenId,
        address seller,
        uint256 price,
        address bidder
    ) public payable notPaused(_tokenId) {
        require(_rootOperators[_msgSender()] == true, "Must be operator");
        require(
            _tokenListings[_tokenId][seller].biddingEnabled,
            "Must be auction"
        );
        require(
            price > _tokenListings[_tokenId][seller].price,
            "Current bid is higher"
        );
        if (_tokenListings[_tokenId][seller].activeTill != 0) {
            require(
                _tokenListings[_tokenId][seller].activeTill > block.timestamp,
                "Listing expired"
            );
        }
        returnCurrentBid(_tokenId, seller);
        _tokenListings[_tokenId][seller].currentBidder = payable(bidder);
        _tokenListings[_tokenId][seller].price = price;
        _tokenListings[_tokenId][seller].operatorBid = true;
        emit Bid(bidder, price, _tokenId);
    }

    function operatorCancelBid(uint256 _tokenId, address seller)
        public
        payable
    {
        require(_rootOperators[_msgSender()] == true, "Must be operator");
        require(
            _tokenListings[_tokenId][seller].biddingEnabled,
            "Must be auction"
        );
        require(
            _tokenListings[_tokenId][seller].currentBidder != address(0),
            "No bid to cancel"
        );
        address payable bidder = _tokenListings[_tokenId][seller].currentBidder;
        uint256 bidAmount = _tokenListings[_tokenId][seller].price;
        returnCurrentBid(_tokenId, seller);
        clearBid(_tokenId, seller);
        emit CancelBid(bidder, bidAmount, _tokenId);
    }

    function acceptBid(uint256 _tokenId) public notPaused(_tokenId) {
        require(
            _tokenListings[_tokenId][_msgSender()].biddingEnabled,
            "Must be auction"
        );
        require(
            balanceOf(_msgSender(), _tokenId) > 0,
            "Seller does not own token anymore"
        );
        uint256 currentBid = _tokenListings[_tokenId][_msgSender()].price;
        address currentBidder =
            _tokenListings[_tokenId][_msgSender()].currentBidder;
        if (!_tokenListings[_tokenId][_msgSender()].operatorBid) {
            payout(_tokenId, _msgSender());
        }
        transferFrom(_msgSender(), currentBidder, _tokenId, 1);
        clearBid(_tokenId, _msgSender());
        emit AcceptBid(currentBidder, _msgSender(), currentBid, _tokenId);
    }

    function payout(uint256 _tokenId, address _seller) private {
        uint256 totalPrice = _tokenListings[_tokenId][_seller].price;
        uint256 allFees = 0;

        if (_seller == _owners[_tokenId]) {
            Fee[] memory fees = getCreatorFees(_tokenId);
            for (uint256 i = 0; i < fees.length; ++i) {
                if (fees[i].percentage) {
                    uint256 fee = (fees[i].value * totalPrice) / 10000;
                    allFees += fee;
                    fees[i].recipient.transfer(fee);
                } else {
                    allFees += fees[i].value;
                    fees[i].recipient.transfer(fees[i].value);
                }
            }
        } else {
            Fee[] memory fees = getResellerFees(_tokenId);
            for (uint256 i = 0; i < fees.length; ++i) {
                if (fees[i].percentage) {
                    uint256 fee = (fees[i].value * totalPrice) / 10000;
                    allFees += fee;
                    fees[i].recipient.transfer(fee);
                } else {
                    allFees += fees[i].value;
                    fees[i].recipient.transfer(fees[i].value);
                }
            }
        }
        payable(_seller).transfer(totalPrice - allFees);
    }

    function cancelBid(uint256 _tokenId, address seller) public {
        address payable bidder = _tokenListings[_tokenId][seller].currentBidder;
        require(
            _msgSender() == bidder || _msgSender() == seller,
            "You must be last bidder or owner"
        );
        uint256 bidAmount = _tokenListings[_tokenId][seller].price;
        returnCurrentBid(_tokenId, seller);
        clearBid(_tokenId, seller);
        emit CancelBid(bidder, bidAmount, _tokenId);
    }

    function buy(uint256 _tokenId, address seller)
        public
        payable
        notOwnerOf(_tokenId)
        notPaused(_tokenId)
    {
        uint256 salePrice = _tokenListings[_tokenId][seller].price;
        uint256 sentPrice = msg.value;
        address buyer = _msgSender();
        require(
            balanceOf(seller, _tokenId) > 0,
            "Seller does not own token anymore"
        );
        require(salePrice > 0, "Cannot buy this token");
        require(
            _tokenListings[_tokenId][seller].biddingEnabled == false,
            "Cannot buy, auction in progress"
        );
        require(sentPrice >= salePrice, "Insufficient value sent");
        if (_tokenListings[_tokenId][seller].activeTill != 0) {
            require(
                _tokenListings[_tokenId][seller].activeTill > block.timestamp,
                "Listing expired"
            );
        }
        payout(_tokenId, seller);
        clearBid(_tokenId, seller);
        transferFrom(seller, buyer, _tokenId, 1);
        Sold(buyer, seller, sentPrice, _tokenId);
    }
}

contract AuctionableERC1155 is
    CreatorsHubBase("https://creatorshub.license.rocks/api/public/metaFile/"),
    Auctionable
{
    constructor() {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_bidder","type":"address"},{"indexed":true,"internalType":"address","name":"_seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"AcceptBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Bid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"CancelBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_buyer","type":"address"},{"indexed":true,"internalType":"address","name":"_seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newId","type":"uint256"}],"name":"TokenUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"acceptBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"percentage","type":"bool"}],"internalType":"struct CreatorsHubBase.Fee[]","name":"fees","type":"tuple[]"}],"name":"addCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"url","type":"string"}],"name":"addMetaFileUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string[]","name":"checksums","type":"string[]"}],"name":"addProofChecksums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"percentage","type":"bool"}],"internalType":"struct CreatorsHubBase.Fee[]","name":"fees","type":"tuple[]"}],"name":"addResellerFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"cancelBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getChecksums","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreatorFees","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"percentage","type":"bool"}],"internalType":"struct CreatorsHubBase.Fee[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"getListing","outputs":[{"components":[{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"biddingEnabled","type":"bool"},{"internalType":"uint256","name":"activeTill","type":"uint256"},{"internalType":"address payable","name":"currentBidder","type":"address"},{"internalType":"bool","name":"operatorBid","type":"bool"}],"internalType":"struct CreatorsHubBase.Listing","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMetaFileUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getResellerFees","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"percentage","type":"bool"}],"internalType":"struct CreatorsHubBase.Fee[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getSecretField","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"}],"name":"operatorBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"operatorCancelBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"isPausedFlag","type":"bool"}],"name":"pauseToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"secret","type":"string"}],"name":"setSecretField","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"biddingEnabled","type":"bool"},{"internalType":"uint256","name":"numberOfDays","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405180606001604052806036815260200162004fd160369139604051806040016040528060078152602001664552433131353560c81b815250604051806040016040528060018152602001603160f81b815250818160405180608001604052806052815260200162005007605291398051906020012082805190602001208280519060200120620000a96200014f60201b60201c565b30604051602001620000c0959493929190620002cc565b60408051601f19818403018152919052805160209091012060015550620000ec92508391505062000153565b620000fe636cdb3d1360e11b6200016c565b620001106303a24d0760e21b6200016c565b60016007600062000120620001c7565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055506200036c565b4690565b80516200016890601090602084019062000226565b5050565b6001600160e01b03198082161415620001a25760405162461bcd60e51b81526004016200019990620002f8565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6000333014156200022057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150620002239050565b50335b90565b82805462000234906200032f565b90600052602060002090601f016020900481019282620002585760008555620002a3565b82601f106200027357805160ff1916838001178555620002a3565b82800160010185558215620002a3579182015b82811115620002a357825182559160200191906001019062000286565b50620002b1929150620002b5565b5090565b5b80821115620002b15760008155600101620002b6565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b6002810460018216806200034457607f821691505b602082108114156200036657634e487b7160e01b600052602260045260246000fd5b50919050565b614c55806200037c6000396000f3fe6080604052600436106101e65760003560e01c8063744561ac11610102578063b901fd8711610095578063d66675ed11610064578063d66675ed146105a4578063dcee692b146105c4578063e985e9c5146105e4578063f242432a14610604576101ed565b8063b901fd8714610524578063c1b3626714610544578063cb462a4b14610571578063cbd21f5914610591576101ed565b8063935b74c8116100d1578063935b74c8146104a45780639a8a2f78146104d15780639f04996d146104f1578063a22cb46514610504576101ed565b8063744561ac146104315780637463688514610451578063781a1d1b146104715780637deb602514610491576101ed565b8063314a97671161017a57806359d79c911161014957806359d79c91146103a457806361ab63d6146103c45780636352211e146103e4578063731133e914610411576101ed565b8063314a976714610324578063474c819e146103445780634c23a525146103645780634e1273f414610377576101ed565b806325ee6ee9116101b657806325ee6ee9146102955780632b1fd58a146102c25780632d0335ab146102e45780632eb2c2d614610304576101ed565b8062fdd58e146101f257806301ffc9a7146102285780630c53c51c146102555780630e89341c14610275576101ed565b366101ed57005b600080fd5b3480156101fe57600080fd5b5061021261020d366004613966565b610624565b60405161021f919061492a565b60405180910390f35b34801561023457600080fd5b50610248610243366004613ab0565b61067d565b60405161021f9190614147565b6102686102633660046138ec565b6106b4565b60405161021f9190614194565b34801561028157600080fd5b50610268610290366004613ae8565b610834565b3480156102a157600080fd5b506102b56102b0366004613ae8565b610868565b60405161021f919061407c565b3480156102ce57600080fd5b506102e26102dd366004613ae8565b61099e565b005b3480156102f057600080fd5b506102126102ff366004613755565b610ba8565b34801561031057600080fd5b506102e261031f3660046137a9565b610bc3565b34801561033057600080fd5b506102e261033f366004613d2d565b610e12565b34801561035057600080fd5b506102e261035f366004613d2d565b610ee4565b6102e2610372366004613b24565b610fb1565b34801561038357600080fd5b506103976103923660046139f1565b6111b9565b60405161021f919061410f565b3480156103b057600080fd5b506102e26103bf366004613d67565b61135f565b3480156103d057600080fd5b506102e26103df366004613b00565b61160f565b3480156103f057600080fd5b506104046103ff366004613ae8565b611701565b60405161021f9190613f39565b34801561041d57600080fd5b506102e261042c366004613991565b611723565b34801561043d57600080fd5b5061026861044c366004613ae8565b61186f565b34801561045d57600080fd5b506102e261046c366004613bff565b611966565b34801561047d57600080fd5b506102e261048c366004613b6d565b611bac565b6102e261049f366004613b00565b611ca3565b3480156104b057600080fd5b506104c46104bf366004613b00565b611ecf565b60405161021f91906148de565b3480156104dd57600080fd5b506102e26104ec366004613d0b565b611f52565b6102e26104ff366004613b00565b611fbc565b34801561051057600080fd5b506102e261051f3660046138b8565b6121a8565b34801561053057600080fd5b506102e261053f366004613bff565b612276565b34801561055057600080fd5b5061056461055f366004613ae8565b6123ed565b60405161021f919061401c565b34801561057d57600080fd5b506102e261058c366004613ae8565b6124ce565b6102e261059f366004613b00565b61255f565b3480156105b057600080fd5b506102b56105bf366004613ae8565b61266d565b3480156105d057600080fd5b506102686105df366004613ae8565b612798565b3480156105f057600080fd5b506102486105ff366004613771565b6127b5565b34801561061057600080fd5b506102e261061f366004613852565b6127e3565b60006001600160a01b0383166106555760405162461bcd60e51b815260040161064c906142d3565b60405180910390fd5b5060009081526004602090815260408083206001600160a01b03949094168352929052205490565b600061068882612968565b806106ac57506001600160e01b0319821660009081526020819052604090205460ff165b90505b919050565b60408051606081810183526001600160a01b038816600081815260026020908152908590205484528301529181018690526106f28782878787612981565b61070e5760405162461bcd60e51b815260040161064c90614588565b600080306001600160a01b0316888a60405160200161072e929190613e41565b60408051601f198184030181529082905261074891613e25565b6000604051808303816000865af19150503d8060008114610785576040519150601f19603f3d011682016040523d82523d6000602084013e61078a565b606091505b5091509150816107ac5760405162461bcd60e51b815260040161064c9061439d565b6001600160a01b0389166000908152600260205260409020546107d0906001612a01565b6001600160a01b038a166000908152600260205260409081902091909155517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b90610820908b9033908c90613f4d565b60405180910390a198975050505050505050565b6060601061084183612a14565b604051602001610852929190613e78565b6040516020818303038152906040529050919050565b6060600d6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561099357838290600052602060002090600402016040518060800160405290816000820180546108d090614a58565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90614a58565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b50505091835250506001828101546001600160a01b03166020808401919091526002840154604084015260039093015460ff1615156060909201919091529183529201910161089d565b505050509050919050565b6000818152600c6020526040902054819060ff161515600114156109d45760405162461bcd60e51b815260040161064c906143d4565b6000828152600f60205260408120906109eb612b59565b6001600160a01b0316815260208101919091526040016000206002015460ff16610a275760405162461bcd60e51b815260040161064c90614670565b6000610a3a610a34612b59565b84610624565b11610a575760405162461bcd60e51b815260040161064c9061477d565b6000828152600f6020526040812081610a6e612b59565b6001600160a01b03166001600160a01b031681526020019081526020016000206001015490506000600f60008581526020019081526020016000206000610ab3612b59565b6001600160a01b0390811682526020808301939093526040918201600090812060040154888252600f90945291822092169250610aee612b59565b6001600160a01b03168152602081019190915260400160002060040154600160a01b900460ff16610b2a57610b2a84610b25612b59565b612bb6565b610b3e610b35612b59565b82866001613006565b610b4f84610b4a612b59565b613186565b83610b58612b59565b6001600160a01b0316826001600160a01b03167fd6deddb2e105b46d4644d24aac8c58493a0f107e7973b2fe8d8fa7931a2912be85604051610b9a919061492a565b60405180910390a450505050565b6001600160a01b031660009081526002602052604090205490565b8151835114610be45760405162461bcd60e51b815260040161064c90614807565b6001600160a01b038416610c0a5760405162461bcd60e51b815260040161064c906144b7565b60076000610c16612b59565b6001600160a01b0316815260208101919091526040016000205460ff161515600114610c545760405162461bcd60e51b815260040161064c9061440b565b6000610c5e612b59565b9050610c6e818787878787610e0a565b60005b8451811015610da4576000858281518110610c9c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610cc857634e487b7160e01b600052603260045260246000fd5b60200260200101519050610d35816040518060600160405280602a8152602001614bf6602a91396004600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546131cb9092919063ffffffff16565b60008381526004602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610d6c9082612a01565b60009283526004602090815260408085206001600160a01b038c1686529091529092209190915550610d9d81614a93565b9050610c71565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610df4929190614122565b60405180910390a4610e0a8187878787876131f7565b505050505050565b610e1a612b59565b6000838152600360205260409020546001600160a01b0390811691161480610e6c575060076000610e49612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b610e885760405162461bcd60e51b815260040161064c906144fc565b6000828152600a602052604090208054610ea190614a58565b159050610ec05760405162461bcd60e51b815260040161064c9061460d565b6000828152600a602090815260409091208251610edf92840190613593565b505050565b610eec612b59565b6000838152600360205260409020546001600160a01b0390811691161480610f3e575060076000610f1b612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b610f5a5760405162461bcd60e51b815260040161064c906144fc565b60008281526008602052604090208054610f7390614a58565b159050610f925760405162461bcd60e51b815260040161064c9061436f565b60008281526008602090815260409091208251610edf92840190613593565b6000848152600c6020526040902054849060ff16151560011415610fe75760405162461bcd60e51b815260040161064c906143d4565b60076000610ff3612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001146110315760405162461bcd60e51b815260040161064c9061427a565b6000858152600f602090815260408083206001600160a01b038816845290915290206002015460ff166110765760405162461bcd60e51b815260040161064c90614670565b6000858152600f602090815260408083206001600160a01b038816845290915290206001015483116110ba5760405162461bcd60e51b815260040161064c906142a4565b6000858152600f602090815260408083206001600160a01b038816845290915290206003015415611129576000858152600f602090815260408083206001600160a01b038816845290915290206003015442106111295760405162461bcd60e51b815260040161064c9061484f565b611133858561330e565b6000858152600f602090815260408083206001600160a01b03888116855292528083206004810180546001909201889055600160a01b6001600160a01b031990921693871693841760ff60a01b19169190911790555187928692917f19421268847f42dd61705778018ddfc43bcdce8517e7a630acb12f122c7094819190a45050505050565b606081518351146111dc5760405162461bcd60e51b815260040161064c906147be565b600083516001600160401b0381111561120557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561122e578160200160208202803683370190505b50905060005b84518110156113575760006001600160a01b031685828151811061126857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156112975760405162461bcd60e51b815260040161064c9061431e565b600460008583815181106112bb57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008683815181106112f357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061133c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015261135081614a93565b9050611234565b509392505050565b600084815260046020526040812081611376612b59565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116113b45760405162461bcd60e51b815260040161064c906141fb565b6000848152600f60205260408120906113cb612b59565b6001600160a01b0316815260208101919091526040016000206002015460ff1615611444576000848152600f6020526040812081611407612b59565b6001600160a01b03908116825260208201929092526040016000206004015416146114445760405162461bcd60e51b815260040161064c9061448a565b8015611537576040518060c001604052808481526020018481526020018315158152602001826201518061147891906149f6565b6114829042614999565b8152600060208083018290526040928301829052878252600f9052908120906114a9612b59565b6001600160a01b0390811682526020808301939093526040918201600020845181559284015160018401559083015160028301805491151560ff199092169190911790556060830151600383015560808301516004909201805460a0909401511515600160a01b0260ff60a01b19939092166001600160a01b03199094169390931791909116179055611609565b6040805160c0810182528481526020808201869052841515828401526000606083018190526080830181905260a08301819052878152600f909152918220909161157f612b59565b6001600160a01b0390811682526020808301939093526040918201600020845181559284015160018401559083015160028301805491151560ff199092169190911790556060830151600383015560808301516004909201805460a0909401511515600160a01b0260ff60a01b19939092166001600160a01b031990941693909317919091161790555b50505050565b6000828152600f602090815260408083206001600160a01b0380861685529252909120600401541680611640612b59565b6001600160a01b0316148061166d5750816001600160a01b0316611662612b59565b6001600160a01b0316145b6116895760405162461bcd60e51b815260040161064c906146ff565b6000838152600f602090815260408083206001600160a01b03861684529091529020600101546116b9848461330e565b6116c38484613186565b8381836001600160a01b03167f09dcebe16a733e22cc47e4959c50d4f21624d9f1815db32c2e439fbbd7b3eda060405160405180910390a450505050565b6000818152600360205260408120546001600160a01b0316806106ac57600080fd5b6001600160a01b0384166117495760405162461bcd60e51b815260040161064c90614878565b6000838152600360205260409020546001600160a01b03161561177e5760405162461bcd60e51b815260040161064c906145c9565b6000611788612b59565b90506117a98160008761179a886133b6565b6117a3886133b6565b87610e0a565b60008481526004602090815260408083206001600160a01b03891684529091529020546117d69084612a01565b60008581526004602090815260408083206001600160a01b038a811680865291845282852095909555888452600390925280832080546001600160a01b0319169486169485179055519092907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906118519089908990614933565b60405180910390a46118688160008787878761340f565b5050505050565b6000818152600460205260408120606091908161188a612b59565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116118c85760405162461bcd60e51b815260040161064c906141fb565b6000828152600a6020526040902080546118e190614a58565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90614a58565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b50505050509050919050565b6000828152600b602052604090205460ff16156119955760405162461bcd60e51b815260040161064c906148b9565b61199d612b59565b6000838152600360205260409020546001600160a01b03908116911614806119ef5750600760006119cc612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b611a0b5760405162461bcd60e51b815260040161064c906144fc565b60005b8151811015610edf57818181518110611a3757634e487b7160e01b600052603260045260246000fd5b6020026020010151606001511515600115151415611ae657612710828281518110611a7257634e487b7160e01b600052603260045260246000fd5b60200260200101516040015110611a9b5760405162461bcd60e51b815260040161064c90614442565b6000828281518110611abd57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015111611ae65760405162461bcd60e51b815260040161064c90614442565b6000838152600d602052604090208251839083908110611b1657634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529282902081518051929460040290910192611b4f92849290910190613593565b5060208201516001820180546001600160a01b0319166001600160a01b03909216919091179055604082015160028201556060909101516003909101805460ff191691151591909117905580611ba481614a93565b915050611a0e565b611bb4612b59565b6000838152600360205260409020546001600160a01b0390811691161480611c06575060076000611be3612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b611c225760405162461bcd60e51b815260040161064c906144fc565b60005b8151811015610edf5760008381526009602052604090208251839083908110611c5e57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452928290208151611c909491909101929190910190613593565b5080611c9b81614a93565b915050611c25565b81611cac612b59565b6001600160a01b0316611cbe82611701565b6001600160a01b03161415611cd257600080fd5b6000838152600c6020526040902054839060ff16151560011415611d085760405162461bcd60e51b815260040161064c906143d4565b6000848152600f602090815260408083206001600160a01b0387168452909152812060010154903490611d39612b59565b90506000611d478789610624565b11611d645760405162461bcd60e51b815260040161064c9061477d565b60008311611d845760405162461bcd60e51b815260040161064c906146d0565b6000878152600f602090815260408083206001600160a01b038a16845290915290206002015460ff1615611dca5760405162461bcd60e51b815260040161064c90614699565b82821015611dea5760405162461bcd60e51b815260040161064c90614639565b6000878152600f602090815260408083206001600160a01b038a16845290915290206003015415611e59576000878152600f602090815260408083206001600160a01b038a1684529091529020600301544210611e595760405162461bcd60e51b815260040161064c9061484f565b611e638787612bb6565b611e6d8787613186565b611e7a8682896001613006565b86866001600160a01b0316826001600160a01b03167f16dd16959a056953a63cf14bf427881e762e54f03d86b864efea8238dd3b822f85604051611ebe919061492a565b60405180910390a450505050505050565b611ed7613617565b506000918252600f602090815260408084206001600160a01b039384168552825292839020835160c08101855281548152600182015492810192909252600281015460ff90811615159483019490945260038101546060830152600401549182166080820152600160a01b909104909116151560a082015290565b60076000611f5e612b59565b6001600160a01b0316815260208101919091526040016000205460ff161515600114611f9c5760405162461bcd60e51b815260040161064c9061427a565b6000918252600c6020526040909120805460ff1916911515919091179055565b6000828152600c6020526040902054829060ff16151560011415611ff25760405162461bcd60e51b815260040161064c906143d4565b6000838152600f602090815260408083206001600160a01b038616845290915290206002015460ff166120375760405162461bcd60e51b815260040161064c90614670565b61203f612b59565b6001600160a01b0316826001600160a01b031614156120705760405162461bcd60e51b815260040161064c9061455d565b61207a83836134e0565b6120965760405162461bcd60e51b815260040161064c906142a4565b6000838152600f602090815260408083206001600160a01b038616845290915290206003015415612105576000838152600f602090815260408083206001600160a01b038616845290915290206003015442106121055760405162461bcd60e51b815260040161064c9061484f565b61210f838361330e565b612117612b59565b6000848152600f602090815260408083206001600160a01b03878116855292529091206004810180543460019093018390556001600160a01b031916939092169290921760ff60a01b19169055839061216e612b59565b6001600160a01b03167f19421268847f42dd61705778018ddfc43bcdce8517e7a630acb12f122c70948160405160405180910390a4505050565b816001600160a01b03166121ba612b59565b6001600160a01b031614156121e15760405162461bcd60e51b815260040161064c90614734565b80600560006121ee612b59565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155612232612b59565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161226a9190614147565b60405180910390a35050565b6000828152600b602052604090205460ff16156122a55760405162461bcd60e51b815260040161064c906148b9565b6122ad612b59565b6000838152600360205260409020546001600160a01b03908116911614806122ff5750600760006122dc612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b61231b5760405162461bcd60e51b815260040161064c906144fc565b60005b8151811015610edf576000838152600e60205260409020825183908390811061235757634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452928290208151805192946004029091019261239092849290910190613593565b5060208201516001820180546001600160a01b0319166001600160a01b03909216919091179055604082015160028201556060909101516003909101805460ff1916911515919091179055806123e581614a93565b91505061231e565b606060096000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561099357838290600052602060002001805461244190614a58565b80601f016020809104026020016040519081016040528092919081815260200182805461246d90614a58565b80156124ba5780601f1061248f576101008083540402835291602001916124ba565b820191906000526020600020905b81548152906001019060200180831161249d57829003601f168201915b505050505081526020019060010190612422565b6124d6612b59565b6000828152600360205260409020546001600160a01b0390811691161480612528575060076000612505612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001145b6125445760405162461bcd60e51b815260040161064c906144fc565b6000908152600b60205260409020805460ff19166001179055565b6007600061256b612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001146125a95760405162461bcd60e51b815260040161064c9061427a565b6000828152600f602090815260408083206001600160a01b038516845290915290206002015460ff166125ee5760405162461bcd60e51b815260040161064c90614670565b6000828152600f602090815260408083206001600160a01b038581168552925290912060040154166126325760405162461bcd60e51b815260040161064c90614533565b6000828152600f602090815260408083206001600160a01b038581168552925290912060048101546001909101549116906116b9848461330e565b6060600e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561099357838290600052602060002090600402016040518060800160405290816000820180546126d590614a58565b80601f016020809104026020016040519081016040528092919081815260200182805461270190614a58565b801561274e5780601f106127235761010080835404028352916020019161274e565b820191906000526020600020905b81548152906001019060200180831161273157829003601f168201915b50505091835250506001828101546001600160a01b03166020808401919091526002840154604084015260039093015460ff161515606090920191909152918352920191016126a2565b60008181526008602052604090208054606091906118e190614a58565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160a01b0384166128095760405162461bcd60e51b815260040161064c906144b7565b60076000612815612b59565b6001600160a01b0316815260208101919091526040016000205460ff1615156001146128535760405162461bcd60e51b815260040161064c9061440b565b600061285d612b59565b905061286e81878761179a886133b6565b6128b5836040518060600160405280602a8152602001614bf6602a913960008781526004602090815260408083206001600160a01b038d16845290915290205491906131cb565b60008581526004602090815260408083206001600160a01b038b811685529252808320939093558716815220546128ec9084612a01565b60008581526004602090815260408083206001600160a01b03808b168086529190935292819020939093559151909188811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906129529089908990614933565b60405180910390a4610e0a81878787878761340f565b6001600160e01b031981166301ffc9a760e01b14919050565b600060016129966129918761350d565b61356b565b838686604051600081526020016040526040516129b69493929190614176565b6020604051602081039080840390855afa1580156129d8573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b6000612a0d8284614999565b9392505050565b606081612a3957506040805180820190915260018152600360fc1b60208201526106af565b8160005b8115612a635780612a4d81614a93565b9150612a5c9050600a836149d6565b9150612a3d565b6000816001600160401b03811115612a8b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ab5576020820181803683370190505b509050815b8515612b5057612acb600182614a15565b90506000612ada600a886149d6565b612ae590600a6149f6565b612aef9088614a15565b612afa9060306149b1565b905060008160f81b905080848481518110612b2557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612b47600a896149d6565b97505050612aba565b50949350505050565b600033301415612bb057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150612bb39050565b50335b90565b6000828152600f602090815260408083206001600160a01b03808616808652918452828520600101548786526003909452918420549293929091161415612de1576000612c0285610868565b905060005b8151811015612dda57818181518110612c3057634e487b7160e01b600052603260045260246000fd5b60200260200101516060015115612d0057600061271085848481518110612c6757634e487b7160e01b600052603260045260246000fd5b602002602001015160400151612c7d91906149f6565b612c8791906149d6565b9050612c938185614999565b9350828281518110612cb557634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612cf9573d6000803e3d6000fd5b5050612dca565b818181518110612d2057634e487b7160e01b600052603260045260246000fd5b60200260200101516040015183612d379190614999565b9250818181518110612d5957634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516001600160a01b03166108fc838381518110612d9157634e487b7160e01b600052603260045260246000fd5b6020026020010151604001519081150290604051600060405180830381858888f19350505050158015612dc8573d6000803e3d6000fd5b505b612dd381614a93565b9050612c07565b5050612fc7565b6000612dec8561266d565b905060005b8151811015612fc457818181518110612e1a57634e487b7160e01b600052603260045260246000fd5b60200260200101516060015115612eea57600061271085848481518110612e5157634e487b7160e01b600052603260045260246000fd5b602002602001015160400151612e6791906149f6565b612e7191906149d6565b9050612e7d8185614999565b9350828281518110612e9f57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612ee3573d6000803e3d6000fd5b5050612fb4565b818181518110612f0a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015183612f219190614999565b9250818181518110612f4357634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516001600160a01b03166108fc838381518110612f7b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604001519081150290604051600060405180830381858888f19350505050158015612fb2573d6000803e3d6000fd5b505b612fbd81614a93565b9050612df1565b50505b6001600160a01b0383166108fc612fde8385614a15565b6040518115909202916000818181858888f19350505050158015611868573d6000803e3d6000fd5b6001600160a01b03831661302c5760405162461bcd60e51b815260040161064c906144b7565b6000613036612b59565b9050613071818686613047876133b6565b613050876133b6565b6040518060400160405280600381526020016203078360ec1b815250610e0a565b6130b8826040518060600160405280602a8152602001614bf6602a913960008681526004602090815260408083206001600160a01b038c16845290915290205491906131cb565b60008481526004602090815260408083206001600160a01b038a811685529252808320939093558616815220546130ef9083612a01565b60008481526004602090815260408083206001600160a01b03808a168086529190935292819020939093559151909187811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906131559088908890614933565b60405180910390a461186881868686866040518060400160405280600381526020016203078360ec1b81525061340f565b6000918252600f602090815260408084206001600160a01b03939093168452919052902060048101805482546001909301929092556001600160a81b03199091169055565b600081848411156131ef5760405162461bcd60e51b815260040161064c9190614194565b505050900390565b613209846001600160a01b0316613587565b15610e0a5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906132429089908990889088908890600401613f79565b602060405180830381600087803b15801561325c57600080fd5b505af192505050801561328c575060408051601f3d908101601f1916820190925261328991810190613acc565b60015b6132d557613298614ae0565b806132a357506132bd565b8060405162461bcd60e51b815260040161064c9190614194565b60405162461bcd60e51b815260040161064c906141a7565b6001600160e01b0319811663bc197c8160e01b146133055760405162461bcd60e51b815260040161064c90614232565b50505050505050565b6000828152600f602090815260408083206001600160a01b03858116855292529091206001810154600490910154909116801580159061337b57506000848152600f602090815260408083206001600160a01b0387168452909152902060040154600160a01b900460ff16155b15611609576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611868573d6000803e3d6000fd5b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106133fe57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b613421846001600160a01b0316613587565b15610e0a5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061345a9089908990889088908890600401613fd7565b602060405180830381600087803b15801561347457600080fd5b505af19250505080156134a4575060408051601f3d908101601f191682019092526134a191810190613acc565b60015b6134b057613298614ae0565b6001600160e01b0319811663f23a6e6160e01b146133055760405162461bcd60e51b815260040161064c90614232565b6000918252600f602090815260408084206001600160a01b03939093168452919052902060010154341190565b6000604051806080016040528060438152602001614bb3604391398051602091820120835184830151604080870151805190860120905161354e9501614152565b604051602081830303815290604052805190602001209050919050565b600061357561358d565b8260405160200161354e929190613f1e565b3b151590565b60015490565b82805461359f90614a58565b90600052602060002090601f0160209004810192826135c15760008555613607565b82601f106135da57805160ff1916838001178555613607565b82800160010185558215613607579182015b828111156136075782518255916020019190600101906135ec565b5061361392915061365a565b5090565b6040518060c0016040528060008152602001600081526020016000151581526020016000815260200160006001600160a01b031681526020016000151581525090565b5b80821115613613576000815560010161365b565b600082601f83011261367f578081fd5b8135602061369461368f8361496a565b614941565b82815281810190858301838502870184018810156136b0578586fd5b855b858110156136ce578135845292840192908401906001016136b2565b5090979650505050505050565b803580151581146106af57600080fd5b600082601f8301126136fb578081fd5b81356001600160401b0381111561371457613714614ac4565b613727601f8201601f1916602001614941565b81815284602083860101111561373b578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613766578081fd5b8135612a0d81614b84565b60008060408385031215613783578081fd5b823561378e81614b84565b9150602083013561379e81614b84565b809150509250929050565b600080600080600060a086880312156137c0578081fd5b85356137cb81614b84565b945060208601356137db81614b84565b935060408601356001600160401b03808211156137f6578283fd5b61380289838a0161366f565b94506060880135915080821115613817578283fd5b61382389838a0161366f565b93506080880135915080821115613838578283fd5b50613845888289016136eb565b9150509295509295909350565b600080600080600060a08688031215613869578283fd5b853561387481614b84565b9450602086013561388481614b84565b9350604086013592506060860135915060808601356001600160401b038111156138ac578182fd5b613845888289016136eb565b600080604083850312156138ca578182fd5b82356138d581614b84565b91506138e3602084016136db565b90509250929050565b600080600080600060a08688031215613903578283fd5b853561390e81614b84565b945060208601356001600160401b03811115613928578384fd5b613934888289016136eb565b9450506040860135925060608601359150608086013560ff81168114613958578182fd5b809150509295509295909350565b60008060408385031215613978578182fd5b823561398381614b84565b946020939093013593505050565b600080600080608085870312156139a6578182fd5b84356139b181614b84565b9350602085013592506040850135915060608501356001600160401b038111156139d9578182fd5b6139e5878288016136eb565b91505092959194509250565b60008060408385031215613a03578182fd5b82356001600160401b0380821115613a19578384fd5b818501915085601f830112613a2c578384fd5b81356020613a3c61368f8361496a565b82815281810190858301838502870184018b1015613a58578889fd5b8896505b84871015613a83578035613a6f81614b84565b835260019690960195918301918301613a5c565b5096505086013592505080821115613a99578283fd5b50613aa68582860161366f565b9150509250929050565b600060208284031215613ac1578081fd5b8135612a0d81614b9c565b600060208284031215613add578081fd5b8151612a0d81614b9c565b600060208284031215613af9578081fd5b5035919050565b60008060408385031215613b12578182fd5b82359150602083013561379e81614b84565b60008060008060808587031215613b39578182fd5b843593506020850135613b4b81614b84565b9250604085013591506060850135613b6281614b84565b939692955090935050565b60008060408385031215613b7f578182fd5b823591506020808401356001600160401b03811115613b9c578283fd5b8401601f81018613613bac578283fd5b8035613bba61368f8261496a565b81815283810190838501865b84811015613bef57613bdd8b8884358901016136eb565b84529286019290860190600101613bc6565b5096999098509650505050505050565b60008060408385031215613c11578182fd5b823591506020808401356001600160401b0380821115613c2f578384fd5b818601915086601f830112613c42578384fd5b8135613c5061368f8261496a565b81815284810190848601875b84811015613cfa57813587016080818e03601f19011215613c7b57898afd5b604051608081018181108982111715613c9657613c96614ac4565b604052818a013588811115613ca9578b8cfd5b613cb78f8c838601016136eb565b8252506040820135613cc881614b84565b818b015260608201356040820152613ce2608083016136db565b60608201528552509287019290870190600101613c5c565b50979a909950975050505050505050565b60008060408385031215613d1d578182fd5b823591506138e3602084016136db565b60008060408385031215613d3f578182fd5b8235915060208301356001600160401b03811115613d5b578182fd5b613aa6858286016136eb565b60008060008060808587031215613d7c578182fd5b8435935060208501359250613d93604086016136db565b9396929550929360600135925050565b6000815180845260208085019450808401835b83811015613dd257815187529582019590820190600101613db6565b509495945050505050565b60008151808452613df5816020860160208601614a2c565b601f01601f19169290920160200192915050565b60008151613e1b818560208601614a2c565b9290920192915050565b60008251613e37818460208701614a2c565b9190910192915050565b60008351613e53818460208801614a2c565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b8254600090819060028104600180831680613e9457607f831692505b6020808410821415613eb457634e487b7160e01b87526022600452602487fd5b818015613ec85760018114613ed957613f05565b60ff19861689528489019650613f05565b613ee28b61498d565b885b86811015613efd5781548b820152908501908301613ee4565b505084890196505b505050505050613f158185613e09565b95945050505050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03848116825283166020820152606060408201819052600090613f1590830184613ddd565b6001600160a01b0386811682528516602082015260a060408201819052600090613fa590830186613da3565b8281036060840152613fb78186613da3565b90508281036080840152613fcb8185613ddd565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061401190830184613ddd565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561406f57603f1988860301845261405d858351613ddd565b94509285019290850190600101614041565b5092979650505050505050565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561410157603f198984030185528151608081518186526140c682870182613ddd565b838b01516001600160a01b0316878c0152898401518a88015260609384015115159390960192909252505093860193908601906001016140a0565b509098975050505050505050565b600060208252612a0d6020830184613da3565b6000604082526141356040830185613da3565b8281036020840152613f158185613da3565b901515815260200190565b93845260208401929092526001600160a01b03166040830152606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252612a0d6020830184613ddd565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b6020808252601b908201527f43616c6c6572206d757374206f776e20676976656e20746f6b656e0000000000604082015260600190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526010908201526f26bab9ba1031329037b832b930ba37b960811b604082015260600190565b60208082526015908201527421bab93932b73a103134b21034b9903434b3b432b960591b604082015260600190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526031908201527f455243313135353a2062617463682062616c616e636520717565727920666f7260408201527020746865207a65726f206164647265737360781b606082015260800190565b602080825260149082015273119a5b19481d5c9b08185b1c9958591e481cd95d60621b604082015260600190565b6020808252601d908201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c6c000000604082015260600190565b60208082526019908201527f43616e6e6f742074726164652070617573656420746f6b656e00000000000000604082015260600190565b6020808252601b908201527f43616c6c6572206973206e6f7420726f6f74206f70657261746f720000000000604082015260600190565b60208082526028908201527f466565206d757374206265206265747765656e20312d313030303020626173696040820152677320706f696e747360c01b606082015260800190565b60208082526013908201527241756374696f6e20696e2070726f677265737360681b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526019908201527f4d757374206265206f776e6572206f72206f70657261746f7200000000000000604082015260600190565b60208082526010908201526f139bc8189a59081d1bc818d85b98d95b60821b604082015260600190565b60208082526011908201527014d95b1b195c8818d85b9b9bdd08189a59607a1b604082015260600190565b60208082526021908201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636040820152600d60fb1b606082015260800190565b60208082526024908201527f596f7520617265206e6f7420616c6c6f77656420746f206d696e7420676976656040820152631b881a5960e21b606082015260800190565b60208082526012908201527114d958dc995d08185b1c9958591e481cd95d60721b604082015260600190565b60208082526017908201527f496e73756666696369656e742076616c75652073656e74000000000000000000604082015260600190565b6020808252600f908201526e26bab9ba1031329030bab1ba34b7b760891b604082015260600190565b6020808252601f908201527f43616e6e6f74206275792c2061756374696f6e20696e2070726f677265737300604082015260600190565b60208082526015908201527421b0b73737ba10313abc903a3434b9903a37b5b2b760591b604082015260600190565b6020808252818101527f596f75206d757374206265206c61737420626964646572206f72206f776e6572604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526021908201527f53656c6c657220646f6573206e6f74206f776e20746f6b656e20616e796d6f726040820152606560f81b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252600f908201526e131a5cdd1a5b99c8195e1c1a5c9959608a1b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600b908201526a1199595cc81b1bd8dad95960aa1b604082015260600190565b8151815260208083015190820152604080830151151590820152606080830151908201526080808301516001600160a01b03169082015260a09182015115159181019190915260c00190565b90815260200190565b918252602082015260400190565b6040518181016001600160401b038111828210171561496257614962614ac4565b604052919050565b60006001600160401b0382111561498357614983614ac4565b5060209081020190565b60009081526020902090565b600082198211156149ac576149ac614aae565b500190565b600060ff821660ff84168060ff038211156149ce576149ce614aae565b019392505050565b6000826149f157634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614a1057614a10614aae565b500290565b600082821015614a2757614a27614aae565b500390565b60005b83811015614a47578181015183820152602001614a2f565b838111156116095750506000910152565b600281046001821680614a6c57607f821691505b60208210811415614a8d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614aa757614aa7614aae565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d1015614af057612bb3565b600481823e6308c379a0614b048251614ada565b14614b0e57612bb3565b6040513d600319016004823e80513d6001600160401b038160248401118184111715614b3d5750505050612bb3565b82840192508251915080821115614b575750505050612bb3565b503d83016020828401011115614b6f57505050612bb3565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114614b9957600080fd5b50565b6001600160e01b031981168114614b9957600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572a26469706673582212205edde900f7dc021834e6dd606e4063b39c1e163b3ea2c84565b690113aee2b3964736f6c6343000800003368747470733a2f2f63726561746f72736875622e6c6963656e73652e726f636b732f6170692f7075626c69632f6d65746146696c652f454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

62074:155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41344:301;;;;;;;;;;-1:-1:-1;41344:301:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8864:190;;;;;;;;;;-1:-1:-1;8864:190:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27237:1140::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40992:201::-;;;;;;;;;;-1:-1:-1;40992:201:0;;;;;:::i;:::-;;:::i;36002:155::-;;;;;;;;;;-1:-1:-1;36002:155:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;58337:816::-;;;;;;;;;;-1:-1:-1;58337:816:0;;;;;:::i;:::-;;:::i;:::-;;28803:107;;;;;;;;;;-1:-1:-1;28803:107:0;;;;;:::i;:::-;;:::i;45180:1265::-;;;;;;;;;;-1:-1:-1;45180:1265:0;;;;;:::i;:::-;;:::i;37856:343::-;;;;;;;;;;-1:-1:-1;37856:343:0;;;;;:::i;:::-;;:::i;37511:337::-;;;;;;;;;;-1:-1:-1;37511:337:0;;;;;:::i;:::-;;:::i;56580:1011::-;;;;;;:::i;:::-;;:::i;41811:695::-;;;;;;;;;;-1:-1:-1;41811:695:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36330:1173::-;;;;;;;;;;-1:-1:-1;36330:1173:0;;;;;:::i;:::-;;:::i;60460:496::-;;;;;;;;;;-1:-1:-1;60460:496:0;;;;;:::i;:::-;;:::i;30953:195::-;;;;;;;;;;-1:-1:-1;30953:195:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47771:949::-;;;;;;;;;;-1:-1:-1;47771:949:0;;;;;:::i;:::-;;:::i;38207:199::-;;;;;;;;;;-1:-1:-1;38207:199:0;;;;;:::i;:::-;;:::i;33970:792::-;;;;;;;;;;-1:-1:-1;33970:792:0;;;;;:::i;:::-;;:::i;38536:358::-;;;;;;;;;;-1:-1:-1;38536:358:0;;;;;:::i;:::-;;:::i;60964:1103::-;;;;;;:::i;:::-;;:::i;35815:179::-;;;;;;;;;;-1:-1:-1;35815:179:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35347:191::-;;;;;;;;;;-1:-1:-1;35347:191:0;;;;;:::i;:::-;;:::i;55656:916::-;;;;;;:::i;:::-;;:::i;42579:380::-;;;;;;;;;;-1:-1:-1;42579:380:0;;;;;:::i;:::-;;:::i;34770:428::-;;;;;;;;;;-1:-1:-1;34770:428:0;;;;;:::i;:::-;;:::i;38902:117::-;;;;;;;;;;-1:-1:-1;38902:117:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35546:261::-;;;;;;;;;;-1:-1:-1;35546:261:0;;;;;:::i;:::-;;:::i;57599:730::-;;;;;;:::i;:::-;;:::i;36165:157::-;;;;;;;;;;-1:-1:-1;36165:157:0;;;;;:::i;:::-;;:::i;38414:114::-;;;;;;;;;;-1:-1:-1;38414:114:0;;;;;:::i;:::-;;:::i;43031:201::-;;;;;;;;;;-1:-1:-1;43031:201:0;;;;;:::i;:::-;;:::i;43304:980::-;;;;;;;;;;-1:-1:-1;43304:980:0;;;;;:::i;:::-;;:::i;41344:301::-;41458:7;-1:-1:-1;;;;;41505:21:0;;41483:114;;;;-1:-1:-1;;;41483:114:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;41615:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;41615:22:0;;;;;;;;;;;;41344:301::o;8864:190::-;8949:4;8973:36;8997:11;8973:23;:36::i;:::-;:73;;;-1:-1:-1;;;;;;;9013:33:0;;:20;:33;;;;;;;;;;;;;8973:73;8966:80;;8864:190;;;;:::o;27237:1140::-;27508:168;;;27438:12;27508:168;;;;;-1:-1:-1;;;;;27550:19:0;;27463:29;27550:19;;;:6;:19;;;;;;;;;27508:168;;;;;;;;;;;27709:45;27557:11;27508:168;27737:4;27743;27749;27709:6;:45::i;:::-;27687:128;;;;-1:-1:-1;;;27687:128:0;;;;;;;:::i;:::-;27924:12;27938:23;27986:4;-1:-1:-1;;;;;27978:18:0;28032:17;28051:11;28015:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28015:48:0;;;;;;;;;;27978:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27923:155;;;;28099:7;28091:49;;;;-1:-1:-1;;;28091:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28173:19:0;;;;;;:6;:19;;;;;;:26;;28197:1;28173:23;:26::i;:::-;-1:-1:-1;;;;;28151:19:0;;;;;;:6;:19;;;;;;;:48;;;;28215:126;;;;;28158:11;;28287:10;;28313:17;;28215:126;:::i;:::-;;;;;;;;28359:10;27237:1140;-1:-1:-1;;;;;;;;27237:1140:0:o;40992:201::-;41090:13;41152:4;41158:25;41175:7;41158:16;:25::i;:::-;41135:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41121:64;;40992:201;;;:::o;36002:155::-;36091:12;36128;:21;36141:7;36128:21;;;;;;;;;;;36121:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36121:28:0;;;-1:-1:-1;;36121:28:0;;;;;-1:-1:-1;;;;;36121:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36002:155;;;:::o;58337:816::-;35262:19;;;;:9;:19;;;;;;58391:8;;35262:19;;:27;;:19;:27;;35254:65;;;;-1:-1:-1;;;35254:65:0;;;;;;;:::i;:::-;58434:24:::1;::::0;;;:14:::1;:24;::::0;;;;;58459:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;58434:38:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;58434:38:0;:53:::1;;::::0;::::1;;58412:118;;;;-1:-1:-1::0;;;58412:118:0::1;;;;;;;:::i;:::-;58599:1;58563:33;58573:12;:10;:12::i;:::-;58587:8;58563:9;:33::i;:::-;:37;58541:120;;;;-1:-1:-1::0;;;58541:120:0::1;;;;;;;:::i;:::-;58672:18;58693:24:::0;;;:14:::1;:24;::::0;;;;58672:18;58718:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;58693:38:0::1;-1:-1:-1::0;;;;;58693:38:0::1;;;;;;;;;;;;:44;;;58672:65;;58748:21;58785:14;:24;58800:8;58785:24;;;;;;;;;;;:38;58810:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;58785:38:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;58785:38:0;;;:52:::1;;::::0;58853:24;;;:14:::1;:24:::0;;;;;;58785:52;::::1;::::0;-1:-1:-1;58878:12:0::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;58853:38:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;58853:38:0;:50:::1;;::::0;-1:-1:-1;;;58853:50:0;::::1;;;58848:114;;58920:30;58927:8;58937:12;:10;:12::i;:::-;58920:6;:30::i;:::-;58972:54;58985:12;:10;:12::i;:::-;58999:13;59014:8;59024:1;58972:12;:54::i;:::-;59037:32;59046:8;59056:12;:10;:12::i;:::-;59037:8;:32::i;:::-;59136:8;59110:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;59085:60:0::1;59095:13;-1:-1:-1::0;;;;;59085:60:0::1;;59124:10;59085:60;;;;;;:::i;:::-;;;;;;;;35330:1;;58337:816:::0;;:::o;28803:107::-;-1:-1:-1;;;;;28890:12:0;28856:13;28890:12;;;:6;:12;;;;;;;28803:107::o;45180:1265::-;45427:7;:14;45413:3;:10;:28;45391:118;;;;-1:-1:-1;;;45391:118:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45528:16:0;;45520:66;;;;-1:-1:-1;;;45520:66:0;;;;;;;:::i;:::-;45619:14;:28;45634:12;:10;:12::i;:::-;-1:-1:-1;;;;;45619:28:0;;;;;;;;;;;;-1:-1:-1;45619:28:0;;;;:36;;:28;:36;45597:113;;;;-1:-1:-1;;;45597:113:0;;;;;;;:::i;:::-;45723:16;45742:12;:10;:12::i;:::-;45723:31;;45767:60;45788:8;45798:4;45804:2;45808:3;45813:7;45822:4;45767:20;:60::i;:::-;45845:9;45840:356;45864:3;:10;45860:1;:14;45840:356;;;45896:10;45909:3;45913:1;45909:6;;;;;;-1:-1:-1;;;45909:6:0;;;;;;;;;;;;;;;45896:19;;45930:14;45947:7;45955:1;45947:10;;;;;;-1:-1:-1;;;45947:10:0;;;;;;;;;;;;;;;45930:27;;45994:126;46036:6;45994:126;;;;;;;;;;;;;;;;;:9;:13;46004:2;45994:13;;;;;;;;;;;:19;46008:4;-1:-1:-1;;;;;45994:19:0;-1:-1:-1;;;;;45994:19:0;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;45972:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;45972:19:0;;;;;;;;;;:148;;;;46155:17;;;;;;:29;;46177:6;46155:21;:29::i;:::-;46135:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;46135:17:0;;;;;;;;;;:49;;;;-1:-1:-1;45876:3:0;;;:::i;:::-;;;45840:356;;;;46243:2;-1:-1:-1;;;;;46213:47:0;46237:4;-1:-1:-1;;;;;46213:47:0;46227:8;-1:-1:-1;;;;;46213:47:0;;46247:3;46252:7;46213:47;;;;;;;:::i;:::-;;;;;;;;46273:164;46323:8;46346:4;46365:2;46382:3;46400:7;46422:4;46273:35;:164::i;:::-;45180:1265;;;;;;:::o;37856:343::-;37969:12;:10;:12::i;:::-;37954:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;37954:11:0;;;:27;;;;:67;;;37985:14;:28;38000:12;:10;:12::i;:::-;-1:-1:-1;;;;;37985:28:0;;;;;;;;;;;;-1:-1:-1;37985:28:0;;;;:36;;:28;:36;37954:67;37932:142;;;;-1:-1:-1;;;37932:142:0;;;;;;;:::i;:::-;38099:17;;;;:13;:17;;;;;38093:31;;;;;:::i;:::-;:36;;-1:-1:-1;38085:67:0;;;;-1:-1:-1;;;38085:67:0;;;;;;;:::i;:::-;38165:17;;;;:13;:17;;;;;;;;:26;;;;;;;;:::i;:::-;;37856:343;;:::o;37511:337::-;37621:12;:10;:12::i;:::-;37606:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;37606:11:0;;;:27;;;;:67;;;37637:14;:28;37652:12;:10;:12::i;:::-;-1:-1:-1;;;;;37637:28:0;;;;;;;;;;;;-1:-1:-1;37637:28:0;;;;:36;;:28;:36;37606:67;37584:142;;;;-1:-1:-1;;;37584:142:0;;;;;;;:::i;:::-;37751:16;;;;:12;:16;;;;;37745:30;;;;;:::i;:::-;:35;;-1:-1:-1;37737:68:0;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;37818:16;;;;:12;:16;;;;;;;;:22;;;;;;;;:::i;56580:1011::-;35262:19;;;;:9;:19;;;;;;56734:8;;35262:19;;:27;;:19;:27;;35254:65;;;;-1:-1:-1;;;35254:65:0;;;;;;;:::i;:::-;56763:14:::1;:28;56778:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;56763:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;56763:28:0;;::::1;;:36;;:28:::0;:36:::1;56755:65;;;;-1:-1:-1::0;;;56755:65:0::1;;;;;;;:::i;:::-;56853:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;56853:32:0;::::1;::::0;;;;;;;:47:::1;;::::0;::::1;;56831:112;;;;-1:-1:-1::0;;;56831:112:0::1;;;;;;;:::i;:::-;56984:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;56984:32:0;::::1;::::0;;;;;;;:38:::1;;::::0;56976:46;::::1;56954:117;;;;-1:-1:-1::0;;;56954:117:0::1;;;;;;;:::i;:::-;57086:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;57086:32:0;::::1;::::0;;;;;;;:43:::1;;::::0;:48;57082:219:::1;;57177:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;57177:32:0;::::1;::::0;;;;;;;:43:::1;;::::0;57223:15:::1;-1:-1:-1::0;57151:138:0::1;;;;-1:-1:-1::0;;;57151:138:0::1;;;;;;;:::i;:::-;57311:34;57328:8;57338:6;57311:16;:34::i;:::-;57356:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;57356:32:0;;::::1;::::0;;;;;;;:46:::1;::::0;::::1;:64:::0;;;57431:38;;::::1;:46:::0;;;-1:-1:-1;;;;;;;;;57356:64:0;;::::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;57488:51:0::1;::::0;;;::::1;::::0;;57555:28;57356:24;;57431:46;;57356:64;57555:28:::1;::::0;57356:24;57555:28:::1;56580:1011:::0;;;;;:::o;41811:695::-;41950:16;42025:3;:10;42006:8;:15;:29;41984:120;;;;-1:-1:-1;;;41984:120:0;;;;;;;:::i;:::-;42117:30;42164:8;:15;-1:-1:-1;;;;;42150:30:0;;;;;-1:-1:-1;;;42150:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42150:30:0;;42117:63;;42198:9;42193:273;42217:8;:15;42213:1;:19;42193:273;;;42303:1;-1:-1:-1;;;;;42280:25:0;:8;42289:1;42280:11;;;;;;-1:-1:-1;;;42280:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42280:25:0;;;42254:136;;;;-1:-1:-1;;;42254:136:0;;;;;;;:::i;:::-;42424:9;:17;42434:3;42438:1;42434:6;;;;;;-1:-1:-1;;;42434:6:0;;;;;;;;;;;;;;;42424:17;;;;;;;;;;;:30;42442:8;42451:1;42442:11;;;;;;-1:-1:-1;;;42442:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42424:30:0;-1:-1:-1;;;;;42424:30:0;;;;;;;;;;;;;42405:13;42419:1;42405:16;;;;;;-1:-1:-1;;;42405:16:0;;;;;;;;;;;;;;;;;;:49;42234:3;;;:::i;:::-;;;42193:273;;;-1:-1:-1;42485:13:0;41811:695;-1:-1:-1;;;41811:695:0:o;36330:1173::-;36548:1;36512:19;;;:9;:19;;;;;36548:1;36532:12;:10;:12::i;:::-;-1:-1:-1;;;;;36512:33:0;-1:-1:-1;;;;;36512:33:0;;;;;;;;;;;;;:37;36490:114;;;;-1:-1:-1;;;36490:114:0;;;;;;;:::i;:::-;36619:24;;;;:14;:24;;;;;;36644:12;:10;:12::i;:::-;-1:-1:-1;;;;;36619:38:0;;;;;;;;;;;;-1:-1:-1;36619:38:0;:53;;;;;36615:254;;;36800:1;36715:24;;;:14;:24;;;;;36800:1;36740:12;:10;:12::i;:::-;-1:-1:-1;;;;;36715:38:0;;;;;;;;;;;;;;-1:-1:-1;36715:38:0;:52;;;;:87;36689:168;;;;-1:-1:-1;;;36689:168:0;;;;;;;:::i;:::-;36885:16;;36881:615;;36959:246;;;;;;;;36985:5;36959:246;;;;37009:5;36959:246;;;;37033:14;36959:246;;;;;;37085:12;37100:6;37085:21;;;;:::i;:::-;37066:41;;:15;:41;:::i;:::-;36959:246;;37164:1;36959:246;;;;;;;;;;;;;;36918:24;;;:14;:24;;;;;;36943:12;:10;:12::i;:::-;-1:-1:-1;;;;;36918:38:0;;;;;;;;;;;;;;;;;-1:-1:-1;36918:38:0;:287;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36918:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36918:287:0;-1:-1:-1;;;;36918:287:0;;;;-1:-1:-1;;;;;;36918:287:0;;;;;;;;;;;;;;36881:615;;;37279:205;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37279:205:0;;;;;;;;;;;;;;;;;;37238:24;;;:14;:24;;;;;;37279:205;;37263:12;:10;:12::i;:::-;-1:-1:-1;;;;;37238:38:0;;;;;;;;;;;;;;;;;-1:-1:-1;37238:38:0;:246;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37238:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37238:246:0;-1:-1:-1;;;;37238:246:0;;;;-1:-1:-1;;;;;;37238:246:0;;;;;;;;;;;;;;36881:615;36330:1173;;;;:::o;60460:496::-;60531:22;60556:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;60556:32:0;;;;;;;;;;:46;;;;;60635:12;:10;:12::i;:::-;-1:-1:-1;;;;;60635:22:0;;:48;;;;60677:6;-1:-1:-1;;;;;60661:22:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;60661:22:0;;60635:48;60613:130;;;;-1:-1:-1;;;60613:130:0;;;;;;;:::i;:::-;60754:17;60774:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;60774:32:0;;;;;;;;;:38;;;60823:34;60789:8;60799:6;60823:16;:34::i;:::-;60868:26;60877:8;60887:6;60868:8;:26::i;:::-;60939:8;60928:9;60920:6;-1:-1:-1;;;;;60910:38:0;;;;;;;;;;;60460:496;;;;:::o;30953:195::-;31009:15;31061:17;;;:7;:17;;;;;;-1:-1:-1;;;;;31061:17:0;31097:19;31089:28;;;;;47771:949;-1:-1:-1;;;;;47918:21:0;;47910:67;;;;-1:-1:-1;;;47910:67:0;;;;;;;:::i;:::-;48033:1;48010:11;;;:7;:11;;;;;;-1:-1:-1;;;;;48010:11:0;:25;47988:111;;;;-1:-1:-1;;;47988:111:0;;;;;;;:::i;:::-;48112:14;48129:12;:10;:12::i;:::-;48112:29;;48154:194;48189:6;48218:1;48235:7;48257:21;48275:2;48257:17;:21::i;:::-;48293:25;48311:6;48293:17;:25::i;:::-;48333:4;48154:20;:194::i;:::-;48386:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;48386:22:0;;;;;;;;;;:34;;48413:6;48386:26;:34::i;:::-;48361:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;48361:22:0;;;;;;;;;;;;:59;;;;48431:11;;;:7;:11;;;;;;:29;;-1:-1:-1;;;;;;48431:29:0;;;;;;;;;48478:55;48361:22;;48431:29;48478:55;;;;48361:13;;48526:6;;48478:55;:::i;:::-;;;;;;;;48546:166;48591:6;48620:1;48637:7;48659:2;48676:6;48697:4;48546:30;:166::i;:::-;47771:949;;;;;:::o;38207:199::-;38328:1;38298:13;;;:9;:13;;;;;38264;;38328:1;;38312:12;:10;:12::i;:::-;-1:-1:-1;;;;;38298:27:0;-1:-1:-1;;;;;38298:27:0;;;;;;;;;;;;;:31;38290:71;;;;-1:-1:-1;;;38290:71:0;;;;;;;:::i;:::-;38381:17;;;;:13;:17;;;;;38374:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38207:199;;;:::o;33970:792::-;34056:18;;;;:9;:18;;;;;;;;:27;34048:51;;;;-1:-1:-1;;;34048:51:0;;;;;;;:::i;:::-;34152:12;:10;:12::i;:::-;34132:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;34132:16:0;;;:32;;;;:89;;;34185:14;:28;34200:12;:10;:12::i;:::-;-1:-1:-1;;;;;34185:28:0;;;;;;;;;;;;-1:-1:-1;34185:28:0;;;;:36;;:28;:36;34132:89;34110:164;;;;-1:-1:-1;;;34110:164:0;;;;;;;:::i;:::-;34290:9;34285:470;34309:4;:11;34305:1;:15;34285:470;;;34346:4;34351:1;34346:7;;;;;;-1:-1:-1;;;34346:7:0;;;;;;;;;;;;;;;:18;;;:26;;34368:4;34346:26;;;34342:352;;;34439:5;34423:4;34428:1;34423:7;;;;;;-1:-1:-1;;;34423:7:0;;;;;;;;;;;;;;;:13;;;:21;34393:135;;;;-1:-1:-1;;;34393:135:0;;;;;;;:::i;:::-;34593:1;34577:4;34582:1;34577:7;;;;;;-1:-1:-1;;;34577:7:0;;;;;;;;;;;;;;;:13;;;:17;34547:131;;;;-1:-1:-1;;;34547:131:0;;;;;;;:::i;:::-;34708:21;;;;:12;:21;;;;;34735:7;;:4;;34740:1;;34735:7;;;;-1:-1:-1;;;34735:7:0;;;;;;;;;;;;;;;;;;;;34708:35;;;;;;;-1:-1:-1;34708:35:0;;;;;;;;;;;34735:7;;34708:35;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34708:35:0;;;;;;;;;-1:-1:-1;;;;;;34708:35:0;-1:-1:-1;;;;;34708:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34708:35:0;;;;;;;;;;34322:3;;;;:::i;:::-;;;;34285:470;;38536:358;38657:12;:10;:12::i;:::-;38642:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;38642:11:0;;;:27;;;;:67;;;38673:14;:28;38688:12;:10;:12::i;:::-;-1:-1:-1;;;;;38673:28:0;;;;;;;;;;;;-1:-1:-1;38673:28:0;;;;:36;;:28;:36;38642:67;38620:142;;;;-1:-1:-1;;;38620:142:0;;;;;;;:::i;:::-;38780:9;38775:112;38799:9;:16;38795:1;:20;38775:112;;;38837:19;;;;:15;:19;;;;;38862:12;;:9;;38872:1;;38862:12;;;;-1:-1:-1;;;38862:12:0;;;;;;;;;;;;;;;;;;;;38837:38;;;;;;;-1:-1:-1;38837:38:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38817:3:0;;;;:::i;:::-;;;;38775:112;;60964:1103;61064:8;30794:11;:9;:11::i;:::-;-1:-1:-1;;;;;30773:32:0;:17;30781:8;30773:7;:17::i;:::-;-1:-1:-1;;;;;30773:32:0;;;30765:41;;;;;;35262:19:::1;::::0;;;:9:::1;:19;::::0;;;;;61093:8;;35262:19:::1;;:27;;:19:::0;:27:::1;;35254:65;;;;-1:-1:-1::0;;;35254:65:0::1;;;;;;;:::i;:::-;61119:17:::2;61139:24:::0;;;:14:::2;:24;::::0;;;;;;;-1:-1:-1;;;;;61139:32:0;::::2;::::0;;;;;;;:38:::2;;::::0;;61208:9:::2;::::0;61244:12:::2;:10;:12::i;:::-;61228:28;;61319:1;61289:27;61299:6;61307:8;61289:9;:27::i;:::-;:31;61267:114;;;;-1:-1:-1::0;;;61267:114:0::2;;;;;;;:::i;:::-;61412:1;61400:9;:13;61392:47;;;;-1:-1:-1::0;;;61392:47:0::2;;;;;;;:::i;:::-;61472:24;::::0;;;:14:::2;:24;::::0;;;;;;;-1:-1:-1;;;;;61472:32:0;::::2;::::0;;;;;;;:47:::2;;::::0;::::2;;:56;61450:137;;;;-1:-1:-1::0;;;61450:137:0::2;;;;;;;:::i;:::-;61619:9;61606;:22;;61598:58;;;;-1:-1:-1::0;;;61598:58:0::2;;;;;;;:::i;:::-;61671:24;::::0;;;:14:::2;:24;::::0;;;;;;;-1:-1:-1;;;;;61671:32:0;::::2;::::0;;;;;;;:43:::2;;::::0;:48;61667:219:::2;;61762:24;::::0;;;:14:::2;:24;::::0;;;;;;;-1:-1:-1;;;;;61762:32:0;::::2;::::0;;;;;;;:43:::2;;::::0;61808:15:::2;-1:-1:-1::0;61736:138:0::2;;;;-1:-1:-1::0;;;61736:138:0::2;;;;;;;:::i;:::-;61896:24;61903:8;61913:6;61896;:24::i;:::-;61931:26;61940:8;61950:6;61931:8;:26::i;:::-;61968:40;61981:6;61989:5;61996:8;62006:1;61968:12;:40::i;:::-;62050:8;62031:6;-1:-1:-1::0;;;;;62019:40:0::2;62024:5;-1:-1:-1::0;;;;;62019:40:0::2;;62039:9;62019:40;;;;;;:::i;:::-;;;;;;;;35330:1;;;30817::::1;60964:1103:::0;;;:::o;35815:179::-;35916:14;;:::i;:::-;-1:-1:-1;35955:23:0;;;;:14;:23;;;;;;;;-1:-1:-1;;;;;35955:31:0;;;;;;;;;;;35948:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35948:38:0;;;;;;;;;;;;;35815:179::o;35347:191::-;35429:14;:28;35444:12;:10;:12::i;:::-;-1:-1:-1;;;;;35429:28:0;;;;;;;;;;;;-1:-1:-1;35429:28:0;;;;:36;;:28;:36;35421:65;;;;-1:-1:-1;;;35421:65:0;;;;;;;:::i;:::-;35497:18;;;;:9;:18;;;;;;:33;;-1:-1:-1;;35497:33:0;;;;;;;;;;35347:191::o;55656:916::-;35262:19;;;;:9;:19;;;;;;55755:8;;35262:19;;:27;;:19;:27;;35254:65;;;;-1:-1:-1;;;35254:65:0;;;;;;;:::i;:::-;55803:24:::1;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;55803:32:0;::::1;::::0;;;;;;;:47:::1;;::::0;::::1;;55781:112;;;;-1:-1:-1::0;;;55781:112:0::1;;;;;;;:::i;:::-;55922:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;55912:22:0::1;:6;-1:-1:-1::0;;;;;55912:22:0::1;;;55904:52;;;;-1:-1:-1::0;;;55904:52:0::1;;;;;;;:::i;:::-;55975:30;55988:8;55998:6;55975:12;:30::i;:::-;55967:64;;;;-1:-1:-1::0;;;55967:64:0::1;;;;;;;:::i;:::-;56046:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;56046:32:0;::::1;::::0;;;;;;;:43:::1;;::::0;:48;56042:219:::1;;56137:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;56137:32:0;::::1;::::0;;;;;;;:43:::1;;::::0;56183:15:::1;-1:-1:-1::0;56111:138:0::1;;;;-1:-1:-1::0;;;56111:138:0::1;;;;;;;:::i;:::-;56271:34;56288:8;56298:6;56271:16;:34::i;:::-;56373:12;:10;:12::i;:::-;56316:24;::::0;;;:14:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;56316:32:0;;::::1;::::0;;;;;;;:46:::1;::::0;::::1;:70:::0;;56438:9:::1;56316:70:::0;56397:38;;::::1;:50:::0;;;-1:-1:-1;;;;;;56316:70:0::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;56458:52:0::1;::::0;;56316:24;;56530:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;56526:38:0::1;;;;;;;;;;;55656:916:::0;;;:::o;42579:380::-;42744:8;-1:-1:-1;;;;;42728:24:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;42728:24:0;;;42706:115;;;;-1:-1:-1;;;42706:115:0;;;;;;;:::i;:::-;42879:8;42834:18;:32;42853:12;:10;:12::i;:::-;-1:-1:-1;;;;;42834:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;42834:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;42834:53:0;;;;;;;;;;;42918:12;:10;:12::i;:::-;-1:-1:-1;;;;;42903:48:0;;42942:8;42903:48;;;;;;:::i;:::-;;;;;;;;42579:380;;:::o;34770:428::-;34857:18;;;;:9;:18;;;;;;;;:27;34849:51;;;;-1:-1:-1;;;34849:51:0;;;;;;;:::i;:::-;34953:12;:10;:12::i;:::-;34933:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;34933:16:0;;;:32;;;;:89;;;34986:14;:28;35001:12;:10;:12::i;:::-;-1:-1:-1;;;;;34986:28:0;;;;;;;;;;;;-1:-1:-1;34986:28:0;;;;:36;;:28;:36;34933:89;34911:164;;;;-1:-1:-1;;;34911:164:0;;;;;;;:::i;:::-;35091:9;35086:105;35110:4;:11;35106:1;:15;35086:105;;;35143:22;;;;:13;:22;;;;;35171:7;;:4;;35176:1;;35171:7;;;;-1:-1:-1;;;35171:7:0;;;;;;;;;;;;;;;;;;;;35143:36;;;;;;;-1:-1:-1;35143:36:0;;;;;;;;;;;35171:7;;35143:36;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35143:36:0;;;;;;;;;-1:-1:-1;;;;;;35143:36:0;-1:-1:-1;;;;;35143:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35143:36:0;;;;;;;;;;35123:3;;;;:::i;:::-;;;;35086:105;;38902:117;38957:15;38992;:19;39008:2;38992:19;;;;;;;;;;;38985:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35546:261;35641:12;:10;:12::i;:::-;35621:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;35621:16:0;;;:32;;;;:89;;;35674:14;:28;35689:12;:10;:12::i;:::-;-1:-1:-1;;;;;35674:28:0;;;;;;;;;;;;-1:-1:-1;35674:28:0;;;;:36;;:28;:36;35621:89;35599:164;;;;-1:-1:-1;;;35599:164:0;;;;;;;:::i;:::-;35774:18;;;;:9;:18;;;;;:25;;-1:-1:-1;;35774:25:0;35795:4;35774:25;;;35546:261::o;57599:730::-;57717:14;:28;57732:12;:10;:12::i;:::-;-1:-1:-1;;;;;57717:28:0;;;;;;;;;;;;-1:-1:-1;57717:28:0;;;;:36;;:28;:36;57709:65;;;;-1:-1:-1;;;57709:65:0;;;;;;;:::i;:::-;57807:24;;;;:14;:24;;;;;;;;-1:-1:-1;;;;;57807:32:0;;;;;;;;;:47;;;;;57785:112;;;;-1:-1:-1;;;57785:112:0;;;;;;;:::i;:::-;57988:1;57930:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;57930:32:0;;;;;;;;;;:46;;;;57908:126;;;;-1:-1:-1;;;57908:126:0;;;;;;;:::i;:::-;58045:22;58070:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;58070:32:0;;;;;;;;;;:46;;;;;58147:38;;;;58070:46;;;58196:34;58070:24;:32;58196:16;:34::i;36165:157::-;36255:12;36292:13;:22;36306:7;36292:22;;;;;;;;;;;36285:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36285:29:0;;;-1:-1:-1;;36285:29:0;;;;;-1:-1:-1;;;;;36285:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38414:114;38504:16;;;;:12;:16;;;;;38497:23;;38471:13;;38504:16;38497:23;;;:::i;43031:201::-;-1:-1:-1;;;;;43187:27:0;;;43158:4;43187:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;43031:201::o;43304:980::-;-1:-1:-1;;;;;43498:16:0;;43490:66;;;;-1:-1:-1;;;43490:66:0;;;;;;;:::i;:::-;43589:14;:28;43604:12;:10;:12::i;:::-;-1:-1:-1;;;;;43589:28:0;;;;;;;;;;;;-1:-1:-1;43589:28:0;;;;:36;;:28;:36;43567:113;;;;-1:-1:-1;;;43567:113:0;;;;;;;:::i;:::-;43693:16;43712:12;:10;:12::i;:::-;43693:31;;43737:185;43772:8;43795:4;43814:2;43831:21;43849:2;43831:17;:21::i;43737:185::-;43957:114;43995:6;43957:114;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;43957:19:0;;;;;;;;;;;:114;:23;:114::i;:::-;43935:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;43935:19:0;;;;;;;;;;:136;;;;44102:17;;;;;;:29;;44124:6;44102:21;:29::i;:::-;44082:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;44082:17:0;;;;;;;;;;;;;;:49;;;;44149:46;;44082:17;;44149:46;;;;;;;;;;;;44092:2;;44188:6;;44149:46;:::i;:::-;;;;;;;;44208:68;44239:8;44249:4;44255:2;44259;44263:6;44271:4;44208:30;:68::i;8242:157::-;-1:-1:-1;;;;;;8351:40:0;;-1:-1:-1;;;8351:40:0;8242:157;;;:::o;28918:405::-;29096:4;29156:159;29184:47;29203:27;29223:6;29203:19;:27::i;:::-;29184:18;:47::i;:::-;29250:4;29273;29296;29156:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29133:182:0;:6;-1:-1:-1;;;;;29133:182:0;;29113:202;;28918:405;;;;;;;:::o;12370:98::-;12428:7;12455:5;12459:1;12455;:5;:::i;:::-;12448:12;12370:98;-1:-1:-1;;;12370:98:0:o;31178:621::-;31258:27;31307:7;31303:50;;-1:-1:-1;31331:10:0;;;;;;;;;;;;-1:-1:-1;;;31331:10:0;;;;;;31303:50;31375:2;31363:9;31410:69;31417:6;;31410:69;;31440:5;;;;:::i;:::-;;-1:-1:-1;31460:7:0;;-1:-1:-1;31465:2:0;31460:7;;:::i;:::-;;;31410:69;;;31489:17;31519:3;-1:-1:-1;;;;;31509:14:0;;;;;-1:-1:-1;;;31509:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31509:14:0;-1:-1:-1;31489:34:0;-1:-1:-1;31546:3:0;31560:202;31567:7;;31560:202;;31595:5;31599:1;31595;:5;:::i;:::-;31591:9;-1:-1:-1;31615:10:0;31646:7;31651:2;31646;:7;:::i;:::-;31645:14;;31657:2;31645:14;:::i;:::-;31640:19;;:2;:19;:::i;:::-;31629:31;;:2;:31;:::i;:::-;31615:46;;31676:9;31695:4;31688:12;;31676:24;;31725:2;31715:4;31720:1;31715:7;;;;;;-1:-1:-1;;;31715:7:0;;;;;;;;;;;;:12;-1:-1:-1;;;;;31715:12:0;;;;;;;;-1:-1:-1;31742:8:0;31748:2;31742:8;;:::i;:::-;;;31560:202;;;;;-1:-1:-1;31786:4:0;31178:621;-1:-1:-1;;;;31178:621:0:o;29331:602::-;29376:14;29407:10;29429:4;29407:27;29403:499;;;29451:18;29472:8;;29451:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29511:8:0;29722:17;29716:24;-1:-1:-1;;;;;29690:134:0;;-1:-1:-1;29550:289:0;;-1:-1:-1;29550:289:0;;-1:-1:-1;29880:10:0;29403:499;29331:602;:::o;59161:1291::-;59231:18;59252:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;59252:33:0;;;;;;;;;;;;:39;;;59349:17;;;:7;:17;;;;;;;59252:39;;59231:18;59349:17;;;59338:28;59334:1053;;;59383:17;59403:24;59418:8;59403:14;:24::i;:::-;59383:44;;59447:9;59442:421;59466:4;:11;59462:1;:15;59442:421;;;59507:4;59512:1;59507:7;;;;;;-1:-1:-1;;;59507:7:0;;;;;;;;;;;;;;;:18;;;59503:345;;;59550:11;59595:5;59581:10;59565:4;59570:1;59565:7;;;;;;-1:-1:-1;;;59565:7:0;;;;;;;;;;;;;;;:13;;;:26;;;;:::i;:::-;59564:36;;;;:::i;:::-;59550:50;-1:-1:-1;59623:14:0;59550:50;59623:14;;:::i;:::-;;;59660:4;59665:1;59660:7;;;;;;-1:-1:-1;;;59660:7:0;;;;;;;;;;;;;;;:17;;;-1:-1:-1;;;;;59660:26:0;:31;59687:3;59660:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59503:345;;;;59751:4;59756:1;59751:7;;;;;;-1:-1:-1;;;59751:7:0;;;;;;;;;;;;;;;:13;;;59740:24;;;;;:::i;:::-;;;59787:4;59792:1;59787:7;;;;;;-1:-1:-1;;;59787:7:0;;;;;;;;;;;;;;;:17;;;-1:-1:-1;;;;;59787:26:0;:41;59814:4;59819:1;59814:7;;;;;;-1:-1:-1;;;59814:7:0;;;;;;;;;;;;;;;:13;;;59787:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59503:345;59479:3;;;:::i;:::-;;;59442:421;;;;59334:1053;;;;59895:17;59915:25;59931:8;59915:15;:25::i;:::-;59895:45;;59960:9;59955:421;59979:4;:11;59975:1;:15;59955:421;;;60020:4;60025:1;60020:7;;;;;;-1:-1:-1;;;60020:7:0;;;;;;;;;;;;;;;:18;;;60016:345;;;60063:11;60108:5;60094:10;60078:4;60083:1;60078:7;;;;;;-1:-1:-1;;;60078:7:0;;;;;;;;;;;;;;;:13;;;:26;;;;:::i;:::-;60077:36;;;;:::i;:::-;60063:50;-1:-1:-1;60136:14:0;60063:50;60136:14;;:::i;:::-;;;60173:4;60178:1;60173:7;;;;;;-1:-1:-1;;;60173:7:0;;;;;;;;;;;;;;;:17;;;-1:-1:-1;;;;;60173:26:0;:31;60200:3;60173:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60016:345;;;;60264:4;60269:1;60264:7;;;;;;-1:-1:-1;;;60264:7:0;;;;;;;;;;;;;;;:13;;;60253:24;;;;;:::i;:::-;;;60300:4;60305:1;60300:7;;;;;;-1:-1:-1;;;60300:7:0;;;;;;;;;;;;;;;:17;;;-1:-1:-1;;;;;60300:26:0;:41;60327:4;60332:1;60327:7;;;;;;-1:-1:-1;;;60327:7:0;;;;;;;;;;;;;;;:13;;;60300:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60016:345;59992:3;;;:::i;:::-;;;59955:421;;;;59334:1053;;-1:-1:-1;;;;;60397:25:0;;:47;60423:20;60436:7;60423:10;:20;:::i;:::-;60397:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44292:811;-1:-1:-1;;;;;44439:16:0;;44431:66;;;;-1:-1:-1;;;44431:66:0;;;;;;;:::i;:::-;44510:16;44529:12;:10;:12::i;:::-;44510:31;;44554:186;44589:8;44612:4;44631:2;44648:21;44666:2;44648:17;:21::i;:::-;44684:25;44702:6;44684:17;:25::i;:::-;44554:186;;;;;;;;;;;;;-1:-1:-1;;;44554:186:0;;;:20;:186::i;:::-;44775:114;44813:6;44775:114;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;44775:19:0;;;;;;;;;;;:114;:23;:114::i;:::-;44753:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;44753:19:0;;;;;;;;;;:136;;;;44920:17;;;;;;:29;;44942:6;44920:21;:29::i;:::-;44900:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;44900:17:0;;;;;;;;;;;;;;:49;;;;44967:46;;44900:17;;44967:46;;;;;;;;;;;;44910:2;;45006:6;;44967:46;:::i;:::-;;;;;;;;45026:69;45057:8;45067:4;45073:2;45077;45081:6;45026:69;;;;;;;;;;;;;-1:-1:-1;;;45026:69:0;;;:30;:69::i;54666:336::-;54794:1;54737:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;54737:32:0;;;;;;;;;;;:46;;;:59;;54848:83;;54737:59;54807:38;;;:124;;;;-1:-1:-1;;;;;;54942:52:0;;;;;54666:336::o;14649:206::-;14735:7;14796:12;14788:6;;;;14780:29;;;;-1:-1:-1;;;14780:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;14831:5:0;;;14649:206::o;52786:1000::-;53026:15;:2;-1:-1:-1;;;;;53026:13:0;;:15::i;:::-;53022:757;;;53079:203;;-1:-1:-1;;;53079:203:0;;-1:-1:-1;;;;;53079:43:0;;;;;:203;;53145:8;;53176:4;;53203:3;;53229:7;;53259:4;;53079:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53079:203:0;;;;;;;;-1:-1:-1;;53079:203:0;;;;;;;;;;;;:::i;:::-;;;53058:710;;;;:::i;:::-;;;;;;;;53641:6;53634:14;;-1:-1:-1;;;53634:14:0;;;;;;;;:::i;53058:710::-;53690:62;;-1:-1:-1;;;53690:62:0;;;;;;;:::i;53058:710::-;-1:-1:-1;;;;;;53367:85:0;;-1:-1:-1;;;53367:85:0;53341:224;;53495:50;;-1:-1:-1;;;53495:50:0;;;;;;;:::i;53341:224::-;53296:284;52786:1000;;;;;;:::o;55010:438::-;55089:18;55110:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;55110:32:0;;;;;;;;;;:38;;;;55204:46;;;;;55110:38;;55204:46;55279:27;;;;;:89;;-1:-1:-1;55324:24:0;;;;:14;:24;;;;;;;;-1:-1:-1;;;;;55324:32:0;;;;;;;;;:44;;;-1:-1:-1;;;55324:44:0;;;;55323:45;55279:89;55261:180;;;55395:34;;-1:-1:-1;;;;;55395:22:0;;;:34;;;;;55418:10;;55395:34;;;;55418:10;55395:22;:34;;;;;;;;;;;;;;;;;;;53794:230;53946:16;;;53960:1;53946:16;;;;;;;;;53887;;53921:22;;53946:16;;;;;;;;;;;;-1:-1:-1;53946:16:0;53921:41;;53984:7;53973:5;53979:1;53973:8;;;;;;-1:-1:-1;;;53973:8:0;;;;;;;;;;;;;;;;;;:18;54011:5;53794:230;-1:-1:-1;;53794:230:0:o;51836:942::-;52051:15;:2;-1:-1:-1;;;;;52051:13:0;;:15::i;:::-;52047:724;;;52104:196;;-1:-1:-1;;;52104:196:0;;-1:-1:-1;;;;;52104:38:0;;;;;:196;;52165:8;;52196:4;;52223:2;;52248:6;;52277:4;;52104:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52104:196:0;;;;;;;;-1:-1:-1;;52104:196:0;;;;;;;;;;;;:::i;:::-;;;52083:677;;;;:::i;:::-;-1:-1:-1;;;;;;52385:59:0;;-1:-1:-1;;;52385:59:0;52359:198;;52487:50;;-1:-1:-1;;;52487:50:0;;;;;;;:::i;55456:192::-;55561:4;55602:24;;;:14;:24;;;;;;;;-1:-1:-1;;;;;55602:32:0;;;;;;;;;;;:38;;;55590:9;:50;;55456:192::o;28385:410::-;28495:7;26438:108;;;;;;;;;;;;;;;;;26414:143;;;;;;;28649:12;;28684:11;;;;28728:24;;;;;28718:35;;;;;;28568:204;;;;;;:::i;:::-;;;;;;;;;;;;;28540:247;;;;;;28520:267;;28385:410;;;:::o;26002:258::-;26101:7;26203:20;:18;:20::i;:::-;26225:11;26174:63;;;;;;;;;:::i;17343:422::-;17710:20;17749:8;;;17343:422::o;25531:102::-;25610:15;;25531:102;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:705:1;;127:3;120:4;112:6;108:17;104:27;94:2;;149:5;142;135:20;94:2;189:6;176:20;215:4;239:65;254:49;300:2;254:49;:::i;:::-;239:65;:::i;:::-;338:15;;;369:12;;;;401:15;;;447:11;;;435:24;;431:33;;428:42;-1:-1:-1;425:2:1;;;487:5;480;473:20;425:2;513:5;527:163;541:2;538:1;535:9;527:163;;;598:17;;586:30;;636:12;;;;668;;;;559:1;552:9;527:163;;;-1:-1:-1;708:5:1;;84:635;-1:-1:-1;;;;;;;84:635:1:o;724:162::-;791:20;;847:13;;840:21;830:32;;820:2;;876:1;873;866:12;891:551;;988:3;981:4;973:6;969:17;965:27;955:2;;1010:5;1003;996:20;955:2;1050:6;1037:20;-1:-1:-1;;;;;1072:2:1;1069:26;1066:2;;;1098:18;;:::i;:::-;1142:54;1184:2;1165:13;;-1:-1:-1;;1161:27:1;1190:4;1157:38;1142:54;:::i;:::-;1221:2;1212:7;1205:19;1267:3;1260:4;1255:2;1247:6;1243:15;1239:26;1236:35;1233:2;;;1288:5;1281;1274:20;1233:2;1357;1350:4;1342:6;1338:17;1331:4;1322:7;1318:18;1305:55;1380:16;;;1398:4;1376:27;1369:42;;;;1384:7;945:497;-1:-1:-1;;945:497:1:o;1447:259::-;;1559:2;1547:9;1538:7;1534:23;1530:32;1527:2;;;1580:6;1572;1565:22;1527:2;1624:9;1611:23;1643:33;1670:5;1643:33;:::i;1711:402::-;;;1840:2;1828:9;1819:7;1815:23;1811:32;1808:2;;;1861:6;1853;1846:22;1808:2;1905:9;1892:23;1924:33;1951:5;1924:33;:::i;:::-;1976:5;-1:-1:-1;2033:2:1;2018:18;;2005:32;2046:35;2005:32;2046:35;:::i;:::-;2100:7;2090:17;;;1798:315;;;;;:::o;2118:1129::-;;;;;;2357:3;2345:9;2336:7;2332:23;2328:33;2325:2;;;2379:6;2371;2364:22;2325:2;2423:9;2410:23;2442:33;2469:5;2442:33;:::i;:::-;2494:5;-1:-1:-1;2551:2:1;2536:18;;2523:32;2564:35;2523:32;2564:35;:::i;:::-;2618:7;-1:-1:-1;2676:2:1;2661:18;;2648:32;-1:-1:-1;;;;;2729:14:1;;;2726:2;;;2761:6;2753;2746:22;2726:2;2789:67;2848:7;2839:6;2828:9;2824:22;2789:67;:::i;:::-;2779:77;;2909:2;2898:9;2894:18;2881:32;2865:48;;2938:2;2928:8;2925:16;2922:2;;;2959:6;2951;2944:22;2922:2;2987:69;3048:7;3037:8;3026:9;3022:24;2987:69;:::i;:::-;2977:79;;3109:3;3098:9;3094:19;3081:33;3065:49;;3139:2;3129:8;3126:16;3123:2;;;3160:6;3152;3145:22;3123:2;;3188:53;3233:7;3222:8;3211:9;3207:24;3188:53;:::i;:::-;3178:63;;;2315:932;;;;;;;;:::o;3252:760::-;;;;;;3441:3;3429:9;3420:7;3416:23;3412:33;3409:2;;;3463:6;3455;3448:22;3409:2;3507:9;3494:23;3526:33;3553:5;3526:33;:::i;:::-;3578:5;-1:-1:-1;3635:2:1;3620:18;;3607:32;3648:35;3607:32;3648:35;:::i;:::-;3702:7;-1:-1:-1;3756:2:1;3741:18;;3728:32;;-1:-1:-1;3807:2:1;3792:18;;3779:32;;-1:-1:-1;3862:3:1;3847:19;;3834:33;-1:-1:-1;;;;;3879:30:1;;3876:2;;;3927:6;3919;3912:22;3876:2;3955:51;3998:7;3989:6;3978:9;3974:22;3955:51;:::i;4017:329::-;;;4143:2;4131:9;4122:7;4118:23;4114:32;4111:2;;;4164:6;4156;4149:22;4111:2;4208:9;4195:23;4227:33;4254:5;4227:33;:::i;:::-;4279:5;-1:-1:-1;4303:37:1;4336:2;4321:18;;4303:37;:::i;:::-;4293:47;;4101:245;;;;;:::o;4351:792::-;;;;;;4538:3;4526:9;4517:7;4513:23;4509:33;4506:2;;;4560:6;4552;4545:22;4506:2;4604:9;4591:23;4623:33;4650:5;4623:33;:::i;:::-;4675:5;-1:-1:-1;4731:2:1;4716:18;;4703:32;-1:-1:-1;;;;;4747:30:1;;4744:2;;;4795:6;4787;4780:22;4744:2;4823:51;4866:7;4857:6;4846:9;4842:22;4823:51;:::i;:::-;4813:61;;;4921:2;4910:9;4906:18;4893:32;4883:42;;4972:2;4961:9;4957:18;4944:32;4934:42;;5028:3;5017:9;5013:19;5000:33;5077:4;5068:7;5064:18;5055:7;5052:31;5042:2;;5102:6;5094;5087:22;5042:2;5130:7;5120:17;;;4496:647;;;;;;;;:::o;5148:327::-;;;5277:2;5265:9;5256:7;5252:23;5248:32;5245:2;;;5298:6;5290;5283:22;5245:2;5342:9;5329:23;5361:33;5388:5;5361:33;:::i;:::-;5413:5;5465:2;5450:18;;;;5437:32;;-1:-1:-1;;;5235:240:1:o;5480:616::-;;;;;5652:3;5640:9;5631:7;5627:23;5623:33;5620:2;;;5674:6;5666;5659:22;5620:2;5718:9;5705:23;5737:33;5764:5;5737:33;:::i;:::-;5789:5;-1:-1:-1;5841:2:1;5826:18;;5813:32;;-1:-1:-1;5892:2:1;5877:18;;5864:32;;-1:-1:-1;5947:2:1;5932:18;;5919:32;-1:-1:-1;;;;;5963:30:1;;5960:2;;;6011:6;6003;5996:22;5960:2;6039:51;6082:7;6073:6;6062:9;6058:22;6039:51;:::i;:::-;6029:61;;;5610:486;;;;;;;:::o;6101:1295::-;;;6280:2;6268:9;6259:7;6255:23;6251:32;6248:2;;;6301:6;6293;6286:22;6248:2;6346:9;6333:23;-1:-1:-1;;;;;6416:2:1;6408:6;6405:14;6402:2;;;6437:6;6429;6422:22;6402:2;6480:6;6469:9;6465:22;6455:32;;6525:7;6518:4;6514:2;6510:13;6506:27;6496:2;;6552:6;6544;6537:22;6496:2;6593;6580:16;6615:4;6639:65;6654:49;6700:2;6654:49;:::i;6639:65::-;6738:15;;;6769:12;;;;6801:11;;;6839;;;6831:20;;6827:29;;6824:42;-1:-1:-1;6821:2:1;;;6884:6;6876;6869:22;6821:2;6911:6;6902:15;;6926:240;6940:2;6937:1;6934:9;6926:240;;;7011:3;6998:17;7028:33;7055:5;7028:33;:::i;:::-;7074:18;;6958:1;6951:9;;;;;7112:12;;;;7144;;6926:240;;;-1:-1:-1;7185:5:1;-1:-1:-1;;7228:18:1;;7215:32;;-1:-1:-1;;7259:16:1;;;7256:2;;;7293:6;7285;7278:22;7256:2;;7321:69;7382:7;7371:8;7360:9;7356:24;7321:69;:::i;:::-;7311:79;;;6238:1158;;;;;:::o;7401:257::-;;7512:2;7500:9;7491:7;7487:23;7483:32;7480:2;;;7533:6;7525;7518:22;7480:2;7577:9;7564:23;7596:32;7622:5;7596:32;:::i;7663:261::-;;7785:2;7773:9;7764:7;7760:23;7756:32;7753:2;;;7806:6;7798;7791:22;7753:2;7843:9;7837:16;7862:32;7888:5;7862:32;:::i;7929:190::-;;8041:2;8029:9;8020:7;8016:23;8012:32;8009:2;;;8062:6;8054;8047:22;8009:2;-1:-1:-1;8090:23:1;;7999:120;-1:-1:-1;7999:120:1:o;8124:327::-;;;8253:2;8241:9;8232:7;8228:23;8224:32;8221:2;;;8274:6;8266;8259:22;8221:2;8315:9;8302:23;8292:33;;8375:2;8364:9;8360:18;8347:32;8388:33;8415:5;8388:33;:::i;8456:539::-;;;;;8619:3;8607:9;8598:7;8594:23;8590:33;8587:2;;;8641:6;8633;8626:22;8587:2;8682:9;8669:23;8659:33;;8742:2;8731:9;8727:18;8714:32;8755:33;8782:5;8755:33;:::i;:::-;8807:5;-1:-1:-1;8859:2:1;8844:18;;8831:32;;-1:-1:-1;8915:2:1;8900:18;;8887:32;8928:35;8887:32;8928:35;:::i;:::-;8577:418;;;;-1:-1:-1;8577:418:1;;-1:-1:-1;;8577:418:1:o;9000:997::-;;;9164:2;9152:9;9143:7;9139:23;9135:32;9132:2;;;9185:6;9177;9170:22;9132:2;9226:9;9213:23;9203:33;;9255:2;9308;9297:9;9293:18;9280:32;-1:-1:-1;;;;;9327:6:1;9324:30;9321:2;;;9372:6;9364;9357:22;9321:2;9400:22;;9453:4;9445:13;;9441:27;-1:-1:-1;9431:2:1;;9487:6;9479;9472:22;9431:2;9528;9515:16;9551:65;9566:49;9612:2;9566:49;:::i;9551:65::-;9650:15;;;9681:12;;;;9713:11;;;9742:6;9757:210;9771:2;9768:1;9765:9;9757:210;;;9828:64;9884:7;9879:2;9872:3;9859:17;9855:2;9851:26;9847:35;9828:64;:::i;:::-;9816:77;;9913:12;;;;9945;;;;9789:1;9782:9;9757:210;;;-1:-1:-1;9122:875:1;;9986:5;;-1:-1:-1;9122:875:1;-1:-1:-1;;;;;;;9122:875:1:o;10002:1778::-;;;10177:2;10165:9;10156:7;10152:23;10148:32;10145:2;;;10198:6;10190;10183:22;10145:2;10239:9;10226:23;10216:33;;10268:2;10321;10310:9;10306:18;10293:32;-1:-1:-1;;;;;10385:2:1;10377:6;10374:14;10371:2;;;10406:6;10398;10391:22;10371:2;10449:6;10438:9;10434:22;10424:32;;10494:7;10487:4;10483:2;10479:13;10475:27;10465:2;;10521:6;10513;10506:22;10465:2;10562;10549:16;10585:65;10600:49;10646:2;10600:49;:::i;10585:65::-;10684:15;;;10715:12;;;;10747:11;;;10776:6;10791:959;10805:2;10802:1;10799:9;10791:959;;;10868:17;;10860:26;;10938:4;10910:16;;;-1:-1:-1;;10906:30:1;10902:41;10899:2;;;10961:6;10953;10946:22;10899:2;11003;10997:9;11049:4;11041:6;11037:17;11108:6;11096:10;11093:22;11088:2;11076:10;11073:18;11070:46;11067:2;;;11119:18;;:::i;:::-;11159:2;11152:22;11216:11;;;11203:25;11244:16;;;11241:2;;;11278:6;11270;11263:22;11241:2;11315:55;11362:7;11357:2;11346:8;11342:2;11338:17;11334:26;11315:55;:::i;:::-;11307:6;11300:71;;11418:2;11414;11410:11;11397:25;11435:33;11462:5;11435:33;:::i;:::-;11488:15;;;11481:30;11569:2;11561:11;;11548:25;11543:2;11531:15;;11524:50;11611:32;11637:4;11629:13;;11611:32;:::i;:::-;11606:2;11594:15;;11587:57;11657:19;;-1:-1:-1;11696:12:1;;;;11728;;;;10823:1;10816:9;10791:959;;;-1:-1:-1;10135:1645:1;;11769:5;;-1:-1:-1;10135:1645:1;-1:-1:-1;;;;;;;;10135:1645:1:o;11785:260::-;;;11911:2;11899:9;11890:7;11886:23;11882:32;11879:2;;;11932:6;11924;11917:22;11879:2;11973:9;11960:23;11950:33;;12002:37;12035:2;12024:9;12020:18;12002:37;:::i;12050:411::-;;;12189:2;12177:9;12168:7;12164:23;12160:32;12157:2;;;12210:6;12202;12195:22;12157:2;12251:9;12238:23;12228:33;;12312:2;12301:9;12297:18;12284:32;-1:-1:-1;;;;;12331:6:1;12328:30;12325:2;;;12376:6;12368;12361:22;12325:2;12404:51;12447:7;12438:6;12427:9;12423:22;12404:51;:::i;12466:397::-;;;;;12626:3;12614:9;12605:7;12601:23;12597:33;12594:2;;;12648:6;12640;12633:22;12594:2;12689:9;12676:23;12666:33;;12746:2;12735:9;12731:18;12718:32;12708:42;;12769:37;12802:2;12791:9;12787:18;12769:37;:::i;:::-;12584:279;;;;-1:-1:-1;12759:47:1;;12853:2;12838:18;12825:32;;-1:-1:-1;;12584:279:1:o;12868:443::-;;12965:5;12959:12;12992:6;12987:3;12980:19;13018:4;13047:2;13042:3;13038:12;13031:19;;13084:2;13077:5;13073:14;13105:3;13117:169;13131:6;13128:1;13125:13;13117:169;;;13192:13;;13180:26;;13226:12;;;;13261:15;;;;13153:1;13146:9;13117:169;;;-1:-1:-1;13302:3:1;;12935:376;-1:-1:-1;;;;;12935:376:1:o;13316:270::-;;13408:5;13402:12;13435:6;13430:3;13423:19;13451:63;13507:6;13500:4;13495:3;13491:14;13484:4;13477:5;13473:16;13451:63;:::i;:::-;13568:2;13547:15;-1:-1:-1;;13543:29:1;13534:39;;;;13575:4;13530:50;;13378:208;-1:-1:-1;;13378:208:1:o;13591:186::-;;13672:5;13666:12;13687:52;13732:6;13727:3;13720:4;13713:5;13709:16;13687:52;:::i;:::-;13755:16;;;;;13642:135;-1:-1:-1;;13642:135:1:o;13782:274::-;;13949:6;13943:13;13965:53;14011:6;14006:3;13999:4;13991:6;13987:17;13965:53;:::i;:::-;14034:16;;;;;13919:137;-1:-1:-1;;13919:137:1:o;14061:415::-;;14256:6;14250:13;14272:53;14318:6;14313:3;14306:4;14298:6;14294:17;14272:53;:::i;:::-;14394:2;14390:15;;;;-1:-1:-1;;14386:53:1;14347:16;;;;14372:68;;;14467:2;14456:14;;14226:250;-1:-1:-1;;14226:250:1:o;14481:1180::-;14715:13;;14481:1180;;;;14788:1;14773:17;;14809:1;14845:18;;;;14872:2;;14926:4;14918:6;14914:17;14904:27;;14872:2;14952;15000;14992:6;14989:14;14969:18;14966:38;14963:2;;;-1:-1:-1;;;15027:33:1;;15083:4;15080:1;15073:15;15113:4;15034:3;15101:17;14963:2;15144:18;15171:104;;;;15289:1;15284:324;;;;15137:471;;15171:104;-1:-1:-1;;15204:24:1;;15192:37;;15249:16;;;;-1:-1:-1;15171:104:1;;15284:324;15320:39;15352:6;15320:39;:::i;:::-;15381:3;15397:165;15411:6;15408:1;15405:13;15397:165;;;15489:14;;15476:11;;;15469:35;15532:16;;;;15426:10;;15397:165;;;15401:3;;15591:6;15586:3;15582:16;15575:23;;15137:471;;;;;;;15624:31;15651:3;15643:6;15624:31;:::i;:::-;15617:38;14665:996;-1:-1:-1;;;;;14665:996:1:o;15666:392::-;-1:-1:-1;;;15924:27:1;;15976:1;15967:11;;15960:27;;;;16012:2;16003:12;;15996:28;16049:2;16040:12;;15914:144::o;16063:219::-;-1:-1:-1;;;;;16243:32:1;;;;16225:51;;16213:2;16198:18;;16180:102::o;16287:444::-;-1:-1:-1;;;;;16544:15:1;;;16526:34;;16596:15;;16591:2;16576:18;;16569:43;16648:2;16643;16628:18;;16621:30;;;16287:444;;16668:57;;16706:18;;16698:6;16668:57;:::i;16736:851::-;-1:-1:-1;;;;;17133:15:1;;;17115:34;;17185:15;;17180:2;17165:18;;17158:43;17095:3;17232:2;17217:18;;17210:31;;;16736:851;;17264:63;;17307:19;;17299:6;17264:63;:::i;:::-;17375:9;17367:6;17363:22;17358:2;17347:9;17343:18;17336:50;17409;17452:6;17444;17409:50;:::i;:::-;17395:64;;17508:9;17500:6;17496:22;17490:3;17479:9;17475:19;17468:51;17536:45;17574:6;17566;17536:45;:::i;:::-;17528:53;17067:520;-1:-1:-1;;;;;;;;17067:520:1:o;17592:573::-;-1:-1:-1;;;;;17889:15:1;;;17871:34;;17941:15;;17936:2;17921:18;;17914:43;17988:2;17973:18;;17966:34;;;18031:2;18016:18;;18009:34;;;17851:3;18074;18059:19;;18052:32;;;17592:573;;18101:58;;18139:19;;18131:6;18101:58;:::i;:::-;18093:66;17823:342;-1:-1:-1;;;;;;;17823:342:1:o;18170:819::-;;18361:2;18401;18390:9;18386:18;18431:2;18420:9;18413:21;18454:6;18489;18483:13;18520:6;18512;18505:22;18558:2;18547:9;18543:18;18536:25;;18621:2;18615;18607:6;18603:15;18592:9;18588:31;18584:40;18570:54;;18659:2;18651:6;18647:15;18680:4;18693:267;18707:6;18704:1;18701:13;18693:267;;;18800:2;18796:7;18784:9;18776:6;18772:22;18768:36;18763:3;18756:49;18828:52;18873:6;18864;18858:13;18828:52;:::i;:::-;18818:62;-1:-1:-1;18938:12:1;;;;18903:15;;;;18729:1;18722:9;18693:267;;;-1:-1:-1;18977:6:1;;18341:648;-1:-1:-1;;;;;;;18341:648:1:o;18994:1276::-;19207:2;19259:21;;;19329:13;;19232:18;;;19351:22;;;18994:1276;;19207:2;19392;;19410:18;;;;19470:15;;;19455:31;;19451:40;;19514:15;;;18994:1276;19560:681;19574:6;19571:1;19568:13;19560:681;;;19667:2;19663:7;19651:9;19643:6;19639:22;19635:36;19630:3;19623:49;19701:6;19695:13;19731:4;19774:2;19768:9;19805:2;19797:6;19790:18;19835:60;19891:2;19883:6;19879:15;19865:12;19835:60;:::i;:::-;19942:11;;;19936:18;-1:-1:-1;;;;;19932:44:1;19915:15;;;19908:69;20020:11;;;20014:18;19997:15;;;19990:43;20056:4;20117:11;;;20111:18;20104:26;20097:34;20080:15;;;;20073:59;;;;-1:-1:-1;;20219:12:1;;;;20184:15;;;;19973:1;19589:9;19560:681;;;-1:-1:-1;20258:6:1;;19187:1083;-1:-1:-1;;;;;;;;19187:1083:1:o;20275:267::-;;20454:2;20443:9;20436:21;20474:62;20532:2;20521:9;20517:18;20509:6;20474:62;:::i;20547:477::-;;20804:2;20793:9;20786:21;20830:62;20888:2;20877:9;20873:18;20865:6;20830:62;:::i;:::-;20940:9;20932:6;20928:22;20923:2;20912:9;20908:18;20901:50;20968;21011:6;21003;20968:50;:::i;21029:187::-;21194:14;;21187:22;21169:41;;21157:2;21142:18;;21124:92::o;21221:417::-;21452:25;;;21508:2;21493:18;;21486:34;;;;-1:-1:-1;;;;;21556:32:1;21551:2;21536:18;;21529:60;21620:2;21605:18;;21598:34;21439:3;21424:19;;21406:232::o;21643:398::-;21870:25;;;21943:4;21931:17;;;;21926:2;21911:18;;21904:45;21980:2;21965:18;;21958:34;22023:2;22008:18;;22001:34;21857:3;21842:19;;21824:217::o;22046:230::-;;22193:2;22182:9;22175:21;22213:57;22266:2;22255:9;22251:18;22243:6;22213:57;:::i;22518:416::-;22720:2;22702:21;;;22759:2;22739:18;;;22732:30;22798:34;22793:2;22778:18;;22771:62;-1:-1:-1;;;22864:2:1;22849:18;;22842:50;22924:3;22909:19;;22692:242::o;22939:351::-;23141:2;23123:21;;;23180:2;23160:18;;;23153:30;23219:29;23214:2;23199:18;;23192:57;23281:2;23266:18;;23113:177::o;23295:404::-;23497:2;23479:21;;;23536:2;23516:18;;;23509:30;23575:34;23570:2;23555:18;;23548:62;-1:-1:-1;;;23641:2:1;23626:18;;23619:38;23689:3;23674:19;;23469:230::o;23704:340::-;23906:2;23888:21;;;23945:2;23925:18;;;23918:30;-1:-1:-1;;;23979:2:1;23964:18;;23957:46;24035:2;24020:18;;23878:166::o;24049:345::-;24251:2;24233:21;;;24290:2;24270:18;;;24263:30;-1:-1:-1;;;24324:2:1;24309:18;;24302:51;24385:2;24370:18;;24223:171::o;24399:407::-;24601:2;24583:21;;;24640:2;24620:18;;;24613:30;24679:34;24674:2;24659:18;;24652:62;-1:-1:-1;;;24745:2:1;24730:18;;24723:41;24796:3;24781:19;;24573:233::o;24811:413::-;25013:2;24995:21;;;25052:2;25032:18;;;25025:30;25091:34;25086:2;25071:18;;25064:62;-1:-1:-1;;;25157:2:1;25142:18;;25135:47;25214:3;25199:19;;24985:239::o;25229:344::-;25431:2;25413:21;;;25470:2;25450:18;;;25443:30;-1:-1:-1;;;25504:2:1;25489:18;;25482:50;25564:2;25549:18;;25403:170::o;25578:353::-;25780:2;25762:21;;;25819:2;25799:18;;;25792:30;25858:31;25853:2;25838:18;;25831:59;25922:2;25907:18;;25752:179::o;25936:349::-;26138:2;26120:21;;;26177:2;26157:18;;;26150:30;26216:27;26211:2;26196:18;;26189:55;26276:2;26261:18;;26110:175::o;26290:351::-;26492:2;26474:21;;;26531:2;26511:18;;;26504:30;26570:29;26565:2;26550:18;;26543:57;26632:2;26617:18;;26464:177::o;26646:404::-;26848:2;26830:21;;;26887:2;26867:18;;;26860:30;26926:34;26921:2;26906:18;;26899:62;-1:-1:-1;;;26992:2:1;26977:18;;26970:38;27040:3;27025:19;;26820:230::o;27055:343::-;27257:2;27239:21;;;27296:2;27276:18;;;27269:30;-1:-1:-1;;;27330:2:1;27315:18;;27308:49;27389:2;27374:18;;27229:169::o;27403:401::-;27605:2;27587:21;;;27644:2;27624:18;;;27617:30;27683:34;27678:2;27663:18;;27656:62;-1:-1:-1;;;27749:2:1;27734:18;;27727:35;27794:3;27779:19;;27577:227::o;27809:349::-;28011:2;27993:21;;;28050:2;28030:18;;;28023:30;28089:27;28084:2;28069:18;;28062:55;28149:2;28134:18;;27983:175::o;28163:340::-;28365:2;28347:21;;;28404:2;28384:18;;;28377:30;-1:-1:-1;;;28438:2:1;28423:18;;28416:46;28494:2;28479:18;;28337:166::o;28508:341::-;28710:2;28692:21;;;28749:2;28729:18;;;28722:30;-1:-1:-1;;;28783:2:1;28768:18;;28761:47;28840:2;28825:18;;28682:167::o;28854:397::-;29056:2;29038:21;;;29095:2;29075:18;;;29068:30;29134:34;29129:2;29114:18;;29107:62;-1:-1:-1;;;29200:2:1;29185:18;;29178:31;29241:3;29226:19;;29028:223::o;29256:400::-;29458:2;29440:21;;;29497:2;29477:18;;;29470:30;29536:34;29531:2;29516:18;;29509:62;-1:-1:-1;;;29602:2:1;29587:18;;29580:34;29646:3;29631:19;;29430:226::o;29661:342::-;29863:2;29845:21;;;29902:2;29882:18;;;29875:30;-1:-1:-1;;;29936:2:1;29921:18;;29914:48;29994:2;29979:18;;29835:168::o;30008:347::-;30210:2;30192:21;;;30249:2;30229:18;;;30222:30;30288:25;30283:2;30268:18;;30261:53;30346:2;30331:18;;30182:173::o;30360:339::-;30562:2;30544:21;;;30601:2;30581:18;;;30574:30;-1:-1:-1;;;30635:2:1;30620:18;;30613:45;30690:2;30675:18;;30534:165::o;30704:355::-;30906:2;30888:21;;;30945:2;30925:18;;;30918:30;30984:33;30979:2;30964:18;;30957:61;31050:2;31035:18;;30878:181::o;31064:345::-;31266:2;31248:21;;;31305:2;31285:18;;;31278:30;-1:-1:-1;;;31339:2:1;31324:18;;31317:51;31400:2;31385:18;;31238:171::o;31414:356::-;31616:2;31598:21;;;31635:18;;;31628:30;31694:34;31689:2;31674:18;;31667:62;31761:2;31746:18;;31588:182::o;31775:405::-;31977:2;31959:21;;;32016:2;31996:18;;;31989:30;32055:34;32050:2;32035:18;;32028:62;-1:-1:-1;;;32121:2:1;32106:18;;32099:39;32170:3;32155:19;;31949:231::o;32185:397::-;32387:2;32369:21;;;32426:2;32406:18;;;32399:30;32465:34;32460:2;32445:18;;32438:62;-1:-1:-1;;;32531:2:1;32516:18;;32509:31;32572:3;32557:19;;32359:223::o;32587:405::-;32789:2;32771:21;;;32828:2;32808:18;;;32801:30;32867:34;32862:2;32847:18;;32840:62;-1:-1:-1;;;32933:2:1;32918:18;;32911:39;32982:3;32967:19;;32761:231::o;32997:404::-;33199:2;33181:21;;;33238:2;33218:18;;;33211:30;33277:34;33272:2;33257:18;;33250:62;-1:-1:-1;;;33343:2:1;33328:18;;33321:38;33391:3;33376:19;;33171:230::o;33406:339::-;33608:2;33590:21;;;33647:2;33627:18;;;33620:30;-1:-1:-1;;;33681:2:1;33666:18;;33659:45;33736:2;33721:18;;33580:165::o;33750:397::-;33952:2;33934:21;;;33991:2;33971:18;;;33964:30;34030:34;34025:2;34010:18;;34003:62;-1:-1:-1;;;34096:2:1;34081:18;;34074:31;34137:3;34122:19;;33924:223::o;34152:335::-;34354:2;34336:21;;;34393:2;34373:18;;;34366:30;-1:-1:-1;;;34427:2:1;34412:18;;34405:41;34478:2;34463:18;;34326:161::o;34492:608::-;34707:13;;34689:32;;34777:4;34765:17;;;34759:24;34737:20;;;34730:54;34854:4;34842:17;;;34836:24;34829:32;34822:40;34800:20;;;34793:70;34919:4;34907:17;;;34901:24;34879:20;;;34872:54;34986:4;34974:17;;;34968:24;-1:-1:-1;;;;;34964:50:1;34942:20;;;34935:80;35002:3;35073:17;;;35067:24;35060:32;35053:40;35031:20;;;35024:70;;;;34676:3;34661:19;;34643:457::o;35105:177::-;35251:25;;;35239:2;35224:18;;35206:76::o;35287:248::-;35461:25;;;35517:2;35502:18;;35495:34;35449:2;35434:18;;35416:119::o;35540:251::-;35610:2;35604:9;35640:17;;;-1:-1:-1;;;;;35672:34:1;;35708:22;;;35669:62;35666:2;;;35734:18;;:::i;:::-;35770:2;35763:22;35584:207;;-1:-1:-1;35584:207:1:o;35796:192::-;;-1:-1:-1;;;;;35887:6:1;35884:30;35881:2;;;35917:18;;:::i;:::-;-1:-1:-1;35977:4:1;35958:17;;;35954:28;;35871:117::o;35993:129::-;;36061:17;;;36111:4;36095:21;;;36051:71::o;36127:128::-;;36198:1;36194:6;36191:1;36188:13;36185:2;;;36204:18;;:::i;:::-;-1:-1:-1;36240:9:1;;36175:80::o;36260:204::-;;36334:4;36331:1;36327:12;36366:4;36363:1;36359:12;36401:3;36395:4;36391:14;36386:3;36383:23;36380:2;;;36409:18;;:::i;:::-;36445:13;;36306:158;-1:-1:-1;;;36306:158:1:o;36469:217::-;;36535:1;36525:2;;-1:-1:-1;;;36560:31:1;;36614:4;36611:1;36604:15;36642:4;36567:1;36632:15;36525:2;-1:-1:-1;36671:9:1;;36515:171::o;36691:168::-;;36797:1;36793;36789:6;36785:14;36782:1;36779:21;36774:1;36767:9;36760:17;36756:45;36753:2;;;36804:18;;:::i;:::-;-1:-1:-1;36844:9:1;;36743:116::o;36864:125::-;;36932:1;36929;36926:8;36923:2;;;36937:18;;:::i;:::-;-1:-1:-1;36974:9:1;;36913:76::o;36994:258::-;37066:1;37076:113;37090:6;37087:1;37084:13;37076:113;;;37166:11;;;37160:18;37147:11;;;37140:39;37112:2;37105:10;37076:113;;;37207:6;37204:1;37201:13;37198:2;;;-1:-1:-1;;37242:1:1;37224:16;;37217:27;37047:205::o;37257:380::-;37342:1;37332:12;;37389:1;37379:12;;;37400:2;;37454:4;37446:6;37442:17;37432:27;;37400:2;37507;37499:6;37496:14;37476:18;37473:38;37470:2;;;37553:10;37548:3;37544:20;37541:1;37534:31;37588:4;37585:1;37578:15;37616:4;37613:1;37606:15;37470:2;;37312:325;;;:::o;37642:135::-;;-1:-1:-1;;37702:17:1;;37699:2;;;37722:18;;:::i;:::-;-1:-1:-1;37769:1:1;37758:13;;37689:88::o;37782:127::-;37843:10;37838:3;37834:20;37831:1;37824:31;37874:4;37871:1;37864:15;37898:4;37895:1;37888:15;37914:127;37975:10;37970:3;37966:20;37963:1;37956:31;38006:4;38003:1;37996:15;38030:4;38027:1;38020:15;38046:88;38121:3;38117:15;;38103:31::o;38139:764::-;;38220:4;38202:16;38199:26;38196:2;;;38228:5;;38196:2;38269:1;38264:3;38259;38244:27;38331:10;38293:36;38324:3;38318:10;38293:36;:::i;:::-;38290:52;38280:2;;38346:5;;38280:2;38380;38374:9;38420:16;-1:-1:-1;;38416:29:1;38413:1;38374:9;38392:54;38475:4;38469:11;38499:16;-1:-1:-1;;;;;38605:2:1;38598:4;38590:6;38586:17;38583:25;38578:2;38570:6;38567:14;38564:45;38561:2;;;38612:5;;;;;;38561:2;38649:6;38643:4;38639:17;38628:28;;38685:3;38679:10;38665:24;;38712:2;38704:6;38701:14;38698:2;;;38718:5;;;;;;38698:2;;38779:16;38773:4;38769:27;38762:4;38753:6;38748:3;38744:16;38740:27;38737:60;38734:2;;;38800:5;;;;;38734:2;38865;38844:15;-1:-1:-1;;38840:29:1;38831:39;;38872:4;38827:50;38823:2;38816:62;38835:3;-1:-1:-1;;38186:717:1;:::o;38908:133::-;-1:-1:-1;;;;;38985:31:1;;38975:42;;38965:2;;39031:1;39028;39021:12;38965:2;38955:86;:::o;39046:133::-;-1:-1:-1;;;;;;39122:32:1;;39112:43;;39102:2;;39169:1;39166;39159:12

Swarm Source

ipfs://5edde900f7dc021834e6dd606e4063b39c1e163b3ea2c84565b690113aee2b39
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.