openclaw-productboard 1.0.1 → 1.0.3

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.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ProductBoard API Client
3
3
  */
4
- import { Feature, Product, Component, Note, User, CurrentUser, SearchResult, CreateFeatureParams, UpdateFeatureParams, ListFeaturesParams, ListProductsParams, CreateNoteParams, ListNotesParams, ListUsersParams, SearchParams, PluginConfig, ProductHierarchy } from './types';
4
+ import { Feature, Product, Component, Note, User, CurrentUser, SearchResult, CreateFeatureParams, UpdateFeatureParams, ListFeaturesParams, ListProductsParams, CreateNoteParams, ListNotesParams, ListUsersParams, SearchParams, PluginConfig, ProductHierarchy } from './types.js';
5
5
  export declare class ProductBoardClient {
6
6
  private client;
7
7
  private cache;
@@ -1,26 +1,20 @@
1
- "use strict";
2
1
  /**
3
2
  * ProductBoard API Client
4
3
  */
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ProductBoardClient = void 0;
10
- const axios_1 = __importDefault(require("axios"));
11
- const errors_1 = require("./errors");
12
- const cache_1 = require("../utils/cache");
13
- const rate_limiter_1 = require("../utils/rate-limiter");
4
+ import axios from 'axios';
5
+ import { parseApiError, isRetryableError, getRetryDelay, ProductBoardError, } from './errors.js';
6
+ import { ApiCache, getCache } from '../utils/cache.js';
7
+ import { getRateLimiter } from '../utils/rate-limiter.js';
14
8
  const DEFAULT_BASE_URL = 'https://api.productboard.com';
15
9
  const MAX_RETRIES = 3;
16
- class ProductBoardClient {
10
+ export class ProductBoardClient {
17
11
  client;
18
12
  cache;
19
13
  rateLimiter;
20
14
  baseUrl;
21
15
  constructor(config) {
22
16
  this.baseUrl = config.apiBaseUrl || DEFAULT_BASE_URL;
23
- this.client = axios_1.default.create({
17
+ this.client = axios.create({
24
18
  baseURL: this.baseUrl,
25
19
  headers: {
26
20
  'Authorization': `Bearer ${config.apiToken}`,
@@ -29,10 +23,10 @@ class ProductBoardClient {
29
23
  },
30
24
  timeout: 30000,
31
25
  });
32
- this.cache = (0, cache_1.getCache)({
26
+ this.cache = getCache({
33
27
  ttl: (config.cacheTtlSeconds || 300) * 1000,
34
28
  });
35
- this.rateLimiter = (0, rate_limiter_1.getRateLimiter)({
29
+ this.rateLimiter = getRateLimiter({
36
30
  maxTokens: config.rateLimitPerMinute || 100,
37
31
  });
38
32
  this.setupInterceptors();
@@ -42,9 +36,9 @@ class ProductBoardClient {
42
36
  this.client.interceptors.response.use((response) => response, (error) => {
43
37
  if (error.response) {
44
38
  const { status, data, headers } = error.response;
45
- throw (0, errors_1.parseApiError)(status, data, headers['retry-after']);
39
+ throw parseApiError(status, data, headers['retry-after']);
46
40
  }
47
- throw new errors_1.ProductBoardError(error.message || 'Network error', 'NETWORK_ERROR', 0);
41
+ throw new ProductBoardError(error.message || 'Network error', 'NETWORK_ERROR', 0);
48
42
  });
49
43
  }
50
44
  /**
@@ -57,8 +51,8 @@ class ProductBoardClient {
57
51
  return response.data;
58
52
  }
59
53
  catch (error) {
60
- if ((0, errors_1.isRetryableError)(error) && retryCount < MAX_RETRIES) {
61
- const delay = (0, errors_1.getRetryDelay)(error, retryCount);
54
+ if (isRetryableError(error) && retryCount < MAX_RETRIES) {
55
+ const delay = getRetryDelay(error, retryCount);
62
56
  await this.sleep(delay);
63
57
  return this.request(config, retryCount + 1);
64
58
  }
@@ -106,7 +100,7 @@ class ProductBoardClient {
106
100
  return result.data;
107
101
  }
108
102
  async listFeatures(params = {}) {
109
- const cacheKey = cache_1.ApiCache.generateKey('pb_feature_list', params);
103
+ const cacheKey = ApiCache.generateKey('pb_feature_list', params);
110
104
  return this.cache.wrap(cacheKey, async () => {
111
105
  const queryParams = {};
112
106
  if (params.productId)
@@ -121,7 +115,7 @@ class ProductBoardClient {
121
115
  });
122
116
  }
123
117
  async getFeature(id) {
124
- const cacheKey = cache_1.ApiCache.generateKey('pb_feature_get', { id });
118
+ const cacheKey = ApiCache.generateKey('pb_feature_get', { id });
125
119
  return this.cache.wrap(cacheKey, async () => {
126
120
  const result = await this.request({
127
121
  method: 'GET',
@@ -137,7 +131,7 @@ class ProductBoardClient {
137
131
  data: { data: params },
138
132
  });
139
133
  // Invalidate caches
140
- this.cache.delete(cache_1.ApiCache.generateKey('pb_feature_get', { id }));
134
+ this.cache.delete(ApiCache.generateKey('pb_feature_get', { id }));
141
135
  this.cache.invalidatePattern('pb_feature_list:');
142
136
  this.cache.invalidatePattern('pb_feature_search:');
143
137
  return result.data;
@@ -148,12 +142,12 @@ class ProductBoardClient {
148
142
  url: `/features/${id}`,
149
143
  });
150
144
  // Invalidate caches
151
- this.cache.delete(cache_1.ApiCache.generateKey('pb_feature_get', { id }));
145
+ this.cache.delete(ApiCache.generateKey('pb_feature_get', { id }));
152
146
  this.cache.invalidatePattern('pb_feature_list:');
153
147
  this.cache.invalidatePattern('pb_feature_search:');
154
148
  }
155
149
  async searchFeatures(query, limit = 50) {
156
- const cacheKey = cache_1.ApiCache.generateKey('pb_feature_search', { query, limit });
150
+ const cacheKey = ApiCache.generateKey('pb_feature_search', { query, limit });
157
151
  return this.cache.wrap(cacheKey, async () => {
158
152
  // ProductBoard doesn't have a dedicated search endpoint for features
159
153
  // We'll list all and filter client-side
@@ -172,13 +166,13 @@ class ProductBoardClient {
172
166
  // Product Methods
173
167
  // ============================================
174
168
  async listProducts(params = {}) {
175
- const cacheKey = cache_1.ApiCache.generateKey('pb_product_list', params);
169
+ const cacheKey = ApiCache.generateKey('pb_product_list', params);
176
170
  return this.cache.wrap(cacheKey, async () => {
177
171
  return this.paginate('/products', {}, params.limit);
178
172
  });
179
173
  }
180
174
  async getProduct(id) {
181
- const cacheKey = cache_1.ApiCache.generateKey('pb_product_get', { id });
175
+ const cacheKey = ApiCache.generateKey('pb_product_get', { id });
182
176
  return this.cache.wrap(cacheKey, async () => {
183
177
  const result = await this.request({
184
178
  method: 'GET',
@@ -188,7 +182,7 @@ class ProductBoardClient {
188
182
  });
189
183
  }
190
184
  async listComponents(params = {}) {
191
- const cacheKey = cache_1.ApiCache.generateKey('pb_component_list', params);
185
+ const cacheKey = ApiCache.generateKey('pb_component_list', params);
192
186
  return this.cache.wrap(cacheKey, async () => {
193
187
  const queryParams = {};
194
188
  if (params.productId)
@@ -197,7 +191,7 @@ class ProductBoardClient {
197
191
  });
198
192
  }
199
193
  async getProductHierarchy() {
200
- const cacheKey = cache_1.ApiCache.generateKey('pb_product_hierarchy', {});
194
+ const cacheKey = ApiCache.generateKey('pb_product_hierarchy', {});
201
195
  return this.cache.wrap(cacheKey, async () => {
202
196
  const [products, components] = await Promise.all([
203
197
  this.listProducts({ limit: 500 }),
@@ -220,7 +214,7 @@ class ProductBoardClient {
220
214
  return result.data;
221
215
  }
222
216
  async listNotes(params = {}) {
223
- const cacheKey = cache_1.ApiCache.generateKey('pb_note_list', params);
217
+ const cacheKey = ApiCache.generateKey('pb_note_list', params);
224
218
  return this.cache.wrap(cacheKey, async () => {
225
219
  const queryParams = {};
226
220
  if (params.createdFrom)
@@ -231,7 +225,7 @@ class ProductBoardClient {
231
225
  });
232
226
  }
233
227
  async getNote(id) {
234
- const cacheKey = cache_1.ApiCache.generateKey('pb_note_get', { id });
228
+ const cacheKey = ApiCache.generateKey('pb_note_get', { id });
235
229
  return this.cache.wrap(cacheKey, async () => {
236
230
  const result = await this.request({
237
231
  method: 'GET',
@@ -251,14 +245,14 @@ class ProductBoardClient {
251
245
  },
252
246
  });
253
247
  // Invalidate caches
254
- this.cache.delete(cache_1.ApiCache.generateKey('pb_note_get', { id: noteId }));
255
- this.cache.delete(cache_1.ApiCache.generateKey('pb_feature_get', { id: featureId }));
248
+ this.cache.delete(ApiCache.generateKey('pb_note_get', { id: noteId }));
249
+ this.cache.delete(ApiCache.generateKey('pb_feature_get', { id: featureId }));
256
250
  }
257
251
  // ============================================
258
252
  // User Methods
259
253
  // ============================================
260
254
  async getCurrentUser() {
261
- const cacheKey = cache_1.ApiCache.generateKey('pb_user_current', {});
255
+ const cacheKey = ApiCache.generateKey('pb_user_current', {});
262
256
  return this.cache.wrap(cacheKey, async () => {
263
257
  const result = await this.request({
264
258
  method: 'GET',
@@ -268,7 +262,7 @@ class ProductBoardClient {
268
262
  });
269
263
  }
270
264
  async listUsers(params = {}) {
271
- const cacheKey = cache_1.ApiCache.generateKey('pb_user_list', params);
265
+ const cacheKey = ApiCache.generateKey('pb_user_list', params);
272
266
  return this.cache.wrap(cacheKey, async () => {
273
267
  return this.paginate('/users', {}, params.limit);
274
268
  });
@@ -277,7 +271,7 @@ class ProductBoardClient {
277
271
  // Search Methods
278
272
  // ============================================
279
273
  async search(params) {
280
- const cacheKey = cache_1.ApiCache.generateKey('pb_search', { query: params.query, type: params.type, limit: params.limit });
274
+ const cacheKey = ApiCache.generateKey('pb_search', { query: params.query, type: params.type, limit: params.limit });
281
275
  return this.cache.wrap(cacheKey, async () => {
282
276
  const results = [];
283
277
  const queryLower = params.query.toLowerCase();
@@ -375,5 +369,4 @@ class ProductBoardClient {
375
369
  return this.rateLimiter.stats();
376
370
  }
377
371
  }
378
- exports.ProductBoardClient = ProductBoardClient;
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7OztBQUVILGtEQUE2RTtBQXFCN0UscUNBS2tCO0FBQ2xCLDBDQUFvRDtBQUNwRCx3REFBb0U7QUFFcEUsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsTUFBYSxrQkFBa0I7SUFDckIsTUFBTSxDQUFnQjtJQUN0QixLQUFLLENBQVc7SUFDaEIsV0FBVyxDQUFjO0lBQ3pCLE9BQU8sQ0FBUztJQUV4QixZQUFZLE1BQW9CO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQztRQUVyRCxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRTtnQkFDUCxlQUFlLEVBQUUsVUFBVSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUM1QyxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxXQUFXLEVBQUUsR0FBRzthQUNqQjtZQUNELE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGdCQUFRLEVBQUM7WUFDcEIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJO1NBQzVDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBQSw2QkFBYyxFQUFDO1lBQ2hDLFNBQVMsRUFBRSxNQUFNLENBQUMsa0JBQWtCLElBQUksR0FBRztTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8s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UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUEvY0QsZ0RBK2NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm9kdWN0Qm9hcmQgQVBJIENsaWVudFxuICovXG5cbmltcG9ydCBheGlvcywgeyBBeGlvc0luc3RhbmNlLCBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQge1xuICBGZWF0dXJlLFxuICBQcm9kdWN0LFxuICBDb21wb25lbnQsXG4gIE5vdGUsXG4gIFVzZXIsXG4gIEN1cnJlbnRVc2VyLFxuICBTZWFyY2hSZXN1bHQsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBDcmVhdGVGZWF0dXJlUGFyYW1zLFxuICBVcGRhdGVGZWF0dXJlUGFyYW1zLFxuICBMaXN0RmVhdHVyZXNQYXJhbXMsXG4gIExpc3RQcm9kdWN0c1BhcmFtcyxcbiAgQ3JlYXRlTm90ZVBhcmFtcyxcbiAgTGlzdE5vdGVzUGFyYW1zLFxuICBMaXN0VXNlcnNQYXJhbXMsXG4gIFNlYXJjaFBhcmFtcyxcbiAgUGx1Z2luQ29uZmlnLFxuICBQcm9kdWN0SGllcmFyY2h5LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHBhcnNlQXBpRXJyb3IsXG4gIGlzUmV0cnlhYmxlRXJyb3IsXG4gIGdldFJldHJ5RGVsYXksXG4gIFByb2R1Y3RCb2FyZEVycm9yLFxufSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBBcGlDYWNoZSwgZ2V0Q2FjaGUgfSBmcm9tICcuLi91dGlscy9jYWNoZSc7XG5pbXBvcnQgeyBSYXRlTGltaXRlciwgZ2V0UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi91dGlscy9yYXRlLWxpbWl0ZXInO1xuXG5jb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnByb2R1Y3Rib2FyZC5jb20nO1xuY29uc3QgTUFYX1JFVFJJRVMgPSAzO1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdEJvYXJkQ2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG4gIHByaXZhdGUgY2FjaGU6IEFwaUNhY2hlO1xuICBwcml2YXRlIHJhdGVMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQbHVnaW5Db25maWcpIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYXBpQmFzZVVybCB8fCBERUZBVUxUX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtjb25maWcuYXBpVG9rZW59YCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1gtVmVyc2lvbic6ICcxJyxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiAzMDAwMCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2FjaGUgPSBnZXRDYWNoZSh7XG4gICAgICB0dGw6IChjb25maWcuY2FjaGVUdGxTZWNvbmRzIHx8IDMwMCkgKiAxMDAwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXRlTGltaXRlciA9IGdldFJhdGVMaW1pdGVyKHtcbiAgICAgIG1heFRva2VuczogY29uZmlnLnJhdGVMaW1pdFBlck1pbnV0ZSB8fCAxMDAsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldHVwSW50ZXJjZXB0b3JzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSW50ZXJjZXB0b3JzKCk6IHZvaWQge1xuICAgIC8vIFJlc3BvbnNlIGludGVyY2VwdG9yIGZvciBlcnJvciBoYW5kbGluZ1xuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXG4gICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLFxuICAgICAgKGVycm9yOiBBeGlvc0Vycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHsgc3RhdHVzLCBkYXRhLCBoZWFkZXJzIH0gPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgICB0aHJvdyBwYXJzZUFwaUVycm9yKFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LFxuICAgICAgICAgICAgaGVhZGVyc1sncmV0cnktYWZ0ZXInXSBhcyBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBQcm9kdWN0Qm9hcmRFcnJvcihcbiAgICAgICAgICBlcnJvci5tZXNzYWdlIHx8ICdOZXR3b3JrIGVycm9yJyxcbiAgICAgICAgICAnTkVUV09SS19FUlJPUicsXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpYyBhbmQgcmF0ZSBsaW1pdGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJldHJ5Q291bnQgPSAwXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMucmF0ZUxpbWl0ZXIuYWNxdWlyZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdDxUPihjb25maWcpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc1JldHJ5YWJsZUVycm9yKGVycm9yKSAmJiByZXRyeUNvdW50IDwgTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSBnZXRSZXRyeURlbGF5KGVycm9yLCByZXRyeUNvdW50KTtcbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oY29uZmlnLCByZXRyeUNvdW50ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYWdpbmF0ZSB0aHJvdWdoIGFsbCByZXN1bHRzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBhZ2luYXRlPFQ+KFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuICAgIG1heEl0ZW1zPzogbnVtYmVyXG4gICk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5taW4ocGFyYW1zLmxpbWl0IGFzIG51bWJlciB8fCAxMDAsIDEwMCk7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdDxQYWdpbmF0ZWRSZXNwb25zZTxUPj4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGVuZHBvaW50LFxuICAgICAgICBwYXJhbXM6IHsgLi4ucGFyYW1zLCBsaW1pdCwgcGFnZUN1cnNvcjogY3Vyc29yIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy5wdXNoKC4uLnJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICBpZiAobWF4SXRlbXMgJiYgcmVzdWx0cy5sZW5ndGggPj0gbWF4SXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuc2xpY2UoMCwgbWF4SXRlbXMpO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3IgPSByZXNwb25zZS5saW5rcz8ubmV4dFxuICAgICAgICA/IG5ldyBVUkwocmVzcG9uc2UubGlua3MubmV4dCkuc2VhcmNoUGFyYW1zLmdldCgncGFnZUN1cnNvcicpIHx8IHVuZGVmaW5lZFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9IHdoaWxlIChjdXJzb3IpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGZWF0dXJlIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBjcmVhdGVGZWF0dXJlKHBhcmFtczogQ3JlYXRlRmVhdHVyZVBhcmFtcyk6IFByb21pc2U8RmVhdHVyZT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IEZlYXR1cmUgfT4oe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6ICcvZmVhdHVyZXMnLFxuICAgICAgZGF0YTogeyBkYXRhOiBwYXJhbXMgfSxcbiAgICB9KTtcblxuICAgIC8vIEludmFsaWRhdGUgZmVhdHVyZSBsaXN0IGNhY2hlc1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfbGlzdDonKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX3NlYXJjaDonKTtcblxuICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGZWF0dXJlcyhwYXJhbXM6IExpc3RGZWF0dXJlc1BhcmFtcyA9IHt9KTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2xpc3QnLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgIGlmIChwYXJhbXMucHJvZHVjdElkKSBxdWVyeVBhcmFtc1sncHJvZHVjdC5pZCddID0gcGFyYW1zLnByb2R1Y3RJZDtcbiAgICAgIGlmIChwYXJhbXMuY29tcG9uZW50SWQpIHF1ZXJ5UGFyYW1zWydjb21wb25lbnQuaWQnXSA9IHBhcmFtcy5jb21wb25lbnRJZDtcbiAgICAgIGlmIChwYXJhbXMuc3RhdHVzKSBxdWVyeVBhcmFtcy5zdGF0dXMgPSBwYXJhbXMuc3RhdHVzO1xuICAgICAgaWYgKHBhcmFtcy5vd25lcklkKSBxdWVyeVBhcmFtc1snb3duZXIuaWQnXSA9IHBhcmFtcy5vd25lcklkO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxGZWF0dXJlPignL2ZlYXR1cmVzJywgcXVlcnlQYXJhbXMsIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL2ZlYXR1cmVzLyR7aWR9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmVhdHVyZShpZDogc3RyaW5nLCBwYXJhbXM6IFVwZGF0ZUZlYXR1cmVQYXJhbXMpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgICBkYXRhOiB7IGRhdGE6IHBhcmFtcyB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3Q8dm9pZD4oe1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIGNhY2hlc1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQgfSkpO1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfbGlzdDonKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX3NlYXJjaDonKTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaEZlYXR1cmVzKHF1ZXJ5OiBzdHJpbmcsIGxpbWl0ID0gNTApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2ZlYXR1cmVfc2VhcmNoJywgeyBxdWVyeSwgbGltaXQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBQcm9kdWN0Qm9hcmQgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIHNlYXJjaCBlbmRwb2ludCBmb3IgZmVhdHVyZXNcbiAgICAgIC8vIFdlJ2xsIGxpc3QgYWxsIGFuZCBmaWx0ZXIgY2xpZW50LXNpZGVcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgdGhpcy5saXN0RmVhdHVyZXMoeyBsaW1pdDogNTAwIH0pO1xuICAgICAgY29uc3QgcXVlcnlMb3dlciA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHJldHVybiBmZWF0dXJlc1xuICAgICAgICAuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmFtZU1hdGNoID0gZi5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpO1xuICAgICAgICAgIGNvbnN0IGRlc2NNYXRjaCA9IGYuZGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcik7XG4gICAgICAgICAgcmV0dXJuIG5hbWVNYXRjaCB8fCBkZXNjTWF0Y2g7XG4gICAgICAgIH0pXG4gICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQcm9kdWN0IE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBsaXN0UHJvZHVjdHMocGFyYW1zOiBMaXN0UHJvZHVjdHNQYXJhbXMgPSB7fSk6IFByb21pc2U8UHJvZHVjdFtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfcHJvZHVjdF9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPFByb2R1Y3Q+KCcvcHJvZHVjdHMnLCB7fSwgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFByb2R1Y3QoaWQ6IHN0cmluZyk6IFByb21pc2U8UHJvZHVjdD4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3Byb2R1Y3RfZ2V0JywgeyBpZCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IFByb2R1Y3QgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGAvcHJvZHVjdHMvJHtpZH1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0Q29tcG9uZW50cyhwYXJhbXM6IHsgcHJvZHVjdElkPzogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9ID0ge30pOiBQcm9taXNlPENvbXBvbmVudFtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfY29tcG9uZW50X2xpc3QnLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBpZiAocGFyYW1zLnByb2R1Y3RJZCkgcXVlcnlQYXJhbXNbJ3Byb2R1Y3QuaWQnXSA9IHBhcmFtcy5wcm9kdWN0SWQ7XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPENvbXBvbmVudD4oJy9jb21wb25lbnRzJywgcXVlcnlQYXJhbXMsIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9kdWN0SGllcmFyY2h5KCk6IFByb21pc2U8UHJvZHVjdEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3Byb2R1Y3RfaGllcmFyY2h5Jywge30pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgW3Byb2R1Y3RzLCBjb21wb25lbnRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5saXN0UHJvZHVjdHMoeyBsaW1pdDogNTAwIH0pLFxuICAgICAgICB0aGlzLmxpc3RDb21wb25lbnRzKHsgbGltaXQ6IDUwMCB9KSxcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4geyBwcm9kdWN0cywgY29tcG9uZW50cyB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZSBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgY3JlYXRlTm90ZShwYXJhbXM6IENyZWF0ZU5vdGVQYXJhbXMpOiBQcm9taXNlPE5vdGU+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBOb3RlIH0+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiAnL25vdGVzJyxcbiAgICAgIGRhdGE6IHsgZGF0YTogcGFyYW1zIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIG5vdGUgbGlzdCBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9ub3RlX2xpc3Q6Jyk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0Tm90ZXMocGFyYW1zOiBMaXN0Tm90ZXNQYXJhbXMgPSB7fSk6IFByb21pc2U8Tm90ZVtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfbm90ZV9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgaWYgKHBhcmFtcy5jcmVhdGVkRnJvbSkgcXVlcnlQYXJhbXMuY3JlYXRlZEZyb20gPSBwYXJhbXMuY3JlYXRlZEZyb207XG4gICAgICBpZiAocGFyYW1zLmNyZWF0ZWRUbykgcXVlcnlQYXJhbXMuY3JlYXRlZFRvID0gcGFyYW1zLmNyZWF0ZWRUbztcblxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGU8Tm90ZT4oJy9ub3RlcycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0Tm90ZShpZDogc3RyaW5nKTogUHJvbWlzZTxOb3RlPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfbm90ZV9nZXQnLCB7IGlkIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogTm90ZSB9Pih7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogYC9ub3Rlcy8ke2lkfWAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGF0dGFjaE5vdGVUb0ZlYXR1cmUobm90ZUlkOiBzdHJpbmcsIGZlYXR1cmVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0PHZvaWQ+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiBgL25vdGVzLyR7bm90ZUlkfS9jb25uZWN0aW9uc2AsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmZWF0dXJlOiB7IGlkOiBmZWF0dXJlSWQgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIGNhY2hlc1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9ub3RlX2dldCcsIHsgaWQ6IG5vdGVJZCB9KSk7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUoQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2ZlYXR1cmVfZ2V0JywgeyBpZDogZmVhdHVyZUlkIH0pKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZXIgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGdldEN1cnJlbnRVc2VyKCk6IFByb21pc2U8Q3VycmVudFVzZXI+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl91c2VyX2N1cnJlbnQnLCB7fSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBDdXJyZW50VXNlciB9Pih7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogJy91c2Vycy9tZScsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RVc2VycyhwYXJhbXM6IExpc3RVc2Vyc1BhcmFtcyA9IHt9KTogUHJvbWlzZTxVc2VyW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl91c2VyX2xpc3QnLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGU8VXNlcj4oJy91c2VycycsIHt9LCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VhcmNoIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBzZWFyY2gocGFyYW1zOiBTZWFyY2hQYXJhbXMpOiBQcm9taXNlPFNlYXJjaFJlc3VsdFtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfc2VhcmNoJywgeyBxdWVyeTogcGFyYW1zLnF1ZXJ5LCB0eXBlOiBwYXJhbXMudHlwZSwgbGltaXQ6IHBhcmFtcy5saW1pdCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG4gICAgICBjb25zdCBxdWVyeUxvd2VyID0gcGFyYW1zLnF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBsaW1pdCA9IHBhcmFtcy5saW1pdCB8fCA1MDtcblxuICAgICAgLy8gU2VhcmNoIGZlYXR1cmVzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnZmVhdHVyZScpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLnNlYXJjaEZlYXR1cmVzKHF1ZXJ5TG93ZXIsIGxpbWl0KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLmZlYXR1cmVzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6ICdmZWF0dXJlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGlkOiBmLmlkLFxuICAgICAgICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGYuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5rczogZi5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VhcmNoIHByb2R1Y3RzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjdHMgPSBhd2FpdCB0aGlzLmxpc3RQcm9kdWN0cyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nUHJvZHVjdHMgPSBwcm9kdWN0c1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpIHx8XG4gICAgICAgICAgICAgIHAuZGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcilcbiAgICAgICAgICApXG4gICAgICAgICAgLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgICAgLi4ubWF0Y2hpbmdQcm9kdWN0cy5tYXAoKHApID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAncHJvZHVjdCcgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IHAubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBjb21wb25lbnRzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gYXdhaXQgdGhpcy5saXN0Q29tcG9uZW50cyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nQ29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIGMubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBjLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nQ29tcG9uZW50cy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnY29tcG9uZW50JyBhcyBjb25zdCxcbiAgICAgICAgICAgIGlkOiBjLmlkLFxuICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5rczogYy5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VhcmNoIG5vdGVzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnbm90ZScpIHtcbiAgICAgICAgY29uc3Qgbm90ZXMgPSBhd2FpdCB0aGlzLmxpc3ROb3Rlcyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nTm90ZXMgPSBub3Rlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAobikgPT5cbiAgICAgICAgICAgICAgbi50aXRsZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBuLmNvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcilcbiAgICAgICAgICApXG4gICAgICAgICAgLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgICAgLi4ubWF0Y2hpbmdOb3Rlcy5tYXAoKG4pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnbm90ZScgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogbi5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBuLnRpdGxlLFxuICAgICAgICAgICAgY29udGVudDogbi5jb250ZW50Py5zdWJzdHJpbmcoMCwgMjAwKSxcbiAgICAgICAgICAgIGxpbmtzOiBuLmxpbmtzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0cy5zbGljZSgwLCBsaW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVdGlsaXR5IE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIEFQSSB0b2tlbiBieSBtYWtpbmcgYSB0ZXN0IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlVG9rZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGVkIGRhdGFcbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzXG4gICAqL1xuICBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBtYXg6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5zdGF0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXRlIGxpbWl0ZXIgc3RhdGlzdGljc1xuICAgKi9cbiAgZ2V0UmF0ZUxpbWl0ZXJTdGF0cygpOiB7IHRva2VuczogbnVtYmVyOyBtYXhUb2tlbnM6IG51bWJlcjsgd2FpdFRpbWU6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdGhpcy5yYXRlTGltaXRlci5zdGF0cygpO1xuICB9XG59XG4iXX0=
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBd0QsTUFBTSxPQUFPLENBQUM7QUFxQjdFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQWUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQWdCO0lBQ3RCLEtBQUssQ0FBVztJQUNoQixXQUFXLENBQWM7SUFDekIsT0FBTyxDQUFTO0lBRXhCLFlBQVksTUFBb0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDO1FBRXJELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFdBQVcsRUFBRSxHQUFHO2FBQ2pCO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUNwQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUk7U0FDNUMsQ0FBQyxDQUFDO1FB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WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdEJvYXJkIEFQSSBDbGllbnRcbiAqL1xuXG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtcbiAgRmVhdHVyZSxcbiAgUHJvZHVjdCxcbiAgQ29tcG9uZW50LFxuICBOb3RlLFxuICBVc2VyLFxuICBDdXJyZW50VXNlcixcbiAgU2VhcmNoUmVzdWx0LFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgQ3JlYXRlRmVhdHVyZVBhcmFtcyxcbiAgVXBkYXRlRmVhdHVyZVBhcmFtcyxcbiAgTGlzdEZlYXR1cmVzUGFyYW1zLFxuICBMaXN0UHJvZHVjdHNQYXJhbXMsXG4gIENyZWF0ZU5vdGVQYXJhbXMsXG4gIExpc3ROb3Rlc1BhcmFtcyxcbiAgTGlzdFVzZXJzUGFyYW1zLFxuICBTZWFyY2hQYXJhbXMsXG4gIFBsdWdpbkNvbmZpZyxcbiAgUHJvZHVjdEhpZXJhcmNoeSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBwYXJzZUFwaUVycm9yLFxuICBpc1JldHJ5YWJsZUVycm9yLFxuICBnZXRSZXRyeURlbGF5LFxuICBQcm9kdWN0Qm9hcmRFcnJvcixcbn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgQXBpQ2FjaGUsIGdldENhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGUuanMnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0ZXIsIGdldFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vdXRpbHMvcmF0ZS1saW1pdGVyLmpzJztcblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wcm9kdWN0Ym9hcmQuY29tJztcbmNvbnN0IE1BWF9SRVRSSUVTID0gMztcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RCb2FyZENsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNhY2hlOiBBcGlDYWNoZTtcbiAgcHJpdmF0ZSByYXRlTGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUGx1Z2luQ29uZmlnKSB7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmFwaUJhc2VVcmwgfHwgREVGQVVMVF9CQVNFX1VSTDtcblxuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7Y29uZmlnLmFwaVRva2VufWAsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdYLVZlcnNpb24nOiAnMScsXG4gICAgICB9LFxuICAgICAgdGltZW91dDogMzAwMDAsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhY2hlID0gZ2V0Q2FjaGUoe1xuICAgICAgdHRsOiAoY29uZmlnLmNhY2hlVHRsU2Vjb25kcyB8fCAzMDApICogMTAwMCxcbiAgICB9KTtcblxuICAgIHRoaXMucmF0ZUxpbWl0ZXIgPSBnZXRSYXRlTGltaXRlcih7XG4gICAgICBtYXhUb2tlbnM6IGNvbmZpZy5yYXRlTGltaXRQZXJNaW51dGUgfHwgMTAwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cEludGVyY2VwdG9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEludGVyY2VwdG9ycygpOiB2b2lkIHtcbiAgICAvLyBSZXNwb25zZSBpbnRlcmNlcHRvciBmb3IgZXJyb3IgaGFuZGxpbmdcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZSxcbiAgICAgIChlcnJvcjogQXhpb3NFcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCB7IHN0YXR1cywgZGF0YSwgaGVhZGVycyB9ID0gZXJyb3IucmVzcG9uc2U7XG4gICAgICAgICAgdGhyb3cgcGFyc2VBcGlFcnJvcihcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIGRhdGEgYXMgeyBjb2RlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nOyBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSxcbiAgICAgICAgICAgIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgUHJvZHVjdEJvYXJkRXJyb3IoXG4gICAgICAgICAgZXJyb3IubWVzc2FnZSB8fCAnTmV0d29yayBlcnJvcicsXG4gICAgICAgICAgJ05FVFdPUktfRVJST1InLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWMgYW5kIHJhdGUgbGltaXRpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyxcbiAgICByZXRyeUNvdW50ID0gMFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJhdGVMaW1pdGVyLmFjcXVpcmUoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Q8VD4oY29uZmlnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaXNSZXRyeWFibGVFcnJvcihlcnJvcikgJiYgcmV0cnlDb3VudCA8IE1BWF9SRVRSSUVTKSB7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gZ2V0UmV0cnlEZWxheShlcnJvciwgcmV0cnlDb3VudCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2xlZXAoZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KGNvbmZpZywgcmV0cnlDb3VudCArIDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFnaW5hdGUgdGhyb3VnaCBhbGwgcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYWdpbmF0ZTxUPihcbiAgICBlbmRwb2ludDogc3RyaW5nLFxuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICBtYXhJdGVtcz86IG51bWJlclxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICAgIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKHBhcmFtcy5saW1pdCBhcyBudW1iZXIgfHwgMTAwLCAxMDApO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8UGFnaW5hdGVkUmVzcG9uc2U8VD4+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBlbmRwb2ludCxcbiAgICAgICAgcGFyYW1zOiB7IC4uLnBhcmFtcywgbGltaXQsIHBhZ2VDdXJzb3I6IGN1cnNvciB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdHMucHVzaCguLi5yZXNwb25zZS5kYXRhKTtcblxuICAgICAgaWYgKG1heEl0ZW1zICYmIHJlc3VsdHMubGVuZ3RoID49IG1heEl0ZW1zKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRzLnNsaWNlKDAsIG1heEl0ZW1zKTtcbiAgICAgIH1cblxuICAgICAgY3Vyc29yID0gcmVzcG9uc2UubGlua3M/Lm5leHRcbiAgICAgICAgPyBuZXcgVVJMKHJlc3BvbnNlLmxpbmtzLm5leHQpLnNlYXJjaFBhcmFtcy5nZXQoJ3BhZ2VDdXJzb3InKSB8fCB1bmRlZmluZWRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfSB3aGlsZSAoY3Vyc29yKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRmVhdHVyZSBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgY3JlYXRlRmVhdHVyZShwYXJhbXM6IENyZWF0ZUZlYXR1cmVQYXJhbXMpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiAnL2ZlYXR1cmVzJyxcbiAgICAgIGRhdGE6IHsgZGF0YTogcGFyYW1zIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIGZlYXR1cmUgbGlzdCBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0RmVhdHVyZXMocGFyYW1zOiBMaXN0RmVhdHVyZXNQYXJhbXMgPSB7fSk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBpZiAocGFyYW1zLnByb2R1Y3RJZCkgcXVlcnlQYXJhbXNbJ3Byb2R1Y3QuaWQnXSA9IHBhcmFtcy5wcm9kdWN0SWQ7XG4gICAgICBpZiAocGFyYW1zLmNvbXBvbmVudElkKSBxdWVyeVBhcmFtc1snY29tcG9uZW50LmlkJ10gPSBwYXJhbXMuY29tcG9uZW50SWQ7XG4gICAgICBpZiAocGFyYW1zLnN0YXR1cykgcXVlcnlQYXJhbXMuc3RhdHVzID0gcGFyYW1zLnN0YXR1cztcbiAgICAgIGlmIChwYXJhbXMub3duZXJJZCkgcXVlcnlQYXJhbXNbJ293bmVyLmlkJ10gPSBwYXJhbXMub3duZXJJZDtcblxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGU8RmVhdHVyZT4oJy9mZWF0dXJlcycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZShpZDogc3RyaW5nKTogUHJvbWlzZTxGZWF0dXJlPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogRmVhdHVyZSB9Pih7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZlYXR1cmUoaWQ6IHN0cmluZywgcGFyYW1zOiBVcGRhdGVGZWF0dXJlUGFyYW1zKTogUHJvbWlzZTxGZWF0dXJlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogRmVhdHVyZSB9Pih7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB1cmw6IGAvZmVhdHVyZXMvJHtpZH1gLFxuICAgICAgZGF0YTogeyBkYXRhOiBwYXJhbXMgfSxcbiAgICB9KTtcblxuICAgIC8vIEludmFsaWRhdGUgY2FjaGVzXG4gICAgdGhpcy5jYWNoZS5kZWxldGUoQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2ZlYXR1cmVfZ2V0JywgeyBpZCB9KSk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9saXN0OicpO1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfc2VhcmNoOicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmVhdHVyZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0PHZvaWQ+KHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB1cmw6IGAvZmVhdHVyZXMvJHtpZH1gLFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hGZWF0dXJlcyhxdWVyeTogc3RyaW5nLCBsaW1pdCA9IDUwKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX3NlYXJjaCcsIHsgcXVlcnksIGxpbWl0IH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUHJvZHVjdEJvYXJkIGRvZXNuJ3QgaGF2ZSBhIGRlZGljYXRlZCBzZWFyY2ggZW5kcG9pbnQgZm9yIGZlYXR1cmVzXG4gICAgICAvLyBXZSdsbCBsaXN0IGFsbCBhbmQgZmlsdGVyIGNsaWVudC1zaWRlXG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMubGlzdEZlYXR1cmVzKHsgbGltaXQ6IDUwMCB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5TG93ZXIgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICByZXR1cm4gZmVhdHVyZXNcbiAgICAgICAgLmZpbHRlcigoZikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IGYubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKTtcbiAgICAgICAgICBjb25zdCBkZXNjTWF0Y2ggPSBmLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpO1xuICAgICAgICAgIHJldHVybiBuYW1lTWF0Y2ggfHwgZGVzY01hdGNoO1xuICAgICAgICB9KVxuICAgICAgICAuc2xpY2UoMCwgbGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUHJvZHVjdCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgbGlzdFByb2R1Y3RzKHBhcmFtczogTGlzdFByb2R1Y3RzUGFyYW1zID0ge30pOiBQcm9taXNlPFByb2R1Y3RbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3Byb2R1Y3RfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxQcm9kdWN0PignL3Byb2R1Y3RzJywge30sIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9kdWN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFByb2R1Y3Q+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2dldCcsIHsgaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBQcm9kdWN0IH0+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL3Byb2R1Y3RzLyR7aWR9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENvbXBvbmVudHMocGFyYW1zOiB7IHByb2R1Y3RJZD86IHN0cmluZzsgbGltaXQ/OiBudW1iZXIgfSA9IHt9KTogUHJvbWlzZTxDb21wb25lbnRbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2NvbXBvbmVudF9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgaWYgKHBhcmFtcy5wcm9kdWN0SWQpIHF1ZXJ5UGFyYW1zWydwcm9kdWN0LmlkJ10gPSBwYXJhbXMucHJvZHVjdElkO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxDb21wb25lbnQ+KCcvY29tcG9uZW50cycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZHVjdEhpZXJhcmNoeSgpOiBQcm9taXNlPFByb2R1Y3RIaWVyYXJjaHk+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2hpZXJhcmNoeScsIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0cywgY29tcG9uZW50c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMubGlzdFByb2R1Y3RzKHsgbGltaXQ6IDUwMCB9KSxcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50cyh7IGxpbWl0OiA1MDAgfSksXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHsgcHJvZHVjdHMsIGNvbXBvbmVudHMgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5vdGUgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGNyZWF0ZU5vdGUocGFyYW1zOiBDcmVhdGVOb3RlUGFyYW1zKTogUHJvbWlzZTxOb3RlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogTm90ZSB9Pih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogJy9ub3RlcycsXG4gICAgICBkYXRhOiB7IGRhdGE6IHBhcmFtcyB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBub3RlIGxpc3QgY2FjaGVzXG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfbm90ZV9saXN0OicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE5vdGVzKHBhcmFtczogTGlzdE5vdGVzUGFyYW1zID0ge30pOiBQcm9taXNlPE5vdGVbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGlmIChwYXJhbXMuY3JlYXRlZEZyb20pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRGcm9tID0gcGFyYW1zLmNyZWF0ZWRGcm9tO1xuICAgICAgaWYgKHBhcmFtcy5jcmVhdGVkVG8pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRUbyA9IHBhcmFtcy5jcmVhdGVkVG87XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPE5vdGU+KCcvbm90ZXMnLCBxdWVyeVBhcmFtcywgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGUoaWQ6IHN0cmluZyk6IFByb21pc2U8Tm90ZT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfZ2V0JywgeyBpZCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IE5vdGUgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGAvbm90ZXMvJHtpZH1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhdHRhY2hOb3RlVG9GZWF0dXJlKG5vdGVJZDogc3RyaW5nLCBmZWF0dXJlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdDx2b2lkPih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYC9ub3Rlcy8ke25vdGVJZH0vY29ubmVjdGlvbnNgLFxuICAgICAgZGF0YToge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZmVhdHVyZTogeyBpZDogZmVhdHVyZUlkIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfbm90ZV9nZXQnLCB7IGlkOiBub3RlSWQgfSkpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQ6IGZlYXR1cmVJZCB9KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPEN1cnJlbnRVc2VyPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9jdXJyZW50Jywge30pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogQ3VycmVudFVzZXIgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6ICcvdXNlcnMvbWUnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VXNlcnMocGFyYW1zOiBMaXN0VXNlcnNQYXJhbXMgPSB7fSk6IFByb21pc2U8VXNlcltdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPFVzZXI+KCcvdXNlcnMnLCB7fSwgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlYXJjaCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgc2VhcmNoKHBhcmFtczogU2VhcmNoUGFyYW1zKTogUHJvbWlzZTxTZWFyY2hSZXN1bHRbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3NlYXJjaCcsIHsgcXVlcnk6IHBhcmFtcy5xdWVyeSwgdHlwZTogcGFyYW1zLnR5cGUsIGxpbWl0OiBwYXJhbXMubGltaXQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlMb3dlciA9IHBhcmFtcy5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbGltaXQgPSBwYXJhbXMubGltaXQgfHwgNTA7XG5cbiAgICAgIC8vIFNlYXJjaCBmZWF0dXJlc1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ2ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgdGhpcy5zZWFyY2hGZWF0dXJlcyhxdWVyeUxvd2VyLCBsaW1pdCk7XG4gICAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgICAuLi5mZWF0dXJlcy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnZmVhdHVyZScgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGYubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IGYubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBwcm9kdWN0c1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RzID0gYXdhaXQgdGhpcy5saXN0UHJvZHVjdHMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ1Byb2R1Y3RzID0gcHJvZHVjdHNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBwLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nUHJvZHVjdHMubWFwKChwKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ3Byb2R1Y3QnIGFzIGNvbnN0LFxuICAgICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGxpbmtzOiBwLmxpbmtzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWFyY2ggY29tcG9uZW50c1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGF3YWl0IHRoaXMubGlzdENvbXBvbmVudHMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ0NvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICBjLm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcikgfHxcbiAgICAgICAgICAgICAgYy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgICAuLi5tYXRjaGluZ0NvbXBvbmVudHMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogYy5pZCxcbiAgICAgICAgICAgIG5hbWU6IGMubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IGMubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBub3Rlc1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ25vdGUnKSB7XG4gICAgICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgdGhpcy5saXN0Tm90ZXMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ05vdGVzID0gbm90ZXNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKG4pID0+XG4gICAgICAgICAgICAgIG4udGl0bGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcikgfHxcbiAgICAgICAgICAgICAgbi5jb250ZW50Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nTm90ZXMubWFwKChuKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ25vdGUnIGFzIGNvbnN0LFxuICAgICAgICAgICAgaWQ6IG4uaWQsXG4gICAgICAgICAgICB0aXRsZTogbi50aXRsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG4uY29udGVudD8uc3Vic3RyaW5nKDAsIDIwMCksXG4gICAgICAgICAgICBsaW5rczogbi5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHMuc2xpY2UoMCwgbGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXRpbGl0eSBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBBUEkgdG9rZW4gYnkgbWFraW5nIGEgdGVzdCByZXF1ZXN0XG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZVRva2VuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlZCBkYXRhXG4gICAqL1xuICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljc1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc3RhdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF0ZSBsaW1pdGVyIHN0YXRpc3RpY3NcbiAgICovXG4gIGdldFJhdGVMaW1pdGVyU3RhdHMoKTogeyB0b2tlbnM6IG51bWJlcjsgbWF4VG9rZW5zOiBudW1iZXI7IHdhaXRUaW1lOiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHRoaXMucmF0ZUxpbWl0ZXIuc3RhdHMoKTtcbiAgfVxufVxuIl19
@@ -1,13 +1,7 @@
1
- "use strict";
2
1
  /**
3
2
  * ProductBoard API Error Handling
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ServerError = exports.ValidationError = exports.RateLimitError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.ProductBoardError = void 0;
7
- exports.isRetryableError = isRetryableError;
8
- exports.getRetryDelay = getRetryDelay;
9
- exports.parseApiError = parseApiError;
10
- class ProductBoardError extends Error {
4
+ export class ProductBoardError extends Error {
11
5
  code;
12
6
  statusCode;
13
7
  details;
@@ -28,29 +22,25 @@ class ProductBoardError extends Error {
28
22
  };
29
23
  }
30
24
  }
31
- exports.ProductBoardError = ProductBoardError;
32
- class AuthenticationError extends ProductBoardError {
25
+ export class AuthenticationError extends ProductBoardError {
33
26
  constructor(message = 'Invalid or expired API token') {
34
27
  super(message, 'AUTHENTICATION_ERROR', 401);
35
28
  this.name = 'AuthenticationError';
36
29
  }
37
30
  }
38
- exports.AuthenticationError = AuthenticationError;
39
- class AuthorizationError extends ProductBoardError {
31
+ export class AuthorizationError extends ProductBoardError {
40
32
  constructor(message = 'Insufficient permissions for this operation') {
41
33
  super(message, 'AUTHORIZATION_ERROR', 403);
42
34
  this.name = 'AuthorizationError';
43
35
  }
44
36
  }
45
- exports.AuthorizationError = AuthorizationError;
46
- class NotFoundError extends ProductBoardError {
37
+ export class NotFoundError extends ProductBoardError {
47
38
  constructor(resource, id) {
48
39
  super(`${resource} with id '${id}' not found`, 'NOT_FOUND', 404);
49
40
  this.name = 'NotFoundError';
50
41
  }
51
42
  }
52
- exports.NotFoundError = NotFoundError;
53
- class RateLimitError extends ProductBoardError {
43
+ export class RateLimitError extends ProductBoardError {
54
44
  retryAfter;
55
45
  constructor(retryAfter = 60) {
56
46
  super(`Rate limit exceeded. Retry after ${retryAfter} seconds`, 'RATE_LIMIT_EXCEEDED', 429);
@@ -58,25 +48,22 @@ class RateLimitError extends ProductBoardError {
58
48
  this.retryAfter = retryAfter;
59
49
  }
60
50
  }
61
- exports.RateLimitError = RateLimitError;
62
- class ValidationError extends ProductBoardError {
51
+ export class ValidationError extends ProductBoardError {
63
52
  constructor(message, details) {
64
53
  super(message, 'VALIDATION_ERROR', 400, details);
65
54
  this.name = 'ValidationError';
66
55
  }
67
56
  }
68
- exports.ValidationError = ValidationError;
69
- class ServerError extends ProductBoardError {
57
+ export class ServerError extends ProductBoardError {
70
58
  constructor(message = 'ProductBoard server error') {
71
59
  super(message, 'SERVER_ERROR', 500);
72
60
  this.name = 'ServerError';
73
61
  }
74
62
  }
75
- exports.ServerError = ServerError;
76
63
  /**
77
64
  * Check if an error is retryable
78
65
  */
79
- function isRetryableError(error) {
66
+ export function isRetryableError(error) {
80
67
  if (error instanceof RateLimitError) {
81
68
  return true;
82
69
  }
@@ -91,7 +78,7 @@ function isRetryableError(error) {
91
78
  /**
92
79
  * Get retry delay for an error
93
80
  */
94
- function getRetryDelay(error, attempt) {
81
+ export function getRetryDelay(error, attempt) {
95
82
  if (error instanceof RateLimitError) {
96
83
  return error.retryAfter * 1000;
97
84
  }
@@ -101,7 +88,7 @@ function getRetryDelay(error, attempt) {
101
88
  /**
102
89
  * Parse API error response into appropriate error class
103
90
  */
104
- function parseApiError(statusCode, responseData, retryAfterHeader) {
91
+ export function parseApiError(statusCode, responseData, retryAfterHeader) {
105
92
  const message = responseData?.message || 'Unknown error';
106
93
  const details = responseData?.details;
107
94
  switch (statusCode) {
@@ -125,4 +112,4 @@ function parseApiError(statusCode, responseData, retryAfterHeader) {
125
112
  return new ProductBoardError(message, responseData?.code || 'UNKNOWN_ERROR', statusCode, details);
126
113
  }
127
114
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFtRkgsNENBV0M7QUFLRCxzQ0FNQztBQUtELHNDQTRCQztBQXhJRCxNQUFhLGlCQUFrQixTQUFRLEtBQUs7SUFDMUIsSUFBSSxDQUFTO0lBQ2IsVUFBVSxDQUFTO0lBQ25CLE9BQU8sQ0FBMkI7SUFFbEQsWUFDRSxPQUFlLEVBQ2YsSUFBWSxFQUNaLFVBQWtCLEVBQ2xCLE9BQWlDO1FBRWpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTNCRCw4Q0EyQkM7QUFFRCxNQUFhLG1CQUFvQixTQUFRLGlCQUFpQjtJQUN4RCxZQUFZLE9BQU8sR0FBRyw4QkFBOEI7UUFDbEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUxELGtEQUtDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDdkQsWUFBWSxP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QWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsS0FBSyxHQUFHO1lBQ04sT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLEtBQUssR0FBRztZQUNOLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssR0FBRztZQUNOLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEM7WUFDRSxPQUFPLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLElBQUksZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdEJvYXJkIEFQSSBFcnJvciBIYW5kbGluZ1xuICovXG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0Qm9hcmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1Byb2R1Y3RCb2FyZEVycm9yJztcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzQ29kZTogdGhpcy5zdGF0dXNDb2RlLFxuICAgICAgZGV0YWlsczogdGhpcy5kZXRhaWxzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBQcm9kdWN0Qm9hcmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnSW52YWxpZCBvciBleHBpcmVkIEFQSSB0b2tlbicpIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnQVVUSEVOVElDQVRJT05fRVJST1InLCA0MDEpO1xuICAgIHRoaXMubmFtZSA9ICdBdXRoZW50aWNhdGlvbkVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXV0aG9yaXphdGlvbkVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBvcGVyYXRpb24nKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ0FVVEhPUklaQVRJT05fRVJST1InLCA0MDMpO1xuICAgIHRoaXMubmFtZSA9ICdBdXRob3JpemF0aW9uRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNvdXJjZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYCR7cmVzb3VyY2V9IHdpdGggaWQgJyR7aWR9JyBub3QgZm91bmRgLCAnTk9UX0ZPVU5EJywgNDA0KTtcbiAgICB0aGlzLm5hbWUgPSAnTm90Rm91bmRFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhdGVMaW1pdEVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlcjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHJldHJ5QWZ0ZXIgPSA2MCkge1xuICAgIHN1cGVyKFxuICAgICAgYFJhdGUgbGltaXQgZXhjZWVkZWQuIFJldHJ5IGFmdGVyICR7cmV0cnlBZnRlcn0gc2Vjb25kc2AsXG4gICAgICAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICA0MjlcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdSYXRlTGltaXRFcnJvcic7XG4gICAgdGhpcy5yZXRyeUFmdGVyID0gcmV0cnlBZnRlcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHN1cGVyKG1lc3NhZ2UsICdWQUxJREFUSU9OX0VSUk9SJywgNDAwLCBkZXRhaWxzKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmVyRXJyb3IgZXh0ZW5kcyBQcm9kdWN0Qm9hcmRFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnUHJvZHVjdEJvYXJkIHNlcnZlciBlcnJvcicpIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnU0VSVkVSX0VSUk9SJywgNTAwKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VydmVyRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgcmV0cnlhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JldHJ5YWJsZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VydmVyRXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQcm9kdWN0Qm9hcmRFcnJvcikge1xuICAgIHJldHVybiBlcnJvci5zdGF0dXNDb2RlID49IDUwMDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHJldHJ5IGRlbGF5IGZvciBhbiBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmV0cnlEZWxheShlcnJvcjogdW5rbm93biwgYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmF0ZUxpbWl0RXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IucmV0cnlBZnRlciAqIDEwMDA7XG4gIH1cbiAgLy8gRXhwb25lbnRpYWwgYmFja29mZjogMXMsIDJzLCA0cywgOHMuLi5cbiAgcmV0dXJuIE1hdGgubWluKDEwMDAgKiBNYXRoLnBvdygyLCBhdHRlbXB0KSwgMzAwMDApO1xufVxuXG4vKipcbiAqIFBhcnNlIEFQSSBlcnJvciByZXNwb25zZSBpbnRvIGFwcHJvcHJpYXRlIGVycm9yIGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFwaUVycm9yKFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIHJlc3BvbnNlRGF0YT86IHsgY29kZT86IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZzsgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0sXG4gIHJldHJ5QWZ0ZXJIZWFkZXI/OiBzdHJpbmdcbik6IFByb2R1Y3RCb2FyZEVycm9yIHtcbiAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlRGF0YT8ubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIGNvbnN0IGRldGFpbHMgPSByZXNwb25zZURhdGE/LmRldGFpbHM7XG5cbiAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgY2FzZSA0MDA6XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBkZXRhaWxzKTtcbiAgICBjYXNlIDQwMTpcbiAgICAgIHJldHVybiBuZXcgQXV0aGVudGljYXRpb25FcnJvcihtZXNzYWdlKTtcbiAgICBjYXNlIDQwMzpcbiAgICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgIGNhc2UgNDA0OlxuICAgICAgcmV0dXJuIG5ldyBQcm9kdWN0Qm9hcmRFcnJvcihtZXNzYWdlLCAnTk9UX0ZPVU5EJywgNDA0LCBkZXRhaWxzKTtcbiAgICBjYXNlIDQyOTpcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSByZXRyeUFmdGVySGVhZGVyID8gcGFyc2VJbnQocmV0cnlBZnRlckhlYWRlciwgMTApIDogNjA7XG4gICAgICByZXR1cm4gbmV3IFJhdGVMaW1pdEVycm9yKHJldHJ5QWZ0ZXIpO1xuICAgIGNhc2UgNTAwOlxuICAgIGNhc2UgNTAyOlxuICAgIGNhc2UgNTAzOlxuICAgIGNhc2UgNTA0OlxuICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJFcnJvcihtZXNzYWdlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBQcm9kdWN0Qm9hcmRFcnJvcihtZXNzYWdlLCByZXNwb25zZURhdGE/LmNvZGUgfHwgJ1VOS05PV05fRVJST1InLCBzdGF0dXNDb2RlLCBkZXRhaWxzKTtcbiAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsS0FBSztJQUMxQixJQUFJLENBQVM7SUFDYixVQUFVLENBQVM7SUFDbkIsT0FBTyxDQUEyQjtJQUVsRCxZQUNFLE9BQWUsRUFDZixJQUFZLEVBQ1osVUFBa0IsRUFDbEIsT0FBaUM7UUFFakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQUN4RCxZQUFZLE9BQU8sR0FBRyw4QkFBOEI7UUFDbEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDdkQsWUFBWSxPQUFPLEdBQUcsNkNBQTZDO1FBQ2pFLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFC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LEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxLQUFLLEdBQUc7WUFDTixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLEdBQUc7WUFDTixPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDO1lBQ0UsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEcsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3RCb2FyZCBBUEkgRXJyb3IgSGFuZGxpbmdcbiAqL1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdEJvYXJkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdQcm9kdWN0Qm9hcmRFcnJvcic7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1c0NvZGU6IHRoaXMuc3RhdHVzQ29kZSxcbiAgICAgIGRldGFpbHM6IHRoaXMuZGV0YWlscyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0ludmFsaWQgb3IgZXhwaXJlZCBBUEkgdG9rZW4nKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ0FVVEhFTlRJQ0FUSU9OX0VSUk9SJywgNDAxKTtcbiAgICB0aGlzLm5hbWUgPSAnQXV0aGVudGljYXRpb25FcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25FcnJvciBleHRlbmRzIFByb2R1Y3RCb2FyZEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgb3BlcmF0aW9uJykge1xuICAgIHN1cGVyKG1lc3NhZ2UsICdBVVRIT1JJWkFUSU9OX0VSUk9SJywgNDAzKTtcbiAgICB0aGlzLm5hbWUgPSAnQXV0aG9yaXphdGlvbkVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFByb2R1Y3RCb2FyZEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzb3VyY2U6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGAke3Jlc291cmNlfSB3aXRoIGlkICcke2lkfScgbm90IGZvdW5kYCwgJ05PVF9GT1VORCcsIDQwNCk7XG4gICAgdGhpcy5uYW1lID0gJ05vdEZvdW5kRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFcnJvciBleHRlbmRzIFByb2R1Y3RCb2FyZEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHJldHJ5QWZ0ZXI6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihyZXRyeUFmdGVyID0gNjApIHtcbiAgICBzdXBlcihcbiAgICAgIGBSYXRlIGxpbWl0IGV4Y2VlZGVkLiBSZXRyeSBhZnRlciAke3JldHJ5QWZ0ZXJ9IHNlY29uZHNgLFxuICAgICAgJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgNDI5XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnUmF0ZUxpbWl0RXJyb3InO1xuICAgIHRoaXMucmV0cnlBZnRlciA9IHJldHJ5QWZ0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIFByb2R1Y3RCb2FyZEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnVkFMSURBVElPTl9FUlJPUicsIDQwMCwgZGV0YWlscyk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZlckVycm9yIGV4dGVuZHMgUHJvZHVjdEJvYXJkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1Byb2R1Y3RCb2FyZCBzZXJ2ZXIgZXJyb3InKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1NFUlZFUl9FUlJPUicsIDUwMCk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcnZlckVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVycm9yIGlzIHJldHJ5YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSYXRlTGltaXRFcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlcnZlckVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgUHJvZHVjdEJvYXJkRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzQ29kZSA+PSA1MDA7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCByZXRyeSBkZWxheSBmb3IgYW4gZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHJ5RGVsYXkoZXJyb3I6IHVua25vd24sIGF0dGVtcHQ6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLnJldHJ5QWZ0ZXIgKiAxMDAwO1xuICB9XG4gIC8vIEV4cG9uZW50aWFsIGJhY2tvZmY6IDFzLCAycywgNHMsIDhzLi4uXG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIDMwMDAwKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBBUEkgZXJyb3IgcmVzcG9uc2UgaW50byBhcHByb3ByaWF0ZSBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlFcnJvcihcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICByZXNwb25zZURhdGE/OiB7IGNvZGU/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LFxuICByZXRyeUFmdGVySGVhZGVyPzogc3RyaW5nXG4pOiBQcm9kdWN0Qm9hcmRFcnJvciB7XG4gIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZURhdGE/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICBjb25zdCBkZXRhaWxzID0gcmVzcG9uc2VEYXRhPy5kZXRhaWxzO1xuXG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgNDAwOlxuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZGV0YWlscyk7XG4gICAgY2FzZSA0MDE6XG4gICAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IobWVzc2FnZSk7XG4gICAgY2FzZSA0MDM6XG4gICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihtZXNzYWdlKTtcbiAgICBjYXNlIDQwNDpcbiAgICAgIHJldHVybiBuZXcgUHJvZHVjdEJvYXJkRXJyb3IobWVzc2FnZSwgJ05PVF9GT1VORCcsIDQwNCwgZGV0YWlscyk7XG4gICAgY2FzZSA0Mjk6XG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gcmV0cnlBZnRlckhlYWRlciA/IHBhcnNlSW50KHJldHJ5QWZ0ZXJIZWFkZXIsIDEwKSA6IDYwO1xuICAgICAgcmV0dXJuIG5ldyBSYXRlTGltaXRFcnJvcihyZXRyeUFmdGVyKTtcbiAgICBjYXNlIDUwMDpcbiAgICBjYXNlIDUwMjpcbiAgICBjYXNlIDUwMzpcbiAgICBjYXNlIDUwNDpcbiAgICAgIHJldHVybiBuZXcgU2VydmVyRXJyb3IobWVzc2FnZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgUHJvZHVjdEJvYXJkRXJyb3IobWVzc2FnZSwgcmVzcG9uc2VEYXRhPy5jb2RlIHx8ICdVTktOT1dOX0VSUk9SJywgc3RhdHVzQ29kZSwgZGV0YWlscyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,5 @@
1
- "use strict";
2
1
  /**
3
2
  * ProductBoard API Type Definitions
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdEJvYXJkIEFQSSBUeXBlIERlZmluaXRpb25zXG4gKi9cblxuLy8gQmFzZSB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRSZXNwb25zZTxUPiB7XG4gIGRhdGE6IFRbXTtcbiAgbGlua3M/OiB7XG4gICAgbmV4dD86IHN0cmluZztcbiAgICBwcmV2Pzogc3RyaW5nO1xuICB9O1xuICB0b3RhbFJlc3VsdHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRXJyb3Ige1xuICBjb2RlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBGZWF0dXJlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmUge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzdGF0dXM/OiBGZWF0dXJlU3RhdHVzO1xuICBwYXJlbnQ/OiB7XG4gICAgZmVhdHVyZT86IHsgaWQ6IHN0cmluZyB9O1xuICAgIHByb2R1Y3Q/OiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb21wb25lbnQ/OiB7IGlkOiBzdHJpbmcgfTtcbiAgfTtcbiAgb3duZXI/OiB7IGVtYWlsOiBzdHJpbmcgfTtcbiAgdGltZWZyYW1lPzogeyBzdGFydERhdGU/OiBzdHJpbmc7IGVuZERhdGU/OiBzdHJpbmcgfTtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBsaW5rcz86IHtcbiAgICBzZWxmOiBzdHJpbmc7XG4gICAgaHRtbDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdHVzID1cbiAgfCAnbmV3J1xuICB8ICdpbi1wcm9ncmVzcydcbiAgfCAnc2hpcHBlZCdcbiAgfCAnYXJjaGl2ZWQnXG4gIHwgJ3Bvc3Rwb25lZCdcbiAgfCAnY2FuZGlkYXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVGZWF0dXJlUGFyYW1zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RhdHVzPzogRmVhdHVyZVN0YXR1cztcbiAgcGFyZW50Pzoge1xuICAgIHByb2R1Y3Q/OiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb21wb25lbnQ/OiB7IGlkOiBzdHJpbmcgfTtcbiAgICBmZWF0dXJlPzogeyBpZDogc3RyaW5nIH07XG4gIH07XG4gIG93bmVyPzogeyBlbWFpbDogc3RyaW5nIH07XG4gIHRpbWVmcmFtZT86IHsgc3RhcnREYXRlPzogc3RyaW5nOyBlbmREYXRlPzogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRmVhdHVyZVBhcmFtcyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzdGF0dXM/OiBGZWF0dXJlU3RhdHVzO1xuICBwYXJlbnQ/OiB7XG4gICAgcHJvZHVjdD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbXBvbmVudD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGZlYXR1cmU/OiB7IGlkOiBzdHJpbmcgfTtcbiAgfTtcbiAgb3duZXI/OiB7IGVtYWlsOiBzdHJpbmcgfTtcbiAgdGltZWZyYW1lPzogeyBzdGFydERhdGU/OiBzdHJpbmc7IGVuZERhdGU/OiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmVhdHVyZXNQYXJhbXMge1xuICBwcm9kdWN0SWQ/OiBzdHJpbmc7XG4gIGNvbXBvbmVudElkPzogc3RyaW5nO1xuICBzdGF0dXM/OiBGZWF0dXJlU3RhdHVzO1xuICBvd25lcklkPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAgY3Vyc29yPzogc3RyaW5nO1xufVxuXG4vLyBQcm9kdWN0IHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmtzPzoge1xuICAgIHNlbGY6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcGFyZW50Pzoge1xuICAgIHByb2R1Y3Q/OiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb21wb25lbnQ/OiB7IGlkOiBzdHJpbmcgfTtcbiAgfTtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBsaW5rcz86IHtcbiAgICBzZWxmOiBzdHJpbmc7XG4gICAgaHRtbDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RIaWVyYXJjaHkge1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICBjb21wb25lbnRzOiBDb21wb25lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0UHJvZHVjdHNQYXJhbXMge1xuICBsaW1pdD86IG51bWJlcjtcbiAgY3Vyc29yPzogc3RyaW5nO1xufVxuXG4vLyBOb3RlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIE5vdGUge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xuICBkaXNwbGF5VXJsPzogc3RyaW5nO1xuICBzb3VyY2U/OiB7XG4gICAgb3JpZ2luPzogc3RyaW5nO1xuICAgIHJlY29yZF9pZD86IHN0cmluZztcbiAgfTtcbiAgdXNlcj86IHtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gIH07XG4gIGNvbXBhbnk/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfTtcbiAgdGFncz86IHN0cmluZ1tdO1xuICBmZWF0dXJlcz86IEFycmF5PHsgaWQ6IHN0cmluZyB9PjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBsaW5rcz86IHtcbiAgICBzZWxmOiBzdHJpbmc7XG4gICAgaHRtbDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vdGVQYXJhbXMge1xuICB0aXRsZT86IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xuICBkaXNwbGF5VXJsPzogc3RyaW5nO1xuICBzb3VyY2U/OiB7XG4gICAgb3JpZ2luPzogc3RyaW5nO1xuICAgIHJlY29yZF9pZD86IHN0cmluZztcbiAgfTtcbiAgdXNlcj86IHtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gIH07XG4gIGNvbXBhbnk/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfTtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3ROb3Rlc1BhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGNyZWF0ZWRGcm9tPzogc3RyaW5nO1xuICBjcmVhdGVkVG8/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoTm90ZVBhcmFtcyB7XG4gIG5vdGVJZDogc3RyaW5nO1xuICBmZWF0dXJlSWQ6IHN0cmluZztcbn1cblxuLy8gVXNlciB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgaWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcm9sZT86IHN0cmluZztcbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRVc2VyIGV4dGVuZHMgVXNlciB7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICB3b3Jrc3BhY2VOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RVc2Vyc1BhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG59XG5cbi8vIFNlYXJjaCB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlPzogJ2ZlYXR1cmUnIHwgJ25vdGUnIHwgJ3Byb2R1Y3QnIHwgJ2NvbXBvbmVudCc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdCB7XG4gIHR5cGU6ICdmZWF0dXJlJyB8ICdub3RlJyB8ICdwcm9kdWN0JyB8ICdjb21wb25lbnQnO1xuICBpZDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY29udGVudD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNjb3JlPzogbnVtYmVyO1xuICBsaW5rcz86IHtcbiAgICBzZWxmOiBzdHJpbmc7XG4gICAgaHRtbDogc3RyaW5nO1xuICB9O1xufVxuXG4vLyBQbHVnaW4gY29uZmlndXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Db25maWcge1xuICBhcGlUb2tlbjogc3RyaW5nO1xuICBhcGlCYXNlVXJsPzogc3RyaW5nO1xuICBjYWNoZVR0bFNlY29uZHM/OiBudW1iZXI7XG4gIHJhdGVMaW1pdFBlck1pbnV0ZT86IG51bWJlcjtcbn1cblxuLy8gT3BlbkNsYXcgUGx1Z2luIEFQSSB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBUb29sRGVmaW5pdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcGFyYW1ldGVyczoge1xuICAgIHR5cGU6ICdvYmplY3QnO1xuICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFBhcmFtZXRlclNjaGVtYT47XG4gICAgcmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgfTtcbiAgaGFuZGxlcjogKHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyU2NoZW1hIHtcbiAgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJyB8ICdhcnJheScgfCAnb2JqZWN0JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGVudW0/OiBzdHJpbmdbXTtcbiAgZGVmYXVsdD86IHVua25vd247XG4gIGl0ZW1zPzogUGFyYW1ldGVyU2NoZW1hO1xuICBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgUGFyYW1ldGVyU2NoZW1hPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BUEkge1xuICBjb25maWc6IFBsdWdpbkNvbmZpZztcbiAgcmVnaXN0ZXJUb29sOiAodG9vbDogVG9vbERlZmluaXRpb24pID0+IHZvaWQ7XG4gIGxvZzoge1xuICAgIGluZm86IChtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIHdhcm46IChtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIGVycm9yOiAobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZDtcbiAgICBkZWJ1ZzogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQ7XG4gIH07XG59XG4iXX0=
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm9kdWN0Qm9hcmQgQVBJIFR5cGUgRGVmaW5pdGlvbnNcbiAqL1xuXG4vLyBCYXNlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZFJlc3BvbnNlPFQ+IHtcbiAgZGF0YTogVFtdO1xuICBsaW5rcz86IHtcbiAgICBuZXh0Pzogc3RyaW5nO1xuICAgIHByZXY/OiBzdHJpbmc7XG4gIH07XG4gIHRvdGFsUmVzdWx0cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvciB7XG4gIGNvZGU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEZlYXR1cmUgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0YXR1cz86IEZlYXR1cmVTdGF0dXM7XG4gIHBhcmVudD86IHtcbiAgICBmZWF0dXJlPzogeyBpZDogc3RyaW5nIH07XG4gICAgcHJvZHVjdD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbXBvbmVudD86IHsgaWQ6IHN0cmluZyB9O1xuICB9O1xuICBvd25lcj86IHsgZW1haWw6IHN0cmluZyB9O1xuICB0aW1lZnJhbWU/OiB7IHN0YXJ0RGF0ZT86IHN0cmluZzsgZW5kRGF0ZT86IHN0cmluZyB9O1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmtzPzoge1xuICAgIHNlbGY6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0dXMgPVxuICB8ICduZXcnXG4gIHwgJ2luLXByb2dyZXNzJ1xuICB8ICdzaGlwcGVkJ1xuICB8ICdhcmNoaXZlZCdcbiAgfCAncG9zdHBvbmVkJ1xuICB8ICdjYW5kaWRhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZlYXR1cmVQYXJhbXMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzdGF0dXM/OiBGZWF0dXJlU3RhdHVzO1xuICBwYXJlbnQ/OiB7XG4gICAgcHJvZHVjdD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbXBvbmVudD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGZlYXR1cmU/OiB7IGlkOiBzdHJpbmcgfTtcbiAgfTtcbiAgb3duZXI/OiB7IGVtYWlsOiBzdHJpbmcgfTtcbiAgdGltZWZyYW1lPzogeyBzdGFydERhdGU/OiBzdHJpbmc7IGVuZERhdGU/OiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVGZWF0dXJlUGFyYW1zIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0YXR1cz86IEZlYXR1cmVTdGF0dXM7XG4gIHBhcmVudD86IHtcbiAgICBwcm9kdWN0PzogeyBpZDogc3RyaW5nIH07XG4gICAgY29tcG9uZW50PzogeyBpZDogc3RyaW5nIH07XG4gICAgZmVhdHVyZT86IHsgaWQ6IHN0cmluZyB9O1xuICB9O1xuICBvd25lcj86IHsgZW1haWw6IHN0cmluZyB9O1xuICB0aW1lZnJhbWU/OiB7IHN0YXJ0RGF0ZT86IHN0cmluZzsgZW5kRGF0ZT86IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RGZWF0dXJlc1BhcmFtcyB7XG4gIHByb2R1Y3RJZD86IHN0cmluZztcbiAgY29tcG9uZW50SWQ/OiBzdHJpbmc7XG4gIHN0YXR1cz86IEZlYXR1cmVTdGF0dXM7XG4gIG93bmVySWQ/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG59XG5cbi8vIFByb2R1Y3QgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgbGlua3M/OiB7XG4gICAgc2VsZjogc3RyaW5nO1xuICAgIGh0bWw6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnQge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXJlbnQ/OiB7XG4gICAgcHJvZHVjdD86IHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbXBvbmVudD86IHsgaWQ6IHN0cmluZyB9O1xuICB9O1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmtzPzoge1xuICAgIHNlbGY6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdEhpZXJhcmNoeSB7XG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIGNvbXBvbmVudHM6IENvbXBvbmVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RQcm9kdWN0c1BhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG59XG5cbi8vIE5vdGUgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgTm90ZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGRpc3BsYXlVcmw/OiBzdHJpbmc7XG4gIHNvdXJjZT86IHtcbiAgICBvcmlnaW4/OiBzdHJpbmc7XG4gICAgcmVjb3JkX2lkPzogc3RyaW5nO1xuICB9O1xuICB1c2VyPzoge1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfTtcbiAgY29tcGFueT86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9O1xuICB0YWdzPzogc3RyaW5nW107XG4gIGZlYXR1cmVzPzogQXJyYXk8eyBpZDogc3RyaW5nIH0+O1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmtzPzoge1xuICAgIHNlbGY6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTm90ZVBhcmFtcyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGRpc3BsYXlVcmw/OiBzdHJpbmc7XG4gIHNvdXJjZT86IHtcbiAgICBvcmlnaW4/OiBzdHJpbmc7XG4gICAgcmVjb3JkX2lkPzogc3RyaW5nO1xuICB9O1xuICB1c2VyPzoge1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfTtcbiAgY29tcGFueT86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9O1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE5vdGVzUGFyYW1zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgY3JlYXRlZEZyb20/OiBzdHJpbmc7XG4gIGNyZWF0ZWRUbz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hOb3RlUGFyYW1zIHtcbiAgbm90ZUlkOiBzdHJpbmc7XG4gIGZlYXR1cmVJZDogc3RyaW5nO1xufVxuXG4vLyBVc2VyIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICByb2xlPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudFVzZXIgZXh0ZW5kcyBVc2VyIHtcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFVzZXJzUGFyYW1zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbn1cblxuLy8gU2VhcmNoIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIHR5cGU/OiAnZmVhdHVyZScgfCAnbm90ZScgfCAncHJvZHVjdCcgfCAnY29tcG9uZW50JztcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgdHlwZTogJ2ZlYXR1cmUnIHwgJ25vdGUnIHwgJ3Byb2R1Y3QnIHwgJ2NvbXBvbmVudCc7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2NvcmU/OiBudW1iZXI7XG4gIGxpbmtzPzoge1xuICAgIHNlbGY6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbi8vIFBsdWdpbiBjb25maWd1cmF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZpZyB7XG4gIGFwaVRva2VuOiBzdHJpbmc7XG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG4gIGNhY2hlVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgcmF0ZUxpbWl0UGVyTWludXRlPzogbnVtYmVyO1xufVxuXG4vLyBPcGVuQ2xhdyBQbHVnaW4gQVBJIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xEZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiB7XG4gICAgdHlwZTogJ29iamVjdCc7XG4gICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUGFyYW1ldGVyU2NoZW1hPjtcbiAgICByZXF1aXJlZD86IHN0cmluZ1tdO1xuICB9O1xuICBoYW5kbGVyOiAocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJTY2hlbWEge1xuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2FycmF5JyB8ICdvYmplY3QnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZW51bT86IHN0cmluZ1tdO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbiAgaXRlbXM/OiBQYXJhbWV0ZXJTY2hlbWE7XG4gIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBQYXJhbWV0ZXJTY2hlbWE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkFQSSB7XG4gIGNvbmZpZzogUGx1Z2luQ29uZmlnO1xuICByZWdpc3RlclRvb2w6ICh0b29sOiBUb29sRGVmaW5pdGlvbikgPT4gdm9pZDtcbiAgbG9nOiB7XG4gICAgaW5mbzogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQ7XG4gICAgd2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQ7XG4gICAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIGRlYnVnOiAobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZDtcbiAgfTtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -4,11 +4,11 @@
4
4
  * Provides integration with ProductBoard for managing features, products,
5
5
  * customer feedback notes, and workspace users.
6
6
  */
7
- import { PluginAPI } from './client/types';
7
+ import { PluginAPI } from './client/types.js';
8
8
  /**
9
9
  * Plugin registration function called by OpenClaw
10
10
  */
11
11
  export default function register(api: PluginAPI): void;
12
- export type { PluginAPI, PluginConfig } from './client/types';
13
- export { ProductBoardClient } from './client/api-client';
14
- export { ProductBoardError } from './client/errors';
12
+ export type { PluginAPI, PluginConfig } from './client/types.js';
13
+ export { ProductBoardClient } from './client/api-client.js';
14
+ export { ProductBoardError } from './client/errors.js';