@imtbl/sdk 0.15.1-alpha → 0.16.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import globalAxios$1 from 'axios';
1
+ import globalAxios$1, { HttpStatusCode as HttpStatusCode$2 } from 'axios';
2
2
  import { ImmutableX, Config, IMXError, createStarkSigner, generateLegacyStarkPrivateKey, TransfersApi, OrdersApi as OrdersApi$1, UsersApi, Contracts, TradesApi, ExchangesApi, WithdrawalsApi, MintsApi, DepositsApi, EncodingApi, TokensApi as TokensApi$1 } from '@imtbl/core-sdk';
3
3
  import { UserManager } from 'oidc-client-ts';
4
4
  import jwt_decode from 'jwt-decode';
@@ -1292,16 +1292,16 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1292
1292
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1293
1293
  * @summary Retrieve fulfillment data for orders
1294
1294
  * @param {string} chainName
1295
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1295
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1296
1296
  * @param {*} [options] Override http request option.
1297
1297
  * @throws {RequiredError}
1298
1298
  */
1299
- fulfillmentData: async (chainName, fulfillmentDataRequestInner, options = {}) => {
1299
+ fulfillmentData: async (chainName, fulfillmentDataRequest, options = {}) => {
1300
1300
  // verify required parameter 'chainName' is not null or undefined
1301
1301
  assertParamExists$1('fulfillmentData', 'chainName', chainName);
1302
- // verify required parameter 'fulfillmentDataRequestInner' is not null or undefined
1303
- assertParamExists$1('fulfillmentData', 'fulfillmentDataRequestInner', fulfillmentDataRequestInner);
1304
- const localVarPath = `/v1/chains/{chain_name}/orders/fulfillment_data`
1302
+ // verify required parameter 'fulfillmentDataRequest' is not null or undefined
1303
+ assertParamExists$1('fulfillmentData', 'fulfillmentDataRequest', fulfillmentDataRequest);
1304
+ const localVarPath = `/v1/chains/{chain_name}/orders/fulfillment-data`
1305
1305
  .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)));
1306
1306
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1307
1307
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
@@ -1316,7 +1316,7 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1316
1316
  setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1317
1317
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1318
1318
  localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1319
- localVarRequestOptions.data = serializeDataIfNeeded$1(fulfillmentDataRequestInner, localVarRequestOptions, configuration);
1319
+ localVarRequestOptions.data = serializeDataIfNeeded$1(fulfillmentDataRequest, localVarRequestOptions, configuration);
1320
1320
  return {
1321
1321
  url: toPathString$1(localVarUrlObj),
1322
1322
  options: localVarRequestOptions,
@@ -1355,6 +1355,39 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1355
1355
  options: localVarRequestOptions,
1356
1356
  };
1357
1357
  },
1358
+ /**
1359
+ * Get a single trade by ID
1360
+ * @summary Get a single trade by ID
1361
+ * @param {string} chainName
1362
+ * @param {string} tradeId Global Trade identifier
1363
+ * @param {*} [options] Override http request option.
1364
+ * @throws {RequiredError}
1365
+ */
1366
+ getTrade: async (chainName, tradeId, options = {}) => {
1367
+ // verify required parameter 'chainName' is not null or undefined
1368
+ assertParamExists$1('getTrade', 'chainName', chainName);
1369
+ // verify required parameter 'tradeId' is not null or undefined
1370
+ assertParamExists$1('getTrade', 'tradeId', tradeId);
1371
+ const localVarPath = `/v1/chains/{chain_name}/trades/{trade_id}`
1372
+ .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)))
1373
+ .replace(`{${"trade_id"}}`, encodeURIComponent(String(tradeId)));
1374
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1375
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1376
+ let baseOptions;
1377
+ if (configuration) {
1378
+ baseOptions = configuration.baseOptions;
1379
+ }
1380
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1381
+ const localVarHeaderParameter = {};
1382
+ const localVarQueryParameter = {};
1383
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1384
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1385
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1386
+ return {
1387
+ url: toPathString$1(localVarUrlObj),
1388
+ options: localVarRequestOptions,
1389
+ };
1390
+ },
1358
1391
  /**
1359
1392
  * List all listings
1360
1393
  * @summary List all listings
@@ -1416,6 +1449,51 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1416
1449
  options: localVarRequestOptions,
1417
1450
  };
1418
1451
  },
1452
+ /**
1453
+ * List all trades
1454
+ * @summary List all trades
1455
+ * @param {string} chainName
1456
+ * @param {number} [pageSize] Maximum number of trades to return per page
1457
+ * @param {'created_at'} [sortBy] Trade field to sort by
1458
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1459
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1460
+ * @param {*} [options] Override http request option.
1461
+ * @throws {RequiredError}
1462
+ */
1463
+ listTrades: async (chainName, pageSize, sortBy, sortDirection, pageCursor, options = {}) => {
1464
+ // verify required parameter 'chainName' is not null or undefined
1465
+ assertParamExists$1('listTrades', 'chainName', chainName);
1466
+ const localVarPath = `/v1/chains/{chain_name}/trades`
1467
+ .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)));
1468
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1469
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1470
+ let baseOptions;
1471
+ if (configuration) {
1472
+ baseOptions = configuration.baseOptions;
1473
+ }
1474
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1475
+ const localVarHeaderParameter = {};
1476
+ const localVarQueryParameter = {};
1477
+ if (pageSize !== undefined) {
1478
+ localVarQueryParameter['page_size'] = pageSize;
1479
+ }
1480
+ if (sortBy !== undefined) {
1481
+ localVarQueryParameter['sort_by'] = sortBy;
1482
+ }
1483
+ if (sortDirection !== undefined) {
1484
+ localVarQueryParameter['sort_direction'] = sortDirection;
1485
+ }
1486
+ if (pageCursor !== undefined) {
1487
+ localVarQueryParameter['page_cursor'] = pageCursor;
1488
+ }
1489
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1490
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1491
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1492
+ return {
1493
+ url: toPathString$1(localVarUrlObj),
1494
+ options: localVarRequestOptions,
1495
+ };
1496
+ },
1419
1497
  };
1420
1498
  };
1421
1499
  /**
@@ -1441,12 +1519,12 @@ const OrdersApiFp = function (configuration) {
1441
1519
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1442
1520
  * @summary Retrieve fulfillment data for orders
1443
1521
  * @param {string} chainName
1444
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1522
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1445
1523
  * @param {*} [options] Override http request option.
1446
1524
  * @throws {RequiredError}
1447
1525
  */
1448
- async fulfillmentData(chainName, fulfillmentDataRequestInner, options) {
1449
- const localVarAxiosArgs = await localVarAxiosParamCreator.fulfillmentData(chainName, fulfillmentDataRequestInner, options);
1526
+ async fulfillmentData(chainName, fulfillmentDataRequest, options) {
1527
+ const localVarAxiosArgs = await localVarAxiosParamCreator.fulfillmentData(chainName, fulfillmentDataRequest, options);
1450
1528
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1451
1529
  },
1452
1530
  /**
@@ -1461,6 +1539,18 @@ const OrdersApiFp = function (configuration) {
1461
1539
  const localVarAxiosArgs = await localVarAxiosParamCreator.getListing(chainName, listingId, options);
1462
1540
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1463
1541
  },
1542
+ /**
1543
+ * Get a single trade by ID
1544
+ * @summary Get a single trade by ID
1545
+ * @param {string} chainName
1546
+ * @param {string} tradeId Global Trade identifier
1547
+ * @param {*} [options] Override http request option.
1548
+ * @throws {RequiredError}
1549
+ */
1550
+ async getTrade(chainName, tradeId, options) {
1551
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTrade(chainName, tradeId, options);
1552
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1553
+ },
1464
1554
  /**
1465
1555
  * List all listings
1466
1556
  * @summary List all listings
@@ -1480,6 +1570,21 @@ const OrdersApiFp = function (configuration) {
1480
1570
  const localVarAxiosArgs = await localVarAxiosParamCreator.listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options);
1481
1571
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1482
1572
  },
1573
+ /**
1574
+ * List all trades
1575
+ * @summary List all trades
1576
+ * @param {string} chainName
1577
+ * @param {number} [pageSize] Maximum number of trades to return per page
1578
+ * @param {'created_at'} [sortBy] Trade field to sort by
1579
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1580
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1581
+ * @param {*} [options] Override http request option.
1582
+ * @throws {RequiredError}
1583
+ */
1584
+ async listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1585
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options);
1586
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1587
+ },
1483
1588
  };
1484
1589
  };
1485
1590
  /**
@@ -1504,12 +1609,12 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1504
1609
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1505
1610
  * @summary Retrieve fulfillment data for orders
1506
1611
  * @param {string} chainName
1507
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1612
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1508
1613
  * @param {*} [options] Override http request option.
1509
1614
  * @throws {RequiredError}
1510
1615
  */
1511
- fulfillmentData(chainName, fulfillmentDataRequestInner, options) {
1512
- return localVarFp.fulfillmentData(chainName, fulfillmentDataRequestInner, options).then((request) => request(axios, basePath));
1616
+ fulfillmentData(chainName, fulfillmentDataRequest, options) {
1617
+ return localVarFp.fulfillmentData(chainName, fulfillmentDataRequest, options).then((request) => request(axios, basePath));
1513
1618
  },
1514
1619
  /**
1515
1620
  * Get a single listing by ID
@@ -1522,6 +1627,17 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1522
1627
  getListing(chainName, listingId, options) {
1523
1628
  return localVarFp.getListing(chainName, listingId, options).then((request) => request(axios, basePath));
1524
1629
  },
1630
+ /**
1631
+ * Get a single trade by ID
1632
+ * @summary Get a single trade by ID
1633
+ * @param {string} chainName
1634
+ * @param {string} tradeId Global Trade identifier
1635
+ * @param {*} [options] Override http request option.
1636
+ * @throws {RequiredError}
1637
+ */
1638
+ getTrade(chainName, tradeId, options) {
1639
+ return localVarFp.getTrade(chainName, tradeId, options).then((request) => request(axios, basePath));
1640
+ },
1525
1641
  /**
1526
1642
  * List all listings
1527
1643
  * @summary List all listings
@@ -1540,6 +1656,20 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1540
1656
  listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options) {
1541
1657
  return localVarFp.listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1542
1658
  },
1659
+ /**
1660
+ * List all trades
1661
+ * @summary List all trades
1662
+ * @param {string} chainName
1663
+ * @param {number} [pageSize] Maximum number of trades to return per page
1664
+ * @param {'created_at'} [sortBy] Trade field to sort by
1665
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1666
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1667
+ * @param {*} [options] Override http request option.
1668
+ * @throws {RequiredError}
1669
+ */
1670
+ listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1671
+ return localVarFp.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1672
+ },
1543
1673
  };
1544
1674
  };
1545
1675
  /**
@@ -1569,7 +1699,7 @@ class OrdersApi extends BaseAPI$1 {
1569
1699
  * @memberof OrdersApi
1570
1700
  */
1571
1701
  fulfillmentData(requestParameters, options) {
1572
- return OrdersApiFp(this.configuration).fulfillmentData(requestParameters.chainName, requestParameters.fulfillmentDataRequestInner, options).then((request) => request(this.axios, this.basePath));
1702
+ return OrdersApiFp(this.configuration).fulfillmentData(requestParameters.chainName, requestParameters.fulfillmentDataRequest, options).then((request) => request(this.axios, this.basePath));
1573
1703
  }
1574
1704
  /**
1575
1705
  * Get a single listing by ID
@@ -1582,6 +1712,17 @@ class OrdersApi extends BaseAPI$1 {
1582
1712
  getListing(requestParameters, options) {
1583
1713
  return OrdersApiFp(this.configuration).getListing(requestParameters.chainName, requestParameters.listingId, options).then((request) => request(this.axios, this.basePath));
1584
1714
  }
1715
+ /**
1716
+ * Get a single trade by ID
1717
+ * @summary Get a single trade by ID
1718
+ * @param {OrdersApiGetTradeRequest} requestParameters Request parameters.
1719
+ * @param {*} [options] Override http request option.
1720
+ * @throws {RequiredError}
1721
+ * @memberof OrdersApi
1722
+ */
1723
+ getTrade(requestParameters, options) {
1724
+ return OrdersApiFp(this.configuration).getTrade(requestParameters.chainName, requestParameters.tradeId, options).then((request) => request(this.axios, this.basePath));
1725
+ }
1585
1726
  /**
1586
1727
  * List all listings
1587
1728
  * @summary List all listings
@@ -1593,6 +1734,17 @@ class OrdersApi extends BaseAPI$1 {
1593
1734
  listListings(requestParameters, options) {
1594
1735
  return OrdersApiFp(this.configuration).listListings(requestParameters.chainName, requestParameters.status, requestParameters.sellItemContractAddress, requestParameters.buyItemContractAddress, requestParameters.sellItemTokenId, requestParameters.pageSize, requestParameters.sortBy, requestParameters.sortDirection, requestParameters.pageCursor, options).then((request) => request(this.axios, this.basePath));
1595
1736
  }
1737
+ /**
1738
+ * List all trades
1739
+ * @summary List all trades
1740
+ * @param {OrdersApiListTradesRequest} requestParameters Request parameters.
1741
+ * @param {*} [options] Override http request option.
1742
+ * @throws {RequiredError}
1743
+ * @memberof OrdersApi
1744
+ */
1745
+ listTrades(requestParameters, options) {
1746
+ return OrdersApiFp(this.configuration).listTrades(requestParameters.chainName, requestParameters.pageSize, requestParameters.sortBy, requestParameters.sortDirection, requestParameters.pageCursor, options).then((request) => request(this.axios, this.basePath));
1747
+ }
1596
1748
  }
1597
1749
 
1598
1750
  /* tslint:disable */
@@ -1647,6 +1799,38 @@ const PassportApiAxiosParamCreator = function (configuration) {
1647
1799
  options: localVarRequestOptions,
1648
1800
  };
1649
1801
  },
1802
+ /**
1803
+ * Get all the Ethereum linked addresses for a user based on its userId
1804
+ * @summary Get Ethereum linked addresses for a user
1805
+ * @param {string} userId The user\&#39;s userId
1806
+ * @param {*} [options] Override http request option.
1807
+ * @throws {RequiredError}
1808
+ */
1809
+ getLinkedAddresses: async (userId, options = {}) => {
1810
+ // verify required parameter 'userId' is not null or undefined
1811
+ assertParamExists$1('getLinkedAddresses', 'userId', userId);
1812
+ const localVarPath = `/passport-mr/v1/users/{userId}/linked-addresses`
1813
+ .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
1814
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1815
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1816
+ let baseOptions;
1817
+ if (configuration) {
1818
+ baseOptions = configuration.baseOptions;
1819
+ }
1820
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1821
+ const localVarHeaderParameter = {};
1822
+ const localVarQueryParameter = {};
1823
+ // authentication BearerAuth required
1824
+ // http bearer authentication required
1825
+ await setBearerAuthToObject$1(localVarHeaderParameter, configuration);
1826
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1827
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1828
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1829
+ return {
1830
+ url: toPathString$1(localVarUrlObj),
1831
+ options: localVarRequestOptions,
1832
+ };
1833
+ },
1650
1834
  };
1651
1835
  };
1652
1836
  /**
@@ -1667,6 +1851,17 @@ const PassportApiFp = function (configuration) {
1667
1851
  const localVarAxiosArgs = await localVarAxiosParamCreator.createCounterfactualAddress(createCounterfactualAddressRequest, options);
1668
1852
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1669
1853
  },
1854
+ /**
1855
+ * Get all the Ethereum linked addresses for a user based on its userId
1856
+ * @summary Get Ethereum linked addresses for a user
1857
+ * @param {string} userId The user\&#39;s userId
1858
+ * @param {*} [options] Override http request option.
1859
+ * @throws {RequiredError}
1860
+ */
1861
+ async getLinkedAddresses(userId, options) {
1862
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLinkedAddresses(userId, options);
1863
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1864
+ },
1670
1865
  };
1671
1866
  };
1672
1867
  /**
@@ -1686,6 +1881,16 @@ const PassportApiFactory = function (configuration, basePath, axios) {
1686
1881
  createCounterfactualAddress(createCounterfactualAddressRequest, options) {
1687
1882
  return localVarFp.createCounterfactualAddress(createCounterfactualAddressRequest, options).then((request) => request(axios, basePath));
1688
1883
  },
1884
+ /**
1885
+ * Get all the Ethereum linked addresses for a user based on its userId
1886
+ * @summary Get Ethereum linked addresses for a user
1887
+ * @param {string} userId The user\&#39;s userId
1888
+ * @param {*} [options] Override http request option.
1889
+ * @throws {RequiredError}
1890
+ */
1891
+ getLinkedAddresses(userId, options) {
1892
+ return localVarFp.getLinkedAddresses(userId, options).then((request) => request(axios, basePath));
1893
+ },
1689
1894
  };
1690
1895
  };
1691
1896
  /**
@@ -1706,6 +1911,17 @@ class PassportApi extends BaseAPI$1 {
1706
1911
  createCounterfactualAddress(requestParameters, options) {
1707
1912
  return PassportApiFp(this.configuration).createCounterfactualAddress(requestParameters.createCounterfactualAddressRequest, options).then((request) => request(this.axios, this.basePath));
1708
1913
  }
1914
+ /**
1915
+ * Get all the Ethereum linked addresses for a user based on its userId
1916
+ * @summary Get Ethereum linked addresses for a user
1917
+ * @param {PassportApiGetLinkedAddressesRequest} requestParameters Request parameters.
1918
+ * @param {*} [options] Override http request option.
1919
+ * @throws {RequiredError}
1920
+ * @memberof PassportApi
1921
+ */
1922
+ getLinkedAddresses(requestParameters, options) {
1923
+ return PassportApiFp(this.configuration).getLinkedAddresses(requestParameters.userId, options).then((request) => request(this.axios, this.basePath));
1924
+ }
1709
1925
  }
1710
1926
 
1711
1927
  /* tslint:disable */
@@ -2135,23 +2351,6 @@ const CollectionContractType = {
2135
2351
  Erc721: 'ERC721'
2136
2352
  };
2137
2353
 
2138
- /* tslint:disable */
2139
- /* eslint-disable */
2140
- /**
2141
- * Immutable zkEVM API
2142
- * Immutable Multi Rollup API
2143
- *
2144
- * The version of the OpenAPI document: 1.0.0
2145
- * Contact: support@immutable.com
2146
- *
2147
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2148
- * https://openapi-generator.tech
2149
- * Do not edit the class manually.
2150
- */
2151
- const CreateOrderProtocolDataOrderTypeEnum = {
2152
- FullRestricted: 'FULL_RESTRICTED'
2153
- };
2154
-
2155
2354
  /* tslint:disable */
2156
2355
  /* eslint-disable */
2157
2356
  /**
@@ -2200,7 +2399,10 @@ const ERC721ItemItemTypeEnum = {
2200
2399
  * Do not edit the class manually.
2201
2400
  */
2202
2401
  const FeeFeeTypeEnum = {
2203
- Royalty: 'ROYALTY'
2402
+ Royalty: 'ROYALTY',
2403
+ MakerMarketplace: 'MAKER_MARKETPLACE',
2404
+ TakerMarketplace: 'TAKER_MARKETPLACE',
2405
+ Protocol: 'PROTOCOL'
2204
2406
  };
2205
2407
 
2206
2408
  /* tslint:disable */
@@ -2269,6 +2471,23 @@ const OrderStatus$1 = {
2269
2471
  Expired: 'EXPIRED'
2270
2472
  };
2271
2473
 
2474
+ /* tslint:disable */
2475
+ /* eslint-disable */
2476
+ /**
2477
+ * Immutable zkEVM API
2478
+ * Immutable Multi Rollup API
2479
+ *
2480
+ * The version of the OpenAPI document: 1.0.0
2481
+ * Contact: support@immutable.com
2482
+ *
2483
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2484
+ * https://openapi-generator.tech
2485
+ * Do not edit the class manually.
2486
+ */
2487
+ const ProtocolDataOrderTypeEnum = {
2488
+ FullRestricted: 'FULL_RESTRICTED'
2489
+ };
2490
+
2272
2491
  /* tslint:disable */
2273
2492
  /* eslint-disable */
2274
2493
  /**
@@ -2345,7 +2564,6 @@ var index = /*#__PURE__*/Object.freeze({
2345
2564
  CollectionsApiFactory: CollectionsApiFactory,
2346
2565
  CollectionsApiFp: CollectionsApiFp,
2347
2566
  Configuration: Configuration$2,
2348
- CreateOrderProtocolDataOrderTypeEnum: CreateOrderProtocolDataOrderTypeEnum,
2349
2567
  ERC20ItemItemTypeEnum: ERC20ItemItemTypeEnum,
2350
2568
  ERC721ItemItemTypeEnum: ERC721ItemItemTypeEnum,
2351
2569
  FeeFeeTypeEnum: FeeFeeTypeEnum,
@@ -2368,6 +2586,7 @@ var index = /*#__PURE__*/Object.freeze({
2368
2586
  PassportApiAxiosParamCreator: PassportApiAxiosParamCreator,
2369
2587
  PassportApiFactory: PassportApiFactory,
2370
2588
  PassportApiFp: PassportApiFp,
2589
+ ProtocolDataOrderTypeEnum: ProtocolDataOrderTypeEnum,
2371
2590
  SaleFeeTypeEnum: SaleFeeTypeEnum,
2372
2591
  TokenContractType: TokenContractType,
2373
2592
  TokensApi: TokensApi,
@@ -2398,7 +2617,7 @@ class MultiRollupApiClients {
2398
2617
  }
2399
2618
 
2400
2619
  // eslint-disable-next-line @typescript-eslint/naming-convention
2401
- const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.15.1-alpha' };
2620
+ const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.16.0-alpha.1' };
2402
2621
  const createConfig = ({ basePath, headers, }) => {
2403
2622
  if (!basePath.trim()) {
2404
2623
  throw Error('basePath can not be empty');
@@ -2458,7 +2677,7 @@ class APIError extends Error {
2458
2677
 
2459
2678
  /* eslint-disable implicit-arrow-linebreak */
2460
2679
  const defaultHeaders = {
2461
- sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.15.1-alpha',
2680
+ sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.16.0-alpha.1',
2462
2681
  };
2463
2682
  /**
2464
2683
  * createAPIConfiguration to create a custom Configuration
@@ -2730,7 +2949,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
2730
2949
  chainID,
2731
2950
  coreContractAddress,
2732
2951
  registrationContractAddress,
2733
- sdkVersion: 'ts-immutable-sdk-0.15.1-alpha',
2952
+ sdkVersion: 'ts-immutable-sdk-0.16.0-alpha.1',
2734
2953
  });
2735
2954
  /**
2736
2955
  * Sets `sdkVersion` at the time of build
@@ -7182,6 +7401,12 @@ class AuthManager {
7182
7401
  userAdminAddress: idTokenPayload?.passport?.imx_user_admin_address,
7183
7402
  };
7184
7403
  }
7404
+ if (idTokenPayload?.passport?.zkevm_eth_address) {
7405
+ user.zkEvm = {
7406
+ ethAddress: idTokenPayload?.passport?.zkevm_eth_address,
7407
+ userAdminAddress: idTokenPayload?.passport?.zkevm_user_admin_address,
7408
+ };
7409
+ }
7185
7410
  return user;
7186
7411
  };
7187
7412
  async login() {
@@ -7325,8 +7550,8 @@ class AuthManager {
7325
7550
  const refreshToken = tokenResponse?.refresh_token ?? null;
7326
7551
  if (refreshToken) {
7327
7552
  // Token is no longer valid, but refresh token can be used to a new one
7328
- const newTokenResponse = await this.refreshToken(refreshToken);
7329
- return AuthManager.mapDeviceTokenResponseToDomainUserModel(newTokenResponse);
7553
+ const user = await this.refreshToken(refreshToken);
7554
+ return user;
7330
7555
  }
7331
7556
  return null;
7332
7557
  }, PassportErrorType.AUTHENTICATION_ERROR);
@@ -7337,7 +7562,8 @@ class AuthManager {
7337
7562
  grant_type: 'refresh_token',
7338
7563
  refresh_token: refreshToken,
7339
7564
  }, formUrlEncodedHeader);
7340
- return response.data;
7565
+ const newTokenResponse = response.data;
7566
+ return AuthManager.mapDeviceTokenResponseToDomainUserModel(newTokenResponse);
7341
7567
  }
7342
7568
  async logout() {
7343
7569
  return withPassportError(async () => {
@@ -8496,7 +8722,7 @@ class RelayerClient {
8496
8722
  }
8497
8723
 
8498
8724
  const MESSAGE_TO_SIGN = 'Only sign this message from Immutable Passport';
8499
- async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiClients, accessToken, }) {
8725
+ async function registerZkEvmUser({ authManager, config, magicProvider, multiRollupApiClients, accessToken, }) {
8500
8726
  const web3Provider = new Web3Provider(magicProvider);
8501
8727
  const ethSigner = web3Provider.getSigner();
8502
8728
  const ethereumAddress = await ethSigner.getAddress();
@@ -8513,7 +8739,17 @@ async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiCli
8513
8739
  catch (error) {
8514
8740
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, `Failed to create counterfactual address: ${error}`);
8515
8741
  }
8516
- const user = await authManager.loginSilent();
8742
+ let user;
8743
+ if (config.crossSdkBridgeEnabled) {
8744
+ const credentials = authManager.checkStoredDeviceFlowCredentials();
8745
+ if (!credentials || !credentials.refresh_token) {
8746
+ throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Cross SDK bridge: Failed to refresh user details');
8747
+ }
8748
+ user = await authManager.refreshToken(credentials.refresh_token);
8749
+ }
8750
+ else {
8751
+ user = await authManager.loginSilent();
8752
+ }
8517
8753
  if (!user?.zkEvm) {
8518
8754
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Failed to refresh user details');
8519
8755
  }
@@ -8521,7 +8757,7 @@ async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiCli
8521
8757
  }
8522
8758
 
8523
8759
  const loginZkEvmUser = async ({ authManager, config, magicAdapter, multiRollupApiClients, }) => {
8524
- const user = await authManager.getUser() || await authManager.login();
8760
+ const user = await authManager.getUser() || await authManager.getUserDeviceFlow() || await authManager.login();
8525
8761
  if (!user.idToken) {
8526
8762
  throw new Error('User is missing idToken');
8527
8763
  }
@@ -8530,6 +8766,7 @@ const loginZkEvmUser = async ({ authManager, config, magicAdapter, multiRollupAp
8530
8766
  // Generate counterfactual address and retrieve updated Auth0 user
8531
8767
  const userZkevm = await registerZkEvmUser({
8532
8768
  authManager,
8769
+ config,
8533
8770
  magicProvider,
8534
8771
  multiRollupApiClients,
8535
8772
  accessToken: user.accessToken,
@@ -8928,6 +9165,17 @@ class Passport {
8928
9165
  const user = await this.authManager.getUser();
8929
9166
  return user?.accessToken;
8930
9167
  }
9168
+ async getLinkedAddresses() {
9169
+ const user = await this.authManager.getUser();
9170
+ if (!user?.profile.sub) {
9171
+ return [];
9172
+ }
9173
+ const headers = { Authorization: `Bearer ${user.accessToken}` };
9174
+ const linkedAddressesResult = await this.multiRollupApiClients.passportApi.getLinkedAddresses({
9175
+ userId: user?.profile.sub,
9176
+ }, { headers });
9177
+ return linkedAddressesResult.data.linkedAddresses;
9178
+ }
8931
9179
  }
8932
9180
 
8933
9181
  var passport = /*#__PURE__*/Object.freeze({
@@ -9425,6 +9673,54 @@ class OrdersService {
9425
9673
  },
9426
9674
  });
9427
9675
  }
9676
+ /**
9677
+ * List all trades
9678
+ * List all trades
9679
+ * @returns ListTradeResult OK response.
9680
+ * @throws ApiError
9681
+ */
9682
+ listTrades({ chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, }) {
9683
+ return this.httpRequest.request({
9684
+ method: 'GET',
9685
+ url: '/v1/chains/{chain_name}/trades',
9686
+ path: {
9687
+ 'chain_name': chainName,
9688
+ },
9689
+ query: {
9690
+ 'account_address': accountAddress,
9691
+ 'page_size': pageSize,
9692
+ 'sort_by': sortBy,
9693
+ 'sort_direction': sortDirection,
9694
+ 'page_cursor': pageCursor,
9695
+ },
9696
+ errors: {
9697
+ 400: `Bad Request (400)`,
9698
+ 404: `The specified resource was not found (404)`,
9699
+ 500: `Internal Server Error (500)`,
9700
+ },
9701
+ });
9702
+ }
9703
+ /**
9704
+ * Get a single trade by ID
9705
+ * Get a single trade by ID
9706
+ * @returns TradeResult OK response.
9707
+ * @throws ApiError
9708
+ */
9709
+ getTrade({ chainName, tradeId, }) {
9710
+ return this.httpRequest.request({
9711
+ method: 'GET',
9712
+ url: '/v1/chains/{chain_name}/trades/{trade_id}',
9713
+ path: {
9714
+ 'chain_name': chainName,
9715
+ 'trade_id': tradeId,
9716
+ },
9717
+ errors: {
9718
+ 400: `Bad Request (400)`,
9719
+ 404: `The specified resource was not found (404)`,
9720
+ 500: `Internal Server Error (500)`,
9721
+ },
9722
+ });
9723
+ }
9428
9724
  }
9429
9725
 
9430
9726
  class OrderBookClient {
@@ -9561,6 +9857,57 @@ function mapFromOpenApiOrder(order) {
9561
9857
  updateTime: order.update_time,
9562
9858
  };
9563
9859
  }
9860
+ function mapFromOpenApiTrade(trade) {
9861
+ const buyItems = trade.buy.map((item) => {
9862
+ if (item.item_type === 'ERC20') {
9863
+ return {
9864
+ type: 'ERC20',
9865
+ contractAddress: item.contract_address,
9866
+ amount: item.start_amount,
9867
+ };
9868
+ }
9869
+ if (item.item_type === 'NATIVE') {
9870
+ return {
9871
+ type: 'NATIVE',
9872
+ amount: item.start_amount,
9873
+ };
9874
+ }
9875
+ throw new Error('Buy items must be either ERC20 or NATIVE');
9876
+ });
9877
+ const sellItems = trade.sell.map((item) => {
9878
+ if (item.item_type === 'ERC721') {
9879
+ return {
9880
+ type: 'ERC721',
9881
+ contractAddress: item.contract_address,
9882
+ tokenId: item.token_id,
9883
+ };
9884
+ }
9885
+ throw new Error('Sell items must ERC721');
9886
+ });
9887
+ return {
9888
+ id: trade.id,
9889
+ orderId: trade.order_id,
9890
+ buy: buyItems,
9891
+ sell: sellItems,
9892
+ buyerFees: trade.buyer_fees.map((fee) => ({
9893
+ amount: fee.amount,
9894
+ recipient: fee.recipient,
9895
+ type: fee.fee_type,
9896
+ })),
9897
+ chain: trade.chain,
9898
+ indexedAt: trade.indexed_at,
9899
+ blockchainMetadata: {
9900
+ blockNumber: trade.blockchain_metadata.block_number,
9901
+ logIndex: trade.blockchain_metadata.log_index,
9902
+ transactionHash: trade.blockchain_metadata.transaction_hash,
9903
+ transactionIndex: trade.blockchain_metadata.transaction_index,
9904
+ },
9905
+ buyerAddress: trade.buyer_address,
9906
+ makerAddress: trade.maker_address,
9907
+ sellerAddress: trade.seller_address,
9908
+ takerAddress: trade.taker_address,
9909
+ };
9910
+ }
9564
9911
  function mapFromOpenApiPage(page) {
9565
9912
  return {
9566
9913
  nextCursor: page.next_cursor,
@@ -9890,12 +10237,24 @@ class ImmutableApiClient {
9890
10237
  listingId,
9891
10238
  });
9892
10239
  }
10240
+ async getTrade(tradeId) {
10241
+ return this.orderbookService.getTrade({
10242
+ chainName: this.chainName,
10243
+ tradeId,
10244
+ });
10245
+ }
9893
10246
  async listListings(listOrderParams) {
9894
10247
  return this.orderbookService.listListings({
9895
10248
  chainName: this.chainName,
9896
10249
  ...listOrderParams,
9897
10250
  });
9898
10251
  }
10252
+ async listTrades(listTradesParams) {
10253
+ return this.orderbookService.listTrades({
10254
+ chainName: this.chainName,
10255
+ ...listTradesParams,
10256
+ });
10257
+ }
9899
10258
  async createListing({ orderHash, orderComponents, orderSignature, makerFee, }) {
9900
10259
  if (orderComponents.offer.length !== 1) {
9901
10260
  throw new Error('Only one item can be listed at a time');
@@ -10061,6 +10420,17 @@ class Orderbook {
10061
10420
  result: mapFromOpenApiOrder(apiListing.result),
10062
10421
  };
10063
10422
  }
10423
+ /**
10424
+ * Get a trade by ID
10425
+ * @param {string} tradeId - The tradeId to find.
10426
+ * @return {TradeResult} The returned order result.
10427
+ */
10428
+ async getTrade(tradeId) {
10429
+ const apiListing = await this.apiClient.getTrade(tradeId);
10430
+ return {
10431
+ result: mapFromOpenApiTrade(apiListing.result),
10432
+ };
10433
+ }
10064
10434
  /**
10065
10435
  * List orders. This method is used to get a list of orders filtered by conditions specified
10066
10436
  * in the params object.
@@ -10074,6 +10444,19 @@ class Orderbook {
10074
10444
  result: apiListings.result.map(mapFromOpenApiOrder),
10075
10445
  };
10076
10446
  }
10447
+ /**
10448
+ * List trades. This method is used to get a list of trades filtered by conditions specified
10449
+ * in the params object
10450
+ * @param {ListTradesParams} listTradesParams - Filtering, ordering and page parameters.
10451
+ * @return {ListTradesResult} The paged trades.
10452
+ */
10453
+ async listTrades(listTradesParams) {
10454
+ const apiListings = await this.apiClient.listTrades(listTradesParams);
10455
+ return {
10456
+ page: mapFromOpenApiPage(apiListings.page),
10457
+ result: apiListings.result.map(mapFromOpenApiTrade),
10458
+ };
10459
+ }
10077
10460
  /**
10078
10461
  * Get required transactions and messages for signing prior to creating a listing
10079
10462
  * through the createListing method
@@ -11255,8 +11638,7 @@ const ETH_MAINNET_CHAIN_ID = '1';
11255
11638
  /**
11256
11639
  * @constant {string} ZKEVM_DEVNET_CHAIN_ID - The chain ID for the zkEVM devnet (EIP-155 compatible format).
11257
11640
  */
11258
- const ZKEVM_DEVNET_CHAIN_ID = '13433';
11259
- /**
11641
+ const ZKEVM_DEVNET_CHAIN_ID = '13473';
11260
11642
  /**
11261
11643
  * @constant {string} ZKEVM_TESTNET_CHAIN_ID - The chain ID for the zkEVM testnet (EIP-155 compatible format).
11262
11644
  */
@@ -23537,10 +23919,10 @@ const SUPPORTED_BRIDGES_FOR_ENVIRONMENT = {
23537
23919
  */
23538
23920
  const CONTRACTS_FOR_BRIDGE = new Map()
23539
23921
  .set(ETH_SEPOLIA_TO_ZKEVM_DEVNET, {
23540
- rootChainERC20Predicate: '0xAC0f2096732D40096B3356AD76ba60a2f02366c8',
23541
- rootChainStateSender: '0xeA76fcCdD791A9c231CAda787ae7535c8a5E55B5',
23542
- rootChainCheckpointManager: '0x321A466aa78F5957C6E2375114915EcD14DAdE44',
23543
- rootChainExitHelper: '0x55cA8C418bbB0aC87414F9ea6FFC6a33860Cf967',
23922
+ rootChainERC20Predicate: '0x75E468cF088F947B96422996132FbE71160F21F1',
23923
+ rootChainStateSender: '0xbdC11416f01b122b7621855e61c99C7ED986F894',
23924
+ rootChainCheckpointManager: '0x0721b564a96466b864A998D31846Ba409d21092B',
23925
+ rootChainExitHelper: '0x0a2cb3f90aE65429E5c516af500F59d8fed51844',
23544
23926
  childChainERC20Predicate: '0x0000000000000000000000000000000000001004',
23545
23927
  childChainStateReceiver: '0x0000000000000000000000000000000000001001',
23546
23928
  })
@@ -26935,6 +27317,9 @@ const $d85ad1457a3f1a83$export$161d4a74df65fc08 = {
26935
27317
  [(Environment$1).SANDBOX]: "https://checkout-api.sandbox.immutable.com",
26936
27318
  [(Environment$1).PRODUCTION]: "https://checkout-api.immutable.com"
26937
27319
  };
27320
+ const $d85ad1457a3f1a83$export$fc55ed5a42b458ba = {
27321
+ [($0472f23319457bfb$export$c06e1e7429de6283).IMTBL_ZKEVM_TESTNET]: "https://explorer.testnet.immutable.com"
27322
+ };
26938
27323
  const $d85ad1457a3f1a83$export$6f24f3cef7d501c4 = new Map([
26939
27324
  [
26940
27325
  ($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM,
@@ -27254,13 +27639,6 @@ var $4b58188d47aafe8d$export$537fa3efd10ed435;
27254
27639
  GasTokenType["NATIVE"] = "NATIVE";
27255
27640
  GasTokenType["ERC20"] = "ERC20";
27256
27641
  })($4b58188d47aafe8d$export$537fa3efd10ed435 || ($4b58188d47aafe8d$export$537fa3efd10ed435 = {}));
27257
- var $4b58188d47aafe8d$export$5d3b0ad129b9b98e;
27258
- (function(TransactionRequirementType) {
27259
- TransactionRequirementType["GAS"] = "GAS";
27260
- TransactionRequirementType["NATIVE"] = "NATIVE";
27261
- TransactionRequirementType["ERC20"] = "ERC20";
27262
- TransactionRequirementType["ERC721"] = "ERC721";
27263
- })($4b58188d47aafe8d$export$5d3b0ad129b9b98e || ($4b58188d47aafe8d$export$5d3b0ad129b9b98e = {}));
27264
27642
 
27265
27643
 
27266
27644
 
@@ -27274,6 +27652,7 @@ var $4b58188d47aafe8d$export$5d3b0ad129b9b98e;
27274
27652
  CheckoutErrorType["DEFAULT_PROVIDER_ERROR"] = "DEFAULT_PROVIDER_ERROR";
27275
27653
  CheckoutErrorType["CONNECT_PROVIDER_ERROR"] = "CONNECT_PROVIDER_ERROR";
27276
27654
  CheckoutErrorType["GET_BALANCE_ERROR"] = "GET_BALANCE_ERROR";
27655
+ CheckoutErrorType["GET_INDEXER_BALANCE_ERROR"] = "GET_INDEXER_BALANCE_ERROR";
27277
27656
  CheckoutErrorType["GET_ERC20_BALANCE_ERROR"] = "GET_ERC20_BALANCE_ERROR";
27278
27657
  CheckoutErrorType["GET_ERC721_BALANCE_ERROR"] = "GET_ERC721_BALANCE_ERROR";
27279
27658
  CheckoutErrorType["GET_NETWORK_INFO_ERROR"] = "GET_NETWORK_INFO_ERROR";
@@ -27289,6 +27668,7 @@ var $4b58188d47aafe8d$export$5d3b0ad129b9b98e;
27289
27668
  CheckoutErrorType["UNSUPPORTED_TOKEN_TYPE_ERROR"] = "UNSUPPORTED_TOKEN_TYPE_ERROR";
27290
27669
  CheckoutErrorType["UNSUPPORTED_BALANCE_REQUIREMENT_ERROR"] = "UNSUPPORTED_BALANCE_REQUIREMENT_ERROR";
27291
27670
  CheckoutErrorType["GET_ORDER_LISTING_ERROR"] = "GET_ORDER_LISTING_ERROR";
27671
+ CheckoutErrorType["PREPARE_ORDER_LISTING_ERROR"] = "PREPARE_ORDER_LISTING_ERROR";
27292
27672
  CheckoutErrorType["SWITCH_NETWORK_UNSUPPORTED"] = "SWITCH_NETWORK_UNSUPPORTED";
27293
27673
  CheckoutErrorType["GET_ERC20_ALLOWANCE_ERROR"] = "GET_ERC20_ALLOWANCE_ERROR";
27294
27674
  CheckoutErrorType["GET_ERC721_ALLOWANCE_ERROR"] = "GET_ERC721_ALLOWANCE_ERROR";
@@ -27479,7 +27859,7 @@ const $efe60cea83bfc4e8$export$473cec51305fdae8 = async (config, { type: type =
27479
27859
  case ($08d5ddc39acd6833$export$fd9b17d87f4121d2).BRIDGE:
27480
27860
  case ($08d5ddc39acd6833$export$fd9b17d87f4121d2).ALL:
27481
27861
  default:
27482
- tokens = await config.remote.getTokens(chainId);
27862
+ tokens = (await config.remote.getTokensConfig(chainId)).allowed;
27483
27863
  }
27484
27864
  if (!exclude || exclude?.length === 0) return {
27485
27865
  tokens: tokens
@@ -27492,6 +27872,90 @@ const $efe60cea83bfc4e8$export$473cec51305fdae8 = async (config, { type: type =
27492
27872
 
27493
27873
 
27494
27874
 
27875
+
27876
+
27877
+ const $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL = 60; // seconds
27878
+ class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27879
+ url;
27880
+ ttl;
27881
+ chainId;
27882
+ cacheMap;
27883
+ static async makeHttpRequest(url) {
27884
+ return (globalAxios$1).get(url);
27885
+ }
27886
+ setCache(key, data) {
27887
+ this.cacheMap[key] = {
27888
+ data: data,
27889
+ ttl: new Date().getTime() + this.ttl * 1000
27890
+ };
27891
+ }
27892
+ getCache(key) {
27893
+ const d = this.cacheMap[key];
27894
+ if (!d || d.ttl <= new Date().getTime()) return null;
27895
+ return d.data;
27896
+ }
27897
+ /**
27898
+ * Blockscout constructor
27899
+ * @param chainId target chain
27900
+ * @param ttl cache TTL
27901
+ */ constructor(params){
27902
+ this.chainId = params.chainId;
27903
+ this.url = ($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[this.chainId];
27904
+ this.cacheMap = {};
27905
+ this.ttl = params.ttl !== undefined ? params.ttl : $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL;
27906
+ }
27907
+ /**
27908
+ * isChainSupported verifies if the chain is supported by Blockscout
27909
+ * @param chainId
27910
+ */ static isChainSupported = (chainId)=>Boolean(($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[chainId]);
27911
+ /**
27912
+ * isBlockscoutError verifies if the error is a Blockscout client error
27913
+ * @param err error to evaluate
27914
+ */ static isBlockscoutError = (err)=>"code" in err;
27915
+ /**
27916
+ * getAddressTokens fetches the list of tokens (by type) owned by the wallet address.
27917
+ * @param walletAddress wallet address
27918
+ * @param tokenType token types
27919
+ * @param nextPage parameters for the next page, to be provided along side walletAddress and tokenType
27920
+ * @returns list of tokens given the wallet address and the token types
27921
+ */ async getAddressTokens(params) {
27922
+ try {
27923
+ let url = `${this.url}/api/v2/addresses/${params.walletAddress}/tokens?type=${params.tokenType.join(",")}`;
27924
+ if (params.nextPage) url += `&${new URLSearchParams(params.nextPage)}`;
27925
+ // Cache response data to prevent unnecessary requests
27926
+ const cached = this.getCache(url);
27927
+ if (cached && cached.status < 400) return Promise.resolve(cached.data);
27928
+ const response = await $fd8a8472dcc3ec2b$export$ef140a6b05dfc786.makeHttpRequest(url);
27929
+ if (response.status >= 400) return Promise.reject({
27930
+ code: response.status,
27931
+ message: response.statusText
27932
+ });
27933
+ this.setCache(url, response);
27934
+ return Promise.resolve(response.data);
27935
+ } catch (err) {
27936
+ let code = (HttpStatusCode$2).InternalServerError;
27937
+ let message = "InternalServerError";
27938
+ if ((globalAxios$1).isAxiosError(err)) {
27939
+ code = err.response?.status || code;
27940
+ message = err.message;
27941
+ }
27942
+ return Promise.reject({
27943
+ code: code,
27944
+ message: message
27945
+ });
27946
+ }
27947
+ }
27948
+ }
27949
+
27950
+
27951
+ /* eslint @typescript-eslint/naming-convention: off */ var $887a00f8f72d61f0$export$5bd1ea2b3d18210;
27952
+ (function(BlockscoutTokenType) {
27953
+ BlockscoutTokenType["ERC20"] = "ERC-20";
27954
+ })($887a00f8f72d61f0$export$5bd1ea2b3d18210 || ($887a00f8f72d61f0$export$5bd1ea2b3d18210 = {}));
27955
+
27956
+
27957
+
27958
+
27495
27959
  const $1564e43dde50bb61$export$df96cd8d56be0ab1 = async (config, web3Provider, walletAddress)=>await ($a8bc256d81a5e2c1$export$bacc563de539c6c3)(async ()=>{
27496
27960
  const networkInfo = await ($de192de6ef100f9f$export$79f13b4cfaaf0d09)(config, web3Provider);
27497
27961
  if (!networkInfo.isSupported) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(`Chain:${networkInfo.chainId} is not a supported chain`, ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).CHAIN_NOT_SUPPORTED_ERROR, {
@@ -27531,6 +27995,59 @@ async function $1564e43dde50bb61$export$60e0fe116a0e6ed0(web3Provider, walletAdd
27531
27995
  type: ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC20_BALANCE_ERROR
27532
27996
  });
27533
27997
  }
27998
+ // Blockscout client singleton
27999
+ let $1564e43dde50bb61$var$blockscoutClient;
28000
+ const $1564e43dde50bb61$export$8c978679845804d4 = async (walletAddress, chainId, rename)=>{
28001
+ // Shuffle the mapping of the tokens configuration so it is a hashmap
28002
+ // for faster access to tokens config objects.
28003
+ const mapRename = Object.assign({}, ...rename.map((t)=>({
28004
+ [t.address || ""]: t
28005
+ })));
28006
+ // Ensure singleton is present and match the selected chain
28007
+ if (!$1564e43dde50bb61$var$blockscoutClient || $1564e43dde50bb61$var$blockscoutClient.chainId !== chainId) $1564e43dde50bb61$var$blockscoutClient = new ($fd8a8472dcc3ec2b$export$ef140a6b05dfc786)({
28008
+ chainId: chainId
28009
+ });
28010
+ // Hold the items in an array for post-fetching processing
28011
+ const items = [];
28012
+ const tokenType = [
28013
+ ($887a00f8f72d61f0$export$5bd1ea2b3d18210).ERC20
28014
+ ];
28015
+ // Given that the widgets aren't yet designed to support pagination,
28016
+ // fetch all the possible tokens associated to a given wallet address.
28017
+ let resp;
28018
+ try {
28019
+ do {
28020
+ // eslint-disable-next-line no-await-in-loop
28021
+ resp = await $1564e43dde50bb61$var$blockscoutClient.getAddressTokens({
28022
+ walletAddress: walletAddress,
28023
+ tokenType: tokenType,
28024
+ nextPage: resp?.next_page_params
28025
+ });
28026
+ items.push(...resp.items);
28027
+ }while (resp.next_page_params);
28028
+ } catch (err) {
28029
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
28030
+ }
28031
+ return {
28032
+ balances: items.map((item)=>{
28033
+ const tokenData = item.token || {};
28034
+ const balance = (BigNumber$1).from(item.value);
28035
+ const renamed = mapRename[tokenData.address] || {};
28036
+ const token = {
28037
+ ...tokenData,
28038
+ name: renamed.name ?? tokenData.name,
28039
+ symbol: renamed.symbol ?? tokenData.symbol,
28040
+ decimals: parseInt(tokenData.decimals, 10)
28041
+ };
28042
+ const formattedBalance = (utils$1).formatUnits(item.value, token.decimals);
28043
+ return {
28044
+ balance: balance,
28045
+ formattedBalance: formattedBalance,
28046
+ token: token
28047
+ };
28048
+ })
28049
+ };
28050
+ };
27534
28051
  const $1564e43dde50bb61$export$a3238cee431627c6 = async (config, web3Provider, walletAddress, tokens)=>{
27535
28052
  const allBalancePromises = [];
27536
28053
  tokens.forEach((token)=>{
@@ -27549,6 +28066,17 @@ const $1564e43dde50bb61$export$fee49741664a4d7e = async (config, web3Provider, w
27549
28066
  type: ($08d5ddc39acd6833$export$fd9b17d87f4121d2).ALL,
27550
28067
  chainId: chainId
27551
28068
  });
28069
+ // In order to prevent unnecessary RPC calls
28070
+ // let's use the Indexer if available for the
28071
+ // given chain.
28072
+ let flag = false;
28073
+ try {
28074
+ flag = (await config.remote.getTokensConfig(chainId)).blockscout || flag;
28075
+ } catch (err) {
28076
+ // eslint-disable-next-line no-console
28077
+ console.error(err);
28078
+ }
28079
+ if (flag && ($fd8a8472dcc3ec2b$export$ef140a6b05dfc786).isChainSupported(chainId)) return await $1564e43dde50bb61$export$8c978679845804d4(walletAddress, chainId, tokens);
27552
28080
  return await $1564e43dde50bb61$export$a3238cee431627c6(config, web3Provider, walletAddress, tokens);
27553
28081
  };
27554
28082
 
@@ -27714,13 +28242,19 @@ const $dbe95599a4661140$export$8e0e7ffc78696d30 = async (web3Provider, transacti
27714
28242
 
27715
28243
 
27716
28244
 
28245
+ const $dff2555fa96dda9a$var$doesChainSupportEIP1559 = (feeData)=>!!feeData.maxFeePerGas && !!feeData.maxPriorityFeePerGas;
28246
+ const $dff2555fa96dda9a$export$aa28f3111c524ec5 = (feeData)=>{
28247
+ if ($dff2555fa96dda9a$var$doesChainSupportEIP1559(feeData)) return (BigNumber$1).from(feeData.maxFeePerGas).add((BigNumber$1).from(feeData.maxPriorityFeePerGas));
28248
+ if (feeData.gasPrice) return (BigNumber$1).from(feeData.gasPrice);
28249
+ return null;
28250
+ };
28251
+
28252
+
27717
28253
  const $570856c68db0bd36$var$GAS_LIMIT = 140000;
27718
- const $570856c68db0bd36$var$doesChainSupportEIP1559 = (feeData)=>!!feeData.maxFeePerGas && !!feeData.maxPriorityFeePerGas;
27719
- const $570856c68db0bd36$var$getGasPriceInWei = (feeData)=>$570856c68db0bd36$var$doesChainSupportEIP1559(feeData) ? (BigNumber$1).from(feeData.maxFeePerGas).add((BigNumber$1).from(feeData.maxPriorityFeePerGas)) : feeData.gasPrice && (BigNumber$1).from(feeData.gasPrice);
27720
28254
  const $570856c68db0bd36$var$getGasEstimates = async (provider)=>{
27721
28255
  const txnGasLimitInWei = $570856c68db0bd36$var$GAS_LIMIT; // todo: fetch gasLimit from bridgeSDK when they add new fn
27722
28256
  const feeData = await provider.getFeeData();
27723
- const gasPriceInWei = $570856c68db0bd36$var$getGasPriceInWei(feeData);
28257
+ const gasPriceInWei = ($dff2555fa96dda9a$export$aa28f3111c524ec5)(feeData);
27724
28258
  if (!gasPriceInWei) return undefined;
27725
28259
  return gasPriceInWei.mul(txnGasLimitInWei);
27726
28260
  };
@@ -27841,10 +28375,10 @@ class $a492ee374ae7b613$export$d902b56530cd5f87 {
27841
28375
  if (!key) return config;
27842
28376
  return config[key];
27843
28377
  }
27844
- async getTokens(chainId) {
28378
+ async getTokensConfig(chainId) {
27845
28379
  const config = await this.loadConfigTokens();
27846
- if (!config) return [];
27847
- return config[chainId]?.allowed ?? [];
28380
+ if (!config || !config[chainId]) return {};
28381
+ return config[chainId] ?? [];
27848
28382
  }
27849
28383
  }
27850
28384
 
@@ -27997,8 +28531,6 @@ async function $2e7bf45a7c9a9570$export$942c8de7174809fc(params, readOnlyProvide
27997
28531
 
27998
28532
 
27999
28533
 
28000
-
28001
-
28002
28534
  const $ddc6bcd0896481e5$export$2fbfa41a4de56a89 = (erc20allowances, erc721allowances)=>{
28003
28535
  const aggregatedAllowances = [];
28004
28536
  if (!erc20allowances.sufficient) {
@@ -28169,7 +28701,9 @@ const $35c3fc7013888ba5$export$90366d6b714c6f69 = async (provider, ownerAddress,
28169
28701
  return await contract.isApprovedForAll(ownerAddress, spenderAddress);
28170
28702
  } catch (err) {
28171
28703
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to check approval for all ERC721s of collection", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28172
- contractAddress: contractAddress
28704
+ ownerAddress: ownerAddress,
28705
+ contractAddress: contractAddress,
28706
+ spenderAddress: spenderAddress
28173
28707
  });
28174
28708
  }
28175
28709
  };
@@ -28181,7 +28715,10 @@ const $35c3fc7013888ba5$export$ebb2a35f2b4cf5f6 = async (provider, ownerAddress,
28181
28715
  return transaction;
28182
28716
  } catch (err) {
28183
28717
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to get the approval transaction for ERC721", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28184
- contractAddress: contractAddress
28718
+ id: id.toString(),
28719
+ contractAddress: contractAddress,
28720
+ spenderAddress: spenderAddress,
28721
+ ownerAddress: ownerAddress
28185
28722
  });
28186
28723
  }
28187
28724
  };
@@ -28191,6 +28728,7 @@ const $35c3fc7013888ba5$export$c4605a8dd415eeea = async (provider, contractAddre
28191
28728
  return await contract.getApproved(id);
28192
28729
  } catch (err) {
28193
28730
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to get approved address for ERC721", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28731
+ id: id.toString(),
28194
28732
  contractAddress: contractAddress
28195
28733
  });
28196
28734
  }
@@ -28367,12 +28905,9 @@ const $aa6caea9a60d18c7$export$f96d1c819a615a64 = (itemRequirements)=>$aa6caea9a
28367
28905
 
28368
28906
  const $73d2282a108cc7e2$export$ed7929b58bab85da = (itemRequirements)=>itemRequirements.map((itemRequirement)=>{
28369
28907
  if (itemRequirement.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) return {
28370
- name: "IMX",
28371
- symbol: "IMX",
28372
28908
  address: ($d85ad1457a3f1a83$export$b80040cb173ba6e9)
28373
28909
  };
28374
28910
  return {
28375
- name: itemRequirement.type,
28376
28911
  address: itemRequirement.contractAddress
28377
28912
  };
28378
28913
  });
@@ -28388,6 +28923,7 @@ const $73d2282a108cc7e2$export$9b757e40b19984c3 = (itemRequirement, balances)=>{
28388
28923
  const delta = requiredBalance.sub(itemBalanceResult?.balance ?? (BigNumber$1).from(0));
28389
28924
  let erc721BalanceResult = itemBalanceResult;
28390
28925
  if (!erc721BalanceResult) erc721BalanceResult = {
28926
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
28391
28927
  balance: (BigNumber$1).from(0),
28392
28928
  formattedBalance: "0",
28393
28929
  contractAddress: itemRequirement.contractAddress,
@@ -28395,7 +28931,7 @@ const $73d2282a108cc7e2$export$9b757e40b19984c3 = (itemRequirement, balances)=>{
28395
28931
  };
28396
28932
  return {
28397
28933
  sufficient: sufficient,
28398
- type: itemRequirement.type,
28934
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
28399
28935
  delta: {
28400
28936
  balance: delta,
28401
28937
  formattedBalance: delta.toString()
@@ -28415,23 +28951,30 @@ const $73d2282a108cc7e2$export$6ab9757fda54db7e = (itemRequirement, balances)=>{
28415
28951
  return balance.token?.address === itemRequirement.contractAddress;
28416
28952
  });
28417
28953
  else if (itemRequirement.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) itemBalanceResult = balances.find((balance)=>{
28418
- return !("address" in balance.token) || balance.token?.address === ($d85ad1457a3f1a83$export$b80040cb173ba6e9);
28954
+ return balance.token?.address === "" || balance.token?.address === ($d85ad1457a3f1a83$export$b80040cb173ba6e9);
28419
28955
  });
28420
28956
  // Calculate the balance delta
28421
28957
  const requiredBalance = itemRequirement.amount;
28422
28958
  const sufficient = requiredBalance.isNegative() || requiredBalance.isZero() || (itemBalanceResult?.balance.gte(requiredBalance) ?? false);
28423
28959
  const delta = requiredBalance.sub(itemBalanceResult?.balance ?? (BigNumber$1).from(0));
28960
+ let name = "";
28961
+ let symbol = "";
28424
28962
  let decimals = ($d85ad1457a3f1a83$export$903389470ba9433c);
28425
- if (itemBalanceResult) decimals = itemBalanceResult.token?.decimals ?? ($d85ad1457a3f1a83$export$903389470ba9433c);
28963
+ if (itemBalanceResult) {
28964
+ decimals = itemBalanceResult.token?.decimals ?? ($d85ad1457a3f1a83$export$903389470ba9433c);
28965
+ name = itemBalanceResult.token.name;
28966
+ symbol = itemBalanceResult.token.symbol;
28967
+ }
28426
28968
  let tokenBalanceResult = itemBalanceResult;
28427
28969
  if (itemRequirement.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) {
28428
28970
  // No token balance so mark as zero native
28429
28971
  if (!tokenBalanceResult) tokenBalanceResult = {
28972
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE,
28430
28973
  balance: (BigNumber$1).from(0),
28431
28974
  formattedBalance: "0",
28432
28975
  token: {
28433
- name: "IMX",
28434
- symbol: "IMX",
28976
+ name: name,
28977
+ symbol: symbol,
28435
28978
  decimals: ($d85ad1457a3f1a83$export$903389470ba9433c),
28436
28979
  address: ($d85ad1457a3f1a83$export$b80040cb173ba6e9)
28437
28980
  }
@@ -28443,9 +28986,13 @@ const $73d2282a108cc7e2$export$6ab9757fda54db7e = (itemRequirement, balances)=>{
28443
28986
  balance: delta,
28444
28987
  formattedBalance: (utils$1).formatUnits(delta, decimals)
28445
28988
  },
28446
- current: tokenBalanceResult,
28989
+ current: {
28990
+ ...tokenBalanceResult,
28991
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE
28992
+ },
28447
28993
  required: {
28448
28994
  ...tokenBalanceResult,
28995
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE,
28449
28996
  balance: (BigNumber$1).from(itemRequirement.amount),
28450
28997
  formattedBalance: (utils$1).formatUnits(itemRequirement.amount, decimals)
28451
28998
  }
@@ -28453,10 +29000,14 @@ const $73d2282a108cc7e2$export$6ab9757fda54db7e = (itemRequirement, balances)=>{
28453
29000
  }
28454
29001
  // No token balance so mark as zero
28455
29002
  if (!tokenBalanceResult) tokenBalanceResult = {
29003
+ type: itemRequirement.type,
28456
29004
  balance: (BigNumber$1).from(0),
28457
29005
  formattedBalance: "0",
28458
29006
  token: {
28459
- address: itemRequirement.contractAddress
29007
+ name: name,
29008
+ symbol: symbol,
29009
+ address: itemRequirement.contractAddress,
29010
+ decimals: decimals
28460
29011
  }
28461
29012
  };
28462
29013
  return {
@@ -28498,11 +29049,11 @@ const $73d2282a108cc7e2$export$6ab9757fda54db7e = (itemRequirement, balances)=>{
28498
29049
  // Setup maps to be able to link data back to the associated promises
28499
29050
  const erc721s = new Map();
28500
29051
  const erc721OwnershipPromises = new Map();
28501
- itemRequirements.filter((itemRequirement)=>itemRequirement.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721).forEach((itemRequirement)=>{
28502
- const erc721Requirement = itemRequirement;
28503
- const contract = new (Contract$1)(erc721Requirement.contractAddress, JSON.stringify(($d85ad1457a3f1a83$export$8b8be7a2a654f23e)), provider);
28504
- erc721s.set(erc721Requirement.contractAddress, itemRequirement);
28505
- erc721OwnershipPromises.set(erc721Requirement.contractAddress, contract.ownerOf(erc721Requirement.id));
29052
+ itemRequirements.forEach((itemRequirement)=>{
29053
+ if (itemRequirement.type !== ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721) return;
29054
+ const contract = new (Contract$1)(itemRequirement.contractAddress, JSON.stringify(($d85ad1457a3f1a83$export$8b8be7a2a654f23e)), provider);
29055
+ erc721s.set(itemRequirement.contractAddress, itemRequirement);
29056
+ erc721OwnershipPromises.set(itemRequirement.contractAddress, contract.ownerOf(itemRequirement.id));
28506
29057
  });
28507
29058
  try {
28508
29059
  // Convert ERC721 ownership into a balance result
@@ -28513,6 +29064,7 @@ const $73d2282a108cc7e2$export$6ab9757fda54db7e = (itemRequirement, balances)=>{
28513
29064
  let itemCount = 0;
28514
29065
  if (itemRequirement && ownerAddress === erc721OwnerAddress) itemCount = 1;
28515
29066
  erc721Balances.push({
29067
+ type: (0, $4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
28516
29068
  balance: (0, BigNumber$1).from(itemCount),
28517
29069
  formattedBalance: itemCount.toString(),
28518
29070
  contractAddress: itemRequirement.contractAddress,
@@ -28564,7 +29116,7 @@ const $beb896e098e41faf$export$ddfc885f43c3cb6e = async (config, provider, owner
28564
29116
  }, true);
28565
29117
  return {
28566
29118
  sufficient: sufficient,
28567
- itemRequirements: balanceRequirements
29119
+ balanceRequirements: balanceRequirements
28568
29120
  };
28569
29121
  };
28570
29122
 
@@ -28575,12 +29127,7 @@ const $beb896e098e41faf$export$ddfc885f43c3cb6e = async (config, provider, owner
28575
29127
 
28576
29128
 
28577
29129
 
28578
- const $7d1bfafb81e64d74$var$doesChainSupportEIP1559 = (feeData)=>!!feeData.maxFeePerGas && !!feeData.maxPriorityFeePerGas;
28579
- const $7d1bfafb81e64d74$var$getGasPriceInWei = (feeData)=>{
28580
- if ($7d1bfafb81e64d74$var$doesChainSupportEIP1559(feeData)) return (BigNumber$1).from(feeData.maxFeePerGas).add((BigNumber$1).from(feeData.maxPriorityFeePerGas));
28581
- if (feeData.gasPrice) return (BigNumber$1).from(feeData.gasPrice);
28582
- return undefined;
28583
- };
29130
+
28584
29131
  const $7d1bfafb81e64d74$export$e0580ae1f48db848 = async (provider, transaction)=>{
28585
29132
  try {
28586
29133
  return await provider.estimateGas(transaction);
@@ -28613,9 +29160,11 @@ const $7d1bfafb81e64d74$export$3a4140bd9e983e4e = async (provider, insufficientI
28613
29160
  if (transactionOrGas.type === ($4b58188d47aafe8d$export$65c64e46348ee3c1).TRANSACTION) estimateGasPromises.push($7d1bfafb81e64d74$export$e0580ae1f48db848(provider, transactionOrGas.transaction));
28614
29161
  else {
28615
29162
  const feeData = await provider.getFeeData();
28616
- const gasPrice = $7d1bfafb81e64d74$var$getGasPriceInWei(feeData);
28617
- const gas = gasPrice?.mul(transactionOrGas.gasToken.limit);
28618
- if (gas) totalGas = totalGas.add(gas);
29163
+ const gasPrice = ($dff2555fa96dda9a$export$aa28f3111c524ec5)(feeData);
29164
+ if (gasPrice !== null) {
29165
+ const gas = gasPrice?.mul(transactionOrGas.gasToken.limit);
29166
+ if (gas) totalGas = totalGas.add(gas);
29167
+ }
28619
29168
  }
28620
29169
  // Get the gas estimates for all the transactions and calculate the total gas
28621
29170
  const gasEstimatePromises = await Promise.all(estimateGasPromises);
@@ -28627,57 +29176,39 @@ const $7d1bfafb81e64d74$export$3a4140bd9e983e4e = async (provider, insufficientI
28627
29176
  };
28628
29177
 
28629
29178
 
29179
+
29180
+
29181
+ const $0e7419077c373b24$export$4a2a19d99fef3b1b = (balanceCheckResult)=>{
29182
+ let sufficient = true;
29183
+ const transactionRequirements = [];
29184
+ for (const balance of balanceCheckResult.balanceRequirements){
29185
+ if (!balance.sufficient) sufficient = false;
29186
+ transactionRequirements.push({
29187
+ type: balance.type,
29188
+ sufficient: balance.sufficient,
29189
+ required: balance.required,
29190
+ current: balance.current,
29191
+ delta: balance.delta
29192
+ });
29193
+ }
29194
+ return {
29195
+ sufficient: sufficient,
29196
+ transactionRequirements: transactionRequirements
29197
+ };
29198
+ };
28630
29199
  const $0e7419077c373b24$export$9e073f9ada8c81e6 = async (config, provider, itemRequirements, transactionOrGasAmount)=>{
28631
- // eslint-disable-next-line no-console
28632
- console.log(provider, itemRequirements, transactionOrGasAmount);
28633
29200
  const ownerAddress = await provider.getSigner().getAddress();
28634
29201
  let aggregatedItems = ($074f75878f618031$export$c804c9ade5c28607)(itemRequirements);
28635
29202
  const erc20Allowances = await ($fc8b338399d890f3$export$d93c00812189e36)(provider, ownerAddress, aggregatedItems);
28636
29203
  const erc721Allowances = await ($35c3fc7013888ba5$export$be546c525d418988)(provider, ownerAddress, aggregatedItems);
28637
- // eslint-disable-next-line no-console
28638
- console.log("ERC20 Allowances", erc20Allowances);
28639
- // eslint-disable-next-line no-console
28640
- console.log("ERC721 Allowances", erc721Allowances);
28641
29204
  const aggregatedAllowances = ($ddc6bcd0896481e5$export$2fbfa41a4de56a89)(erc20Allowances, erc721Allowances);
28642
29205
  const gasItem = await ($7d1bfafb81e64d74$export$3a4140bd9e983e4e)(provider, aggregatedAllowances, transactionOrGasAmount);
28643
29206
  if (gasItem !== null) {
28644
29207
  aggregatedItems.push(gasItem);
28645
29208
  aggregatedItems = ($074f75878f618031$export$c804c9ade5c28607)(aggregatedItems);
28646
29209
  }
28647
- // eslint-disable-next-line no-console
28648
- console.log("Aggregated Items", aggregatedItems);
28649
29210
  const balanceRequirements = await ($beb896e098e41faf$export$ddfc885f43c3cb6e)(config, provider, ownerAddress, aggregatedItems);
28650
- // eslint-disable-next-line no-console
28651
- console.log("Balance Requirements", balanceRequirements);
28652
- return {
28653
- sufficient: true,
28654
- transactionRequirements: [
28655
- {
28656
- type: ($4b58188d47aafe8d$export$5d3b0ad129b9b98e).GAS,
28657
- sufficient: true,
28658
- required: {
28659
- balance: (BigNumber$1).from(0),
28660
- formattedBalance: "0",
28661
- token: {
28662
- name: "IMX",
28663
- symbol: "IMX",
28664
- address: "0x0",
28665
- decimals: 18
28666
- }
28667
- },
28668
- current: {
28669
- balance: (BigNumber$1).from(1),
28670
- formattedBalance: "1",
28671
- token: {
28672
- name: "IMX",
28673
- symbol: "IMX",
28674
- address: "0x0",
28675
- decimals: 18
28676
- }
28677
- }
28678
- }
28679
- ]
28680
- };
29211
+ return $0e7419077c373b24$export$4a2a19d99fef3b1b(balanceRequirements);
28681
29212
  };
28682
29213
 
28683
29214
 
@@ -28787,6 +29318,81 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
28787
29318
 
28788
29319
 
28789
29320
 
29321
+
29322
+ const $9085b221b72ac69e$export$af768ccdf17d5c04 = (id, contractAddress, spenderAddress)=>({
29323
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29324
+ id: id,
29325
+ contractAddress: contractAddress,
29326
+ spenderAddress: spenderAddress
29327
+ });
29328
+ const $9085b221b72ac69e$export$d2da5a4d143c85e5 = (buyToken)=>{
29329
+ if (buyToken.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) return {
29330
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE,
29331
+ amount: buyToken.amount.toString()
29332
+ };
29333
+ return {
29334
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC20,
29335
+ amount: buyToken.amount.toString(),
29336
+ contractAddress: buyToken.contractAddress
29337
+ };
29338
+ };
29339
+ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, contractAddress, buyToken)=>{
29340
+ let orderbook;
29341
+ let listing;
29342
+ let spenderAddress = "";
29343
+ try {
29344
+ const walletAddress = await provider.getSigner().getAddress();
29345
+ orderbook = await $67fc622a2b913d5f$export$c60ce6c6a92bc2ff(config);
29346
+ const { seaportContractAddress: seaportContractAddress } = orderbook.config();
29347
+ spenderAddress = seaportContractAddress;
29348
+ listing = await orderbook.prepareListing({
29349
+ makerAddress: walletAddress,
29350
+ buy: $9085b221b72ac69e$export$d2da5a4d143c85e5(buyToken),
29351
+ sell: {
29352
+ type: (0, $4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29353
+ contractAddress: contractAddress,
29354
+ tokenId: id
29355
+ }
29356
+ });
29357
+ } catch (err) {
29358
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while preparing the listing", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).PREPARE_ORDER_LISTING_ERROR, {
29359
+ message: err.message,
29360
+ id: id,
29361
+ collectionAddress: contractAddress
29362
+ });
29363
+ }
29364
+ const itemRequirements = [
29365
+ $9085b221b72ac69e$export$af768ccdf17d5c04(id, contractAddress, spenderAddress)
29366
+ ];
29367
+ // eslint-disable-next-line no-console
29368
+ console.log(listing); // TODO: Get order signature, provider.getSigner()._signTypedData to sign
29369
+ const smartCheckoutResult = await ($0e7419077c373b24$export$9e073f9ada8c81e6)(config, provider, itemRequirements, {
29370
+ type: ($4b58188d47aafe8d$export$65c64e46348ee3c1).GAS,
29371
+ gasToken: {
29372
+ type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29373
+ limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29374
+ }
29375
+ });
29376
+ // eslint-disable-next-line no-console
29377
+ console.log("transactionRequirements", smartCheckoutResult);
29378
+ return {
29379
+ itemRequirements: itemRequirements,
29380
+ gasToken: {
29381
+ type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29382
+ limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29383
+ },
29384
+ smartCheckoutResult: smartCheckoutResult
29385
+ };
29386
+ };
29387
+
29388
+
29389
+
29390
+
29391
+
29392
+
29393
+
29394
+
29395
+
28790
29396
  async function $0e0060cb42e136d2$export$339cb2be73677b30(config, existingReadOnlyProviders) {
28791
29397
  if (config.isProduction && existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM)) return existingReadOnlyProviders;
28792
29398
  if (existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).SEPOLIA)) return existingReadOnlyProviders;
@@ -28931,6 +29537,16 @@ class $a8cb37a3fc8eb863$export$1f60ba4ec72508a0 {
28931
29537
  await $64863c39386de592$export$7f8e2b98eca5a7f0(this.config, web3Provider, params.orderId);
28932
29538
  }
28933
29539
  /**
29540
+ * Determines the requirements for performing a sell.
29541
+ * @param {SellParams} params - The parameters for the sell.
29542
+ */ async sell(params) {
29543
+ if (this.config.isProduction) throw new Error("This endpoint is not currently available.");
29544
+ // eslint-disable-next-line no-console
29545
+ console.warn("This endpoint is currently under construction.");
29546
+ const web3Provider = await $bb88265fe45a0393$export$9e1fd9cc88c637a0(this.config, params.provider);
29547
+ await $9085b221b72ac69e$export$e761f9e0703de895(this.config, web3Provider, params.id, params.collectionAddress, params.buyToken);
29548
+ }
29549
+ /**
28934
29550
  * Determines the transaction requirements to complete a purchase.
28935
29551
  * @params {SmartCheckoutParams} params - The parameters for smart checkout.
28936
29552
  */ async smartCheckout(params) {
@@ -28977,7 +29593,7 @@ var checkout_sdk = /*#__PURE__*/Object.freeze({
28977
29593
  function $parcel$export(e, n, v, s) {
28978
29594
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
28979
29595
  }
28980
- const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.15.1-alpha";
29596
+ const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.16.0-alpha.1";
28981
29597
  const $d663162fd5a0853f$export$83bf90b30cdfd29f = ()=>false;
28982
29598
  const $d663162fd5a0853f$export$1169f5475725171b = ()=>$d663162fd5a0853f$export$38a083d9fb5551ca;
28983
29599
 
@@ -29670,7 +30286,7 @@ const _abi$2 = [
29670
30286
  },
29671
30287
  {
29672
30288
  internalType: "address",
29673
- name: "royaltyAllowlist_",
30289
+ name: "operatorAllowlist_",
29674
30290
  type: "address",
29675
30291
  },
29676
30292
  {
@@ -29687,6 +30303,11 @@ const _abi$2 = [
29687
30303
  stateMutability: "nonpayable",
29688
30304
  type: "constructor",
29689
30305
  },
30306
+ {
30307
+ inputs: [],
30308
+ name: "AllowlistDoesNotImplementIOperatorAllowlist",
30309
+ type: "error",
30310
+ },
29690
30311
  {
29691
30312
  inputs: [
29692
30313
  {
@@ -29779,11 +30400,6 @@ const _abi$2 = [
29779
30400
  name: "IImmutableERC721TokenAlreadyBurned",
29780
30401
  type: "error",
29781
30402
  },
29782
- {
29783
- inputs: [],
29784
- name: "RoyaltyEnforcementDoesNotImplementRequiredInterface",
29785
- type: "error",
29786
- },
29787
30403
  {
29788
30404
  inputs: [
29789
30405
  {
@@ -29856,6 +30472,25 @@ const _abi$2 = [
29856
30472
  name: "ApprovalForAll",
29857
30473
  type: "event",
29858
30474
  },
30475
+ {
30476
+ anonymous: false,
30477
+ inputs: [
30478
+ {
30479
+ indexed: false,
30480
+ internalType: "address",
30481
+ name: "oldRegistry",
30482
+ type: "address",
30483
+ },
30484
+ {
30485
+ indexed: false,
30486
+ internalType: "address",
30487
+ name: "newRegistry",
30488
+ type: "address",
30489
+ },
30490
+ ],
30491
+ name: "OperatorAllowlistRegistryUpdated",
30492
+ type: "event",
30493
+ },
29859
30494
  {
29860
30495
  anonymous: false,
29861
30496
  inputs: [
@@ -29931,25 +30566,6 @@ const _abi$2 = [
29931
30566
  name: "RoleRevoked",
29932
30567
  type: "event",
29933
30568
  },
29934
- {
29935
- anonymous: false,
29936
- inputs: [
29937
- {
29938
- indexed: false,
29939
- internalType: "address",
29940
- name: "oldRegistry",
29941
- type: "address",
29942
- },
29943
- {
29944
- indexed: false,
29945
- internalType: "address",
29946
- name: "newRegistry",
29947
- type: "address",
29948
- },
29949
- ],
29950
- name: "RoyaltyAllowlistRegistryUpdated",
29951
- type: "event",
29952
- },
29953
30569
  {
29954
30570
  anonymous: false,
29955
30571
  inputs: [
@@ -30394,6 +31010,19 @@ const _abi$2 = [
30394
31010
  stateMutability: "view",
30395
31011
  type: "function",
30396
31012
  },
31013
+ {
31014
+ inputs: [],
31015
+ name: "operatorAllowlist",
31016
+ outputs: [
31017
+ {
31018
+ internalType: "contract IOperatorAllowlist",
31019
+ name: "",
31020
+ type: "address",
31021
+ },
31022
+ ],
31023
+ stateMutability: "view",
31024
+ type: "function",
31025
+ },
30397
31026
  {
30398
31027
  inputs: [
30399
31028
  {
@@ -30462,19 +31091,6 @@ const _abi$2 = [
30462
31091
  stateMutability: "nonpayable",
30463
31092
  type: "function",
30464
31093
  },
30465
- {
30466
- inputs: [],
30467
- name: "royaltyAllowlist",
30468
- outputs: [
30469
- {
30470
- internalType: "contract IRoyaltyAllowlist",
30471
- name: "",
30472
- type: "address",
30473
- },
30474
- ],
30475
- stateMutability: "view",
30476
- type: "function",
30477
- },
30478
31094
  {
30479
31095
  inputs: [
30480
31096
  {
@@ -30826,11 +31442,11 @@ const _abi$2 = [
30826
31442
  inputs: [
30827
31443
  {
30828
31444
  internalType: "address",
30829
- name: "_royaltyAllowlist",
31445
+ name: "_operatorAllowlist",
30830
31446
  type: "address",
30831
31447
  },
30832
31448
  ],
30833
- name: "setRoyaltyAllowlistRegistry",
31449
+ name: "setOperatorAllowlistRegistry",
30834
31450
  outputs: [],
30835
31451
  stateMutability: "nonpayable",
30836
31452
  type: "function",
@@ -30923,7 +31539,7 @@ const _abi$2 = [
30923
31539
  type: "function",
30924
31540
  },
30925
31541
  ];
30926
- const _bytecode$2 = "0x608060405260006013553480156200001657600080fd5b50604051620052f1380380620052f18339810160408190526200003991620007cd565b8787878787878787868681818181600662000055838262000960565b50600762000064828262000960565b50506801000000000000000060095550600d62000082838262000960565b50600e62000091828262000960565b50620000a69350600092508b915050620000f1565b620000b2828262000134565b620000bd8362000239565b6016620000cb868262000960565b506015620000da858262000960565b505050505050505050505050505050505062000b74565b6200010882826200025560201b620011e11760201c565b60008281526001602090815260409091206200012f91839062001265620002f5821b17901c565b505050565b6127106001600160601b0382161115620001a85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002005760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200019f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000620002468162000315565b620002518262000324565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000251576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030c836001600160a01b0384166200041d565b90505b92915050565b6200032181336200046f565b50565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a2c565b620003b457604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260018301602052604081205462000466575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030f565b5060006200030f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200025157620004ae81620004ff60201b6200127a1760201c565b620004c48360206200128c62000512821b17811c565b604051602001620004d792919062000a50565b60408051601f198184030181529082905262461bcd60e51b82526200019f9160040162000ac9565b60606200030f6001600160a01b03831660145b606060006200052383600262000b14565b6200053090600262000b2e565b6001600160401b038111156200054a576200054a620006e8565b6040519080825280601f01601f19166020018201604052801562000575576020820181803683370190505b509050600360fc1b8160008151811062000593576200059362000b44565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005c557620005c562000b44565b60200101906001600160f81b031916908160001a9053506000620005eb84600262000b14565b620005f890600162000b2e565b90505b60018111156200067a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000630576200063062000b44565b1a60f81b82828151811062000649576200064962000b44565b60200101906001600160f81b031916908160001a90535060049490941c93620006728162000b5a565b9050620005fb565b5083156200030c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200019f565b80516001600160a01b0381168114620006e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200071b57818101518382015260200162000701565b50506000910152565b600082601f8301126200073657600080fd5b81516001600160401b0380821115620007535762000753620006e8565b604051601f8301601f19908116603f011681019082821181831017156200077e576200077e620006e8565b816040528381528660208588010111156200079857600080fd5b620007ab846020830160208901620006fe565b9695505050505050565b80516001600160601b0381168114620006e357600080fd5b600080600080600080600080610100898b031215620007eb57600080fd5b620007f689620006cb565b60208a01519098506001600160401b03808211156200081457600080fd5b620008228c838d0162000724565b985060408b01519150808211156200083957600080fd5b620008478c838d0162000724565b975060608b01519150808211156200085e57600080fd5b6200086c8c838d0162000724565b965060808b01519150808211156200088357600080fd5b50620008928b828c0162000724565b945050620008a360a08a01620006cb565b9250620008b360c08a01620006cb565b9150620008c360e08a01620007b5565b90509295985092959890939650565b600181811c90821680620008e757607f821691505b6020821081036200090857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012f57600081815260208120601f850160051c81016020861015620009375750805b601f850160051c820191505b81811015620009585782815560010162000943565b505050505050565b81516001600160401b038111156200097c576200097c620006e8565b62000994816200098d8454620008d2565b846200090e565b602080601f831160018114620009cc5760008415620009b35750858301515b600019600386901b1c1916600185901b17855562000958565b600085815260208120601f198616915b82811015620009fd57888601518255948401946001909101908401620009dc565b508582101562000a1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3f57600080fd5b815180151581146200030c57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a8a816017850160208801620006fe565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000abd816028840160208801620006fe565b01602801949350505050565b602081526000825180602084015262000aea816040850160208701620006fe565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200030f576200030f62000afe565b808201808211156200030f576200030f62000afe565b634e487b7160e01b600052603260045260246000fd5b60008162000b6c5762000b6c62000afe565b506000190190565b61476d8062000b846000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a217fddf116100e9578063d5391393116100a2578063e4623c1b1161007c578063e4623c1b146106af578063e8a3d485146106c2578063e985e9c5146106ca578063eea98768146106dd57600080fd5b8063d539139314610674578063d547741f14610689578063e19278591461069c57600080fd5b8063a217fddf1461060d578063a22cb46514610615578063a701281614610628578063b88d4fde1461063b578063c87b56dd1461064e578063ca15c8731461066157600080fd5b80639010d07c1161015657806395d89b411161013057806395d89b41146105cc5780639e2641a3146105d45780639f15d700146105e7578063a1448194146105fa57600080fd5b80639010d07c1461059357806391d14854146105a6578063938e3d7b146105b957600080fd5b806369e2f0fb1461052c5780636b3a06321461053f5780636c0360eb1461055257806370a082311461055a57806374f16a811461056d578063885e7a081461058057600080fd5b80632f2ff15d1161025c57806342966c681161021557806355f804b3116101ef57806355f804b3146104e0578063567e4075146104f35780636352211e146105065780636588962a1461051957600080fd5b806342966c68146104a7578063439aed34146104ba5780634f558e79146104cd57600080fd5b80632f2ff15d1461043357806331ae450b1461044657806336568abe1461045b5780633dd1eb611461046e57806340c10f191461048157806342842e0e1461049457600080fd5b80631f8ebbd1116102ae5780631f8ebbd11461039b578063234af046146103a557806323b872dd146103b8578063248a9ca3146103cb5780632a55205a146103ee5780632d2c5a8b1461042057600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b31461037257806318160ddd14610385575b600080fd5b61030861030336600461391b565b6106f0565b005b61031d61031836600461396b565b6107c6565b60405190151581526020015b60405180910390f35b61033a6107d7565b60405161032991906139d8565b61035a6103553660046139eb565b6107e6565b6040516001600160a01b039091168152602001610329565b610308610380366004613a1b565b610806565b61038d610961565b604051908152602001610329565b600160401b61038d565b6103086103b3366004613be7565b610978565b6103086103c6366004613c2f565b610999565b61038d6103d93660046139eb565b60009081526020819052604090206001015490565b6104016103fc366004613c6b565b6109bb565b604080516001600160a01b039093168352602083019190915201610329565b61030861042e366004613c8d565b610a69565b610308610441366004613d49565b610a8a565b61044e610aaf565b6040516103299190613d75565b610308610469366004613d49565b610b5d565b61030861047c366004613dc2565b610bd7565b61030861048f366004613a1b565b610bfa565b6103086104a2366004613c2f565b610c1c565b6103086104b53660046139eb565b610c37565b6103086104c8366004613df4565b610c6e565b61031d6104db3660046139eb565b610c97565b6103086104ee366004613e87565b610ca2565b610308610501366004613a1b565b610cb9565b61035a6105143660046139eb565b610cdb565b610308610527366004613dc2565b610cfb565b61030861053a366004613dc2565b610d0f565b60025461035a906001600160a01b031681565b61033a610d32565b61038d610568366004613dc2565b610dc0565b61030861057b366004613be7565b610dde565b61030861058e366004613ecf565b610de7565b61035a6105a1366004613c6b565b610dfc565b61031d6105b4366004613d49565b610e1b565b6103086105c7366004613e87565b610e44565b61033a610e5b565b6103086105e2366004613be7565b610e65565b6103086105f5366004613a1b565b610e86565b610308610608366004613a1b565b610ee0565b61038d600081565b610308610623366004613f07565b610f02565b610308610636366004613f82565b611053565b610308610649366004613fe6565b6110b3565b61033a61065c3660046139eb565b6110dc565b61038d61066f3660046139eb565b6110e7565b61038d6a4d494e5445525f524f4c4560a81b81565b610308610697366004613d49565b6110fe565b6103086106aa366004613c8d565b611123565b6103086106bd366004614061565b611144565b61033a611182565b61031d6106d83660046140a2565b61118f565b6103086106eb366004613a1b565b6111bf565b6106fd60208201826140cc565b905061070c60408301836140cc565b90501461072c5760405163359a1bc360e01b815260040160405180910390fd5b60005b61073c60408301836140cc565b90508110156107c2576107b06107556020840184613dc2565b61076260208501856140cc565b8481811061077257610772614115565b90506020020160208101906107879190613dc2565b61079460408601866140cc565b858181106107a4576107a4614115565b90506020020135610c1c565b806107ba81614141565b91505061072f565b5050565b60006107d182611427565b92915050565b60606107e1611432565b905090565b6000600160401b8210156107fd576107d1826114c4565b6107d1826114eb565b81333b1580159061088057506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061415a565b155b156108a55760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092957506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061415a565b155b15610952576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611576565b505050565b600060135461096e611596565b6107e19190614177565b6a4d494e5445525f524f4c4560a81b610990816115b2565b6107c2826115bc565b600160401b8110156109b05761095c83838361160b565b61095c83838361163b565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a305750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a4f906001600160601b03168761418a565b610a5991906141a1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a81816115b2565b6107c282611660565b600082815260208190526040902060010154610aa5816115b2565b61095c83836116af565b60606000610abc816110e7565b90506000816001600160401b03811115610ad857610ad8613a45565b604051908082528060200260200182016040528015610b01578160200160208202803683370190505b50905060005b82811015610b5657610b1a600082610dfc565b828281518110610b2c57610b2c614115565b6001600160a01b039092166020928302919091019091015280610b4e81614141565b915050610b07565b5092915050565b6001600160a01b0381163314610bcd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161089c565b6107c282826116d1565b6000610be2816115b2565b6107c26a4d494e5445525f524f4c4560a81b83610a8a565b6a4d494e5445525f524f4c4560a81b610c12816115b2565b61095c83836116f3565b61095c838383604051806020016040528060008152506110b3565b610c42335b8261177a565b610c6257604051630247e3a960e01b81526004810182905260240161089c565b610c6b816117a3565b50565b6a4d494e5445525f524f4c4560a81b610c86816115b2565b610c918484846117f6565b50505050565b60006107d1826118c1565b6000610cad816115b2565b601661095c8382614243565b6a4d494e5445525f524f4c4560a81b610cd1816115b2565b61095c838361191e565b6000600160401b821015610cf2576107d182611928565b6107d182611988565b6000610d06816115b2565b6107c28261199c565b6000610d1a816115b2565b6107c26a4d494e5445525f524f4c4560a81b836110fe565b60168054610d3f906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6b906141c3565b8015610db85780601f10610d8d57610100808354040283529160200191610db8565b820191906000526020600020905b815481529060010190602001808311610d9b57829003601f168201915b505050505081565b6000610dcb82611a91565b610dd483611b5c565b6107d19190614177565b610c6b81611be2565b6000610df2816115b2565b61095c8383611c6e565b6000828152600160205260408120610e149083611d28565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e4f816115b2565b601561095c8382614243565b60606107e1611d34565b6a4d494e5445525f524f4c4560a81b610e7d816115b2565b6107c282611d43565b6000610e9182610cdb565b9050826001600160a01b0316816001600160a01b031614610ed757604051634fefd56160e01b8152600481018390526001600160a01b038216602482015260440161089c565b61095c82610c37565b6a4d494e5445525f524f4c4560a81b610ef8816115b2565b61095c8383611d92565b81333b15801590610f7c57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061415a565b155b15610f9c5760405163f6fa4cbd60e01b815233600482015260240161089c565b6001600160a01b0381163b1580159061102057506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e919061415a565b155b15611049576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611e00565b6a4d494e5445525f524f4c4560a81b61106b816115b2565b60005b848110156110ab5761109986868381811061108b5761108b614115565b9050602002013585856117f6565b806110a381614141565b91505061106e565b505050505050565b600160401b8210156110d0576110cb84848484611e0a565b610c91565b610c9184848484611e3d565b60606107d182611e62565b60008181526001602052604081206107d190611ec8565b600082815260208190526040902060010154611119816115b2565b61095c83836116d1565b6a4d494e5445525f524f4c4560a81b61113b816115b2565b6107c282611ed2565b60005b8181101561095c5761117083838381811061116457611164614115565b90506020020135610c37565b8061117a81614141565b915050611147565b60158054610d3f906141c3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e14565b6a4d494e5445525f524f4c4560a81b6111d7816115b2565b61095c8383611f21565b6111eb8282610e1b565b6107c2576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e14836001600160a01b038416611f2b565b60606107d16001600160a01b03831660145b6060600061129b83600261418a565b6112a6906002614177565b6001600160401b038111156112bd576112bd613a45565b6040519080825280601f01601f1916602001820160405280156112e7576020820181803683370190505b509050600360fc1b8160008151811061130257611302614115565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061133157611331614115565b60200101906001600160f81b031916908160001a905350600061135584600261418a565b611360906001614177565b90505b60018111156113d8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061139457611394614115565b1a60f81b8282815181106113aa576113aa614115565b60200101906001600160f81b031916908160001a90535060049490941c936113d181614302565b9050611363565b508315610e145760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089c565b60006107d182611f7a565b6060600d8054611441906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461146d906141c3565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b60006114cf82611fba565b506000908152601160205260409020546001600160a01b031690565b60006114f6826118c1565b61155a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b506000908152600a60205260409020546001600160a01b031690565b600160401b81101561158c576107c2828261200a565b6107c2828261211a565b60006115a0612222565b6115a861228c565b6107e19190614319565b610c6b81336122a0565b60005b81518110156107c25760008282815181106115dc576115dc614115565b602002602001015190506115f8816000015182602001516122f9565b508061160381614141565b9150506115bf565b61161433610c3c565b6116305760405162461bcd60e51b815260040161089c9061432c565b61095c83838361233a565b61164433610c3c565b6116305760405162461bcd60e51b815260040161089c90614379565b60005b81518110156107c257600082828151811061168057611680614115565b6020026020010151905061169c8160000151826020015161191e565b50806116a781614141565b915050611663565b6116b982826111e1565b600082815260016020526040902061095c9082611265565b6116db8282612541565b600082815260016020526040902061095c90826125a6565b600160401b811061171a5760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611757576040516305dcda1160e51b81526004810182905260240161089c565b61176182826125bb565b6013805490600061177183614141565b91905055505050565b6000600160401b821015611799576117928383612716565b90506107d1565b610e148383612775565b600160401b8110156117ed576117b88161283a565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916117e583614302565b919050555050565b610c6b816128bd565b6127106001600160601b03821611156118215760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161089c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611915576000828152600f60205260409020546001600160a01b0316158015906107d15750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b6107d1826128ff565b6107c28282612934565b6000818152600f60205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b6000806119948361294e565b509392505050565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b919061415a565b611a2857604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216611aff5760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b606482015260840161089c565b6000600160401b5b600954811015610b5657611b1a816118c1565b15611b4c57611b2881610cdb565b6001600160a01b0316846001600160a01b031603611b4c57611b4982614141565b91505b611b5581614141565b9050611b07565b60006001600160a01b038216611bc65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089c565b506001600160a01b031660009081526010602052604090205490565b60005b81518110156107c2576000828281518110611c0257611c02614115565b6020026020010151905060005b816020015151811015611c5957611c47826000015183602001518381518110611c3a57611c3a614115565b6020026020010151610e86565b80611c5181614141565b915050611c0f565b50508080611c6690614141565b915050611be5565b6127106001600160601b0382161115611c995760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b038216611cef5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161089c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e1483836129e5565b6060600e8054611441906141c3565b60005b81518110156107c2576000828281518110611d6357611d63614115565b60200260200101519050611d7f81600001518260200151612a0f565b5080611d8a81614141565b915050611d46565b600160401b8110611db95760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611df6576040516305dcda1160e51b81526004810182905260240161089c565b6117618282612a50565b6107c28282612a6a565b611e15335b8361177a565b611e315760405162461bcd60e51b815260040161089c9061432c565b610c9184848484612a75565b611e4633611e0f565b611e315760405162461bcd60e51b815260040161089c90614379565b6060611e6d82611fba565b6000611e77612a99565b90506000815111611e975760405180602001604052806000815250610e14565b80611ea184612aa8565b604051602001611eb2929190614417565b6040516020818303038152906040529392505050565b60006107d1825490565b60005b81518110156107c2576000828281518110611ef257611ef2614115565b60200260200101519050611f0e81600001518260200151611f21565b5080611f1981614141565b915050611ed5565b6107c28282612b3a565b6000818152600183016020526040812054611f72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60006001600160e01b031982166380ac58cd60e01b1480611fab57506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612cb3565b611fc3816118c1565b610c6b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b600061201582611928565b9050806001600160a01b0316836001600160a01b0316036120825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089c565b336001600160a01b038216148061209e575061209e813361118f565b6121105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161089c565b61095c8383612cf3565b600061212582610cdb565b9050806001600160a01b0316836001600160a01b0316036121945760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b606482015260840161089c565b336001600160a01b03821614806121b057506121b0813361118f565b6121105760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000606482015260840161089c565b6009546000906701000000000000009082906122429060081c6001614177565b9050815b81811015612286576000818152600c602052604090205461226681612d13565b6122709086614177565b945050808061227e90614141565b915050612246565b50505090565b6000600160401b6009546107e19190614319565b6122aa8282610e1b565b6107c2576122b78161127a565b6122c283602061128c565b6040516020016122d3929190614446565b60408051601f198184030181529082905262461bcd60e51b825261089c916004016139d8565b60005b815181101561095c576123288383838151811061231b5761231b614115565b6020026020010151611d92565b8061233281614141565b9150506122fc565b82823332148015906123b557506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061415a565b155b156123d55760405163937db65f60e01b815233600482015260240161089c565b6001600160a01b0382163b1580159061245957506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061415a565b155b156124825760405163f934453160e01b81526001600160a01b038316600482015260240161089c565b6001600160a01b0381163b1580159061250657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612504919061415a565b155b1561252f57604051632a67242160e11b81526001600160a01b038216600482015260240161089c565b61253a858585612d32565b5050505050565b61254b8282610e1b565b156107c2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e14836001600160a01b038416612d54565b6001600160a01b0382166126115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089c565b61261a816118c1565b156126675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b612670816118c1565b156126bd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b031916841790555183929190600080516020614618833981519152908290a45050565b60008061272283611928565b9050806001600160a01b0316846001600160a01b031614806127495750612749818561118f565b8061276d5750836001600160a01b0316612762846107e6565b6001600160a01b0316145b949350505050565b6000612780826118c1565b6127e45760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b60006127ef83610cdb565b9050806001600160a01b0316846001600160a01b0316148061282a5750836001600160a01b031661281f846107e6565b6001600160a01b0316145b8061276d575061276d818561118f565b600061284582611928565b905061285082611928565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f90935281842080549091169055519293508492600080516020614618833981519152908390a45050565b60006128c882610cdb565b90506128d5600c83612e47565b60405182906000906001600160a01b03841690600080516020614618833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c161561292b57506000919050565b6107d182612e73565b6107c2828260405180602001604052806000815250612e92565b60008061295a836118c1565b6129bb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161089c565b6129c483612ed3565b6000818152600860205260409020546001600160a01b031694909350915050565b60008260000182815481106129fc576129fc614115565b9060005260206000200154905092915050565b60005b815181101561095c57612a3e83838381518110612a3157612a31614115565b60200260200101516116f3565b80612a4881614141565b915050612a12565b6107c2828260405180602001604052806000815250612ee0565b6107c2338383612eeb565b600160401b821015612a8d576110cb84848484612fb9565b610c9184848484612fec565b606060168054611441906141c3565b60606000612ab583613005565b60010190506000816001600160401b03811115612ad457612ad4613a45565b6040519080825280601f01601f191660200182016040528015612afe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b0857509392505050565b6000612b4560095490565b905060008211612ba55760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b606482015260840161089c565b6001600160a01b038316612c075760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089c565b8160096000828254612c199190614177565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b038516179055612c50600582612e47565b600080612c5d8484614177565b90506001600160a01b038516915082826000600080516020614618833981519152600080a4600183015b818114612cad5780836000600080516020614618833981519152600080a4600101612c87565b5061253a565b60006001600160e01b031982166380ac58cd60e01b1480612ce457506001600160e01b03198216635b5e139f60e01b145b806107d157506107d1826130dd565b600160401b811015612d09576107c28282613102565b6107c28282613170565b60005b8115612d2d57600019820190911690600101612d16565b919050565b600160401b811015612d495761095c8383836131a5565b61095c8383836132f7565b60008181526001830160205260408120548015612e3d576000612d78600183614319565b8554909150600090612d8c90600190614319565b9050818114612df1576000866000018281548110612dac57612dac614115565b9060005260206000200154905080876000018481548110612dcf57612dcf614115565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0257612e026144bb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b6000612e7e60095490565b821080156107d1575050600160401b111590565b6000612e9d60095490565b9050612ea98484612b3a565b612eb76000858386866134cf565b610c915760405162461bcd60e51b815260040161089c906144d1565b60006107d1600583613606565b61095c8383836136fe565b816001600160a01b0316836001600160a01b031603612f4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089c565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fc484848461233a565b612fd084848484613731565b610c915760405162461bcd60e51b815260040161089c90614526565b612ff784848461233a565b612eb78484846001856134cf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613070576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061308e57662386f26fc10000830492506010015b6305f5e10083106130a6576305f5e100830492506008015b61271083106130ba57612710830492506004015b606483106130cc576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b0319821663152a902d60e11b14806107d157506107d18261382a565b600081815260116020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782611928565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782610cdb565b826001600160a01b03166131b882611928565b6001600160a01b0316146131de5760405162461bcd60e51b815260040161089c90614578565b6001600160a01b0382166132405760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089c565b826001600160a01b031661325382611928565b6001600160a01b0316146132795760405162461bcd60e51b815260040161089c90614578565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f909452828520805490921684179091559051849360008051602061461883398151915291a4505050565b6000806133038361294e565b91509150846001600160a01b0316826001600160a01b03161461337d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b606482015260840161089c565b6001600160a01b0384166133e35760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b606482015260840161089c565b6133ee600084612cf3565b60006133fb846001614177565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c1615801561342b575060095481105b1561346257600081815260086020526040902080546001600160a01b0319166001600160a01b038816179055613462600582612e47565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461349b5761349b600585612e47565b83856001600160a01b0316876001600160a01b031660008051602061461883398151915260405160405180910390a46110ab565b60006001600160a01b0385163b156135f957506001835b6134f08486614177565b8110156135f357604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906135299033908b90869089906004016145bd565b6020604051808303816000875af1925050508015613564575060408051601f3d908101601f19168201909252613561918101906145fa565b60015b6135c1573d808015613592576040519150601f19603f3d011682016040523d82523d6000602084013e613597565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c906144d1565b805181602001fd5b8280156135de57506001600160e01b03198116630a85bd0160e11b145b925050806135eb81614141565b9150506134e6565b506135fd565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c80156136485761363681613835565b60ff168203600884901b1793506136f5565b600083116136b55760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b606482015260840161089c565b5060001990910160008181526020869052604090205490919080156136f0576136dd81613835565b60ff0360ff16600884901b1793506136f5565b613648565b50505092915050565b613708838361389f565b6137156000848484613731565b61095c5760405162461bcd60e51b815260040161089c90614526565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906137759033908990889088906004016145bd565b6020604051808303816000875af19250505080156137b0575060408051601f3d908101601f191682019092526137ad918101906145fa565b60015b613805573d8080156137de576040519150601f19603f3d011682016040523d82523d6000602084013e6137e3565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c90614526565b6001600160e01b031916630a85bd0160e11b14905061276d565b506001949350505050565b60006107d1826138a9565b60006040518061012001604052806101008152602001614638610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61387e856138ce565b02901c8151811061389157613891614115565b016020015160f81c92915050565b6107c282826125bb565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826138e6565b60008082116138dc57600080fd5b5060008190031690565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b60006020828403121561392d57600080fd5b81356001600160401b0381111561394357600080fd5b820160608185031215610e1457600080fd5b6001600160e01b031981168114610c6b57600080fd5b60006020828403121561397d57600080fd5b8135610e1481613955565b60005b838110156139a357818101518382015260200161398b565b50506000910152565b600081518084526139c4816020860160208601613988565b601f01601f19169290920160200192915050565b602081526000610e1460208301846139ac565b6000602082840312156139fd57600080fd5b5035919050565b80356001600160a01b0381168114612d2d57600080fd5b60008060408385031215613a2e57600080fd5b613a3783613a04565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a7d57613a7d613a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613aab57613aab613a45565b604052919050565b60006001600160401b03821115613acc57613acc613a45565b5060051b60200190565b6000613ae9613ae484613ab3565b613a83565b8381529050602080820190600585811b850187811115613b0857600080fd5b855b81811015613bdb5780356001600160401b0380821115613b2a5760008081fd5b908801906040828c031215613b3f5760008081fd5b613b47613a5b565b613b5083613a04565b81528683013582811115613b645760008081fd5b8084019350508b601f840112613b7c57600091508182fd5b82359150613b8c613ae483613ab3565b82815291861b8301870191878101908d841115613ba95760008081fd5b938801935b83851015613bc757843582529388019390880190613bae565b828901525087525050938301938301613b0a565b50505050509392505050565b600060208284031215613bf957600080fd5b81356001600160401b03811115613c0f57600080fd5b8201601f81018413613c2057600080fd5b61276d84823560208401613ad6565b600080600060608486031215613c4457600080fd5b613c4d84613a04565b9250613c5b60208501613a04565b9150604084013590509250925092565b60008060408385031215613c7e57600080fd5b50508035926020909101359150565b60006020808385031215613ca057600080fd5b82356001600160401b03811115613cb657600080fd5b8301601f81018513613cc757600080fd5b8035613cd5613ae482613ab3565b81815260069190911b82018301908381019087831115613cf457600080fd5b928401925b82841015613d3e5760408489031215613d125760008081fd5b613d1a613a5b565b613d2385613a04565b81528486013586820152825260409093019290840190613cf9565b979650505050505050565b60008060408385031215613d5c57600080fd5b82359150613d6c60208401613a04565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613db65783516001600160a01b031683529284019291840191600101613d91565b50909695505050505050565b600060208284031215613dd457600080fd5b610e1482613a04565b80356001600160601b0381168114612d2d57600080fd5b600080600060608486031215613e0957600080fd5b83359250613e1960208501613a04565b9150613e2760408501613ddd565b90509250925092565b60006001600160401b03831115613e4957613e49613a45565b613e5c601f8401601f1916602001613a83565b9050828152838383011115613e7057600080fd5b828260208301376000602084830101529392505050565b600060208284031215613e9957600080fd5b81356001600160401b03811115613eaf57600080fd5b8201601f81018413613ec057600080fd5b61276d84823560208401613e30565b60008060408385031215613ee257600080fd5b613eeb83613a04565b9150613d6c60208401613ddd565b8015158114610c6b57600080fd5b60008060408385031215613f1a57600080fd5b613f2383613a04565b91506020830135613f3381613ef9565b809150509250929050565b60008083601f840112613f5057600080fd5b5081356001600160401b03811115613f6757600080fd5b6020830191508360208260051b8501011115610a6257600080fd5b60008060008060608587031215613f9857600080fd5b84356001600160401b03811115613fae57600080fd5b613fba87828801613f3e565b9095509350613fcd905060208601613a04565b9150613fdb60408601613ddd565b905092959194509250565b60008060008060808587031215613ffc57600080fd5b61400585613a04565b935061401360208601613a04565b92506040850135915060608501356001600160401b0381111561403557600080fd5b8501601f8101871361404657600080fd5b61405587823560208401613e30565b91505092959194509250565b6000806020838503121561407457600080fd5b82356001600160401b0381111561408a57600080fd5b61409685828601613f3e565b90969095509350505050565b600080604083850312156140b557600080fd5b6140be83613a04565b9150613d6c60208401613a04565b6000808335601e198436030181126140e357600080fd5b8301803591506001600160401b038211156140fd57600080fd5b6020019150600581901b3603821315610a6257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141535761415361412b565b5060010190565b60006020828403121561416c57600080fd5b8151610e1481613ef9565b808201808211156107d1576107d161412b565b80820281158282048414176107d1576107d161412b565b6000826141be57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806141d757607f821691505b6020821081036141f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c810160208610156142245750805b601f850160051c820191505b818110156110ab57828155600101614230565b81516001600160401b0381111561425c5761425c613a45565b6142708161426a84546141c3565b846141fd565b602080601f8311600181146142a5576000841561428d5750858301515b600019600386901b1c1916600185901b1785556110ab565b600085815260208120601f198616915b828110156142d4578886015182559484019460019091019084016142b5565b50858210156142f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816143115761431161412b565b506000190190565b818103818111156107d1576107d161412b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60008351614429818460208801613988565b83519083019061443d818360208801613988565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161447e816017850160208801613988565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516144af816028840160208801613988565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906145f0908301846139ac565b9695505050505050565b60006020828403121561460c57600080fd5b8151610e148161395556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a2646970667358221220f8fc88cc156435797aa3d9dc642f5ee1307c4e518ce35c0cb8a9c26fb3f4f44064736f6c63430008110033";
31542
+ const _bytecode$2 = "0x608060405260006013553480156200001657600080fd5b50604051620052f1380380620052f18339810160408190526200003991620007cd565b8787878787878787868681818181600662000055838262000960565b50600762000064828262000960565b50506801000000000000000060095550600d62000082838262000960565b50600e62000091828262000960565b50620000a69350600092508b915050620000f1565b620000b2828262000134565b620000bd8362000239565b6016620000cb868262000960565b506015620000da858262000960565b505050505050505050505050505050505062000b74565b6200010882826200025560201b620011e11760201c565b60008281526001602090815260409091206200012f91839062001265620002f5821b17901c565b505050565b6127106001600160601b0382161115620001a85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002005760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200019f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000620002468162000315565b620002518262000324565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000251576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030c836001600160a01b0384166200041d565b90505b92915050565b6200032181336200046f565b50565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a2c565b620003b45760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260018301602052604081205462000466575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030f565b5060006200030f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200025157620004ae81620004ff60201b6200127a1760201c565b620004c48360206200128c62000512821b17811c565b604051602001620004d792919062000a50565b60408051601f198184030181529082905262461bcd60e51b82526200019f9160040162000ac9565b60606200030f6001600160a01b03831660145b606060006200052383600262000b14565b6200053090600262000b2e565b6001600160401b038111156200054a576200054a620006e8565b6040519080825280601f01601f19166020018201604052801562000575576020820181803683370190505b509050600360fc1b8160008151811062000593576200059362000b44565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005c557620005c562000b44565b60200101906001600160f81b031916908160001a9053506000620005eb84600262000b14565b620005f890600162000b2e565b90505b60018111156200067a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000630576200063062000b44565b1a60f81b82828151811062000649576200064962000b44565b60200101906001600160f81b031916908160001a90535060049490941c93620006728162000b5a565b9050620005fb565b5083156200030c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200019f565b80516001600160a01b0381168114620006e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200071b57818101518382015260200162000701565b50506000910152565b600082601f8301126200073657600080fd5b81516001600160401b0380821115620007535762000753620006e8565b604051601f8301601f19908116603f011681019082821181831017156200077e576200077e620006e8565b816040528381528660208588010111156200079857600080fd5b620007ab846020830160208901620006fe565b9695505050505050565b80516001600160601b0381168114620006e357600080fd5b600080600080600080600080610100898b031215620007eb57600080fd5b620007f689620006cb565b60208a01519098506001600160401b03808211156200081457600080fd5b620008228c838d0162000724565b985060408b01519150808211156200083957600080fd5b620008478c838d0162000724565b975060608b01519150808211156200085e57600080fd5b6200086c8c838d0162000724565b965060808b01519150808211156200088357600080fd5b50620008928b828c0162000724565b945050620008a360a08a01620006cb565b9250620008b360c08a01620006cb565b9150620008c360e08a01620007b5565b90509295985092959890939650565b600181811c90821680620008e757607f821691505b6020821081036200090857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012f57600081815260208120601f850160051c81016020861015620009375750805b601f850160051c820191505b81811015620009585782815560010162000943565b505050505050565b81516001600160401b038111156200097c576200097c620006e8565b62000994816200098d8454620008d2565b846200090e565b602080601f831160018114620009cc5760008415620009b35750858301515b600019600386901b1c1916600185901b17855562000958565b600085815260208120601f198616915b82811015620009fd57888601518255948401946001909101908401620009dc565b508582101562000a1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3f57600080fd5b815180151581146200030c57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a8a816017850160208801620006fe565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000abd816028840160208801620006fe565b01602801949350505050565b602081526000825180602084015262000aea816040850160208701620006fe565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200030f576200030f62000afe565b808201808211156200030f576200030f62000afe565b634e487b7160e01b600052603260045260246000fd5b60008162000b6c5762000b6c62000afe565b506000190190565b61476d8062000b846000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a22cb465116100e9578063d547741f116100a2578063e4e18f6d1161007c578063e4e18f6d146106af578063e8a3d485146106c2578063e985e9c5146106ca578063eea98768146106dd57600080fd5b8063d547741f14610676578063e192785914610689578063e4623c1b1461069c57600080fd5b8063a22cb46514610602578063a701281614610615578063b88d4fde14610628578063c87b56dd1461063b578063ca15c8731461064e578063d53913931461066157600080fd5b806391d14854116101565780639e2641a3116101305780639e2641a3146105c15780639f15d700146105d4578063a1448194146105e7578063a217fddf146105fa57600080fd5b806391d1485414610593578063938e3d7b146105a657806395d89b41146105b957600080fd5b806369e2f0fb1461052c5780636c0360eb1461053f57806370a082311461054757806374f16a811461055a578063885e7a081461056d5780639010d07c1461058057600080fd5b80632d2c5a8b1161025c57806342842e0e116102155780634f558e79116101ef5780634f558e79146104e057806355f804b3146104f3578063567e4075146105065780636352211e1461051957600080fd5b806342842e0e146104a757806342966c68146104ba578063439aed34146104cd57600080fd5b80632d2c5a8b146104335780632f2ff15d1461044657806331ae450b1461045957806336568abe1461046e5780633dd1eb611461048157806340c10f191461049457600080fd5b80631f8ebbd1116102ae5780631f8ebbd11461039b578063234af046146103a557806323b872dd146103b8578063248a9ca3146103cb57806329326f29146103ee5780632a55205a1461040157600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b31461037257806318160ddd14610385575b600080fd5b61030861030336600461391b565b6106f0565b005b61031d61031836600461396b565b6107c6565b60405190151581526020015b60405180910390f35b61033a6107d7565b60405161032991906139d8565b61035a6103553660046139eb565b6107e6565b6040516001600160a01b039091168152602001610329565b610308610380366004613a1b565b610806565b61038d610961565b604051908152602001610329565b600160401b61038d565b6103086103b3366004613be7565b610978565b6103086103c6366004613c2f565b610999565b61038d6103d93660046139eb565b60009081526020819052604090206001015490565b60025461035a906001600160a01b031681565b61041461040f366004613c6b565b6109bb565b604080516001600160a01b039093168352602083019190915201610329565b610308610441366004613c8d565b610a69565b610308610454366004613d49565b610a8a565b610461610aaf565b6040516103299190613d75565b61030861047c366004613d49565b610b5d565b61030861048f366004613dc2565b610bd7565b6103086104a2366004613a1b565b610bfa565b6103086104b5366004613c2f565b610c1c565b6103086104c83660046139eb565b610c37565b6103086104db366004613df4565b610c6e565b61031d6104ee3660046139eb565b610c97565b610308610501366004613e87565b610ca2565b610308610514366004613a1b565b610cb9565b61035a6105273660046139eb565b610cdb565b61030861053a366004613dc2565b610cfb565b61033a610d1e565b61038d610555366004613dc2565b610dac565b610308610568366004613be7565b610dca565b61030861057b366004613ecf565b610dd3565b61035a61058e366004613c6b565b610de8565b61031d6105a1366004613d49565b610e07565b6103086105b4366004613e87565b610e30565b61033a610e47565b6103086105cf366004613be7565b610e51565b6103086105e2366004613a1b565b610e72565b6103086105f5366004613a1b565b610ecc565b61038d600081565b610308610610366004613f07565b610eee565b610308610623366004613f82565b61103f565b610308610636366004613fe6565b61109f565b61033a6106493660046139eb565b6110c8565b61038d61065c3660046139eb565b6110d3565b61038d6a4d494e5445525f524f4c4560a81b81565b610308610684366004613d49565b6110ea565b610308610697366004613c8d565b61110f565b6103086106aa366004614061565b611130565b6103086106bd366004613dc2565b61116e565b61033a611182565b61031d6106d83660046140a2565b61118f565b6103086106eb366004613a1b565b6111bf565b6106fd60208201826140cc565b905061070c60408301836140cc565b90501461072c5760405163359a1bc360e01b815260040160405180910390fd5b60005b61073c60408301836140cc565b90508110156107c2576107b06107556020840184613dc2565b61076260208501856140cc565b8481811061077257610772614115565b90506020020160208101906107879190613dc2565b61079460408601866140cc565b858181106107a4576107a4614115565b90506020020135610c1c565b806107ba81614141565b91505061072f565b5050565b60006107d182611427565b92915050565b60606107e1611432565b905090565b6000600160401b8210156107fd576107d1826114c4565b6107d1826114eb565b81333b1580159061088057506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061415a565b155b156108a55760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092957506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061415a565b155b15610952576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611576565b505050565b600060135461096e611596565b6107e19190614177565b6a4d494e5445525f524f4c4560a81b610990816115b2565b6107c2826115bc565b600160401b8110156109b05761095c83838361160b565b61095c83838361163b565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a305750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a4f906001600160601b03168761418a565b610a5991906141a1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a81816115b2565b6107c282611660565b600082815260208190526040902060010154610aa5816115b2565b61095c83836116af565b60606000610abc816110d3565b90506000816001600160401b03811115610ad857610ad8613a45565b604051908082528060200260200182016040528015610b01578160200160208202803683370190505b50905060005b82811015610b5657610b1a600082610de8565b828281518110610b2c57610b2c614115565b6001600160a01b039092166020928302919091019091015280610b4e81614141565b915050610b07565b5092915050565b6001600160a01b0381163314610bcd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161089c565b6107c282826116d1565b6000610be2816115b2565b6107c26a4d494e5445525f524f4c4560a81b83610a8a565b6a4d494e5445525f524f4c4560a81b610c12816115b2565b61095c83836116f3565b61095c8383836040518060200160405280600081525061109f565b610c42335b8261177a565b610c6257604051630247e3a960e01b81526004810182905260240161089c565b610c6b816117a3565b50565b6a4d494e5445525f524f4c4560a81b610c86816115b2565b610c918484846117f6565b50505050565b60006107d1826118c1565b6000610cad816115b2565b601661095c8382614243565b6a4d494e5445525f524f4c4560a81b610cd1816115b2565b61095c838361191e565b6000600160401b821015610cf2576107d182611928565b6107d182611988565b6000610d06816115b2565b6107c26a4d494e5445525f524f4c4560a81b836110ea565b60168054610d2b906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d57906141c3565b8015610da45780601f10610d7957610100808354040283529160200191610da4565b820191906000526020600020905b815481529060010190602001808311610d8757829003601f168201915b505050505081565b6000610db78261199c565b610dc083611a67565b6107d19190614177565b610c6b81611aed565b6000610dde816115b2565b61095c8383611b79565b6000828152600160205260408120610e009083611c33565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e3b816115b2565b601561095c8382614243565b60606107e1611c3f565b6a4d494e5445525f524f4c4560a81b610e69816115b2565b6107c282611c4e565b6000610e7d82610cdb565b9050826001600160a01b0316816001600160a01b031614610ec357604051634fefd56160e01b8152600481018390526001600160a01b038216602482015260440161089c565b61095c82610c37565b6a4d494e5445525f524f4c4560a81b610ee4816115b2565b61095c8383611c9d565b81333b15801590610f6857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f66919061415a565b155b15610f885760405163f6fa4cbd60e01b815233600482015260240161089c565b6001600160a01b0381163b1580159061100c57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a919061415a565b155b15611035576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611d0b565b6a4d494e5445525f524f4c4560a81b611057816115b2565b60005b848110156110975761108586868381811061107757611077614115565b9050602002013585856117f6565b8061108f81614141565b91505061105a565b505050505050565b600160401b8210156110bc576110b784848484611d15565b610c91565b610c9184848484611d48565b60606107d182611d6d565b60008181526001602052604081206107d190611dd3565b600082815260208190526040902060010154611105816115b2565b61095c83836116d1565b6a4d494e5445525f524f4c4560a81b611127816115b2565b6107c282611ddd565b60005b8181101561095c5761115c83838381811061115057611150614115565b90506020020135610c37565b8061116681614141565b915050611133565b6000611179816115b2565b6107c282611e2c565b60158054610d2b906141c3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e00565b6a4d494e5445525f524f4c4560a81b6111d7816115b2565b61095c8383611f21565b6111eb8282610e07565b6107c2576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e00836001600160a01b038416611f2b565b60606107d16001600160a01b03831660145b6060600061129b83600261418a565b6112a6906002614177565b6001600160401b038111156112bd576112bd613a45565b6040519080825280601f01601f1916602001820160405280156112e7576020820181803683370190505b509050600360fc1b8160008151811061130257611302614115565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061133157611331614115565b60200101906001600160f81b031916908160001a905350600061135584600261418a565b611360906001614177565b90505b60018111156113d8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061139457611394614115565b1a60f81b8282815181106113aa576113aa614115565b60200101906001600160f81b031916908160001a90535060049490941c936113d181614302565b9050611363565b508315610e005760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089c565b60006107d182611f7a565b6060600d8054611441906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461146d906141c3565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b60006114cf82611fba565b506000908152601160205260409020546001600160a01b031690565b60006114f6826118c1565b61155a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b506000908152600a60205260409020546001600160a01b031690565b600160401b81101561158c576107c2828261200a565b6107c2828261211a565b60006115a0612222565b6115a861228c565b6107e19190614319565b610c6b81336122a0565b60005b81518110156107c25760008282815181106115dc576115dc614115565b602002602001015190506115f8816000015182602001516122f9565b508061160381614141565b9150506115bf565b61161433610c3c565b6116305760405162461bcd60e51b815260040161089c9061432c565b61095c83838361233a565b61164433610c3c565b6116305760405162461bcd60e51b815260040161089c90614379565b60005b81518110156107c257600082828151811061168057611680614115565b6020026020010151905061169c8160000151826020015161191e565b50806116a781614141565b915050611663565b6116b982826111e1565b600082815260016020526040902061095c9082611265565b6116db8282612541565b600082815260016020526040902061095c90826125a6565b600160401b811061171a5760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611757576040516305dcda1160e51b81526004810182905260240161089c565b61176182826125bb565b6013805490600061177183614141565b91905055505050565b6000600160401b821015611799576117928383612716565b90506107d1565b610e008383612775565b600160401b8110156117ed576117b88161283a565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916117e583614302565b919050555050565b610c6b816128bd565b6127106001600160601b03821611156118215760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161089c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611915576000828152600f60205260409020546001600160a01b0316158015906107d15750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b6107d1826128ff565b6107c28282612934565b6000818152600f60205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b6000806119948361294e565b509392505050565b60006001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b606482015260840161089c565b6000600160401b5b600954811015610b5657611a25816118c1565b15611a5757611a3381610cdb565b6001600160a01b0316846001600160a01b031603611a5757611a5482614141565b91505b611a6081614141565b9050611a12565b60006001600160a01b038216611ad15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089c565b506001600160a01b031660009081526010602052604090205490565b60005b81518110156107c2576000828281518110611b0d57611b0d614115565b6020026020010151905060005b816020015151811015611b6457611b52826000015183602001518381518110611b4557611b45614115565b6020026020010151610e72565b80611b5c81614141565b915050611b1a565b50508080611b7190614141565b915050611af0565b6127106001600160601b0382161115611ba45760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b038216611bfa5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161089c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e0083836129e5565b6060600e8054611441906141c3565b60005b81518110156107c2576000828281518110611c6e57611c6e614115565b60200260200101519050611c8a81600001518260200151612a0f565b5080611c9581614141565b915050611c51565b600160401b8110611cc45760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611d01576040516305dcda1160e51b81526004810182905260240161089c565b6117618282612a50565b6107c28282612a6a565b611d20335b8361177a565b611d3c5760405162461bcd60e51b815260040161089c9061432c565b610c9184848484612a75565b611d5133611d1a565b611d3c5760405162461bcd60e51b815260040161089c90614379565b6060611d7882611fba565b6000611d82612a99565b90506000815111611da25760405180602001604052806000815250610e00565b80611dac84612aa8565b604051602001611dbd929190614417565b6040516020818303038152906040529392505050565b60006107d1825490565b60005b81518110156107c2576000828281518110611dfd57611dfd614115565b60200260200101519050611e1981600001518260200151611f21565b5080611e2481614141565b915050611de0565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611e77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9b919061415a565b611eb85760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6107c28282612b3a565b6000818152600183016020526040812054611f72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60006001600160e01b031982166380ac58cd60e01b1480611fab57506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612cb3565b611fc3816118c1565b610c6b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b600061201582611928565b9050806001600160a01b0316836001600160a01b0316036120825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089c565b336001600160a01b038216148061209e575061209e813361118f565b6121105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161089c565b61095c8383612cf3565b600061212582610cdb565b9050806001600160a01b0316836001600160a01b0316036121945760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b606482015260840161089c565b336001600160a01b03821614806121b057506121b0813361118f565b6121105760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000606482015260840161089c565b6009546000906701000000000000009082906122429060081c6001614177565b9050815b81811015612286576000818152600c602052604090205461226681612d13565b6122709086614177565b945050808061227e90614141565b915050612246565b50505090565b6000600160401b6009546107e19190614319565b6122aa8282610e07565b6107c2576122b78161127a565b6122c283602061128c565b6040516020016122d3929190614446565b60408051601f198184030181529082905262461bcd60e51b825261089c916004016139d8565b60005b815181101561095c576123288383838151811061231b5761231b614115565b6020026020010151611c9d565b8061233281614141565b9150506122fc565b82823332148015906123b557506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061415a565b155b156123d55760405163937db65f60e01b815233600482015260240161089c565b6001600160a01b0382163b1580159061245957506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061415a565b155b156124825760405163f934453160e01b81526001600160a01b038316600482015260240161089c565b6001600160a01b0381163b1580159061250657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612504919061415a565b155b1561252f57604051632a67242160e11b81526001600160a01b038216600482015260240161089c565b61253a858585612d32565b5050505050565b61254b8282610e07565b156107c2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e00836001600160a01b038416612d54565b6001600160a01b0382166126115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089c565b61261a816118c1565b156126675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b612670816118c1565b156126bd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b031916841790555183929190600080516020614618833981519152908290a45050565b60008061272283611928565b9050806001600160a01b0316846001600160a01b031614806127495750612749818561118f565b8061276d5750836001600160a01b0316612762846107e6565b6001600160a01b0316145b949350505050565b6000612780826118c1565b6127e45760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b60006127ef83610cdb565b9050806001600160a01b0316846001600160a01b0316148061282a5750836001600160a01b031661281f846107e6565b6001600160a01b0316145b8061276d575061276d818561118f565b600061284582611928565b905061285082611928565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f90935281842080549091169055519293508492600080516020614618833981519152908390a45050565b60006128c882610cdb565b90506128d5600c83612e47565b60405182906000906001600160a01b03841690600080516020614618833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c161561292b57506000919050565b6107d182612e73565b6107c2828260405180602001604052806000815250612e92565b60008061295a836118c1565b6129bb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161089c565b6129c483612ed3565b6000818152600860205260409020546001600160a01b031694909350915050565b60008260000182815481106129fc576129fc614115565b9060005260206000200154905092915050565b60005b815181101561095c57612a3e83838381518110612a3157612a31614115565b60200260200101516116f3565b80612a4881614141565b915050612a12565b6107c2828260405180602001604052806000815250612ee0565b6107c2338383612eeb565b600160401b821015612a8d576110b784848484612fb9565b610c9184848484612fec565b606060168054611441906141c3565b60606000612ab583613005565b60010190506000816001600160401b03811115612ad457612ad4613a45565b6040519080825280601f01601f191660200182016040528015612afe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b0857509392505050565b6000612b4560095490565b905060008211612ba55760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b606482015260840161089c565b6001600160a01b038316612c075760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089c565b8160096000828254612c199190614177565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b038516179055612c50600582612e47565b600080612c5d8484614177565b90506001600160a01b038516915082826000600080516020614618833981519152600080a4600183015b818114612cad5780836000600080516020614618833981519152600080a4600101612c87565b5061253a565b60006001600160e01b031982166380ac58cd60e01b1480612ce457506001600160e01b03198216635b5e139f60e01b145b806107d157506107d1826130dd565b600160401b811015612d09576107c28282613102565b6107c28282613170565b60005b8115612d2d57600019820190911690600101612d16565b919050565b600160401b811015612d495761095c8383836131a5565b61095c8383836132f7565b60008181526001830160205260408120548015612e3d576000612d78600183614319565b8554909150600090612d8c90600190614319565b9050818114612df1576000866000018281548110612dac57612dac614115565b9060005260206000200154905080876000018481548110612dcf57612dcf614115565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0257612e026144bb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b6000612e7e60095490565b821080156107d1575050600160401b111590565b6000612e9d60095490565b9050612ea98484612b3a565b612eb76000858386866134cf565b610c915760405162461bcd60e51b815260040161089c906144d1565b60006107d1600583613606565b61095c8383836136fe565b816001600160a01b0316836001600160a01b031603612f4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089c565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fc484848461233a565b612fd084848484613731565b610c915760405162461bcd60e51b815260040161089c90614526565b612ff784848461233a565b612eb78484846001856134cf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613070576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061308e57662386f26fc10000830492506010015b6305f5e10083106130a6576305f5e100830492506008015b61271083106130ba57612710830492506004015b606483106130cc576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b0319821663152a902d60e11b14806107d157506107d18261382a565b600081815260116020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782611928565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782610cdb565b826001600160a01b03166131b882611928565b6001600160a01b0316146131de5760405162461bcd60e51b815260040161089c90614578565b6001600160a01b0382166132405760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089c565b826001600160a01b031661325382611928565b6001600160a01b0316146132795760405162461bcd60e51b815260040161089c90614578565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f909452828520805490921684179091559051849360008051602061461883398151915291a4505050565b6000806133038361294e565b91509150846001600160a01b0316826001600160a01b03161461337d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b606482015260840161089c565b6001600160a01b0384166133e35760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b606482015260840161089c565b6133ee600084612cf3565b60006133fb846001614177565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c1615801561342b575060095481105b1561346257600081815260086020526040902080546001600160a01b0319166001600160a01b038816179055613462600582612e47565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461349b5761349b600585612e47565b83856001600160a01b0316876001600160a01b031660008051602061461883398151915260405160405180910390a4611097565b60006001600160a01b0385163b156135f957506001835b6134f08486614177565b8110156135f357604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906135299033908b90869089906004016145bd565b6020604051808303816000875af1925050508015613564575060408051601f3d908101601f19168201909252613561918101906145fa565b60015b6135c1573d808015613592576040519150601f19603f3d011682016040523d82523d6000602084013e613597565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c906144d1565b805181602001fd5b8280156135de57506001600160e01b03198116630a85bd0160e11b145b925050806135eb81614141565b9150506134e6565b506135fd565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c80156136485761363681613835565b60ff168203600884901b1793506136f5565b600083116136b55760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b606482015260840161089c565b5060001990910160008181526020869052604090205490919080156136f0576136dd81613835565b60ff0360ff16600884901b1793506136f5565b613648565b50505092915050565b613708838361389f565b6137156000848484613731565b61095c5760405162461bcd60e51b815260040161089c90614526565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906137759033908990889088906004016145bd565b6020604051808303816000875af19250505080156137b0575060408051601f3d908101601f191682019092526137ad918101906145fa565b60015b613805573d8080156137de576040519150601f19603f3d011682016040523d82523d6000602084013e6137e3565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c90614526565b6001600160e01b031916630a85bd0160e11b14905061276d565b506001949350505050565b60006107d1826138a9565b60006040518061012001604052806101008152602001614638610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61387e856138ce565b02901c8151811061389157613891614115565b016020015160f81c92915050565b6107c282826125bb565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826138e6565b60008082116138dc57600080fd5b5060008190031690565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b60006020828403121561392d57600080fd5b81356001600160401b0381111561394357600080fd5b820160608185031215610e0057600080fd5b6001600160e01b031981168114610c6b57600080fd5b60006020828403121561397d57600080fd5b8135610e0081613955565b60005b838110156139a357818101518382015260200161398b565b50506000910152565b600081518084526139c4816020860160208601613988565b601f01601f19169290920160200192915050565b602081526000610e0060208301846139ac565b6000602082840312156139fd57600080fd5b5035919050565b80356001600160a01b0381168114612d2d57600080fd5b60008060408385031215613a2e57600080fd5b613a3783613a04565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a7d57613a7d613a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613aab57613aab613a45565b604052919050565b60006001600160401b03821115613acc57613acc613a45565b5060051b60200190565b6000613ae9613ae484613ab3565b613a83565b8381529050602080820190600585811b850187811115613b0857600080fd5b855b81811015613bdb5780356001600160401b0380821115613b2a5760008081fd5b908801906040828c031215613b3f5760008081fd5b613b47613a5b565b613b5083613a04565b81528683013582811115613b645760008081fd5b8084019350508b601f840112613b7c57600091508182fd5b82359150613b8c613ae483613ab3565b82815291861b8301870191878101908d841115613ba95760008081fd5b938801935b83851015613bc757843582529388019390880190613bae565b828901525087525050938301938301613b0a565b50505050509392505050565b600060208284031215613bf957600080fd5b81356001600160401b03811115613c0f57600080fd5b8201601f81018413613c2057600080fd5b61276d84823560208401613ad6565b600080600060608486031215613c4457600080fd5b613c4d84613a04565b9250613c5b60208501613a04565b9150604084013590509250925092565b60008060408385031215613c7e57600080fd5b50508035926020909101359150565b60006020808385031215613ca057600080fd5b82356001600160401b03811115613cb657600080fd5b8301601f81018513613cc757600080fd5b8035613cd5613ae482613ab3565b81815260069190911b82018301908381019087831115613cf457600080fd5b928401925b82841015613d3e5760408489031215613d125760008081fd5b613d1a613a5b565b613d2385613a04565b81528486013586820152825260409093019290840190613cf9565b979650505050505050565b60008060408385031215613d5c57600080fd5b82359150613d6c60208401613a04565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613db65783516001600160a01b031683529284019291840191600101613d91565b50909695505050505050565b600060208284031215613dd457600080fd5b610e0082613a04565b80356001600160601b0381168114612d2d57600080fd5b600080600060608486031215613e0957600080fd5b83359250613e1960208501613a04565b9150613e2760408501613ddd565b90509250925092565b60006001600160401b03831115613e4957613e49613a45565b613e5c601f8401601f1916602001613a83565b9050828152838383011115613e7057600080fd5b828260208301376000602084830101529392505050565b600060208284031215613e9957600080fd5b81356001600160401b03811115613eaf57600080fd5b8201601f81018413613ec057600080fd5b61276d84823560208401613e30565b60008060408385031215613ee257600080fd5b613eeb83613a04565b9150613d6c60208401613ddd565b8015158114610c6b57600080fd5b60008060408385031215613f1a57600080fd5b613f2383613a04565b91506020830135613f3381613ef9565b809150509250929050565b60008083601f840112613f5057600080fd5b5081356001600160401b03811115613f6757600080fd5b6020830191508360208260051b8501011115610a6257600080fd5b60008060008060608587031215613f9857600080fd5b84356001600160401b03811115613fae57600080fd5b613fba87828801613f3e565b9095509350613fcd905060208601613a04565b9150613fdb60408601613ddd565b905092959194509250565b60008060008060808587031215613ffc57600080fd5b61400585613a04565b935061401360208601613a04565b92506040850135915060608501356001600160401b0381111561403557600080fd5b8501601f8101871361404657600080fd5b61405587823560208401613e30565b91505092959194509250565b6000806020838503121561407457600080fd5b82356001600160401b0381111561408a57600080fd5b61409685828601613f3e565b90969095509350505050565b600080604083850312156140b557600080fd5b6140be83613a04565b9150613d6c60208401613a04565b6000808335601e198436030181126140e357600080fd5b8301803591506001600160401b038211156140fd57600080fd5b6020019150600581901b3603821315610a6257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141535761415361412b565b5060010190565b60006020828403121561416c57600080fd5b8151610e0081613ef9565b808201808211156107d1576107d161412b565b80820281158282048414176107d1576107d161412b565b6000826141be57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806141d757607f821691505b6020821081036141f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c810160208610156142245750805b601f850160051c820191505b8181101561109757828155600101614230565b81516001600160401b0381111561425c5761425c613a45565b6142708161426a84546141c3565b846141fd565b602080601f8311600181146142a5576000841561428d5750858301515b600019600386901b1c1916600185901b178555611097565b600085815260208120601f198616915b828110156142d4578886015182559484019460019091019084016142b5565b50858210156142f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816143115761431161412b565b506000190190565b818103818111156107d1576107d161412b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60008351614429818460208801613988565b83519083019061443d818360208801613988565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161447e816017850160208801613988565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516144af816028840160208801613988565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906145f0908301846139ac565b9695505050505050565b60006020828403121561460c57600080fd5b8151610e008161395556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a264697066735822122069f1e7de30c125031cf14dee918b767ccf0b99363cb74ee4a00c68cea975db1b64736f6c63430008110033";
30927
31543
  const isSuperArgs$2 = (xs) => xs.length > 1;
30928
31544
  class ImmutableERC721__factory extends ContractFactory {
30929
31545
  constructor(...args) {
@@ -30934,11 +31550,11 @@ class ImmutableERC721__factory extends ContractFactory {
30934
31550
  super(_abi$2, _bytecode$2, args[0]);
30935
31551
  }
30936
31552
  }
30937
- deploy(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
30938
- return super.deploy(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
31553
+ deploy(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
31554
+ return super.deploy(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
30939
31555
  }
30940
- getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
30941
- return super.getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
31556
+ getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
31557
+ return super.getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
30942
31558
  }
30943
31559
  attach(address) {
30944
31560
  return super.attach(address);
@@ -30989,7 +31605,7 @@ const _abi$1 = [
30989
31605
  },
30990
31606
  {
30991
31607
  internalType: "address",
30992
- name: "_royaltyAllowlist",
31608
+ name: "_operatorAllowlist",
30993
31609
  type: "address",
30994
31610
  },
30995
31611
  {
@@ -31006,6 +31622,11 @@ const _abi$1 = [
31006
31622
  stateMutability: "nonpayable",
31007
31623
  type: "constructor",
31008
31624
  },
31625
+ {
31626
+ inputs: [],
31627
+ name: "AllowlistDoesNotImplementIOperatorAllowlist",
31628
+ type: "error",
31629
+ },
31009
31630
  {
31010
31631
  inputs: [
31011
31632
  {
@@ -31098,11 +31719,6 @@ const _abi$1 = [
31098
31719
  name: "IImmutableERC721TokenAlreadyBurned",
31099
31720
  type: "error",
31100
31721
  },
31101
- {
31102
- inputs: [],
31103
- name: "RoyaltyEnforcementDoesNotImplementRequiredInterface",
31104
- type: "error",
31105
- },
31106
31722
  {
31107
31723
  inputs: [
31108
31724
  {
@@ -31175,6 +31791,25 @@ const _abi$1 = [
31175
31791
  name: "ApprovalForAll",
31176
31792
  type: "event",
31177
31793
  },
31794
+ {
31795
+ anonymous: false,
31796
+ inputs: [
31797
+ {
31798
+ indexed: false,
31799
+ internalType: "address",
31800
+ name: "oldRegistry",
31801
+ type: "address",
31802
+ },
31803
+ {
31804
+ indexed: false,
31805
+ internalType: "address",
31806
+ name: "newRegistry",
31807
+ type: "address",
31808
+ },
31809
+ ],
31810
+ name: "OperatorAllowlistRegistryUpdated",
31811
+ type: "event",
31812
+ },
31178
31813
  {
31179
31814
  anonymous: false,
31180
31815
  inputs: [
@@ -31250,25 +31885,6 @@ const _abi$1 = [
31250
31885
  name: "RoleRevoked",
31251
31886
  type: "event",
31252
31887
  },
31253
- {
31254
- anonymous: false,
31255
- inputs: [
31256
- {
31257
- indexed: false,
31258
- internalType: "address",
31259
- name: "oldRegistry",
31260
- type: "address",
31261
- },
31262
- {
31263
- indexed: false,
31264
- internalType: "address",
31265
- name: "newRegistry",
31266
- type: "address",
31267
- },
31268
- ],
31269
- name: "RoyaltyAllowlistRegistryUpdated",
31270
- type: "event",
31271
- },
31272
31888
  {
31273
31889
  anonymous: false,
31274
31890
  inputs: [
@@ -31676,6 +32292,19 @@ const _abi$1 = [
31676
32292
  stateMutability: "view",
31677
32293
  type: "function",
31678
32294
  },
32295
+ {
32296
+ inputs: [],
32297
+ name: "operatorAllowlist",
32298
+ outputs: [
32299
+ {
32300
+ internalType: "contract IOperatorAllowlist",
32301
+ name: "",
32302
+ type: "address",
32303
+ },
32304
+ ],
32305
+ stateMutability: "view",
32306
+ type: "function",
32307
+ },
31679
32308
  {
31680
32309
  inputs: [
31681
32310
  {
@@ -31744,19 +32373,6 @@ const _abi$1 = [
31744
32373
  stateMutability: "nonpayable",
31745
32374
  type: "function",
31746
32375
  },
31747
- {
31748
- inputs: [],
31749
- name: "royaltyAllowlist",
31750
- outputs: [
31751
- {
31752
- internalType: "contract IRoyaltyAllowlist",
31753
- name: "",
31754
- type: "address",
31755
- },
31756
- ],
31757
- stateMutability: "view",
31758
- type: "function",
31759
- },
31760
32376
  {
31761
32377
  inputs: [
31762
32378
  {
@@ -32065,11 +32681,11 @@ const _abi$1 = [
32065
32681
  inputs: [
32066
32682
  {
32067
32683
  internalType: "address",
32068
- name: "_royaltyAllowlist",
32684
+ name: "_operatorAllowlist",
32069
32685
  type: "address",
32070
32686
  },
32071
32687
  ],
32072
- name: "setRoyaltyAllowlistRegistry",
32688
+ name: "setOperatorAllowlistRegistry",
32073
32689
  outputs: [],
32074
32690
  stateMutability: "nonpayable",
32075
32691
  type: "function",
@@ -32162,7 +32778,7 @@ const _abi$1 = [
32162
32778
  type: "function",
32163
32779
  },
32164
32780
  ];
32165
- const _bytecode$1 = "0x60806040523480156200001157600080fd5b5060405162003c7938038062003c79833981016040819052620000349162000506565b8787878787878787868660036200004c838262000699565b5060046200005b828262000699565b506200006d91506000905089620000b8565b620000798282620000fb565b620000848362000200565b600c62000092868262000699565b50600b620000a1858262000699565b505050505050505050505050505050505062000790565b620000cf8282620002f960201b6200135e1760201c565b6000828152600160209081526040909120620000f6918390620013e26200039a821b17901c565b505050565b6127106001600160601b03821611156200016f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000166565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000765565b6200029057604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000396576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003b1836001600160a01b038416620003ba565b90505b92915050565b60008181526001830160205260408120546200040357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003b4565b506000620003b4565b80516001600160a01b03811681146200042457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045157600080fd5b81516001600160401b03808211156200046e576200046e62000429565b604051601f8301601f19908116603f0116810190828211818310171562000499576200049962000429565b81604052838152602092508683858801011115620004b657600080fd5b600091505b83821015620004da5785820183015181830184015290820190620004bb565b600093810190920192909252949350505050565b80516001600160601b03811681146200042457600080fd5b600080600080600080600080610100898b0312156200052457600080fd5b6200052f896200040c565b60208a01519098506001600160401b03808211156200054d57600080fd5b6200055b8c838d016200043f565b985060408b01519150808211156200057257600080fd5b620005808c838d016200043f565b975060608b01519150808211156200059757600080fd5b620005a58c838d016200043f565b965060808b0151915080821115620005bc57600080fd5b50620005cb8b828c016200043f565b945050620005dc60a08a016200040c565b9250620005ec60c08a016200040c565b9150620005fc60e08a01620004ee565b90509295985092959890939650565b600181811c908216806200062057607f821691505b6020821081036200064157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f657600081815260208120601f850160051c81016020861015620006705750805b601f850160051c820191505b8181101562000691578281556001016200067c565b505050505050565b81516001600160401b03811115620006b557620006b562000429565b620006cd81620006c684546200060b565b8462000647565b602080601f831160018114620007055760008415620006ec5750858301515b600019600386901b1c1916600185901b17855562000691565b600085815260208120601f198616915b82811015620007365788860151825594840194600190910190840162000715565b5085821015620007555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077857600080fd5b815180151581146200078957600080fd5b9392505050565b6134d980620007a06000396000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806369e2f0fb11610167578063a1448194116100ce578063ca15c87311610087578063ca15c873146105da578063d5391393146105ed578063d547741f14610602578063e4623c1b14610615578063e8a3d48514610628578063e985e9c51461063057600080fd5b8063a144819414610573578063a217fddf14610586578063a22cb4651461058e578063a7012816146105a1578063b88d4fde146105b4578063c87b56dd146105c757600080fd5b80639010d07c116101205780639010d07c1461050c57806391d148541461051f578063938e3d7b1461053257806395d89b41146105455780639e2641a31461054d5780639f15d7001461056057600080fd5b806369e2f0fb146104a55780636b3a0632146104b85780636c0360eb146104cb57806370a08231146104d357806374f16a81146104e6578063885e7a08146104f957600080fd5b806331ae450b1161020b57806342842e0e116101c457806342842e0e1461043357806342966c6814610446578063439aed341461045957806355f804b31461046c5780636352211e1461047f5780636588962a1461049257600080fd5b806331ae450b146103c957806336568abe146103de5780633dd1eb61146103f15780633e769acd146104045780633eaaf86b1461041757806340c10f191461042057600080fd5b806318160ddd1161025d57806318160ddd14610329578063234af0461461033b57806323b872dd1461034e578063248a9ca3146103615780632a55205a146103845780632f2ff15d146103b657600080fd5b80628ad9461461029957806301ffc9a7146102ae57806306fdde03146102d6578063081812fc146102eb578063095ea7b314610316575b600080fd5b6102ac6102a7366004612907565b61066c565b005b6102c16102bc366004612957565b610742565b60405190151581526020015b60405180910390f35b6102de610753565b6040516102cd91906129c4565b6102fe6102f93660046129d7565b6107e5565b6040516001600160a01b0390911681526020016102cd565b6102ac610324366004612a0c565b61080c565b600d545b6040519081526020016102cd565b6102ac610349366004612bd8565b610967565b6102ac61035c366004612c20565b6109bf565b61032d61036f3660046129d7565b60009081526020819052604090206001015490565b610397610392366004612c5c565b6109f1565b604080516001600160a01b0390931683526020830191909152016102cd565b6102ac6103c4366004612c7e565b610a9f565b6103d1610ac4565b6040516102cd9190612caa565b6102ac6103ec366004612c7e565b610b72565b6102ac6103ff366004612cf7565b610bec565b6102ac610412366004612bd8565b610c0f565b61032d600d5481565b6102ac61042e366004612a0c565b610c9b565b6102ac610441366004612c20565b610cd7565b6102ac6104543660046129d7565b610cf2565b6102ac610467366004612d29565b610d30565b6102ac61047a366004612dbc565b610d59565b6102fe61048d3660046129d7565b610d70565b6102ac6104a0366004612cf7565b610dd0565b6102ac6104b3366004612cf7565b610de4565b6002546102fe906001600160a01b031681565b6102de610e07565b61032d6104e1366004612cf7565b610e95565b6102ac6104f4366004612bd8565b610f1b565b6102ac610507366004612e04565b610f27565b6102fe61051a366004612c5c565b610f3c565b6102c161052d366004612c7e565b610f5b565b6102ac610540366004612dbc565b610f84565b6102de610f9b565b6102ac61055b366004612bd8565b610faa565b6102ac61056e366004612a0c565b611002565b6102ac610581366004612a0c565b61105c565b61032d600081565b6102ac61059c366004612e3c565b61108e565b6102ac6105af366004612eb7565b6111df565b6102ac6105c2366004612f1b565b61123f565b6102de6105d53660046129d7565b611271565b61032d6105e83660046129d7565b6112d7565b61032d6a4d494e5445525f524f4c4560a81b81565b6102ac610610366004612c7e565b6112ee565b6102ac610623366004612f96565b611313565b6102de611351565b6102c161063e366004612fd7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6106796020820182613001565b90506106886040830183613001565b9050146106a85760405163359a1bc360e01b815260040160405180910390fd5b60005b6106b86040830183613001565b905081101561073e5761072c6106d16020840184612cf7565b6106de6020850185613001565b848181106106ee576106ee61304a565b90506020020160208101906107039190612cf7565b6107106040860186613001565b858181106107205761072061304a565b90506020020135610cd7565b8061073681613076565b9150506106ab565b5050565b600061074d826113f7565b92915050565b6060600380546107629061308f565b80601f016020809104026020016040519081016040528092919081815260200182805461078e9061308f565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b5050505050905090565b60006107f082611402565b506000908152600760205260409020546001600160a01b031690565b81333b1580159061088657506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906130c9565b155b156108ab5760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906130c9565b155b15610958576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611461565b505050565b6a4d494e5445525f524f4c4560a81b61097f81611571565b60005b8251811015610962576109ad8382815181106109a0576109a061304a565b602002602001015161157b565b806109b781613076565b915050610982565b6109ca335b8261160a565b6109e65760405162461bcd60e51b81526004016108a2906130e6565b610962838383611689565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a665750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a85906001600160601b031687613133565b610a8f919061314a565b91519350909150505b9250929050565b600082815260208190526040902060010154610aba81611571565b6109628383611890565b60606000610ad1816112d7565b90506000816001600160401b03811115610aed57610aed612a36565b604051908082528060200260200182016040528015610b16578160200160208202803683370190505b50905060005b82811015610b6b57610b2f600082610f3c565b828281518110610b4157610b4161304a565b6001600160a01b039092166020928302919091019091015280610b6381613076565b915050610b1c565b5092915050565b6001600160a01b0381163314610be25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108a2565b61073e82826118b2565b6000610bf781611571565b61073e6a4d494e5445525f524f4c4560a81b83610a9f565b60005b815181101561073e576000828281518110610c2f57610c2f61304a565b6020026020010151905060005b816020015151811015610c8657610c74826000015183602001518381518110610c6757610c6761304a565b6020026020010151611002565b80610c7e81613076565b915050610c3c565b50508080610c9390613076565b915050610c12565b6a4d494e5445525f524f4c4560a81b610cb381611571565b610cbd83836118d4565b600d8054906000610ccd83613076565b9190505550505050565b6109628383836040518060200160405280600081525061123f565b610cfb8161191b565b600881901c6000908152600e602052604081208054600160ff85161b179055600d805491610d288361316c565b919050555050565b6a4d494e5445525f524f4c4560a81b610d4881611571565b610d53848484611949565b50505050565b6000610d6481611571565b600c61096283826131c9565b6000818152600560205260408120546001600160a01b03168061074d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b6000610ddb81611571565b61073e82611a14565b6000610def81611571565b61073e6a4d494e5445525f524f4c4560a81b836112ee565b600c8054610e149061308f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061308f565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b505050505081565b60006001600160a01b038216610eff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a2565b506001600160a01b031660009081526006602052604090205490565b610f2481610c0f565b50565b6000610f3281611571565b6109628383611b09565b6000828152600160205260408120610f549083611bc3565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610f8f81611571565b600b61096283826131c9565b6060600480546107629061308f565b6a4d494e5445525f524f4c4560a81b610fc281611571565b60005b825181101561096257610ff0838281518110610fe357610fe361304a565b6020026020010151611bcf565b80610ffa81613076565b915050610fc5565b600061100d82610d70565b9050826001600160a01b0316816001600160a01b03161461105357604051634fefd56160e01b8152600481018390526001600160a01b03821660248201526044016108a2565b61096282610cf2565b6a4d494e5445525f524f4c4560a81b61107481611571565b610cbd838360405180602001604052806000815250611c45565b81333b1580159061110857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906130c9565b155b156111285760405163f6fa4cbd60e01b81523360048201526024016108a2565b6001600160a01b0381163b158015906111ac57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111aa91906130c9565b155b156111d5576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611c78565b6a4d494e5445525f524f4c4560a81b6111f781611571565b60005b84811015611237576112258686838181106112175761121761304a565b905060200201358585611949565b8061122f81613076565b9150506111fa565b505050505050565b611249338361160a565b6112655760405162461bcd60e51b81526004016108a2906130e6565b610d5384848484611c83565b606061127c82611402565b6000611286611cb6565b905060008151116112a65760405180602001604052806000815250610f54565b806112b084611cc5565b6040516020016112c1929190613288565b6040516020818303038152906040529392505050565b600081815260016020526040812061074d90611d57565b60008281526020819052604090206001015461130981611571565b61096283836118b2565b60005b818110156109625761133f8383838181106113335761133361304a565b90506020020135610cf2565b8061134981613076565b915050611316565b600b8054610e149061308f565b6113688282610f5b565b61073e576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f54836001600160a01b038416611d61565b600061074d82611db0565b6000818152600560205260409020546001600160a01b0316610f245760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b600061146c82610d70565b9050806001600160a01b0316836001600160a01b0316036114d95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a2565b336001600160a01b03821614806114f557506114f5813361063e565b6115675760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108a2565b6109628383611dd5565b610f248133611e43565b80516001600160a01b03166115a3576040516331c3e52960e11b815260040160405180910390fd5b60005b8160200151518110156115f0576115de8260000151836020015183815181106115d1576115d161304a565b6020026020010151611e9c565b806115e881613076565b9150506115a6565b50806020015151600d5461160491906132b7565b600d5550565b60008061161683610d70565b9050806001600160a01b0316846001600160a01b0316148061165d57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806116815750836001600160a01b0316611676846107e5565b6001600160a01b0316145b949350505050565b828233321480159061170457506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906130c9565b155b156117245760405163937db65f60e01b81523360048201526024016108a2565b6001600160a01b0382163b158015906117a857506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015611782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a691906130c9565b155b156117d15760405163f934453160e01b81526001600160a01b03831660048201526024016108a2565b6001600160a01b0381163b1580159061185557506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906130c9565b155b1561187e57604051632a67242160e11b81526001600160a01b03821660048201526024016108a2565b611889858585611ee3565b5050505050565b61189a828261135e565b600082815260016020526040902061096290826113e2565b6118bc8282612047565b600082815260016020526040902061096290826120ac565b600881901c6000908152600e6020526040902054600160ff83161b1615611911576040516305dcda1160e51b8152600481018290526024016108a2565b61073e82826120c1565b611924336109c4565b6119405760405162461bcd60e51b81526004016108a2906130e6565b610f248161224c565b6127106001600160601b03821611156119745760405162461bcd60e51b81526004016108a2906132ca565b6001600160a01b0382166119ca5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108a2565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600a90529190942093519051909116600160a01b029116179055565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8391906130c9565b611aa057604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6127106001600160601b0382161115611b345760405162461bcd60e51b81526004016108a2906132ca565b6001600160a01b038216611b8a5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108a2565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6000610f5483836122e1565b80516001600160a01b031615611bf8576040516331c3e52960e11b815260040160405180910390fd5b60005b8160200151518110156115f057611c33826000015183602001518381518110611c2657611c2661304a565b60200260200101516118d4565b80611c3d81613076565b915050611bfb565b611c4f83836118d4565b611c5c600084848461230b565b6109625760405162461bcd60e51b81526004016108a290613314565b61073e33838361240c565b611c8e848484611689565b611c9a8484848461230b565b610d535760405162461bcd60e51b81526004016108a290613314565b6060600c80546107629061308f565b60606000611cd2836124da565b60010190506000816001600160401b03811115611cf157611cf1612a36565b6040519080825280601f01601f191660200182016040528015611d1b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d2557509392505050565b600061074d825490565b6000818152600183016020526040812054611da85750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b60006001600160e01b0319821663152a902d60e11b148061074d575061074d826125b2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e0a82610d70565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e4d8282610f5b565b61073e57611e5a816125f2565b611e65836020612604565b604051602001611e76929190613366565b60408051601f198184030181529082905262461bcd60e51b82526108a2916004016129c4565b600881901c6000908152600e6020526040902054600160ff83161b1615611ed9576040516305dcda1160e51b8152600481018290526024016108a2565b61073e828261279f565b826001600160a01b0316611ef682610d70565b6001600160a01b031614611f1c5760405162461bcd60e51b81526004016108a2906133db565b6001600160a01b038216611f7e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b826001600160a01b0316611f9182610d70565b6001600160a01b031614611fb75760405162461bcd60e51b81526004016108a2906133db565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6120518282610f5b565b1561073e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f54836001600160a01b0384166127b9565b6001600160a01b0382166121175760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a2565b6000818152600560205260409020546001600160a01b03161561217c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156121e15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061225782610d70565b905061226282610d70565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008260000182815481106122f8576122f861304a565b9060005260206000200154905092915050565b60006001600160a01b0384163b1561240157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061234f903390899088908890600401613420565b6020604051808303816000875af192505050801561238a575060408051601f3d908101601f191682019092526123879181019061345d565b60015b6123e7573d8080156123b8576040519150601f19603f3d011682016040523d82523d6000602084013e6123bd565b606091505b5080516000036123df5760405162461bcd60e51b81526004016108a290613314565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611681565b506001949350505050565b816001600160a01b0316836001600160a01b03160361246d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106125195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612545576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061256357662386f26fc10000830492506010015b6305f5e100831061257b576305f5e100830492506008015b612710831061258f57612710830492506004015b606483106125a1576064830492506002015b600a831061074d5760010192915050565b60006001600160e01b031982166380ac58cd60e01b14806125e357506001600160e01b03198216635b5e139f60e01b145b8061074d575061074d826128ac565b606061074d6001600160a01b03831660145b60606000612613836002613133565b61261e9060026132b7565b6001600160401b0381111561263557612635612a36565b6040519080825280601f01601f19166020018201604052801561265f576020820181803683370190505b509050600360fc1b8160008151811061267a5761267a61304a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a9576126a961304a565b60200101906001600160f81b031916908160001a90535060006126cd846002613133565b6126d89060016132b7565b90505b6001811115612750576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061270c5761270c61304a565b1a60f81b8282815181106127225761272261304a565b60200101906001600160f81b031916908160001a90535060049490941c936127498161316c565b90506126db565b508315610f545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a2565b61073e828260405180602001604052806000815250611c45565b600081815260018301602052604081205480156128a25760006127dd60018361347a565b85549091506000906127f19060019061347a565b90508181146128565760008660000182815481106128115761281161304a565b90600052602060002001549050808760000184815481106128345761283461304a565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806128675761286761348d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b600061074d8260006001600160e01b03198216635a05180f60e01b148061074d575061074d8260006001600160e01b03198216637965db0b60e01b148061074d57506301ffc9a760e01b6001600160e01b031983161461074d565b60006020828403121561291957600080fd5b81356001600160401b0381111561292f57600080fd5b820160608185031215610f5457600080fd5b6001600160e01b031981168114610f2457600080fd5b60006020828403121561296957600080fd5b8135610f5481612941565b60005b8381101561298f578181015183820152602001612977565b50506000910152565b600081518084526129b0816020860160208601612974565b601f01601f19169290920160200192915050565b602081526000610f546020830184612998565b6000602082840312156129e957600080fd5b5035919050565b80356001600160a01b0381168114612a0757600080fd5b919050565b60008060408385031215612a1f57600080fd5b612a28836129f0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a6e57612a6e612a36565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612a9c57612a9c612a36565b604052919050565b60006001600160401b03821115612abd57612abd612a36565b5060051b60200190565b6000612ada612ad584612aa4565b612a74565b8381529050602080820190600585811b850187811115612af957600080fd5b855b81811015612bcc5780356001600160401b0380821115612b1b5760008081fd5b908801906040828c031215612b305760008081fd5b612b38612a4c565b612b41836129f0565b81528683013582811115612b555760008081fd5b8084019350508b601f840112612b6d57600091508182fd5b82359150612b7d612ad583612aa4565b82815291861b8301870191878101908d841115612b9a5760008081fd5b938801935b83851015612bb857843582529388019390880190612b9f565b828901525087525050938301938301612afb565b50505050509392505050565b600060208284031215612bea57600080fd5b81356001600160401b03811115612c0057600080fd5b8201601f81018413612c1157600080fd5b61168184823560208401612ac7565b600080600060608486031215612c3557600080fd5b612c3e846129f0565b9250612c4c602085016129f0565b9150604084013590509250925092565b60008060408385031215612c6f57600080fd5b50508035926020909101359150565b60008060408385031215612c9157600080fd5b82359150612ca1602084016129f0565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ceb5783516001600160a01b031683529284019291840191600101612cc6565b50909695505050505050565b600060208284031215612d0957600080fd5b610f54826129f0565b80356001600160601b0381168114612a0757600080fd5b600080600060608486031215612d3e57600080fd5b83359250612d4e602085016129f0565b9150612d5c60408501612d12565b90509250925092565b60006001600160401b03831115612d7e57612d7e612a36565b612d91601f8401601f1916602001612a74565b9050828152838383011115612da557600080fd5b828260208301376000602084830101529392505050565b600060208284031215612dce57600080fd5b81356001600160401b03811115612de457600080fd5b8201601f81018413612df557600080fd5b61168184823560208401612d65565b60008060408385031215612e1757600080fd5b612e20836129f0565b9150612ca160208401612d12565b8015158114610f2457600080fd5b60008060408385031215612e4f57600080fd5b612e58836129f0565b91506020830135612e6881612e2e565b809150509250929050565b60008083601f840112612e8557600080fd5b5081356001600160401b03811115612e9c57600080fd5b6020830191508360208260051b8501011115610a9857600080fd5b60008060008060608587031215612ecd57600080fd5b84356001600160401b03811115612ee357600080fd5b612eef87828801612e73565b9095509350612f029050602086016129f0565b9150612f1060408601612d12565b905092959194509250565b60008060008060808587031215612f3157600080fd5b612f3a856129f0565b9350612f48602086016129f0565b92506040850135915060608501356001600160401b03811115612f6a57600080fd5b8501601f81018713612f7b57600080fd5b612f8a87823560208401612d65565b91505092959194509250565b60008060208385031215612fa957600080fd5b82356001600160401b03811115612fbf57600080fd5b612fcb85828601612e73565b90969095509350505050565b60008060408385031215612fea57600080fd5b612ff3836129f0565b9150612ca1602084016129f0565b6000808335601e1984360301811261301857600080fd5b8301803591506001600160401b0382111561303257600080fd5b6020019150600581901b3603821315610a9857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161308857613088613060565b5060010190565b600181811c908216806130a357607f821691505b6020821081036130c357634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130db57600080fd5b8151610f5481612e2e565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761074d5761074d613060565b60008261316757634e487b7160e01b600052601260045260246000fd5b500490565b60008161317b5761317b613060565b506000190190565b601f82111561096257600081815260208120601f850160051c810160208610156131aa5750805b601f850160051c820191505b81811015611237578281556001016131b6565b81516001600160401b038111156131e2576131e2612a36565b6131f6816131f0845461308f565b84613183565b602080601f83116001811461322b57600084156132135750858301515b600019600386901b1c1916600185901b178555611237565b600085815260208120601f198616915b8281101561325a5788860151825594840194600190910190840161323b565b50858210156132785787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161329a818460208801612974565b8351908301906132ae818360208801612974565b01949350505050565b8082018082111561074d5761074d613060565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161339e816017850160208801612974565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516133cf816028840160208801612974565b01602801949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061345390830184612998565b9695505050505050565b60006020828403121561346f57600080fd5b8151610f5481612941565b8181038181111561074d5761074d613060565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b011c76f17319aab20d598a27be80ad3891d73e102d2a5a5fca6210f067ce45564736f6c63430008110033";
32781
+ const _bytecode$1 = "0x60806040523480156200001157600080fd5b5060405162003c7338038062003c73833981016040819052620000349162000506565b8787878787878787868660036200004c838262000699565b5060046200005b828262000699565b506200006d91506000905089620000b8565b620000798282620000fb565b620000848362000200565b600c62000092868262000699565b50600b620000a1858262000699565b505050505050505050505050505050505062000790565b620000cf8282620002f960201b6200135e1760201c565b6000828152600160209081526040909120620000f6918390620013e26200039a821b17901c565b505050565b6127106001600160601b03821611156200016f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000166565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000765565b620002905760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000396576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003b1836001600160a01b038416620003ba565b90505b92915050565b60008181526001830160205260408120546200040357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003b4565b506000620003b4565b80516001600160a01b03811681146200042457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045157600080fd5b81516001600160401b03808211156200046e576200046e62000429565b604051601f8301601f19908116603f0116810190828211818310171562000499576200049962000429565b81604052838152602092508683858801011115620004b657600080fd5b600091505b83821015620004da5785820183015181830184015290820190620004bb565b600093810190920192909252949350505050565b80516001600160601b03811681146200042457600080fd5b600080600080600080600080610100898b0312156200052457600080fd5b6200052f896200040c565b60208a01519098506001600160401b03808211156200054d57600080fd5b6200055b8c838d016200043f565b985060408b01519150808211156200057257600080fd5b620005808c838d016200043f565b975060608b01519150808211156200059757600080fd5b620005a58c838d016200043f565b965060808b0151915080821115620005bc57600080fd5b50620005cb8b828c016200043f565b945050620005dc60a08a016200040c565b9250620005ec60c08a016200040c565b9150620005fc60e08a01620004ee565b90509295985092959890939650565b600181811c908216806200062057607f821691505b6020821081036200064157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f657600081815260208120601f850160051c81016020861015620006705750805b601f850160051c820191505b8181101562000691578281556001016200067c565b505050505050565b81516001600160401b03811115620006b557620006b562000429565b620006cd81620006c684546200060b565b8462000647565b602080601f831160018114620007055760008415620006ec5750858301515b600019600386901b1c1916600185901b17855562000691565b600085815260208120601f198616915b82811015620007365788860151825594840194600190910190840162000715565b5085821015620007555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077857600080fd5b815180151581146200078957600080fd5b9392505050565b6134d380620007a06000396000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806369e2f0fb11610167578063a217fddf116100ce578063d539139311610087578063d5391393146105da578063d547741f146105ef578063e4623c1b14610602578063e4e18f6d14610615578063e8a3d48514610628578063e985e9c51461063057600080fd5b8063a217fddf14610573578063a22cb4651461057b578063a70128161461058e578063b88d4fde146105a1578063c87b56dd146105b4578063ca15c873146105c757600080fd5b806391d148541161012057806391d148541461050c578063938e3d7b1461051f57806395d89b41146105325780639e2641a31461053a5780639f15d7001461054d578063a14481941461056057600080fd5b806369e2f0fb146104a55780636c0360eb146104b857806370a08231146104c057806374f16a81146104d3578063885e7a08146104e65780639010d07c146104f957600080fd5b80632f2ff15d1161020b57806340c10f19116101c457806340c10f191461043357806342842e0e1461044657806342966c6814610459578063439aed341461046c57806355f804b31461047f5780636352211e1461049257600080fd5b80632f2ff15d146103c957806331ae450b146103dc57806336568abe146103f15780633dd1eb61146104045780633e769acd146104175780633eaaf86b1461042a57600080fd5b806318160ddd1161025d57806318160ddd14610329578063234af0461461033b57806323b872dd1461034e578063248a9ca31461036157806329326f29146103845780632a55205a1461039757600080fd5b80628ad9461461029957806301ffc9a7146102ae57806306fdde03146102d6578063081812fc146102eb578063095ea7b314610316575b600080fd5b6102ac6102a7366004612901565b61066c565b005b6102c16102bc366004612951565b610742565b60405190151581526020015b60405180910390f35b6102de610753565b6040516102cd91906129be565b6102fe6102f93660046129d1565b6107e5565b6040516001600160a01b0390911681526020016102cd565b6102ac610324366004612a06565b61080c565b600d545b6040519081526020016102cd565b6102ac610349366004612bd2565b610967565b6102ac61035c366004612c1a565b6109bf565b61032d61036f3660046129d1565b60009081526020819052604090206001015490565b6002546102fe906001600160a01b031681565b6103aa6103a5366004612c56565b6109f1565b604080516001600160a01b0390931683526020830191909152016102cd565b6102ac6103d7366004612c78565b610a9f565b6103e4610ac4565b6040516102cd9190612ca4565b6102ac6103ff366004612c78565b610b72565b6102ac610412366004612cf1565b610bec565b6102ac610425366004612bd2565b610c0f565b61032d600d5481565b6102ac610441366004612a06565b610c9b565b6102ac610454366004612c1a565b610cd7565b6102ac6104673660046129d1565b610cf2565b6102ac61047a366004612d23565b610d30565b6102ac61048d366004612db6565b610d59565b6102fe6104a03660046129d1565b610d70565b6102ac6104b3366004612cf1565b610dd0565b6102de610df3565b61032d6104ce366004612cf1565b610e81565b6102ac6104e1366004612bd2565b610f07565b6102ac6104f4366004612dfe565b610f13565b6102fe610507366004612c56565b610f28565b6102c161051a366004612c78565b610f47565b6102ac61052d366004612db6565b610f70565b6102de610f87565b6102ac610548366004612bd2565b610f96565b6102ac61055b366004612a06565b610fee565b6102ac61056e366004612a06565b611048565b61032d600081565b6102ac610589366004612e36565b61107a565b6102ac61059c366004612eb1565b6111cb565b6102ac6105af366004612f15565b61122b565b6102de6105c23660046129d1565b61125d565b61032d6105d53660046129d1565b6112c3565b61032d6a4d494e5445525f524f4c4560a81b81565b6102ac6105fd366004612c78565b6112da565b6102ac610610366004612f90565b6112ff565b6102ac610623366004612cf1565b61133d565b6102de611351565b6102c161063e366004612fd1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6106796020820182612ffb565b90506106886040830183612ffb565b9050146106a85760405163359a1bc360e01b815260040160405180910390fd5b60005b6106b86040830183612ffb565b905081101561073e5761072c6106d16020840184612cf1565b6106de6020850185612ffb565b848181106106ee576106ee613044565b90506020020160208101906107039190612cf1565b6107106040860186612ffb565b8581811061072057610720613044565b90506020020135610cd7565b8061073681613070565b9150506106ab565b5050565b600061074d826113f7565b92915050565b60606003805461076290613089565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90613089565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b5050505050905090565b60006107f08261141c565b506000908152600760205260409020546001600160a01b031690565b81333b1580159061088657506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906130c3565b155b156108ab5760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906130c3565b155b15610958576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b610962838361147b565b505050565b6a4d494e5445525f524f4c4560a81b61097f8161158b565b60005b8251811015610962576109ad8382815181106109a0576109a0613044565b6020026020010151611595565b806109b781613070565b915050610982565b6109ca335b82611624565b6109e65760405162461bcd60e51b81526004016108a2906130e0565b6109628383836116a3565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a665750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a85906001600160601b03168761312d565b610a8f9190613144565b91519350909150505b9250929050565b600082815260208190526040902060010154610aba8161158b565b61096283836118aa565b60606000610ad1816112c3565b90506000816001600160401b03811115610aed57610aed612a30565b604051908082528060200260200182016040528015610b16578160200160208202803683370190505b50905060005b82811015610b6b57610b2f600082610f28565b828281518110610b4157610b41613044565b6001600160a01b039092166020928302919091019091015280610b6381613070565b915050610b1c565b5092915050565b6001600160a01b0381163314610be25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108a2565b61073e82826118cc565b6000610bf78161158b565b61073e6a4d494e5445525f524f4c4560a81b83610a9f565b60005b815181101561073e576000828281518110610c2f57610c2f613044565b6020026020010151905060005b816020015151811015610c8657610c74826000015183602001518381518110610c6757610c67613044565b6020026020010151610fee565b80610c7e81613070565b915050610c3c565b50508080610c9390613070565b915050610c12565b6a4d494e5445525f524f4c4560a81b610cb38161158b565b610cbd83836118ee565b600d8054906000610ccd83613070565b9190505550505050565b6109628383836040518060200160405280600081525061122b565b610cfb81611935565b600881901c6000908152600e602052604081208054600160ff85161b179055600d805491610d2883613166565b919050555050565b6a4d494e5445525f524f4c4560a81b610d488161158b565b610d53848484611963565b50505050565b6000610d648161158b565b600c61096283826131c3565b6000818152600560205260408120546001600160a01b03168061074d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b6000610ddb8161158b565b61073e6a4d494e5445525f524f4c4560a81b836112da565b600c8054610e0090613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2c90613089565b8015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505081565b60006001600160a01b038216610eeb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a2565b506001600160a01b031660009081526006602052604090205490565b610f1081610c0f565b50565b6000610f1e8161158b565b6109628383611a2e565b6000828152600160205260408120610f409083611ae8565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610f7b8161158b565b600b61096283826131c3565b60606004805461076290613089565b6a4d494e5445525f524f4c4560a81b610fae8161158b565b60005b825181101561096257610fdc838281518110610fcf57610fcf613044565b6020026020010151611af4565b80610fe681613070565b915050610fb1565b6000610ff982610d70565b9050826001600160a01b0316816001600160a01b03161461103f57604051634fefd56160e01b8152600481018390526001600160a01b03821660248201526044016108a2565b61096282610cf2565b6a4d494e5445525f524f4c4560a81b6110608161158b565b610cbd838360405180602001604052806000815250611b6a565b81333b158015906110f457506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f291906130c3565b155b156111145760405163f6fa4cbd60e01b81523360048201526024016108a2565b6001600160a01b0381163b1580159061119857506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119691906130c3565b155b156111c1576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611b9d565b6a4d494e5445525f524f4c4560a81b6111e38161158b565b60005b848110156112235761121186868381811061120357611203613044565b905060200201358585611963565b8061121b81613070565b9150506111e6565b505050505050565b6112353383611624565b6112515760405162461bcd60e51b81526004016108a2906130e0565b610d5384848484611ba8565b60606112688261141c565b6000611272611bdb565b905060008151116112925760405180602001604052806000815250610f40565b8061129c84611bea565b6040516020016112ad929190613282565b6040516020818303038152906040529392505050565b600081815260016020526040812061074d90611c7c565b6000828152602081905260409020600101546112f58161158b565b61096283836118cc565b60005b818110156109625761132b83838381811061131f5761131f613044565b90506020020135610cf2565b8061133581613070565b915050611302565b60006113488161158b565b61073e82611c86565b600b8054610e0090613089565b6113688282610f47565b61073e576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f40836001600160a01b038416611d7b565b60006001600160e01b0319821663152a902d60e11b148061074d575061074d82611dca565b6000818152600560205260409020546001600160a01b0316610f105760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b600061148682610d70565b9050806001600160a01b0316836001600160a01b0316036114f35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a2565b336001600160a01b038216148061150f575061150f813361063e565b6115815760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108a2565b6109628383611e0a565b610f108133611e78565b80516001600160a01b03166115bd576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a576115f88260000151836020015183815181106115eb576115eb613044565b6020026020010151611ed1565b8061160281613070565b9150506115c0565b50806020015151600d5461161e91906132b1565b600d5550565b60008061163083610d70565b9050806001600160a01b0316846001600160a01b0316148061167757506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061169b5750836001600160a01b0316611690846107e5565b6001600160a01b0316145b949350505050565b828233321480159061171e57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906130c3565b155b1561173e5760405163937db65f60e01b81523360048201526024016108a2565b6001600160a01b0382163b158015906117c257506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906130c3565b155b156117eb5760405163f934453160e01b81526001600160a01b03831660048201526024016108a2565b6001600160a01b0381163b1580159061186f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d91906130c3565b155b1561189857604051632a67242160e11b81526001600160a01b03821660048201526024016108a2565b6118a3858585611f18565b5050505050565b6118b4828261135e565b600082815260016020526040902061096290826113e2565b6118d6828261207c565b600082815260016020526040902061096290826120e1565b600881901c6000908152600e6020526040902054600160ff83161b161561192b576040516305dcda1160e51b8152600481018290526024016108a2565b61073e82826120f6565b61193e336109c4565b61195a5760405162461bcd60e51b81526004016108a2906130e0565b610f1081612281565b6127106001600160601b038216111561198e5760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b0382166119e45760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108a2565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600a90529190942093519051909116600160a01b029116179055565b6127106001600160601b0382161115611a595760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b038216611aaf5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108a2565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6000610f408383612316565b80516001600160a01b031615611b1d576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a57611b58826000015183602001518381518110611b4b57611b4b613044565b60200260200101516118ee565b80611b6281613070565b915050611b20565b611b7483836118ee565b611b816000848484612340565b6109625760405162461bcd60e51b81526004016108a29061330e565b61073e338383612441565b611bb38484846116a3565b611bbf84848484612340565b610d535760405162461bcd60e51b81526004016108a29061330e565b6060600c805461076290613089565b60606000611bf78361250f565b60010190506000816001600160401b03811115611c1657611c16612a30565b6040519080825280601f01601f191660200182016040528015611c40576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611c4a57509392505050565b600061074d825490565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf591906130c3565b611d125760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600183016020526040812054611dc25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b60006001600160e01b031982166380ac58cd60e01b1480611dfb57506001600160e01b03198216635b5e139f60e01b145b8061074d575061074d826125e7565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3f82610d70565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e828282610f47565b61073e57611e8f816125f2565b611e9a836020612604565b604051602001611eab929190613360565b60408051601f198184030181529082905262461bcd60e51b82526108a2916004016129be565b600881901c6000908152600e6020526040902054600160ff83161b1615611f0e576040516305dcda1160e51b8152600481018290526024016108a2565b61073e828261279f565b826001600160a01b0316611f2b82610d70565b6001600160a01b031614611f515760405162461bcd60e51b81526004016108a2906133d5565b6001600160a01b038216611fb35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b826001600160a01b0316611fc682610d70565b6001600160a01b031614611fec5760405162461bcd60e51b81526004016108a2906133d5565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6120868282610f47565b1561073e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f40836001600160a01b0384166127b9565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156121b15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156122165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061228c82610d70565b905061229782610d70565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600082600001828154811061232d5761232d613044565b9060005260206000200154905092915050565b60006001600160a01b0384163b1561243657604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061238490339089908890889060040161341a565b6020604051808303816000875af19250505080156123bf575060408051601f3d908101601f191682019092526123bc91810190613457565b60015b61241c573d8080156123ed576040519150601f19603f3d011682016040523d82523d6000602084013e6123f2565b606091505b5080516000036124145760405162461bcd60e51b81526004016108a29061330e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061169b565b506001949350505050565b816001600160a01b0316836001600160a01b0316036124a25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061254e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061257a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061259857662386f26fc10000830492506010015b6305f5e10083106125b0576305f5e100830492506008015b61271083106125c457612710830492506004015b606483106125d6576064830492506002015b600a831061074d5760010192915050565b600061074d826128ac565b606061074d6001600160a01b03831660145b6060600061261383600261312d565b61261e9060026132b1565b6001600160401b0381111561263557612635612a30565b6040519080825280601f01601f19166020018201604052801561265f576020820181803683370190505b509050600360fc1b8160008151811061267a5761267a613044565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a9576126a9613044565b60200101906001600160f81b031916908160001a90535060006126cd84600261312d565b6126d89060016132b1565b90505b6001811115612750576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061270c5761270c613044565b1a60f81b82828151811061272257612722613044565b60200101906001600160f81b031916908160001a90535060049490941c9361274981613166565b90506126db565b508315610f405760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a2565b61073e828260405180602001604052806000815250611b6a565b600081815260018301602052604081205480156128a25760006127dd600183613474565b85549091506000906127f190600190613474565b905081811461285657600086600001828154811061281157612811613044565b906000526020600020015490508087600001848154811061283457612834613044565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061286757612867613487565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b60006001600160e01b03198216635a05180f60e01b148061074d575061074d8260006001600160e01b03198216637965db0b60e01b148061074d57506301ffc9a760e01b6001600160e01b031983161461074d565b60006020828403121561291357600080fd5b81356001600160401b0381111561292957600080fd5b820160608185031215610f4057600080fd5b6001600160e01b031981168114610f1057600080fd5b60006020828403121561296357600080fd5b8135610f408161293b565b60005b83811015612989578181015183820152602001612971565b50506000910152565b600081518084526129aa81602086016020860161296e565b601f01601f19169290920160200192915050565b602081526000610f406020830184612992565b6000602082840312156129e357600080fd5b5035919050565b80356001600160a01b0381168114612a0157600080fd5b919050565b60008060408385031215612a1957600080fd5b612a22836129ea565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a6857612a68612a30565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612a9657612a96612a30565b604052919050565b60006001600160401b03821115612ab757612ab7612a30565b5060051b60200190565b6000612ad4612acf84612a9e565b612a6e565b8381529050602080820190600585811b850187811115612af357600080fd5b855b81811015612bc65780356001600160401b0380821115612b155760008081fd5b908801906040828c031215612b2a5760008081fd5b612b32612a46565b612b3b836129ea565b81528683013582811115612b4f5760008081fd5b8084019350508b601f840112612b6757600091508182fd5b82359150612b77612acf83612a9e565b82815291861b8301870191878101908d841115612b945760008081fd5b938801935b83851015612bb257843582529388019390880190612b99565b828901525087525050938301938301612af5565b50505050509392505050565b600060208284031215612be457600080fd5b81356001600160401b03811115612bfa57600080fd5b8201601f81018413612c0b57600080fd5b61169b84823560208401612ac1565b600080600060608486031215612c2f57600080fd5b612c38846129ea565b9250612c46602085016129ea565b9150604084013590509250925092565b60008060408385031215612c6957600080fd5b50508035926020909101359150565b60008060408385031215612c8b57600080fd5b82359150612c9b602084016129ea565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ce55783516001600160a01b031683529284019291840191600101612cc0565b50909695505050505050565b600060208284031215612d0357600080fd5b610f40826129ea565b80356001600160601b0381168114612a0157600080fd5b600080600060608486031215612d3857600080fd5b83359250612d48602085016129ea565b9150612d5660408501612d0c565b90509250925092565b60006001600160401b03831115612d7857612d78612a30565b612d8b601f8401601f1916602001612a6e565b9050828152838383011115612d9f57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612dc857600080fd5b81356001600160401b03811115612dde57600080fd5b8201601f81018413612def57600080fd5b61169b84823560208401612d5f565b60008060408385031215612e1157600080fd5b612e1a836129ea565b9150612c9b60208401612d0c565b8015158114610f1057600080fd5b60008060408385031215612e4957600080fd5b612e52836129ea565b91506020830135612e6281612e28565b809150509250929050565b60008083601f840112612e7f57600080fd5b5081356001600160401b03811115612e9657600080fd5b6020830191508360208260051b8501011115610a9857600080fd5b60008060008060608587031215612ec757600080fd5b84356001600160401b03811115612edd57600080fd5b612ee987828801612e6d565b9095509350612efc9050602086016129ea565b9150612f0a60408601612d0c565b905092959194509250565b60008060008060808587031215612f2b57600080fd5b612f34856129ea565b9350612f42602086016129ea565b92506040850135915060608501356001600160401b03811115612f6457600080fd5b8501601f81018713612f7557600080fd5b612f8487823560208401612d5f565b91505092959194509250565b60008060208385031215612fa357600080fd5b82356001600160401b03811115612fb957600080fd5b612fc585828601612e6d565b90969095509350505050565b60008060408385031215612fe457600080fd5b612fed836129ea565b9150612c9b602084016129ea565b6000808335601e1984360301811261301257600080fd5b8301803591506001600160401b0382111561302c57600080fd5b6020019150600581901b3603821315610a9857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016130825761308261305a565b5060010190565b600181811c9082168061309d57607f821691505b6020821081036130bd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130d557600080fd5b8151610f4081612e28565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761074d5761074d61305a565b60008261316157634e487b7160e01b600052601260045260246000fd5b500490565b6000816131755761317561305a565b506000190190565b601f82111561096257600081815260208120601f850160051c810160208610156131a45750805b601f850160051c820191505b81811015611223578281556001016131b0565b81516001600160401b038111156131dc576131dc612a30565b6131f0816131ea8454613089565b8461317d565b602080601f831160018114613225576000841561320d5750858301515b600019600386901b1c1916600185901b178555611223565b600085815260208120601f198616915b8281101561325457888601518255948401946001909101908401613235565b50858210156132725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161329481846020880161296e565b8351908301906132a881836020880161296e565b01949350505050565b8082018082111561074d5761074d61305a565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161339881601785016020880161296e565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516133c981602884016020880161296e565b01602801949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061344d90830184612992565b9695505050505050565b60006020828403121561346957600080fd5b8151610f408161293b565b8181038181111561074d5761074d61305a565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220db78f674a75be30e896244d83179c8c4f1b45519e52de44c0f337b384795efbc64736f6c63430008110033";
32166
32782
  const isSuperArgs$1 = (xs) => xs.length > 1;
32167
32783
  class ImmutableERC721MintByID__factory extends ContractFactory {
32168
32784
  constructor(...args) {
@@ -32173,11 +32789,11 @@ class ImmutableERC721MintByID__factory extends ContractFactory {
32173
32789
  super(_abi$1, _bytecode$1, args[0]);
32174
32790
  }
32175
32791
  }
32176
- deploy(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides) {
32177
- return super.deploy(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides || {});
32792
+ deploy(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides) {
32793
+ return super.deploy(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides || {});
32178
32794
  }
32179
- getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides) {
32180
- return super.getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides || {});
32795
+ getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides) {
32796
+ return super.getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides || {});
32181
32797
  }
32182
32798
  attach(address) {
32183
32799
  return super.attach(address);
@@ -32293,9 +32909,7 @@ class ERC721 {
32293
32909
  * @returns the approved address for a token ID, or zero if no address set.
32294
32910
  */
32295
32911
  async getApproved(provider, tokenId, overrides = {}) {
32296
- return await this.contract
32297
- .connect(provider)
32298
- .getApproved(tokenId, overrides);
32912
+ return await this.contract.connect(provider).getApproved(tokenId, overrides);
32299
32913
  }
32300
32914
  /**
32301
32915
  * @returns the role admin address.
@@ -32307,33 +32921,25 @@ class ERC721 {
32307
32921
  * @returns the role member address at a particular index.
32308
32922
  */
32309
32923
  async getRoleMember(provider, role, index, overrides = {}) {
32310
- return await this.contract
32311
- .connect(provider)
32312
- .getRoleMember(role, index, overrides);
32924
+ return await this.contract.connect(provider).getRoleMember(role, index, overrides);
32313
32925
  }
32314
32926
  /**
32315
32927
  * @returns the role member count as a BigNumber.
32316
32928
  */
32317
32929
  async getRoleMemberCount(provider, role, overrides = {}) {
32318
- return await this.contract
32319
- .connect(provider)
32320
- .getRoleMemberCount(role, overrides);
32930
+ return await this.contract.connect(provider).getRoleMemberCount(role, overrides);
32321
32931
  }
32322
32932
  /**
32323
32933
  * @returns a boolean for whether an account has a particular role.
32324
32934
  */
32325
32935
  async hasRole(provider, role, account, overrides = {}) {
32326
- return await this.contract
32327
- .connect(provider)
32328
- .hasRole(role, account, overrides);
32936
+ return await this.contract.connect(provider).hasRole(role, account, overrides);
32329
32937
  }
32330
32938
  /**
32331
32939
  * @returns a booolean that tells whether an operator is approved by a given owner.
32332
32940
  */
32333
32941
  async isApprovedForAll(provider, owner, operator, overrides = {}) {
32334
- return await this.contract
32335
- .connect(provider)
32336
- .isApprovedForAll(owner, operator, overrides);
32942
+ return await this.contract.connect(provider).isApprovedForAll(owner, operator, overrides);
32337
32943
  }
32338
32944
  /**
32339
32945
  * @returns the name of the contract as a string.
@@ -32348,18 +32954,16 @@ class ERC721 {
32348
32954
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
32349
32955
  }
32350
32956
  /**
32351
- * @returns the royalty allowlist as a string.
32957
+ * @returns the operator allowlist as a string.
32352
32958
  */
32353
- async royaltyAllowlist(provider, overrides = {}) {
32354
- return await this.contract.connect(provider).royaltyAllowlist(overrides);
32959
+ async operatorAllowlist(provider, overrides = {}) {
32960
+ return await this.contract.connect(provider).operatorAllowlist(overrides);
32355
32961
  }
32356
32962
  /**
32357
32963
  * @returns the royalty information for a particular tokenId.
32358
32964
  */
32359
32965
  async royaltyInfo(provider, _tokenId, _salePrice, overrides = {}) {
32360
- return await this.contract
32361
- .connect(provider)
32362
- .royaltyInfo(_tokenId, _salePrice, overrides);
32966
+ return await this.contract.connect(provider).royaltyInfo(_tokenId, _salePrice, overrides);
32363
32967
  }
32364
32968
  /**
32365
32969
  * @returns the symbol of the contract as a string.
@@ -32545,10 +33149,10 @@ class ERC721 {
32545
33149
  return await this.contract.populateTransaction.setNFTRoyaltyReceiverBatch(tokenIds, receiver, feeNumerator, overrides);
32546
33150
  }
32547
33151
  /**
32548
- * @returns a populated transaction for the setRoyaltyAllowlistRegistry contract function
33152
+ * @returns a populated transaction for the setOperatorAllowlistRegistry contract function
32549
33153
  */
32550
- async populateSetRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides = {}) {
32551
- return await this.contract.populateTransaction.setRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides);
33154
+ async populateSetOperatorAllowlistRegistry(_operatorAllowlist, overrides = {}) {
33155
+ return await this.contract.populateTransaction.setOperatorAllowlistRegistry(_operatorAllowlist, overrides);
32552
33156
  }
32553
33157
  }
32554
33158
 
@@ -32661,10 +33265,10 @@ class ERC721MintByID {
32661
33265
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
32662
33266
  }
32663
33267
  /**
32664
- * @returns the royalty allowlist as a string.
33268
+ * @returns the operator allowlist as a string.
32665
33269
  */
32666
- async royaltyAllowlist(provider, overrides = {}) {
32667
- return await this.contract.connect(provider).royaltyAllowlist(overrides);
33270
+ async operatorAllowlist(provider, overrides = {}) {
33271
+ return await this.contract.connect(provider).operatorAllowlist(overrides);
32668
33272
  }
32669
33273
  /**
32670
33274
  * @returns the royalty information for a particular tokenId.
@@ -32822,10 +33426,10 @@ class ERC721MintByID {
32822
33426
  return await this.contract.populateTransaction.setNFTRoyaltyReceiverBatch(tokenIds, receiver, feeNumerator, overrides);
32823
33427
  }
32824
33428
  /**
32825
- * @returns a populated transaction for the setRoyaltyAllowlistRegistry contract function
33429
+ * @returns a populated transaction for the setOperatorAllowlistRegistry contract function
32826
33430
  */
32827
- async populateSetRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides = {}) {
32828
- return await this.contract.populateTransaction.setRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides);
33431
+ async populateSetOperatorAllowlistRegistry(_operatorAllowlist, overrides = {}) {
33432
+ return await this.contract.populateTransaction.setOperatorAllowlistRegistry(_operatorAllowlist, overrides);
32829
33433
  }
32830
33434
  }
32831
33435