UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

173 lines (172 loc) 24.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _useCloudListProvider = require("../hooks/use-cloud-list-provider"); var _componentJestUtils = require("test/helpers/component-jest-utils"); var _shareMapModal = _interopRequireDefault(require("./share-map-modal")); var _constants = require("@kepler.gl/constants"); var _react2 = require("@testing-library/react"); var _styledComponents = require("styled-components"); var _reactIntl = require("react-intl"); var _styles = require("@kepler.gl/styles"); var _localization = require("@kepler.gl/localization"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project // @ts-nocheck jest.mock('../hooks/use-cloud-list-provider', function () { return { useCloudListProvider: jest.fn().mockImplementation(function () { return { provider: null, setProvider: jest.fn(), cloudProviders: [] }; }) }; }); var ShareMapUrlModal = (0, _shareMapModal["default"])(); var DEFAULT_PROPS = { isProviderLoading: false, onExport: jest.fn(), providerError: null, successInfo: undefined, onUpdateImageSetting: jest.fn(), cleanupExportImage: jest.fn() }; describe('ShareMapModal', function () { afterEach(function () { jest.clearAllMocks(); }); test('renders only list of providers', function () { var _renderWithTheme = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, DEFAULT_PROPS)), getByText = _renderWithTheme.getByText, queryByTestId = _renderWithTheme.queryByTestId; expect(getByText('modal.shareMap.title')).toBeInTheDocument(); expect(queryByTestId(_constants.dataTestIds.providerShareMap)).toBeNull(); }); test('renders list of provider and sharing section', function () { var mapProvider = { name: 'test provider', icon: jest.fn(), getManagementUrl: jest.fn().mockImplementation(function () { return 'provider.url'; }), listMaps: jest.fn().mockResolvedValue([]), hasSharingUrl: jest.fn().mockImplementation(function () { return true; }) }; _useCloudListProvider.useCloudListProvider.mockImplementation(function () { return { provider: mapProvider, setProvider: jest.fn(), cloudProviders: [] }; }); var _renderWithTheme2 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, DEFAULT_PROPS)), getByText = _renderWithTheme2.getByText, getByTestId = _renderWithTheme2.getByTestId; expect(getByText('modal.shareMap.title')).toBeInTheDocument(); expect(getByTestId(_constants.dataTestIds.providerShareMap)).toBeInTheDocument(); }); test('renders loading when isLoading is set to true', function () { var mapProvider = { name: 'test provider', icon: jest.fn(), getManagementUrl: jest.fn().mockImplementation(function () { return 'provider.url'; }), listMaps: jest.fn().mockResolvedValue([]), hasSharingUrl: jest.fn().mockImplementation(function () { return true; }) }; _useCloudListProvider.useCloudListProvider.mockImplementation(function () { return { provider: mapProvider, setProvider: jest.fn(), cloudProviders: [] }; }); var providerLoadingProps = _objectSpread(_objectSpread({}, DEFAULT_PROPS), {}, { isProviderLoading: true }); var _renderWithTheme3 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, providerLoadingProps)), getByText = _renderWithTheme3.getByText; expect(getByText('modal.statusPanel.mapUploading')).toBeInTheDocument(); }); test('calls onExport when provider is set correctly', function () { var mapProvider = { name: 'test provider', icon: jest.fn(), getManagementUrl: jest.fn().mockImplementation(function () { return 'provider.url'; }), listMaps: jest.fn().mockResolvedValue([]), hasSharingUrl: jest.fn().mockImplementation(function () { return true; }) }; _useCloudListProvider.useCloudListProvider.mockImplementation(function () { return { provider: mapProvider, setProvider: jest.fn(), cloudProviders: [] }; }); (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, DEFAULT_PROPS)); expect(DEFAULT_PROPS.onExport).toHaveBeenCalled(); }); test('calls onExport after provider was updated', function () { var _renderWithTheme4 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, DEFAULT_PROPS)), rerender = _renderWithTheme4.rerender; var mapProvider = { name: 'test provider', icon: jest.fn(), getManagementUrl: jest.fn().mockImplementation(function () { return 'provider.url'; }), listMaps: jest.fn().mockResolvedValue([]), hasSharingUrl: jest.fn().mockImplementation(function () { return true; }) }; _useCloudListProvider.useCloudListProvider.mockImplementation(function () { return { provider: mapProvider, setProvider: jest.fn(), cloudProviders: [] }; }); (0, _react2.act)(function () { rerender( /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, { theme: _styles.theme }, /*#__PURE__*/_react["default"].createElement(_reactIntl.IntlProvider, { locale: "en", messages: _localization.messages }, /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, DEFAULT_PROPS)))); }); expect(DEFAULT_PROPS.onExport).toHaveBeenCalled(); }); it('displays share URL when provided', function () { var shareUrl = 'http://example.com'; var _renderWithTheme5 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, (0, _extends2["default"])({}, DEFAULT_PROPS, { successInfo: { shareUrl: shareUrl } }))), getByText = _renderWithTheme5.getByText; expect(getByText('Share Url')).toBeInTheDocument(); }); it('renders errors', function () { var _renderWithTheme6 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(ShareMapUrlModal, (0, _extends2["default"])({}, DEFAULT_PROPS, { providerError: new Error('timeout') }))), getByText = _renderWithTheme6.getByText; expect(getByText('modal.statusPanel.error')).toBeInTheDocument(); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl91c2VDbG91ZExpc3RQcm92aWRlciIsIl9jb21wb25lbnRKZXN0VXRpbHMiLCJfc2hhcmVNYXBNb2RhbCIsIl9jb25zdGFudHMiLCJfcmVhY3QyIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfcmVhY3RJbnRsIiwiX3N0eWxlcyIsIl9sb2NhbGl6YXRpb24iLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImplc3QiLCJtb2NrIiwidXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsInByb3ZpZGVyIiwic2V0UHJvdmlkZXIiLCJjbG91ZFByb3ZpZGVycyIsIlNoYXJlTWFwVXJsTW9kYWwiLCJTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSIsIkRFRkFVTFRfUFJPUFMiLCJpc1Byb3ZpZGVyTG9hZGluZyIsIm9uRXhwb3J0IiwicHJvdmlkZXJFcnJvciIsInN1Y2Nlc3NJbmZvIiwidW5kZWZpbmVkIiwib25VcGRhdGVJbWFnZVNldHRpbmciLCJjbGVhbnVwRXhwb3J0SW1hZ2UiLCJkZXNjcmliZSIsImFmdGVyRWFjaCIsImNsZWFyQWxsTW9ja3MiLCJ0ZXN0IiwiX3JlbmRlcldpdGhUaGVtZSIsInJlbmRlcldpdGhUaGVtZSIsImNyZWF0ZUVsZW1lbnQiLCJnZXRCeVRleHQiLCJxdWVyeUJ5VGVzdElkIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJkYXRhVGVzdElkcyIsInByb3ZpZGVyU2hhcmVNYXAiLCJ0b0JlTnVsbCIsIm1hcFByb3ZpZGVyIiwibmFtZSIsImljb24iLCJnZXRNYW5hZ2VtZW50VXJsIiwibGlzdE1hcHMiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsImhhc1NoYXJpbmdVcmwiLCJfcmVuZGVyV2l0aFRoZW1lMiIsImdldEJ5VGVzdElkIiwicHJvdmlkZXJMb2FkaW5nUHJvcHMiLCJfcmVuZGVyV2l0aFRoZW1lMyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJfcmVuZGVyV2l0aFRoZW1lNCIsInJlcmVuZGVyIiwiYWN0IiwiVGhlbWVQcm92aWRlciIsInRoZW1lIiwiSW50bFByb3ZpZGVyIiwibG9jYWxlIiwibWVzc2FnZXMiLCJpdCIsInNoYXJlVXJsIiwiX3JlbmRlcldpdGhUaGVtZTUiLCJfZXh0ZW5kczIiLCJfcmVuZGVyV2l0aFRoZW1lNiIsIkVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGFscy9zaGFyZS1tYXAtbW9kYWwuc3BlYy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUNsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5pbXBvcnQge3JlbmRlcldpdGhUaGVtZX0gZnJvbSAndGVzdC9oZWxwZXJzL2NvbXBvbmVudC1qZXN0LXV0aWxzJztcbmltcG9ydCBTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSBmcm9tICcuL3NoYXJlLW1hcC1tb2RhbCc7XG5pbXBvcnQge2RhdGFUZXN0SWRzfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2FjdH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQge1RoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7SW50bFByb3ZpZGVyfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7dGhlbWV9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7bWVzc2FnZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuamVzdC5tb2NrKCcuLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcicsICgpID0+ICh7XG4gIHVzZUNsb3VkTGlzdFByb3ZpZGVyOiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgcHJvdmlkZXI6IG51bGwsXG4gICAgc2V0UHJvdmlkZXI6IGplc3QuZm4oKSxcbiAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgfSkpXG59KSk7XG5cbmNvbnN0IFNoYXJlTWFwVXJsTW9kYWwgPSBTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSgpO1xuXG5jb25zdCBERUZBVUxUX1BST1BTID0ge1xuICBpc1Byb3ZpZGVyTG9hZGluZzogZmFsc2UsXG4gIG9uRXhwb3J0OiBqZXN0LmZuKCksXG4gIHByb3ZpZGVyRXJyb3I6IG51bGwsXG4gIHN1Y2Nlc3NJbmZvOiB1bmRlZmluZWQsXG4gIG9uVXBkYXRlSW1hZ2VTZXR0aW5nOiBqZXN0LmZuKCksXG4gIGNsZWFudXBFeHBvcnRJbWFnZTogamVzdC5mbigpXG59O1xuXG5kZXNjcmliZSgnU2hhcmVNYXBNb2RhbCcsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBvbmx5IGxpc3Qgb2YgcHJvdmlkZXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IHtnZXRCeVRleHQsIHF1ZXJ5QnlUZXN0SWR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTaGFyZU1hcFVybE1vZGFsIHsuLi5ERUZBVUxUX1BST1BTfSAvPik7XG4gICAgZXhwZWN0KGdldEJ5VGV4dCgnbW9kYWwuc2hhcmVNYXAudGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3QocXVlcnlCeVRlc3RJZChkYXRhVGVzdElkcy5wcm92aWRlclNoYXJlTWFwKSkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBsaXN0IG9mIHByb3ZpZGVyIGFuZCBzaGFyaW5nIHNlY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgbWFwUHJvdmlkZXIgPSB7XG4gICAgICBuYW1lOiAndGVzdCBwcm92aWRlcicsXG4gICAgICBpY29uOiBqZXN0LmZuKCksXG4gICAgICBnZXRNYW5hZ2VtZW50VXJsOiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICdwcm92aWRlci51cmwnKSxcbiAgICAgIGxpc3RNYXBzOiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoW10pLFxuICAgICAgaGFzU2hhcmluZ1VybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB0cnVlKVxuICAgIH07XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogbWFwUHJvdmlkZXIsXG4gICAgICBzZXRQcm92aWRlcjogamVzdC5mbigpLFxuICAgICAgY2xvdWRQcm92aWRlcnM6IFtdXG4gICAgfSkpO1xuXG4gICAgY29uc3Qge2dldEJ5VGV4dCwgZ2V0QnlUZXN0SWR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTaGFyZU1hcFVybE1vZGFsIHsuLi5ERUZBVUxUX1BST1BTfSAvPik7XG4gICAgZXhwZWN0KGdldEJ5VGV4dCgnbW9kYWwuc2hhcmVNYXAudGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3QoZ2V0QnlUZXN0SWQoZGF0YVRlc3RJZHMucHJvdmlkZXJTaGFyZU1hcCkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JlbmRlcnMgbG9hZGluZyB3aGVuIGlzTG9hZGluZyBpcyBzZXQgdG8gdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCBtYXBQcm92aWRlciA9IHtcbiAgICAgIG5hbWU6ICd0ZXN0IHByb3ZpZGVyJyxcbiAgICAgIGljb246IGplc3QuZm4oKSxcbiAgICAgIGdldE1hbmFnZW1lbnRVcmw6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gJ3Byb3ZpZGVyLnVybCcpLFxuICAgICAgbGlzdE1hcHM6IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShbXSksXG4gICAgICBoYXNTaGFyaW5nVXJsOiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHRydWUpXG4gICAgfTtcbiAgICB1c2VDbG91ZExpc3RQcm92aWRlci5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICAgIHByb3ZpZGVyOiBtYXBQcm92aWRlcixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG5cbiAgICBjb25zdCBwcm92aWRlckxvYWRpbmdQcm9wcyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfUFJPUFMsXG4gICAgICBpc1Byb3ZpZGVyTG9hZGluZzogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZSg8U2hhcmVNYXBVcmxNb2RhbCB7Li4ucHJvdmlkZXJMb2FkaW5nUHJvcHN9IC8+KTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5zdGF0dXNQYW5lbC5tYXBVcGxvYWRpbmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FsbHMgb25FeHBvcnQgd2hlbiBwcm92aWRlciBpcyBzZXQgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbnN0IG1hcFByb3ZpZGVyID0ge1xuICAgICAgbmFtZTogJ3Rlc3QgcHJvdmlkZXInLFxuICAgICAgaWNvbjogamVzdC5mbigpLFxuICAgICAgZ2V0TWFuYWdlbWVudFVybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAncHJvdmlkZXIudXJsJyksXG4gICAgICBsaXN0TWFwczogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKFtdKSxcbiAgICAgIGhhc1NoYXJpbmdVcmw6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdHJ1ZSlcbiAgICB9O1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IG1hcFByb3ZpZGVyLFxuICAgICAgc2V0UHJvdmlkZXI6IGplc3QuZm4oKSxcbiAgICAgIGNsb3VkUHJvdmlkZXJzOiBbXVxuICAgIH0pKTtcblxuICAgIHJlbmRlcldpdGhUaGVtZSg8U2hhcmVNYXBVcmxNb2RhbCB7Li4uREVGQVVMVF9QUk9QU30gLz4pO1xuXG4gICAgZXhwZWN0KERFRkFVTFRfUFJPUFMub25FeHBvcnQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FsbHMgb25FeHBvcnQgYWZ0ZXIgcHJvdmlkZXIgd2FzIHVwZGF0ZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qge3JlcmVuZGVyfSA9IHJlbmRlcldpdGhUaGVtZSg8U2hhcmVNYXBVcmxNb2RhbCB7Li4uREVGQVVMVF9QUk9QU30gLz4pO1xuXG4gICAgY29uc3QgbWFwUHJvdmlkZXIgPSB7XG4gICAgICBuYW1lOiAndGVzdCBwcm92aWRlcicsXG4gICAgICBpY29uOiBqZXN0LmZuKCksXG4gICAgICBnZXRNYW5hZ2VtZW50VXJsOiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICdwcm92aWRlci51cmwnKSxcbiAgICAgIGxpc3RNYXBzOiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoW10pLFxuICAgICAgaGFzU2hhcmluZ1VybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB0cnVlKVxuICAgIH07XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogbWFwUHJvdmlkZXIsXG4gICAgICBzZXRQcm92aWRlcjogamVzdC5mbigpLFxuICAgICAgY2xvdWRQcm92aWRlcnM6IFtdXG4gICAgfSkpO1xuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICAgIDxJbnRsUHJvdmlkZXIgbG9jYWxlPVwiZW5cIiBtZXNzYWdlcz17bWVzc2FnZXN9PlxuICAgICAgICAgICAgPFNoYXJlTWFwVXJsTW9kYWwgey4uLkRFRkFVTFRfUFJPUFN9IC8+XG4gICAgICAgICAgPC9JbnRsUHJvdmlkZXI+XG4gICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBleHBlY3QoREVGQVVMVF9QUk9QUy5vbkV4cG9ydCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdCgnZGlzcGxheXMgc2hhcmUgVVJMIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2hhcmVVcmwgPSAnaHR0cDovL2V4YW1wbGUuY29tJztcbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZShcbiAgICAgIDxTaGFyZU1hcFVybE1vZGFsIHsuLi5ERUZBVUxUX1BST1BTfSBzdWNjZXNzSW5mbz17e3NoYXJlVXJsfX0gLz5cbiAgICApO1xuICAgIGV4cGVjdChnZXRCeVRleHQoJ1NoYXJlIFVybCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyBlcnJvcnMnLCAoKSA9PiB7XG4gICAgY29uc3Qge2dldEJ5VGV4dH0gPSByZW5kZXJXaXRoVGhlbWUoXG4gICAgICA8U2hhcmVNYXBVcmxNb2RhbCB7Li4uREVGQVVMVF9QUk9QU30gcHJvdmlkZXJFcnJvcj17bmV3IEVycm9yKCd0aW1lb3V0Jyl9IC8+XG4gICAgKTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5zdGF0dXNQYW5lbC5lcnJvcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUlBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLHFCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0saUJBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGFBQUEsR0FBQVQsT0FBQTtBQUFpRCxTQUFBVSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUQsQ0FBQSxJQWJqRDtBQUNBO0FBRUE7QUFZQW9CLElBQUksQ0FBQ0MsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO0VBQUEsT0FBTztJQUNuREMsb0JBQW9CLEVBQUVGLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUM7TUFBQSxPQUFPO1FBQ3hEQyxRQUFRLEVBQUUsSUFBSTtRQUNkQyxXQUFXLEVBQUVOLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7UUFDdEJJLGNBQWMsRUFBRTtNQUNsQixDQUFDO0lBQUEsQ0FBQztFQUNKLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNQyxnQkFBZ0IsR0FBRyxJQUFBQyx5QkFBdUIsRUFBQyxDQUFDO0FBRWxELElBQU1DLGFBQWEsR0FBRztFQUNwQkMsaUJBQWlCLEVBQUUsS0FBSztFQUN4QkMsUUFBUSxFQUFFWixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO0VBQ25CVSxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsV0FBVyxFQUFFQyxTQUFTO0VBQ3RCQyxvQkFBb0IsRUFBRWhCLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7RUFDL0JjLGtCQUFrQixFQUFFakIsSUFBSSxDQUFDRyxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVEZSxRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07RUFDOUJDLFNBQVMsQ0FBQyxZQUFNO0lBQ2RuQixJQUFJLENBQUNvQixhQUFhLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRkMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLFlBQU07SUFDM0MsSUFBQUMsZ0JBQUEsR0FBbUMsSUFBQUMsbUNBQWUsZ0JBQUN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsRUFBS0UsYUFBZ0IsQ0FBQyxDQUFDO01BQXBGZSxTQUFTLEdBQUFILGdCQUFBLENBQVRHLFNBQVM7TUFBRUMsYUFBYSxHQUFBSixnQkFBQSxDQUFiSSxhQUFhO0lBQy9CQyxNQUFNLENBQUNGLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUNHLGlCQUFpQixDQUFDLENBQUM7SUFDN0RELE1BQU0sQ0FBQ0QsYUFBYSxDQUFDRyxzQkFBVyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLENBQUMsQ0FBQztFQUVGVixJQUFJLENBQUMsOENBQThDLEVBQUUsWUFBTTtJQUN6RCxJQUFNVyxXQUFXLEdBQUc7TUFDbEJDLElBQUksRUFBRSxlQUFlO01BQ3JCQyxJQUFJLEVBQUVsQyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO01BQ2ZnQyxnQkFBZ0IsRUFBRW5DLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUM7UUFBQSxPQUFNLGNBQWM7TUFBQSxFQUFDO01BQ3BFZ0MsUUFBUSxFQUFFcEMsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDa0MsaUJBQWlCLENBQUMsRUFBRSxDQUFDO01BQ3pDQyxhQUFhLEVBQUV0QyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUNDLGtCQUFrQixDQUFDO1FBQUEsT0FBTSxJQUFJO01BQUE7SUFDeEQsQ0FBQztJQUNERiwwQ0FBb0IsQ0FBQ0Usa0JBQWtCLENBQUM7TUFBQSxPQUFPO1FBQzdDQyxRQUFRLEVBQUUyQixXQUFXO1FBQ3JCMUIsV0FBVyxFQUFFTixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCSSxjQUFjLEVBQUU7TUFDbEIsQ0FBQztJQUFBLENBQUMsQ0FBQztJQUVILElBQUFnQyxpQkFBQSxHQUFpQyxJQUFBaEIsbUNBQWUsZ0JBQUN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsRUFBS0UsYUFBZ0IsQ0FBQyxDQUFDO01BQWxGZSxTQUFTLEdBQUFjLGlCQUFBLENBQVRkLFNBQVM7TUFBRWUsV0FBVyxHQUFBRCxpQkFBQSxDQUFYQyxXQUFXO0lBQzdCYixNQUFNLENBQUNGLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUNHLGlCQUFpQixDQUFDLENBQUM7SUFDN0RELE1BQU0sQ0FBQ2EsV0FBVyxDQUFDWCxzQkFBVyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNGLGlCQUFpQixDQUFDLENBQUM7RUFDdkUsQ0FBQyxDQUFDO0VBRUZQLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxZQUFNO0lBQzFELElBQU1XLFdBQVcsR0FBRztNQUNsQkMsSUFBSSxFQUFFLGVBQWU7TUFDckJDLElBQUksRUFBRWxDLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7TUFDZmdDLGdCQUFnQixFQUFFbkMsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDQyxrQkFBa0IsQ0FBQztRQUFBLE9BQU0sY0FBYztNQUFBLEVBQUM7TUFDcEVnQyxRQUFRLEVBQUVwQyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUNrQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7TUFDekNDLGFBQWEsRUFBRXRDLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUM7UUFBQSxPQUFNLElBQUk7TUFBQTtJQUN4RCxDQUFDO0lBQ0RGLDBDQUFvQixDQUFDRSxrQkFBa0IsQ0FBQztNQUFBLE9BQU87UUFDN0NDLFFBQVEsRUFBRTJCLFdBQVc7UUFDckIxQixXQUFXLEVBQUVOLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7UUFDdEJJLGNBQWMsRUFBRTtNQUNsQixDQUFDO0lBQUEsQ0FBQyxDQUFDO0lBRUgsSUFBTWtDLG9CQUFvQixHQUFBakQsYUFBQSxDQUFBQSxhQUFBLEtBQ3JCa0IsYUFBYTtNQUNoQkMsaUJBQWlCLEVBQUU7SUFBSSxFQUN4QjtJQUVELElBQUErQixpQkFBQSxHQUFvQixJQUFBbkIsbUNBQWUsZ0JBQUN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsRUFBS2lDLG9CQUF1QixDQUFDLENBQUM7TUFBNUVoQixTQUFTLEdBQUFpQixpQkFBQSxDQUFUakIsU0FBUztJQUNoQkUsTUFBTSxDQUFDRixTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDRyxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3pFLENBQUMsQ0FBQztFQUVGUCxJQUFJLENBQUMsK0NBQStDLEVBQUUsWUFBTTtJQUMxRCxJQUFNVyxXQUFXLEdBQUc7TUFDbEJDLElBQUksRUFBRSxlQUFlO01BQ3JCQyxJQUFJLEVBQUVsQyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO01BQ2ZnQyxnQkFBZ0IsRUFBRW5DLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUM7UUFBQSxPQUFNLGNBQWM7TUFBQSxFQUFDO01BQ3BFZ0MsUUFBUSxFQUFFcEMsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDa0MsaUJBQWlCLENBQUMsRUFBRSxDQUFDO01BQ3pDQyxhQUFhLEVBQUV0QyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUNDLGtCQUFrQixDQUFDO1FBQUEsT0FBTSxJQUFJO01BQUE7SUFDeEQsQ0FBQztJQUNERiwwQ0FBb0IsQ0FBQ0Usa0JBQWtCLENBQUM7TUFBQSxPQUFPO1FBQzdDQyxRQUFRLEVBQUUyQixXQUFXO1FBQ3JCMUIsV0FBVyxFQUFFTixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCSSxjQUFjLEVBQUU7TUFDbEIsQ0FBQztJQUFBLENBQUMsQ0FBQztJQUVILElBQUFnQixtQ0FBZSxnQkFBQ3hELE1BQUEsWUFBQXlELGFBQUEsQ0FBQ2hCLGdCQUFnQixFQUFLRSxhQUFnQixDQUFDLENBQUM7SUFFeERpQixNQUFNLENBQUNqQixhQUFhLENBQUNFLFFBQVEsQ0FBQyxDQUFDK0IsZ0JBQWdCLENBQUMsQ0FBQztFQUNuRCxDQUFDLENBQUM7RUFFRnRCLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxZQUFNO0lBQ3RELElBQUF1QixpQkFBQSxHQUFtQixJQUFBckIsbUNBQWUsZ0JBQUN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsRUFBS0UsYUFBZ0IsQ0FBQyxDQUFDO01BQXBFbUMsUUFBUSxHQUFBRCxpQkFBQSxDQUFSQyxRQUFRO0lBRWYsSUFBTWIsV0FBVyxHQUFHO01BQ2xCQyxJQUFJLEVBQUUsZUFBZTtNQUNyQkMsSUFBSSxFQUFFbEMsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztNQUNmZ0MsZ0JBQWdCLEVBQUVuQyxJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUNDLGtCQUFrQixDQUFDO1FBQUEsT0FBTSxjQUFjO01BQUEsRUFBQztNQUNwRWdDLFFBQVEsRUFBRXBDLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQ2tDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztNQUN6Q0MsYUFBYSxFQUFFdEMsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDQyxrQkFBa0IsQ0FBQztRQUFBLE9BQU0sSUFBSTtNQUFBO0lBQ3hELENBQUM7SUFDREYsMENBQW9CLENBQUNFLGtCQUFrQixDQUFDO01BQUEsT0FBTztRQUM3Q0MsUUFBUSxFQUFFMkIsV0FBVztRQUNyQjFCLFdBQVcsRUFBRU4sSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztRQUN0QkksY0FBYyxFQUFFO01BQ2xCLENBQUM7SUFBQSxDQUFDLENBQUM7SUFFSCxJQUFBdUMsV0FBRyxFQUFDLFlBQU07TUFDUkQsUUFBUSxlQUNOOUUsTUFBQSxZQUFBeUQsYUFBQSxDQUFDakQsaUJBQUEsQ0FBQXdFLGFBQWE7UUFBQ0MsS0FBSyxFQUFFQTtNQUFNLGdCQUMxQmpGLE1BQUEsWUFBQXlELGFBQUEsQ0FBQ2hELFVBQUEsQ0FBQXlFLFlBQVk7UUFBQ0MsTUFBTSxFQUFDLElBQUk7UUFBQ0MsUUFBUSxFQUFFQTtNQUFTLGdCQUMzQ3BGLE1BQUEsWUFBQXlELGFBQUEsQ0FBQ2hCLGdCQUFnQixFQUFLRSxhQUFnQixDQUMxQixDQUNELENBQ2pCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRmlCLE1BQU0sQ0FBQ2pCLGFBQWEsQ0FBQ0UsUUFBUSxDQUFDLENBQUMrQixnQkFBZ0IsQ0FBQyxDQUFDO0VBQ25ELENBQUMsQ0FBQztFQUVGUyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsWUFBTTtJQUMzQyxJQUFNQyxRQUFRLEdBQUcsb0JBQW9CO0lBQ3JDLElBQUFDLGlCQUFBLEdBQW9CLElBQUEvQixtQ0FBZSxnQkFDakN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsTUFBQStDLFNBQUEsaUJBQUs3QyxhQUFhO1FBQUVJLFdBQVcsRUFBRTtVQUFDdUMsUUFBUSxFQUFSQTtRQUFRO01BQUUsRUFBRSxDQUNqRSxDQUFDO01BRk01QixTQUFTLEdBQUE2QixpQkFBQSxDQUFUN0IsU0FBUztJQUdoQkUsTUFBTSxDQUFDRixTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQ0csaUJBQWlCLENBQUMsQ0FBQztFQUNwRCxDQUFDLENBQUM7RUFFRndCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFNO0lBQ3pCLElBQUFJLGlCQUFBLEdBQW9CLElBQUFqQyxtQ0FBZSxnQkFDakN4RCxNQUFBLFlBQUF5RCxhQUFBLENBQUNoQixnQkFBZ0IsTUFBQStDLFNBQUEsaUJBQUs3QyxhQUFhO1FBQUVHLGFBQWEsRUFBRSxJQUFJNEMsS0FBSyxDQUFDLFNBQVM7TUFBRSxFQUFFLENBQzdFLENBQUM7TUFGTWhDLFNBQVMsR0FBQStCLGlCQUFBLENBQVQvQixTQUFTO0lBR2hCRSxNQUFNLENBQUNGLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUNHLGlCQUFpQixDQUFDLENBQUM7RUFDbEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119