@payloadcms/graphql 3.0.0-alpha.3 → 3.0.0-alpha.31

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.
Files changed (74) hide show
  1. package/dist/index.js +27 -83
  2. package/dist/resolvers/auth/access.d.ts +1 -1
  3. package/dist/resolvers/auth/access.d.ts.map +1 -1
  4. package/dist/resolvers/auth/access.js +8 -23
  5. package/dist/resolvers/auth/forgotPassword.js +6 -16
  6. package/dist/resolvers/auth/init.d.ts +1 -1
  7. package/dist/resolvers/auth/init.d.ts.map +1 -1
  8. package/dist/resolvers/auth/init.js +6 -16
  9. package/dist/resolvers/auth/login.d.ts +1 -4
  10. package/dist/resolvers/auth/login.d.ts.map +1 -1
  11. package/dist/resolvers/auth/login.js +8 -18
  12. package/dist/resolvers/auth/logout.js +8 -18
  13. package/dist/resolvers/auth/me.js +6 -16
  14. package/dist/resolvers/auth/refresh.d.ts +1 -2
  15. package/dist/resolvers/auth/refresh.d.ts.map +1 -1
  16. package/dist/resolvers/auth/refresh.js +9 -19
  17. package/dist/resolvers/auth/resetPassword.d.ts +1 -2
  18. package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
  19. package/dist/resolvers/auth/resetPassword.js +8 -18
  20. package/dist/resolvers/auth/unlock.d.ts +1 -1
  21. package/dist/resolvers/auth/unlock.d.ts.map +1 -1
  22. package/dist/resolvers/auth/unlock.js +6 -16
  23. package/dist/resolvers/auth/verifyEmail.d.ts +1 -1
  24. package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
  25. package/dist/resolvers/auth/verifyEmail.js +6 -16
  26. package/dist/resolvers/collections/create.js +6 -16
  27. package/dist/resolvers/collections/delete.js +8 -18
  28. package/dist/resolvers/collections/docAccess.js +6 -16
  29. package/dist/resolvers/collections/find.js +8 -18
  30. package/dist/resolvers/collections/findByID.js +8 -18
  31. package/dist/resolvers/collections/findVersionByID.js +8 -18
  32. package/dist/resolvers/collections/findVersions.js +8 -18
  33. package/dist/resolvers/collections/restoreVersion.js +6 -16
  34. package/dist/resolvers/collections/update.js +8 -18
  35. package/dist/resolvers/globals/docAccess.js +6 -16
  36. package/dist/resolvers/globals/findOne.js +6 -16
  37. package/dist/resolvers/globals/findVersionByID.js +6 -16
  38. package/dist/resolvers/globals/findVersions.js +6 -16
  39. package/dist/resolvers/globals/index.d.ts +5 -5
  40. package/dist/resolvers/globals/index.d.ts.map +1 -1
  41. package/dist/resolvers/globals/index.js +7 -38
  42. package/dist/resolvers/globals/restoreVersion.js +6 -16
  43. package/dist/resolvers/globals/update.js +6 -16
  44. package/dist/resolvers/types.js +2 -5
  45. package/dist/schema/buildFallbackLocaleInputType.js +6 -21
  46. package/dist/schema/buildLocaleInputType.js +6 -21
  47. package/dist/schema/buildMutationInputType.js +53 -75
  48. package/dist/schema/buildObjectType.js +55 -70
  49. package/dist/schema/buildPaginatedListType.js +15 -25
  50. package/dist/schema/buildPoliciesType.js +27 -53
  51. package/dist/schema/buildWhereInputType.js +19 -34
  52. package/dist/schema/fieldToWhereInputSchemaMap.js +33 -48
  53. package/dist/schema/initCollections.js +120 -135
  54. package/dist/schema/initGlobals.js +41 -56
  55. package/dist/schema/isFieldNullable.js +4 -14
  56. package/dist/schema/operators.js +2 -12
  57. package/dist/schema/recursivelyBuildNestedPaths.js +9 -24
  58. package/dist/schema/withNullableType.js +4 -14
  59. package/dist/schema/withOperators.js +80 -84
  60. package/dist/utilities/combineParentName.js +4 -19
  61. package/dist/utilities/formatName.js +2 -12
  62. package/dist/utilities/formatName.spec.js +3 -12
  63. package/dist/utilities/formatOptions.js +5 -20
  64. package/dist/utilities/getCheckIfLocaleObject.js +2 -12
  65. package/dist/utilities/groupOrTabHasRequiredSubfield.js +4 -14
  66. package/dist/utilities/uppercase.js +2 -12
  67. package/dist/utilities/wrapCustomResolver.d.ts +2 -2
  68. package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
  69. package/dist/utilities/wrapCustomResolver.js +4 -14
  70. package/package.json +4 -3
  71. package/src/index.ts +7 -7
  72. package/dist/utilities/isolateTransactionID.d.ts +0 -2
  73. package/dist/utilities/isolateTransactionID.d.ts.map +0 -1
  74. package/dist/utilities/isolateTransactionID.js +0 -3
@@ -1,38 +1,23 @@
1
- /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */ "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _graphql = require("graphql");
12
- const _graphqlscalars = require("graphql-scalars");
13
- const _graphqltypejson = require("graphql-type-json");
14
- const _types = require("payload/types");
15
- const _utilities = require("payload/utilities");
16
- const _combineParentName = /*#__PURE__*/ _interop_require_default(require("../utilities/combineParentName"));
17
- const _formatName = /*#__PURE__*/ _interop_require_default(require("../utilities/formatName"));
18
- const _formatOptions = /*#__PURE__*/ _interop_require_default(require("../utilities/formatOptions"));
19
- const _buildWhereInputType = /*#__PURE__*/ _interop_require_default(require("./buildWhereInputType"));
20
- const _isFieldNullable = /*#__PURE__*/ _interop_require_default(require("./isFieldNullable"));
21
- const _withNullableType = /*#__PURE__*/ _interop_require_default(require("./withNullableType"));
22
- function _interop_require_default(obj) {
23
- return obj && obj.__esModule ? obj : {
24
- default: obj
25
- };
26
- }
1
+ /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */ import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
2
+ import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
3
+ /* eslint-disable no-use-before-define */ import { GraphQLJSON } from 'graphql-type-json';
4
+ import { tabHasName } from 'payload/types';
5
+ import { toWords } from 'payload/utilities';
6
+ import combineParentName from '../utilities/combineParentName.js';
7
+ import formatName from '../utilities/formatName.js';
8
+ import formatOptions from '../utilities/formatOptions.js';
9
+ import buildWhereInputType from './buildWhereInputType.js';
10
+ import isFieldNullable from './isFieldNullable.js';
11
+ import withNullableType from './withNullableType.js';
27
12
  function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentName, graphqlResult, config }) {
28
13
  const fieldToSchemaMap = {
29
14
  array: (objectTypeConfig, field)=>{
30
- const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
15
+ const interfaceName = field?.interfaceName || combineParentName(parentName, toWords(field.name, true));
31
16
  if (!graphqlResult.types.arrayTypes[interfaceName]) {
32
17
  const objectType = buildObjectType({
33
18
  name: interfaceName,
34
19
  fields: field.fields,
35
- forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
20
+ forceNullable: isFieldNullable(field, forceNullable),
36
21
  parentName: interfaceName,
37
22
  graphqlResult,
38
23
  config
@@ -44,18 +29,18 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
44
29
  if (!graphqlResult.types.arrayTypes[interfaceName]) {
45
30
  return objectTypeConfig;
46
31
  }
47
- const arrayType = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]));
32
+ const arrayType = new GraphQLList(new GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]));
48
33
  return {
49
34
  ...objectTypeConfig,
50
35
  [field.name]: {
51
- type: (0, _withNullableType.default)(field, arrayType)
36
+ type: withNullableType(field, arrayType)
52
37
  }
53
38
  };
54
39
  },
55
40
  blocks: (objectTypeConfig, field)=>{
56
41
  const blockTypes = field.blocks.reduce((acc, block)=>{
57
42
  if (!graphqlResult.types.blockTypes[block.slug]) {
58
- const interfaceName = block?.interfaceName || block?.graphQL?.singularName || (0, _utilities.toWords)(block.slug, true);
43
+ const interfaceName = block?.interfaceName || block?.graphQL?.singularName || toWords(block.slug, true);
59
44
  const objectType = buildObjectType({
60
45
  name: interfaceName,
61
46
  fields: [
@@ -82,8 +67,8 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
82
67
  if (blockTypes.length === 0) {
83
68
  return objectTypeConfig;
84
69
  }
85
- const fullName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
86
- const type = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(new _graphql.GraphQLUnionType({
70
+ const fullName = combineParentName(parentName, toWords(field.name, true));
71
+ const type = new GraphQLList(new GraphQLNonNull(new GraphQLUnionType({
87
72
  name: fullName,
88
73
  resolveType: (data)=>graphqlResult.types.blockTypes[data.blockType].name,
89
74
  types: blockTypes
@@ -91,20 +76,20 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
91
76
  return {
92
77
  ...objectTypeConfig,
93
78
  [field.name]: {
94
- type: (0, _withNullableType.default)(field, type)
79
+ type: withNullableType(field, type)
95
80
  }
96
81
  };
97
82
  },
98
83
  checkbox: (objectTypeConfig, field)=>({
99
84
  ...objectTypeConfig,
100
85
  [field.name]: {
101
- type: (0, _withNullableType.default)(field, _graphql.GraphQLBoolean, forceNullable)
86
+ type: withNullableType(field, GraphQLBoolean, forceNullable)
102
87
  }
103
88
  }),
104
89
  code: (objectTypeConfig, field)=>({
105
90
  ...objectTypeConfig,
106
91
  [field.name]: {
107
- type: (0, _withNullableType.default)(field, _graphql.GraphQLString, forceNullable)
92
+ type: withNullableType(field, GraphQLString, forceNullable)
108
93
  }
109
94
  }),
110
95
  collapsible: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField)=>{
@@ -115,22 +100,22 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
115
100
  date: (objectTypeConfig, field)=>({
116
101
  ...objectTypeConfig,
117
102
  [field.name]: {
118
- type: (0, _withNullableType.default)(field, _graphqlscalars.DateTimeResolver, forceNullable)
103
+ type: withNullableType(field, DateTimeResolver, forceNullable)
119
104
  }
120
105
  }),
121
106
  email: (objectTypeConfig, field)=>({
122
107
  ...objectTypeConfig,
123
108
  [field.name]: {
124
- type: (0, _withNullableType.default)(field, _graphqlscalars.EmailAddressResolver, forceNullable)
109
+ type: withNullableType(field, EmailAddressResolver, forceNullable)
125
110
  }
126
111
  }),
127
112
  group: (objectTypeConfig, field)=>{
128
- const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
113
+ const interfaceName = field?.interfaceName || combineParentName(parentName, toWords(field.name, true));
129
114
  if (!graphqlResult.types.groupTypes[interfaceName]) {
130
115
  const objectType = buildObjectType({
131
116
  name: interfaceName,
132
117
  fields: field.fields,
133
- forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
118
+ forceNullable: isFieldNullable(field, forceNullable),
134
119
  parentName: interfaceName,
135
120
  graphqlResult,
136
121
  config
@@ -152,30 +137,30 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
152
137
  json: (objectTypeConfig, field)=>({
153
138
  ...objectTypeConfig,
154
139
  [field.name]: {
155
- type: (0, _withNullableType.default)(field, _graphqltypejson.GraphQLJSON, forceNullable)
140
+ type: withNullableType(field, GraphQLJSON, forceNullable)
156
141
  }
157
142
  }),
158
143
  number: (objectTypeConfig, field)=>{
159
- const type = field?.name === 'id' ? _graphql.GraphQLInt : _graphql.GraphQLFloat;
144
+ const type = field?.name === 'id' ? GraphQLInt : GraphQLFloat;
160
145
  return {
161
146
  ...objectTypeConfig,
162
147
  [field.name]: {
163
- type: (0, _withNullableType.default)(field, field?.hasMany === true ? new _graphql.GraphQLList(type) : type, forceNullable)
148
+ type: withNullableType(field, field?.hasMany === true ? new GraphQLList(type) : type, forceNullable)
164
149
  }
165
150
  };
166
151
  },
167
152
  point: (objectTypeConfig, field)=>({
168
153
  ...objectTypeConfig,
169
154
  [field.name]: {
170
- type: (0, _withNullableType.default)(field, new _graphql.GraphQLList(new _graphql.GraphQLNonNull(_graphql.GraphQLFloat)), forceNullable)
155
+ type: withNullableType(field, new GraphQLList(new GraphQLNonNull(GraphQLFloat)), forceNullable)
171
156
  }
172
157
  }),
173
158
  radio: (objectTypeConfig, field)=>({
174
159
  ...objectTypeConfig,
175
160
  [field.name]: {
176
- type: (0, _withNullableType.default)(field, new _graphql.GraphQLEnumType({
177
- name: (0, _combineParentName.default)(parentName, field.name),
178
- values: (0, _formatOptions.default)(field)
161
+ type: withNullableType(field, new GraphQLEnumType({
162
+ name: combineParentName(parentName, field.name),
163
+ values: formatOptions(field)
179
164
  }), forceNullable)
180
165
  }
181
166
  }),
@@ -183,28 +168,28 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
183
168
  const { relationTo } = field;
184
169
  const isRelatedToManyCollections = Array.isArray(relationTo);
185
170
  const hasManyValues = field.hasMany;
186
- const relationshipName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
171
+ const relationshipName = combineParentName(parentName, toWords(field.name, true));
187
172
  let type;
188
173
  let relationToType = null;
189
174
  if (Array.isArray(relationTo)) {
190
- relationToType = new _graphql.GraphQLEnumType({
175
+ relationToType = new GraphQLEnumType({
191
176
  name: `${relationshipName}_RelationTo`,
192
177
  values: relationTo.reduce((relations, relation)=>({
193
178
  ...relations,
194
- [(0, _formatName.default)(relation)]: {
179
+ [formatName(relation)]: {
195
180
  value: relation
196
181
  }
197
182
  }), {})
198
183
  });
199
184
  const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
200
- type = new _graphql.GraphQLObjectType({
185
+ type = new GraphQLObjectType({
201
186
  name: `${relationshipName}_Relationship`,
202
187
  fields: {
203
188
  relationTo: {
204
189
  type: relationToType
205
190
  },
206
191
  value: {
207
- type: new _graphql.GraphQLUnionType({
192
+ type: new GraphQLUnionType({
208
193
  name: relationshipName,
209
194
  async resolveType (data, { req }) {
210
195
  return graphqlResult.collections[data.collection].graphQL.type.name;
@@ -317,7 +302,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
317
302
  }
318
303
  return null;
319
304
  },
320
- type: (0, _withNullableType.default)(field, hasManyValues ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(type)) : type, forceNullable)
305
+ type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable)
321
306
  };
322
307
  return {
323
308
  ...objectTypeConfig,
@@ -329,7 +314,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
329
314
  [field.name]: {
330
315
  args: {
331
316
  depth: {
332
- type: _graphql.GraphQLInt
317
+ type: GraphQLInt
333
318
  }
334
319
  },
335
320
  async resolve (parent, args, context) {
@@ -357,7 +342,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
357
342
  }
358
343
  return parent[field.name];
359
344
  },
360
- type: (0, _withNullableType.default)(field, _graphqltypejson.GraphQLJSON, forceNullable)
345
+ type: withNullableType(field, GraphQLJSON, forceNullable)
361
346
  }
362
347
  }),
363
348
  row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
@@ -366,13 +351,13 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
366
351
  return objectTypeConfigWithRowFields;
367
352
  }, objectTypeConfig),
368
353
  select: (objectTypeConfig, field)=>{
369
- const fullName = (0, _combineParentName.default)(parentName, field.name);
370
- let type = new _graphql.GraphQLEnumType({
354
+ const fullName = combineParentName(parentName, field.name);
355
+ let type = new GraphQLEnumType({
371
356
  name: fullName,
372
- values: (0, _formatOptions.default)(field)
357
+ values: formatOptions(field)
373
358
  });
374
- type = field.hasMany ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(type)) : type;
375
- type = (0, _withNullableType.default)(field, type, forceNullable);
359
+ type = field.hasMany ? new GraphQLList(new GraphQLNonNull(type)) : type;
360
+ type = withNullableType(field, type, forceNullable);
376
361
  return {
377
362
  ...objectTypeConfig,
378
363
  [field.name]: {
@@ -381,8 +366,8 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
381
366
  };
382
367
  },
383
368
  tabs: (objectTypeConfig, field)=>field.tabs.reduce((tabSchema, tab)=>{
384
- if ((0, _types.tabHasName)(tab)) {
385
- const interfaceName = tab?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(tab.name, true));
369
+ if (tabHasName(tab)) {
370
+ const interfaceName = tab?.interfaceName || combineParentName(parentName, toWords(tab.name, true));
386
371
  if (!graphqlResult.types.groupTypes[interfaceName]) {
387
372
  const objectType = buildObjectType({
388
373
  name: interfaceName,
@@ -418,23 +403,23 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
418
403
  text: (objectTypeConfig, field)=>({
419
404
  ...objectTypeConfig,
420
405
  [field.name]: {
421
- type: (0, _withNullableType.default)(field, field.hasMany === true ? new _graphql.GraphQLList(_graphql.GraphQLString) : _graphql.GraphQLString, forceNullable)
406
+ type: withNullableType(field, field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString, forceNullable)
422
407
  }
423
408
  }),
424
409
  textarea: (objectTypeConfig, field)=>({
425
410
  ...objectTypeConfig,
426
411
  [field.name]: {
427
- type: (0, _withNullableType.default)(field, _graphql.GraphQLString, forceNullable)
412
+ type: withNullableType(field, GraphQLString, forceNullable)
428
413
  }
429
414
  }),
430
415
  upload: (objectTypeConfig, field)=>{
431
416
  const { relationTo } = field;
432
- const uploadName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
417
+ const uploadName = combineParentName(parentName, toWords(field.name, true));
433
418
  // If the relationshipType is undefined at this point,
434
419
  // it can be assumed that this blockType can have a relationship
435
420
  // to itself. Therefore, we set the relationshipType equal to the blockType
436
421
  // that is currently being created.
437
- const type = (0, _withNullableType.default)(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
422
+ const type = withNullableType(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
438
423
  const uploadArgs = {};
439
424
  if (config.localization) {
440
425
  uploadArgs.locale = {
@@ -475,7 +460,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
475
460
  };
476
461
  const whereFields = graphqlResult.collections[relationTo].config.fields;
477
462
  upload.args.where = {
478
- type: (0, _buildWhereInputType.default)({
463
+ type: buildWhereInputType({
479
464
  name: uploadName,
480
465
  fields: whereFields,
481
466
  parentName: uploadName
@@ -500,9 +485,9 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
500
485
  };
501
486
  }, baseFields)
502
487
  };
503
- const newlyCreatedBlockType = new _graphql.GraphQLObjectType(objectSchema);
488
+ const newlyCreatedBlockType = new GraphQLObjectType(objectSchema);
504
489
  return newlyCreatedBlockType;
505
490
  }
506
- const _default = buildObjectType;
491
+ export default buildObjectType;
507
492
 
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGRPYmplY3RUeXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEZpZWxkQ29uZmlnLCBHcmFwaFFMVHlwZSB9IGZyb20gJ2dyYXBocWwnXG5cbmltcG9ydCB7XG4gIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRW51bVR5cGUsXG4gIEdyYXBoUUxGbG9hdCxcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxOb25OdWxsLFxuICBHcmFwaFFMT2JqZWN0VHlwZSxcbiAgR3JhcGhRTFN0cmluZyxcbiAgR3JhcGhRTFVuaW9uVHlwZSxcbn0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IERhdGVUaW1lUmVzb2x2ZXIsIEVtYWlsQWRkcmVzc1Jlc29sdmVyIH0gZnJvbSAnZ3JhcGhxbC1zY2FsYXJzJ1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbmltcG9ydCB7IEdyYXBoUUxKU09OIH0gZnJvbSAnZ3JhcGhxbC10eXBlLWpzb24nXG5cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEluZm8gfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHtcbiAgUmljaFRleHRBZGFwdGVyLFxuICBTYW5pdGl6ZWRDb25maWcsXG4gIEFycmF5RmllbGQsXG4gIEJsb2NrRmllbGQsXG4gIENoZWNrYm94RmllbGQsXG4gIENvZGVGaWVsZCxcbiAgQ29sbGFwc2libGVGaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgR3JvdXBGaWVsZCxcbiAgSlNPTkZpZWxkLFxuICBOdW1iZXJGaWVsZCxcbiAgUG9pbnRGaWVsZCxcbiAgUmFkaW9GaWVsZCxcbiAgUmVsYXRpb25zaGlwRmllbGQsXG4gIFJpY2hUZXh0RmllbGQsXG4gIFJvd0ZpZWxkLFxuICBTZWxlY3RGaWVsZCxcbiAgVGFic0ZpZWxkLFxuICBUZXh0RmllbGQsXG4gIFRleHRhcmVhRmllbGQsXG4gIFVwbG9hZEZpZWxkLFxufSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcbmltcG9ydCBjb21iaW5lUGFyZW50TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvY29tYmluZVBhcmVudE5hbWUnXG5pbXBvcnQgZm9ybWF0TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0TmFtZSdcbmltcG9ydCBmb3JtYXRPcHRpb25zIGZyb20gJy4uL3V0aWxpdGllcy9mb3JtYXRPcHRpb25zJ1xuaW1wb3J0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgZnJvbSAnLi9idWlsZFdoZXJlSW5wdXRUeXBlJ1xuaW1wb3J0IGlzRmllbGROdWxsYWJsZSBmcm9tICcuL2lzRmllbGROdWxsYWJsZSdcbmltcG9ydCB3aXRoTnVsbGFibGVUeXBlIGZyb20gJy4vd2l0aE51bGxhYmxlVHlwZSdcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9yZXNvbHZlcnMvdHlwZXMnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBncmFwaHFsUmVzdWx0OiBHcmFwaFFMSW5mb1xuICBjb25maWc6IFNhbml0aXplZENvbmZpZ1xufVxuXG5mdW5jdGlvbiBidWlsZE9iamVjdFR5cGUoe1xuICBuYW1lLFxuICBiYXNlRmllbGRzID0ge30sXG4gIGZpZWxkcyxcbiAgZm9yY2VOdWxsYWJsZSxcbiAgcGFyZW50TmFtZSxcbiAgZ3JhcGhxbFJlc3VsdCxcbiAgY29uZmlnLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgIGdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IG9iamVjdFR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBuZXcgR3JhcGhRTExpc3QoXG4gICAgICAgIG5ldyBHcmFwaFFMTm9uTnVsbChncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXM6IEdyYXBoUUxPYmplY3RUeXBlPGFueSwgYW55PltdID0gZmllbGQuYmxvY2tzLnJlZHVjZSgoYWNjLCBibG9jaykgPT4ge1xuICAgICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG5cbiAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gb2JqZWN0VHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pIHtcbiAgICAgICAgICBhY2MucHVzaChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBbXSlcblxuICAgICAgaWYgKGJsb2NrVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgY29uc3QgdHlwZSA9IG5ldyBHcmFwaFFMTGlzdChcbiAgICAgICAgbmV3IEdyYXBoUUxOb25OdWxsKFxuICAgICAgICAgIG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICAgICAgcmVzb2x2ZVR5cGU6IChkYXRhKSA9PiBncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbZGF0YS5ibG9ja1R5cGVdLm5hbWUsXG4gICAgICAgICAgICB0eXBlczogYmxvY2tUeXBlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIHR5cGUpIH0sXG4gICAgICB9XG4gICAgfSxcbiAgICBjaGVja2JveDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDaGVja2JveEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMQm9vbGVhbiwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2RlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvZGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2xsYXBzaWJsZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDb2xsYXBzaWJsZUZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMsIHN1YkZpZWxkKVxuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgZGF0ZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBEYXRlRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIERhdGVUaW1lUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZW1haWw6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogRW1haWxGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRW1haWxBZGRyZXNzUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZ3JvdXA6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogR3JvdXBGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJmYWNlTmFtZSA9XG4gICAgICAgIGZpZWxkPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHMoZmllbGQubmFtZSwgdHJ1ZSkpXG5cbiAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZTogaXNGaWVsZE51bGxhYmxlKGZpZWxkLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICBncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0gPSBvYmplY3RUeXBlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKGNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQXJncy5sb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5sb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmZhbGxiYWNrTG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0ge1xuICAgICAgICBhcmdzOiByZWxhdGlvbnNoaXBBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDEwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBsZXQgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgaWYgKGhhc01hbnlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVQb3B1bGF0aW9uUHJvbWlzZSA9IGFzeW5jIChyZWxhdGVkRG9jLCBpKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IHJlbGF0ZWREb2NcbiAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnID0gcmVsYXRlZERvYy5yZWxhdGlvblRvXG4gICAgICAgICAgICAgICAgaWQgPSByZWxhdGVkRG9jLnZhbHVlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LnJlcS5wYXlsb2FkRGF0YUxvYWRlci5sb2FkKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlcy5wdXNoKGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlKHJlbGF0ZWREb2MsIGkpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWVcbiAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGlkID0gdmFsdWUudmFsdWVcbiAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IHZhbHVlLnJlbGF0aW9uVG9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHJlbGF0ZWREb2N1bWVudCkge1xuICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVsYXRlZERvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZWxhdGVkRG9jdW1lbnRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGhhc01hbnlWYWx1ZXMgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGUsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiByZWxhdGlvbnNoaXAsXG4gICAgICB9XG4gICAgfSxcbiAgICByaWNoVGV4dDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBSaWNoVGV4dEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXToge1xuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgZGVwdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxJbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgICBsZXQgZGVwdGggPSBjb25maWcuZGVmYXVsdERlcHRoXG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmRlcHRoICE9PSAndW5kZWZpbmVkJykgZGVwdGggPSBhcmdzLmRlcHRoXG4gICAgICAgICAgY29uc3QgZWRpdG9yOiBSaWNoVGV4dEFkYXB0ZXIgPSBmaWVsZD8uZWRpdG9yXG5cbiAgICAgICAgICAvLyBSaWNoVGV4dCBmaWVsZHMgaGF2ZSB0aGVpciBvd24gZGVwdGggYXJndW1lbnQgaW4gR3JhcGhRTC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHdoeSB0aGUgcG9wdWxhdGlvblByb21pc2UgKHdoaWNoIHBvcHVsYXRlcyByaWNodGV4dCBmaWVsZHMgbGlrZSB1cGxvYWRzIGFuZCByZWxhdGlvbnNoaXBzKVxuICAgICAgICAgIC8vIGlzIHJ1biBoZXJlIGFnYWluLCB3aXRoIHRoZSBwcm92aWRlZCBkZXB0aC5cbiAgICAgICAgICAvLyBJbiB0aGUgZ3JhcGhxbCBmaW5kLnRzIHJlc29sdmVyLCB0aGUgZGVwdGggaXMgdGhlbiBoYXJkLWNvZGVkIHRvIDAuXG4gICAgICAgICAgLy8gRWZmZWN0aXZlbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgcG9wdWxhdGlvblByb21pc2UgZm9yIEdyYXBoUUwgaXMgb25seSBydW4gaGVyZSwgYW5kIG5vdCBpbiB0aGUgZmluZC50cyByZXNvbHZlciAvIG5vcm1hbCBwb3B1bGF0aW9uIHByb21pc2UuXG4gICAgICAgICAgaWYgKGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2Uoe1xuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpbmRNYW55OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmxhdHRlbkxvY2FsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBvdmVycmlkZUFjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlczogW10sXG4gICAgICAgICAgICAgIHJlcTogY29udGV4dC5yZXEsXG4gICAgICAgICAgICAgIHNob3dIaWRkZW5GaWVsZHM6IGZhbHNlLFxuICAgICAgICAgICAgICBzaWJsaW5nRG9jOiBwYXJlbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTEpTT04sIGZvcmNlTnVsbGFibGUpLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICByb3c6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUm93RmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzLCBzdWJGaWVsZClcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBzZWxlY3Q6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogU2VsZWN0RmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgZmllbGQubmFtZSlcblxuICAgICAgbGV0IHR5cGU6IEdyYXBoUUxUeXBlID0gbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICB2YWx1ZXM6IGZvcm1hdE9wdGlvbnMoZmllbGQpLFxuICAgICAgfSlcblxuICAgICAgdHlwZSA9IGZpZWxkLmhhc01hbnkgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGVcbiAgICAgIHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCB0eXBlLCBmb3JjZU51bGxhYmxlKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdGFiczogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUYWJzRmllbGQpID0+XG4gICAgICBmaWVsZC50YWJzLnJlZHVjZSgodGFiU2NoZW1hLCB0YWIpID0+IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgdGFiPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHModGFiLm5hbWUsIHRydWUpKVxuXG4gICAgICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBuYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgICBmaWVsZHM6IHRhYi5maWVsZHMsXG4gICAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdID0gb2JqZWN0VHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiU2NoZW1hXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRhYlNjaGVtYSxcbiAgICAgICAgICAgIFt0YWIubmFtZV06IHsgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgLi4udGFiLmZpZWxkcy5yZWR1Y2UoKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGRTY2hlbWFcbiAgICAgICAgICB9LCB0YWJTY2hlbWEpLFxuICAgICAgICB9XG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICB0ZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBmaWVsZC5oYXNNYW55ID09PSB0cnVlID8gbmV3IEdyYXBoUUxMaXN0KEdyYXBoUUxTdHJpbmcpIDogR3JhcGhRTFN0cmluZyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICB0ZXh0YXJlYTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0YXJlYUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHVwbG9hZDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBVcGxvYWRGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgeyByZWxhdGlvblRvIH0gPSBmaWVsZFxuXG4gICAgICBjb25zdCB1cGxvYWROYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgLy8gSWYgdGhlIHJlbGF0aW9uc2hpcFR5cGUgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsXG4gICAgICAvLyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IHRoaXMgYmxvY2tUeXBlIGNhbiBoYXZlIGEgcmVsYXRpb25zaGlwXG4gICAgICAvLyB0byBpdHNlbGYuIFRoZXJlZm9yZSwgd2Ugc2V0IHRoZSByZWxhdGlvbnNoaXBUeXBlIGVxdWFsIHRvIHRoZSBibG9ja1R5cGVcbiAgICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQuXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5ncmFwaFFMLnR5cGUgfHwgbmV3bHlDcmVhdGVkQmxvY2tUeXBlLFxuICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1cGxvYWRBcmdzID0ge30gYXMgTG9jYWxlSW5wdXRUeXBlXG5cbiAgICAgIGlmIChjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHVwbG9hZEFyZ3MubG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG5cbiAgICAgICAgdXBsb2FkQXJncy5mYWxsYmFja0xvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IGZpZWxkLnJlbGF0aW9uVG9cblxuICAgICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgICBhcmdzOiB1cGxvYWRBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDIwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlXG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudCB8fCBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZSxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2hlcmVGaWVsZHMgPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgdXBsb2FkLmFyZ3Mud2hlcmUgPSB7XG4gICAgICAgIHR5cGU6IGJ1aWxkV2hlcmVJbnB1dFR5cGUoe1xuICAgICAgICAgIG5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgZmllbGRzOiB3aGVyZUZpZWxkcyxcbiAgICAgICAgICBwYXJlbnROYW1lOiB1cGxvYWROYW1lLFxuICAgICAgICB9KSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB1cGxvYWQsXG4gICAgICB9XG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IG9iamVjdFNjaGVtYSA9IHtcbiAgICBuYW1lLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGZpZWxkcy5yZWR1Y2UoKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gZmllbGRUb1NjaGVtYU1hcFtmaWVsZC50eXBlXVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRTY2hlbWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICAgIC4uLmZpZWxkU2NoZW1hKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSxcbiAgICAgICAgfVxuICAgICAgfSwgYmFzZUZpZWxkcyksXG4gIH1cblxuICBjb25zdCBuZXdseUNyZWF0ZWRCbG9ja1R5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUob2JqZWN0U2NoZW1hKVxuXG4gIHJldHVybiBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRPYmplY3RUeXBlXG4iXSwibmFtZXMiOlsiYnVpbGRPYmplY3RUeXBlIiwibmFtZSIsImJhc2VGaWVsZHMiLCJmaWVsZHMiLCJmb3JjZU51bGxhYmxlIiwicGFyZW50TmFtZSIsImdyYXBocWxSZXN1bHQiLCJjb25maWciLCJmaWVsZFRvU2NoZW1hTWFwIiwiYXJyYXkiLCJvYmplY3RUeXBlQ29uZmlnIiwiZmllbGQiLCJpbnRlcmZhY2VOYW1lIiwiY29tYmluZVBhcmVudE5hbWUiLCJ0b1dvcmRzIiwidHlwZXMiLCJhcnJheVR5cGVzIiwib2JqZWN0VHlwZSIsImlzRmllbGROdWxsYWJsZSIsIk9iamVjdCIsImtleXMiLCJnZXRGaWVsZHMiLCJsZW5ndGgiLCJhcnJheVR5cGUiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxOb25OdWxsIiwidHlwZSIsIndpdGhOdWxsYWJsZVR5cGUiLCJibG9ja3MiLCJibG9ja1R5cGVzIiwicmVkdWNlIiwiYWNjIiwiYmxvY2siLCJzbHVnIiwiZ3JhcGhRTCIsInNpbmd1bGFyTmFtZSIsInB1c2giLCJmdWxsTmFtZSIsIkdyYXBoUUxVbmlvblR5cGUiLCJyZXNvbHZlVHlwZSIsImRhdGEiLCJibG9ja1R5cGUiLCJjaGVja2JveCIsIkdyYXBoUUxCb29sZWFuIiwiY29kZSIsIkdyYXBoUUxTdHJpbmciLCJjb2xsYXBzaWJsZSIsIm9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMiLCJzdWJGaWVsZCIsImFkZFN1YkZpZWxkIiwiZGF0ZSIsIkRhdGVUaW1lUmVzb2x2ZXIiLCJlbWFpbCIsIkVtYWlsQWRkcmVzc1Jlc29sdmVyIiwiZ3JvdXAiLCJncm91cFR5cGVzIiwianNvbiIsIkdyYXBoUUxKU09OIiwibnVtYmVyIiwiR3JhcGhRTEludCIsIkdyYXBoUUxGbG9hdCIsImhhc01hbnkiLCJwb2ludCIsInJhZGlvIiwiR3JhcGhRTEVudW1UeXBlIiwidmFsdWVzIiwiZm9ybWF0T3B0aW9ucyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uVG8iLCJpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImhhc01hbnlWYWx1ZXMiLCJyZWxhdGlvbnNoaXBOYW1lIiwicmVsYXRpb25Ub1R5cGUiLCJyZWxhdGlvbnMiLCJyZWxhdGlvbiIsImZvcm1hdE5hbWUiLCJ2YWx1ZSIsIm1hcCIsImNvbGxlY3Rpb25zIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJyZXEiLCJjb2xsZWN0aW9uIiwibmV3bHlDcmVhdGVkQmxvY2tUeXBlIiwicmVsYXRpb25zaGlwQXJncyIsImxvY2FsaXphdGlvbiIsImxvY2FsZSIsImxvY2FsZUlucHV0VHlwZSIsImZhbGxiYWNrTG9jYWxlIiwiZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUiLCJhcmdzIiwiZXh0ZW5zaW9ucyIsImNvbXBsZXhpdHkiLCJyZXNvbHZlIiwicGFyZW50IiwiY29udGV4dCIsInJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyIsInJlc3VsdHMiLCJyZXN1bHRQcm9taXNlcyIsImNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlIiwicmVsYXRlZERvYyIsImkiLCJpZCIsImNvbGxlY3Rpb25TbHVnIiwicmVzdWx0IiwicGF5bG9hZERhdGFMb2FkZXIiLCJsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zYWN0aW9uSUQiLCJmb3JFYWNoIiwiUHJvbWlzZSIsImFsbCIsInJlbGF0ZWREb2N1bWVudCIsInJpY2hUZXh0IiwiZGVwdGgiLCJkZWZhdWx0RGVwdGgiLCJlZGl0b3IiLCJwb3B1bGF0aW9uUHJvbWlzZSIsImZpbmRNYW55IiwiZmxhdHRlbkxvY2FsZXMiLCJvdmVycmlkZUFjY2VzcyIsInBvcHVsYXRpb25Qcm9taXNlcyIsInNob3dIaWRkZW5GaWVsZHMiLCJzaWJsaW5nRG9jIiwicm93Iiwib2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMiLCJzZWxlY3QiLCJ0YWJzIiwidGFiU2NoZW1hIiwidGFiIiwidGFiSGFzTmFtZSIsInN1YkZpZWxkU2NoZW1hIiwidGV4dCIsInRleHRhcmVhIiwidXBsb2FkIiwidXBsb2FkTmFtZSIsInVwbG9hZEFyZ3MiLCJ3aGVyZUZpZWxkcyIsIndoZXJlIiwiYnVpbGRXaGVyZUlucHV0VHlwZSIsIm9iamVjdFNjaGVtYSIsImZpZWxkU2NoZW1hIl0sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQsR0FDMUQsbUNBQW1DLEdBQ25DLHVDQUF1Qzs7OzsrQkEwcEJ2Qzs7O2VBQUE7Ozt5QkE3b0JPO2dDQUNnRDtpQ0FFM0I7dUJBNkJEOzJCQUNIOzBFQUNNO21FQUNQO3NFQUNHOzRFQUNNO3dFQUNKO3lFQUNDOzs7Ozs7QUE2QjdCLFNBQVNBLGdCQUFnQixFQUN2QkMsSUFBSSxFQUNKQyxhQUFhLENBQUMsQ0FBQyxFQUNmQyxNQUFNLEVBQ05DLGFBQWEsRUFDYkMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLE1BQU0sRUFDRDtJQUNMLE1BQU1DLG1CQUFtQjtRQUN2QkMsT0FBTyxDQUFDQyxrQkFBb0NDO1lBQzFDLE1BQU1DLGdCQUNKRCxPQUFPQyxpQkFBaUJDLElBQUFBLDBCQUFpQixFQUFDUixZQUFZUyxJQUFBQSxrQkFBTyxFQUFDSCxNQUFNVixJQUFJLEVBQUU7WUFFNUUsSUFBSSxDQUFDSyxjQUFjUyxLQUFLLENBQUNDLFVBQVUsQ0FBQ0osY0FBYyxFQUFFO2dCQUNsRCxNQUFNSyxhQUFhakIsZ0JB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
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGRPYmplY3RUeXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEZpZWxkQ29uZmlnLCBHcmFwaFFMVHlwZSB9IGZyb20gJ2dyYXBocWwnXG5cbmltcG9ydCB7XG4gIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRW51bVR5cGUsXG4gIEdyYXBoUUxGbG9hdCxcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxOb25OdWxsLFxuICBHcmFwaFFMT2JqZWN0VHlwZSxcbiAgR3JhcGhRTFN0cmluZyxcbiAgR3JhcGhRTFVuaW9uVHlwZSxcbn0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IERhdGVUaW1lUmVzb2x2ZXIsIEVtYWlsQWRkcmVzc1Jlc29sdmVyIH0gZnJvbSAnZ3JhcGhxbC1zY2FsYXJzJ1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbmltcG9ydCB7IEdyYXBoUUxKU09OIH0gZnJvbSAnZ3JhcGhxbC10eXBlLWpzb24nXG5cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEluZm8gfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHtcbiAgUmljaFRleHRBZGFwdGVyLFxuICBTYW5pdGl6ZWRDb25maWcsXG4gIEFycmF5RmllbGQsXG4gIEJsb2NrRmllbGQsXG4gIENoZWNrYm94RmllbGQsXG4gIENvZGVGaWVsZCxcbiAgQ29sbGFwc2libGVGaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgR3JvdXBGaWVsZCxcbiAgSlNPTkZpZWxkLFxuICBOdW1iZXJGaWVsZCxcbiAgUG9pbnRGaWVsZCxcbiAgUmFkaW9GaWVsZCxcbiAgUmVsYXRpb25zaGlwRmllbGQsXG4gIFJpY2hUZXh0RmllbGQsXG4gIFJvd0ZpZWxkLFxuICBTZWxlY3RGaWVsZCxcbiAgVGFic0ZpZWxkLFxuICBUZXh0RmllbGQsXG4gIFRleHRhcmVhRmllbGQsXG4gIFVwbG9hZEZpZWxkLFxufSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcbmltcG9ydCBjb21iaW5lUGFyZW50TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvY29tYmluZVBhcmVudE5hbWUuanMnXG5pbXBvcnQgZm9ybWF0TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0TmFtZS5qcydcbmltcG9ydCBmb3JtYXRPcHRpb25zIGZyb20gJy4uL3V0aWxpdGllcy9mb3JtYXRPcHRpb25zLmpzJ1xuaW1wb3J0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgZnJvbSAnLi9idWlsZFdoZXJlSW5wdXRUeXBlLmpzJ1xuaW1wb3J0IGlzRmllbGROdWxsYWJsZSBmcm9tICcuL2lzRmllbGROdWxsYWJsZS5qcydcbmltcG9ydCB3aXRoTnVsbGFibGVUeXBlIGZyb20gJy4vd2l0aE51bGxhYmxlVHlwZS5qcydcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9yZXNvbHZlcnMvdHlwZXMuanMnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBncmFwaHFsUmVzdWx0OiBHcmFwaFFMSW5mb1xuICBjb25maWc6IFNhbml0aXplZENvbmZpZ1xufVxuXG5mdW5jdGlvbiBidWlsZE9iamVjdFR5cGUoe1xuICBuYW1lLFxuICBiYXNlRmllbGRzID0ge30sXG4gIGZpZWxkcyxcbiAgZm9yY2VOdWxsYWJsZSxcbiAgcGFyZW50TmFtZSxcbiAgZ3JhcGhxbFJlc3VsdCxcbiAgY29uZmlnLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgIGdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IG9iamVjdFR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBuZXcgR3JhcGhRTExpc3QoXG4gICAgICAgIG5ldyBHcmFwaFFMTm9uTnVsbChncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXM6IEdyYXBoUUxPYmplY3RUeXBlPGFueSwgYW55PltdID0gZmllbGQuYmxvY2tzLnJlZHVjZSgoYWNjLCBibG9jaykgPT4ge1xuICAgICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG5cbiAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gb2JqZWN0VHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pIHtcbiAgICAgICAgICBhY2MucHVzaChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBbXSlcblxuICAgICAgaWYgKGJsb2NrVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgY29uc3QgdHlwZSA9IG5ldyBHcmFwaFFMTGlzdChcbiAgICAgICAgbmV3IEdyYXBoUUxOb25OdWxsKFxuICAgICAgICAgIG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICAgICAgcmVzb2x2ZVR5cGU6IChkYXRhKSA9PiBncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbZGF0YS5ibG9ja1R5cGVdLm5hbWUsXG4gICAgICAgICAgICB0eXBlczogYmxvY2tUeXBlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIHR5cGUpIH0sXG4gICAgICB9XG4gICAgfSxcbiAgICBjaGVja2JveDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDaGVja2JveEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMQm9vbGVhbiwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2RlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvZGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2xsYXBzaWJsZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDb2xsYXBzaWJsZUZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMsIHN1YkZpZWxkKVxuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgZGF0ZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBEYXRlRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIERhdGVUaW1lUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZW1haWw6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogRW1haWxGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRW1haWxBZGRyZXNzUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZ3JvdXA6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogR3JvdXBGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJmYWNlTmFtZSA9XG4gICAgICAgIGZpZWxkPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHMoZmllbGQubmFtZSwgdHJ1ZSkpXG5cbiAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZTogaXNGaWVsZE51bGxhYmxlKGZpZWxkLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICBncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0gPSBvYmplY3RUeXBlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKGNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQXJncy5sb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5sb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmZhbGxiYWNrTG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0ge1xuICAgICAgICBhcmdzOiByZWxhdGlvbnNoaXBBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDEwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBsZXQgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgaWYgKGhhc01hbnlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVQb3B1bGF0aW9uUHJvbWlzZSA9IGFzeW5jIChyZWxhdGVkRG9jLCBpKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IHJlbGF0ZWREb2NcbiAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnID0gcmVsYXRlZERvYy5yZWxhdGlvblRvXG4gICAgICAgICAgICAgICAgaWQgPSByZWxhdGVkRG9jLnZhbHVlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LnJlcS5wYXlsb2FkRGF0YUxvYWRlci5sb2FkKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlcy5wdXNoKGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlKHJlbGF0ZWREb2MsIGkpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWVcbiAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGlkID0gdmFsdWUudmFsdWVcbiAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IHZhbHVlLnJlbGF0aW9uVG9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHJlbGF0ZWREb2N1bWVudCkge1xuICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVsYXRlZERvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZWxhdGVkRG9jdW1lbnRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGhhc01hbnlWYWx1ZXMgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGUsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiByZWxhdGlvbnNoaXAsXG4gICAgICB9XG4gICAgfSxcbiAgICByaWNoVGV4dDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBSaWNoVGV4dEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXToge1xuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgZGVwdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxJbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgICBsZXQgZGVwdGggPSBjb25maWcuZGVmYXVsdERlcHRoXG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmRlcHRoICE9PSAndW5kZWZpbmVkJykgZGVwdGggPSBhcmdzLmRlcHRoXG4gICAgICAgICAgY29uc3QgZWRpdG9yOiBSaWNoVGV4dEFkYXB0ZXIgPSBmaWVsZD8uZWRpdG9yXG5cbiAgICAgICAgICAvLyBSaWNoVGV4dCBmaWVsZHMgaGF2ZSB0aGVpciBvd24gZGVwdGggYXJndW1lbnQgaW4gR3JhcGhRTC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHdoeSB0aGUgcG9wdWxhdGlvblByb21pc2UgKHdoaWNoIHBvcHVsYXRlcyByaWNodGV4dCBmaWVsZHMgbGlrZSB1cGxvYWRzIGFuZCByZWxhdGlvbnNoaXBzKVxuICAgICAgICAgIC8vIGlzIHJ1biBoZXJlIGFnYWluLCB3aXRoIHRoZSBwcm92aWRlZCBkZXB0aC5cbiAgICAgICAgICAvLyBJbiB0aGUgZ3JhcGhxbCBmaW5kLnRzIHJlc29sdmVyLCB0aGUgZGVwdGggaXMgdGhlbiBoYXJkLWNvZGVkIHRvIDAuXG4gICAgICAgICAgLy8gRWZmZWN0aXZlbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgcG9wdWxhdGlvblByb21pc2UgZm9yIEdyYXBoUUwgaXMgb25seSBydW4gaGVyZSwgYW5kIG5vdCBpbiB0aGUgZmluZC50cyByZXNvbHZlciAvIG5vcm1hbCBwb3B1bGF0aW9uIHByb21pc2UuXG4gICAgICAgICAgaWYgKGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2Uoe1xuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpbmRNYW55OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmxhdHRlbkxvY2FsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBvdmVycmlkZUFjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlczogW10sXG4gICAgICAgICAgICAgIHJlcTogY29udGV4dC5yZXEsXG4gICAgICAgICAgICAgIHNob3dIaWRkZW5GaWVsZHM6IGZhbHNlLFxuICAgICAgICAgICAgICBzaWJsaW5nRG9jOiBwYXJlbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTEpTT04sIGZvcmNlTnVsbGFibGUpLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICByb3c6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUm93RmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzLCBzdWJGaWVsZClcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBzZWxlY3Q6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogU2VsZWN0RmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgZmllbGQubmFtZSlcblxuICAgICAgbGV0IHR5cGU6IEdyYXBoUUxUeXBlID0gbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICB2YWx1ZXM6IGZvcm1hdE9wdGlvbnMoZmllbGQpLFxuICAgICAgfSlcblxuICAgICAgdHlwZSA9IGZpZWxkLmhhc01hbnkgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGVcbiAgICAgIHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCB0eXBlLCBmb3JjZU51bGxhYmxlKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdGFiczogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUYWJzRmllbGQpID0+XG4gICAgICBmaWVsZC50YWJzLnJlZHVjZSgodGFiU2NoZW1hLCB0YWIpID0+IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgdGFiPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHModGFiLm5hbWUsIHRydWUpKVxuXG4gICAgICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBuYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgICBmaWVsZHM6IHRhYi5maWVsZHMsXG4gICAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdID0gb2JqZWN0VHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiU2NoZW1hXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRhYlNjaGVtYSxcbiAgICAgICAgICAgIFt0YWIubmFtZV06IHsgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgLi4udGFiLmZpZWxkcy5yZWR1Y2UoKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGRTY2hlbWFcbiAgICAgICAgICB9LCB0YWJTY2hlbWEpLFxuICAgICAgICB9XG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICB0ZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBmaWVsZC5oYXNNYW55ID09PSB0cnVlID8gbmV3IEdyYXBoUUxMaXN0KEdyYXBoUUxTdHJpbmcpIDogR3JhcGhRTFN0cmluZyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICB0ZXh0YXJlYTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0YXJlYUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHVwbG9hZDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBVcGxvYWRGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgeyByZWxhdGlvblRvIH0gPSBmaWVsZFxuXG4gICAgICBjb25zdCB1cGxvYWROYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgLy8gSWYgdGhlIHJlbGF0aW9uc2hpcFR5cGUgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsXG4gICAgICAvLyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IHRoaXMgYmxvY2tUeXBlIGNhbiBoYXZlIGEgcmVsYXRpb25zaGlwXG4gICAgICAvLyB0byBpdHNlbGYuIFRoZXJlZm9yZSwgd2Ugc2V0IHRoZSByZWxhdGlvbnNoaXBUeXBlIGVxdWFsIHRvIHRoZSBibG9ja1R5cGVcbiAgICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQuXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5ncmFwaFFMLnR5cGUgfHwgbmV3bHlDcmVhdGVkQmxvY2tUeXBlLFxuICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1cGxvYWRBcmdzID0ge30gYXMgTG9jYWxlSW5wdXRUeXBlXG5cbiAgICAgIGlmIChjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHVwbG9hZEFyZ3MubG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG5cbiAgICAgICAgdXBsb2FkQXJncy5mYWxsYmFja0xvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IGZpZWxkLnJlbGF0aW9uVG9cblxuICAgICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgICBhcmdzOiB1cGxvYWRBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDIwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlXG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudCB8fCBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZSxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2hlcmVGaWVsZHMgPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgdXBsb2FkLmFyZ3Mud2hlcmUgPSB7XG4gICAgICAgIHR5cGU6IGJ1aWxkV2hlcmVJbnB1dFR5cGUoe1xuICAgICAgICAgIG5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgZmllbGRzOiB3aGVyZUZpZWxkcyxcbiAgICAgICAgICBwYXJlbnROYW1lOiB1cGxvYWROYW1lLFxuICAgICAgICB9KSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB1cGxvYWQsXG4gICAgICB9XG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IG9iamVjdFNjaGVtYSA9IHtcbiAgICBuYW1lLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGZpZWxkcy5yZWR1Y2UoKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gZmllbGRUb1NjaGVtYU1hcFtmaWVsZC50eXBlXVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRTY2hlbWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICAgIC4uLmZpZWxkU2NoZW1hKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSxcbiAgICAgICAgfVxuICAgICAgfSwgYmFzZUZpZWxkcyksXG4gIH1cblxuICBjb25zdCBuZXdseUNyZWF0ZWRCbG9ja1R5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUob2JqZWN0U2NoZW1hKVxuXG4gIHJldHVybiBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRPYmplY3RUeXBlXG4iXSwibmFtZXMiOlsiR3JhcGhRTEJvb2xlYW4iLCJHcmFwaFFMRW51bVR5cGUiLCJHcmFwaFFMRmxvYXQiLCJHcmFwaFFMSW50IiwiR3JhcGhRTExpc3QiLCJHcmFwaFFMTm9uTnVsbCIsIkdyYXBoUUxPYmplY3RUeXBlIiwiR3JhcGhRTFN0cmluZyIsIkdyYXBoUUxVbmlvblR5cGUiLCJEYXRlVGltZVJlc29sdmVyIiwiRW1haWxBZGRyZXNzUmVzb2x2ZXIiLCJHcmFwaFFMSlNPTiIsInRhYkhhc05hbWUiLCJ0b1dvcmRzIiwiY29tYmluZVBhcmVudE5hbWUiLCJmb3JtYXROYW1lIiwiZm9ybWF0T3B0aW9ucyIsImJ1aWxkV2hlcmVJbnB1dFR5cGUiLCJpc0ZpZWxkTnVsbGFibGUiLCJ3aXRoTnVsbGFibGVUeXBlIiwiYnVpbGRPYmplY3RUeXBlIiwibmFtZSIsImJhc2VGaWVsZHMiLCJmaWVsZHMiLCJmb3JjZU51bGxhYmxlIiwicGFyZW50TmFtZSIsImdyYXBocWxSZXN1bHQiLCJjb25maWciLCJmaWVsZFRvU2NoZW1hTWFwIiwiYXJyYXkiLCJvYmplY3RUeXBlQ29uZmlnIiwiZmllbGQiLCJpbnRlcmZhY2VOYW1lIiwidHlwZXMiLCJhcnJheVR5cGVzIiwib2JqZWN0VHlwZSIsIk9iamVjdCIsImtleXMiLCJnZXRGaWVsZHMiLCJsZW5ndGgiLCJhcnJheVR5cGUiLCJ0eXBlIiwiYmxvY2tzIiwiYmxvY2tUeXBlcyIsInJlZHVjZSIsImFjYyIsImJsb2NrIiwic2x1ZyIsImdyYXBoUUwiLCJzaW5ndWxhck5hbWUiLCJwdXNoIiwiZnVsbE5hbWUiLCJyZXNvbHZlVHlwZSIsImRhdGEiLCJibG9ja1R5cGUiLCJjaGVja2JveCIsImNvZGUiLCJjb2xsYXBzaWJsZSIsIm9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMiLCJzdWJGaWVsZCIsImFkZFN1YkZpZWxkIiwiZGF0ZSIsImVtYWlsIiwiZ3JvdXAiLCJncm91cFR5cGVzIiwianNvbiIsIm51bWJlciIsImhhc01hbnkiLCJwb2ludCIsInJhZGlvIiwidmFsdWVzIiwicmVsYXRpb25zaGlwIiwicmVsYXRpb25UbyIsImlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFzTWFueVZhbHVlcyIsInJlbGF0aW9uc2hpcE5hbWUiLCJyZWxhdGlvblRvVHlwZSIsInJlbGF0aW9ucyIsInJlbGF0aW9uIiwidmFsdWUiLCJtYXAiLCJjb2xsZWN0aW9ucyIsInJlcSIsImNvbGxlY3Rpb24iLCJuZXdseUNyZWF0ZWRCbG9ja1R5cGUiLCJyZWxhdGlvbnNoaXBBcmdzIiwibG9jYWxpemF0aW9uIiwibG9jYWxlIiwibG9jYWxlSW5wdXRUeXBlIiwiZmFsbGJhY2tMb2NhbGUiLCJmYWxsYmFja0xvY2FsZUlucHV0VHlwZSIsImFyZ3MiLCJleHRlbnNpb25zIiwiY29tcGxleGl0eSIsInJlc29sdmUiLCJwYXJlbnQiLCJjb250ZXh0IiwicmVsYXRlZENvbGxlY3Rpb25TbHVnIiwicmVzdWx0cyIsInJlc3VsdFByb21pc2VzIiwiY3JlYXRlUG9wdWxhdGlvblByb21pc2UiLCJyZWxhdGVkRG9jIiwiaSIsImlkIiwiY29sbGVjdGlvblNsdWciLCJyZXN1bHQiLCJwYXlsb2FkRGF0YUxvYWRlciIsImxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHJhbnNhY3Rpb25JRCIsImZvckVhY2giLCJQcm9taXNlIiwiYWxsIiwicmVsYXRlZERvY3VtZW50IiwicmljaFRleHQiLCJkZXB0aCIsImRlZmF1bHREZXB0aCIsImVkaXRvciIsInBvcHVsYXRpb25Qcm9taXNlIiwiZmluZE1hbnkiLCJmbGF0dGVuTG9jYWxlcyIsIm92ZXJyaWRlQWNjZXNzIiwicG9wdWxhdGlvblByb21pc2VzIiwic2hvd0hpZGRlbkZpZWxkcyIsInNpYmxpbmdEb2MiLCJyb3ciLCJvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcyIsInNlbGVjdCIsInRhYnMiLCJ0YWJTY2hlbWEiLCJ0YWIiLCJzdWJGaWVsZFNjaGVtYSIsInRleHQiLCJ0ZXh0YXJlYSIsInVwbG9hZCIsInVwbG9hZE5hbWUiLCJ1cGxvYWRBcmdzIiwid2hlcmVGaWVsZHMiLCJ3aGVyZSIsIm9iamVjdFNjaGVtYSIsImZpZWxkU2NoZW1hIl0sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQsR0FDMUQsbUNBQW1DLEdBQ25DLHVDQUF1QyxHQUd2QyxTQUNFQSxjQUFjLEVBQ2RDLGVBQWUsRUFDZkMsWUFBWSxFQUNaQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLGFBQWEsRUFDYkMsZ0JBQWdCLFFBQ1gsVUFBUztBQUNoQixTQUFTQyxnQkFBZ0IsRUFBRUMsb0JBQW9CLFFBQVEsa0JBQWlCO0FBQ3hFLHVDQUF1QyxHQUN2QyxTQUFTQyxXQUFXLFFBQVEsb0JBQW1CO0FBNkIvQyxTQUFTQyxVQUFVLFFBQVEsZ0JBQWU7QUFDMUMsU0FBU0MsT0FBTyxRQUFRLG9CQUFtQjtBQUMzQyxPQUFPQyx1QkFBdUIsb0NBQW1DO0FBQ2pFLE9BQU9DLGdCQUFnQiw2QkFBNEI7QUFDbkQsT0FBT0MsbUJBQW1CLGdDQUErQjtBQUN6RCxPQUFPQyx5QkFBeUIsMkJBQTBCO0FBQzFELE9BQU9DLHFCQUFxQix1QkFBc0I7QUFDbEQsT0FBT0Msc0JBQXNCLHdCQUF1QjtBQTZCcEQsU0FBU0MsZ0JBQWdCLEVBQ3ZCQyxJQUFJLEVBQ0pDLGFBQWEsQ0FBQyxDQUFDLEVBQ2ZDLE1BQU0sRUFDTkMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsTUFBTSxFQUNEO0lBQ0wsTUFBTUMsbUJBQW1CO1FBQ3ZCQyxPQUFPLENBQUNDLGtCQUFvQ0M7WUFDMUMsTUFBTUMsZ0JBQ0pELE9BQU9DLGlCQUFpQmxCLGtCQUFrQlcsWUFBWVosUUFBUWtCLE1BQU1WLElBQUksRUFBRTtZQUU1RSxJQUFJLENBQUNLLGNBQWNPLEtBQUssQ0FBQ0MsVUFBVSxDQUFDRixjQUFjLEVBQUU7Z0JBQ2xELE1BQU1HLGFBQWFmLGdCQUFnQjtvQkFDakNDLE1BQU1XO29CQUNOVCxRQUFRUSxNQUFNUixNQUFNO29CQUNwQkMsZUFBZU4sZ0JBQWdCYSxPQUFPUDtvQkFDdENDLFlBQVlPO29CQUNaTjtvQkFDQUM7Z0JBQ0Y7Z0JBRUEsSUFBSVMsT0FBT0MsSUFBSSxDQUFDRixXQUFXRyxTQUFTLElBQUlDLE1BQU0sRUFBRTtvQkFDOUNiLGNBQWNPLEtBQUssQ0FBQ0MsVUFBVSxDQUFDRixjQUFjLEdBQUdHO2dCQUNsRDtZQUNGO1lBRUEsSUFBSSxDQUFDVCxjQUFjTyxLQUFLLENBQUNDLFVBQVUsQ0FBQ0YsY0FBYyxFQUFFO2dCQUNsRCxPQUFPRjtZQUNUO1lBRUEsTUFBTVUsWUFBWSxJQUFJcEMsWUFDcEIsSUFBSUMsZUFBZXFCLGNBQWNPLEtBQUssQ0FBQ0MsVUFBVSxDQUFDRixjQUFjO1lBR2xFLE9BQU87Z0JBQ0wsR0FBR0YsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFBRW9CLE1BQU10QixpQkFBaUJZLE9BQU9TO2dCQUFXO1lBQzNEO1FBQ0Y7UUFDQUUsUUFBUSxDQUFDWixrQkFBb0NDO1lBQzNDLE1BQU1ZLGFBQTRDWixNQUFNVyxNQUFNLENBQUNFLE1BQU0sQ0FBQyxDQUFDQyxLQUFLQztnQkFDMUUsSUFBSSxDQUFDcEIsY0FBY08sS0FBSyxDQUFDVSxVQUFVLENBQUNHLE1BQU1DLElBQUksQ0FBQyxFQUFFO29CQUMvQyxNQUFNZixnQkFDSmMsT0FBT2QsaUJBQWlCYyxPQUFPRSxTQUFTQyxnQkFBZ0JwQyxRQUFRaUMsTUFBTUMsSUFBSSxFQUFFO29CQUU5RSxNQUFNWixhQUFhZixnQkFBZ0I7d0JBQ2pDQyxNQUFNVzt3QkFDTlQsUUFBUTsrQkFDSHVCLE1BQU12QixNQUFNOzRCQUNmO2dDQUNFRixNQUFNO2dDQUNOb0IsTUFBTTs0QkFDUjt5QkFDRDt3QkFDRGpCO3dCQUNBQyxZQUFZTzt3QkFDWk47d0JBQ0FDO29CQUNGO29CQUVBLElBQUlTLE9BQU9DLElBQUksQ0FBQ0YsV0FBV0csU0FBUyxJQUFJQyxNQUFNLEVBQUU7d0JBQzlDYixjQUFjTyxLQUFLLENBQUNVLFVBQVUsQ0FBQ0csTUFBTUMsSUFBSSxDQUFDLEdBQUdaO29CQUMvQztnQkFDRjtnQkFFQSxJQUFJVCxjQUFjTyxLQUFLLENBQUNVLFVBQVUsQ0FBQ0csTUFBTUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlDRixJQUFJSyxJQUFJLENBQUN4QixjQUFjTyxLQUFLLENBQUNVLFVBQVUsQ0FBQ0csTUFBTUMsSUFBSSxDQUFDO2dCQUNyRDtnQkFFQSxPQUFPRjtZQUNULEdBQUcsRUFBRTtZQUVMLElBQUlGLFdBQVdKLE1BQU0sS0FBSyxHQUFHO2dCQUMzQixPQUFPVDtZQUNUO1lBRUEsTUFBTXFCLFdBQVdyQyxrQkFBa0JXLFlBQVlaLFFBQVFrQixNQUFNVixJQUFJLEVBQUU7WUFFbkUsTUFBTW9CLE9BQU8sSUFBSXJDLFlBQ2YsSUFBSUMsZUFDRixJQUFJRyxpQkFBaUI7Z0JBQ25CYSxNQUFNOEI7Z0JBQ05DLGFBQWEsQ0FBQ0MsT0FBUzNCLGNBQWNPLEtBQUssQ0FBQ1UsVUFBVSxDQUFDVSxLQUFLQyxTQUFTLENBQUMsQ0FBQ2pDLElBQUk7Z0JBQzFFWSxPQUFPVTtZQUNUO1lBSUosT0FBTztnQkFDTCxHQUFHYixnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1WLElBQUksQ0FBQyxFQUFFO29CQUFFb0IsTUFBTXRCLGlCQUFpQlksT0FBT1U7Z0JBQU07WUFDdEQ7UUFDRjtRQUNBYyxVQUFVLENBQUN6QixrQkFBb0NDLFFBQTBCLENBQUE7Z0JBQ3ZFLEdBQUdELGdCQUFnQjtnQkFDbkIsQ0FBQ0MsTUFBTVYsSUFBSSxDQUFDLEVBQUU7b0JBQUVvQixNQUFNdEIsaUJBQWlCWSxPQUFPL0IsZ0JBQWdCd0I7Z0JBQWU7WUFDL0UsQ0FBQTtRQUNBZ0MsTUFBTSxDQUFDMUIsa0JBQW9DQyxRQUFzQixDQUFBO2dCQUMvRCxHQUFHRCxnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1WLElBQUksQ0FBQyxFQUFFO29CQUFFb0IsTUFBTXRCLGlCQUFpQlksT0FBT3hCLGVBQWVpQjtnQkFBZTtZQUM5RSxDQUFBO1FBQ0FpQyxhQUFhLENBQUMzQixrQkFBb0NDLFFBQ2hEQSxNQUFNUixNQUFNLENBQUNxQixNQUFNLENBQUMsQ0FBQ2MsdUNBQXVDQztnQkFDMUQsTUFBTUMsY0FBY2hDLGdCQUFnQixDQUFDK0IsU0FBU2xCLElBQUksQ0FBQztnQkFDbkQsSUFBSW1CLGFBQWEsT0FBT0EsWUFBWUYsdUNBQXVDQztnQkFDM0UsT0FBT0Q7WUFDVCxHQUFHNUI7UUFDTCtCLE1BQU0sQ0FBQy9CLGtCQUFvQ0MsUUFBc0IsQ0FBQTtnQkFDL0QsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFBRW9CLE1BQU10QixpQkFBaUJZLE9BQU90QixrQkFBa0JlO2dCQUFlO1lBQ2pGLENBQUE7UUFDQXNDLE9BQU8sQ0FBQ2hDLGtCQUFvQ0MsUUFBdUIsQ0FBQTtnQkFDakUsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFBRW9CLE1BQU10QixpQkFBaUJZLE9BQU9yQixzQkFBc0JjO2dCQUFlO1lBQ3JGLENBQUE7UUFDQXVDLE9BQU8sQ0FBQ2pDLGtCQUFvQ0M7WUFDMUMsTUFBTUMsZ0JBQ0pELE9BQU9DLGlCQUFpQmxCLGtCQUFrQlcsWUFBWVosUUFBUWtCLE1BQU1WLElBQUksRUFBRTtZQUU1RSxJQUFJLENBQUNLLGNBQWNPLEtBQUssQ0FBQytCLFVBQVUsQ0FBQ2hDLGNBQWMsRUFBRTtnQkFDbEQsTUFBTUcsYUFBYWYsZ0JBQWdCO29CQUNqQ0MsTUFBTVc7b0JBQ05ULFFBQVFRLE1BQU1SLE1BQU07b0JBQ3BCQyxlQUFlTixnQkFBZ0JhLE9BQU9QO29CQUN0Q0MsWUFBWU87b0JBQ1pOO29CQUNBQztnQkFDRjtnQkFFQSxJQUFJUyxPQUFPQyxJQUFJLENBQUNGLFdBQVdHLFNBQVMsSUFBSUMsTUFBTSxFQUFFO29CQUM5Q2IsY0FBY08sS0FBSyxDQUFDK0IsVUFBVSxDQUFDaEMsY0FBYyxHQUFHRztnQkFDbEQ7WUFDRjtZQUVBLElBQUksQ0FBQ1QsY0FBY08sS0FBSyxDQUFDK0IsVUFBVSxDQUFDaEMsY0FBYyxFQUFFO2dCQUNsRCxPQUFPRjtZQUNUO1lBRUEsT0FBTztnQkFDTCxHQUFHQSxnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1WLElBQUksQ0FBQyxFQUFFO29CQUFFb0IsTUFBTWYsY0FBY08sS0FBSyxDQUFDK0IsVUFBVSxDQUFDaEMsY0FBYztnQkFBQztZQUN0RTtRQUNGO1FBQ0FpQyxNQUFNLENBQUNuQyxrQkFBb0NDLFFBQXNCLENBQUE7Z0JBQy9ELEdBQUdELGdCQUFnQjtnQkFDbkIsQ0FBQ0MsTUFBTVYsSUFBSSxDQUFDLEVBQUU7b0JBQUVvQixNQUFNdEIsaUJBQWlCWSxPQUFPcEIsYUFBYWE7Z0JBQWU7WUFDNUUsQ0FBQTtRQUNBMEMsUUFBUSxDQUFDcEMsa0JBQW9DQztZQUMzQyxNQUFNVSxPQUFPVixPQUFPVixTQUFTLE9BQU9sQixhQUFhRDtZQUNqRCxPQUFPO2dCQUNMLEdBQUc0QixnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1WLElBQUksQ0FBQyxFQUFFO29CQUNab0IsTUFBTXRCLGlCQUNKWSxPQUNBQSxPQUFPb0MsWUFBWSxPQUFPLElBQUkvRCxZQUFZcUMsUUFBUUEsTUFDbERqQjtnQkFFSjtZQUNGO1FBQ0Y7UUFDQTRDLE9BQU8sQ0FBQ3RDLGtCQUFvQ0MsUUFBdUIsQ0FBQTtnQkFDakUsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFDWm9CLE1BQU10QixpQkFDSlksT0FDQSxJQUFJM0IsWUFBWSxJQUFJQyxlQUFlSCxnQkFDbkNzQjtnQkFFSjtZQUNGLENBQUE7UUFDQTZDLE9BQU8sQ0FBQ3ZDLGtCQUFvQ0MsUUFBdUIsQ0FBQTtnQkFDakUsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFDWm9CLE1BQU10QixpQkFDSlksT0FDQSxJQUFJOUIsZ0JBQWdCO3dCQUNsQm9CLE1BQU1QLGtCQUFrQlcsWUFBWU0sTUFBTVYsSUFBSTt3QkFDOUNpRCxRQUFRdEQsY0FBY2U7b0JBQ3hCLElBQ0FQO2dCQUVKO1lBQ0YsQ0FBQTtRQUNBK0MsY0FBYyxDQUFDekMsa0JBQW9DQztZQUNqRCxNQUFNLEVBQUV5QyxVQUFVLEVBQUUsR0FBR3pDO1lBQ3ZCLE1BQU0wQyw2QkFBNkJDLE1BQU1DLE9BQU8sQ0FBQ0g7WUFDakQsTUFBTUksZ0JBQWdCN0MsTUFBTW9DLE9BQU87WUFDbkMsTUFBTVUsbUJBQW1CL0Qsa0JBQWtCVyxZQUFZWixRQUFRa0IsTUFBTVYsSUFBSSxFQUFFO1lBRTNFLElBQUlvQjtZQUNKLElBQUlxQyxpQkFBaUI7WUFFckIsSUFBSUosTUFBTUMsT0FBTyxDQUFDSCxhQUFhO2dCQUM3Qk0saUJBQWlCLElBQUk3RSxnQkFBZ0I7b0JBQ25Db0IsTUFBTSxDQUFDLEVBQUV3RCxpQkFBaUIsV0FBVyxDQUFDO29CQUN0Q1AsUUFBUUUsV0FBVzVCLE1BQU0sQ0FDdkIsQ0FBQ21DLFdBQVdDLFdBQWMsQ0FBQTs0QkFDeEIsR0FBR0QsU0FBUzs0QkFDWixDQUFDaEUsV0FBV2lFLFVBQVUsRUFBRTtnQ0FDdEJDLE9BQU9EOzRCQUNUO3dCQUNGLENBQUEsR0FDQSxDQUFDO2dCQUVMO2dCQUVBLE1BQU0vQyxRQUFRdUMsV0FBV1UsR0FBRyxDQUFDLENBQUNGLFdBQWF0RCxjQUFjeUQsV0FBVyxDQUFDSCxTQUFTLENBQUNoQyxPQUFPLENBQUNQLElBQUk7Z0JBRTNGQSxPQUFPLElBQUluQyxrQkFBa0I7b0JBQzNCZSxNQUFNLENBQUMsRUFBRXdELGlCQUFpQixhQUFhLENBQUM7b0JBQ3hDdEQsUUFBUTt3QkFDTmlELFlBQVk7NEJBQ1YvQixNQUFNcUM7d0JBQ1I7d0JBQ0FHLE9BQU87NEJBQ0x4QyxNQUFNLElBQUlqQyxpQkFBaUI7Z0NBQ3pCYSxNQUFNd0Q7Z0NBQ04sTUFBTXpCLGFBQVlDLElBQUksRUFBRSxFQUFFK0IsR0FBRyxFQUFFO29DQUM3QixPQUFPMUQsY0FBY3lELFdBQVcsQ0FBQzlCLEtBQUtnQyxVQUFVLENBQUMsQ0FBQ3JDLE9BQU8sQ0FBQ1AsSUFBSSxDQUFDcEIsSUFBSTtnQ0FDckU7Z0NBQ0FZOzRCQUNGO3dCQUNGO29CQUNGO2dCQUNGO1lBQ0YsT0FBTztnQkFDSCxDQUFBLEVBQUVRLElBQUksRUFBRSxHQUFHZixjQUFjeUQsV0FBVyxDQUFDWCxXQUFXLENBQUN4QixPQUFPLEFBQUQ7WUFDM0Q7WUFFQSxzREFBc0Q7WUFDdEQsZ0VBQWdFO1lBQ2hFLDJFQUEyRTtZQUMzRSxtQ0FBbUM7WUFFbkNQLE9BQU9BLFFBQVE2QztZQUVmLE1BQU1DLG1CQU1GLENBQUM7WUFFTCxJQUFJNUQsT0FBTzZELFlBQVksRUFBRTtnQkFDdkJELGlCQUFpQkUsTUFBTSxHQUFHO29CQUN4QmhELE1BQU1mLGNBQWNPLEtBQUssQ0FBQ3lELGVBQWU7Z0JBQzNDO2dCQUVBSCxpQkFBaUJJLGNBQWMsR0FBRztvQkFDaENsRCxNQUFNZixjQUFjTyxLQUFLLENBQUMyRCx1QkFBdUI7Z0JBQ25EO1lBQ0Y7WUFFQSxNQUFNckIsZUFBZTtnQkFDbkJzQixNQUFNTjtnQkFDTk8sWUFBWTtvQkFBRUMsWUFBWTtnQkFBRztnQkFDN0IsTUFBTUMsU0FBUUMsTUFBTSxFQUFFSixJQUFJLEVBQUVLLE9BQWdCO29CQUMxQyxNQUFNakIsUUFBUWdCLE1BQU0sQ0FBQ2xFLE1BQU1WLElBQUksQ0FBQztvQkFDaEMsTUFBTW9FLFNBQVNJLEtBQUtKLE1BQU0sSUFBSVMsUUFBUWQsR0FBRyxDQUFDSyxNQUFNO29CQUNoRCxNQUFNRSxpQkFBaUJFLEtBQUtGLGNBQWMsSUFBSU8sUUFBUWQsR0FBRyxDQUFDTyxjQUFjO29CQUN4RSxJQUFJUSx3QkFBd0JwRSxNQUFNeUMsVUFBVTtvQkFFNUMsSUFBSUksZUFBZTt3QkFDakIsTUFBTXdCLFVBQVUsRUFBRTt3QkFDbEIsTUFBTUMsaUJBQWlCLEVBQUU7d0JBRXpCLE1BQU1DLDBCQUEwQixPQUFPQyxZQUFZQzs0QkFDakQsSUFBSUMsS0FBS0Y7NEJBQ1QsSUFBSUcsaUJBQWlCM0UsTUFBTXlDLFVBQVU7NEJBRXJDLElBQUlDLDRCQUE0QjtnQ0FDOUJpQyxpQkFBaUJILFdBQVcvQixVQUFVO2dDQUN0Q2lDLEtBQUtGLFdBQVd0QixLQUFLOzRCQUN2Qjs0QkFFQSxNQUFNMEIsU0FBUyxNQUFNVCxRQUFRZCxHQUFHLENBQUN3QixpQkFBaUIsQ0FBQ0MsSUFBSSxDQUNyREMsS0FBS0MsU0FBUyxDQUFDO2dDQUNiYixRQUFRZCxHQUFHLENBQUM0QixhQUFhO2dDQUN6Qk47Z0NBQ0FEO2dDQUNBO2dDQUNBO2dDQUNBaEI7Z0NBQ0FFO2dDQUNBO2dDQUNBOzZCQUNEOzRCQUdILElBQUlnQixRQUFRO2dDQUNWLElBQUlsQyw0QkFBNEI7b0NBQzlCMkIsT0FBTyxDQUFDSSxFQUFFLEdBQUc7d0NBQ1hoQyxZQUFZa0M7d0NBQ1p6QixPQUFPOzRDQUNMLEdBQUcwQixNQUFNOzRDQUNUdEIsWUFBWXFCO3dDQUNkO29DQUNGO2dDQUNGLE9BQU87b0NBQ0xOLE9BQU8sQ0FBQ0ksRUFBRSxHQUFHRztnQ0FDZjs0QkFDRjt3QkFDRjt3QkFFQSxJQUFJMUIsT0FBTzs0QkFDVEEsTUFBTWdDLE9BQU8sQ0FBQyxDQUFDVixZQUFZQztnQ0FDekJILGVBQWVuRCxJQUFJLENBQUNvRCx3QkFBd0JDLFlBQVlDOzRCQUMxRDt3QkFDRjt3QkFFQSxNQUFNVSxRQUFRQyxHQUFHLENBQUNkO3dCQUNsQixPQUFPRDtvQkFDVDtvQkFFQSxJQUFJSyxLQUFLeEI7b0JBQ1QsSUFBSVIsOEJBQThCUSxPQUFPO3dCQUN2Q3dCLEtBQUt4QixNQUFNQSxLQUFLO3dCQUNoQmtCLHdCQUF3QmxCLE1BQU1ULFVBQVU7b0JBQzFDO29CQUVBLElBQUlpQyxJQUFJO3dCQUNOLE1BQU1XLGtCQUFrQixNQUFNbEIsUUFBUWQsR0FBRyxDQUFDd0IsaUJBQWlCLENBQUNDLElBQUksQ0FDOURDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDYmIsUUFBUWQsR0FBRyxDQUFDNEIsYUFBYTs0QkFDekJiOzRCQUNBTTs0QkFDQTs0QkFDQTs0QkFDQWhCOzRCQUNBRTs0QkFDQTs0QkFDQTt5QkFDRDt3QkFHSCxJQUFJeUIsaUJBQWlCOzRCQUNuQixJQUFJM0MsNEJBQTRCO2dDQUM5QixPQUFPO29DQUNMRCxZQUFZMkI7b0NBQ1psQixPQUFPO3dDQUNMLEdBQUdtQyxlQUFlO3dDQUNsQi9CLFlBQVljO29DQUNkO2dDQUNGOzRCQUNGOzRCQUVBLE9BQU9pQjt3QkFDVDt3QkFFQSxPQUFPO29CQUNUO29CQUVBLE9BQU87Z0JBQ1Q7Z0JBQ0EzRSxNQUFNdEIsaUJBQ0pZLE9BQ0E2QyxnQkFBZ0IsSUFBSXhFLFlBQVksSUFBSUMsZUFBZW9DLFNBQVNBLE1BQzVEakI7WUFFSjtZQUVBLE9BQU87Z0JBQ0wsR0FBR00sZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRWtEO1lBQ2hCO1FBQ0Y7UUFDQThDLFVBQVUsQ0FBQ3ZGLGtCQUFvQ0MsUUFBMEIsQ0FBQTtnQkFDdkUsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFDWndFLE1BQU07d0JBQ0p5QixPQUFPOzRCQUNMN0UsTUFBTXRDO3dCQUNSO29CQUNGO29CQUNBLE1BQU02RixTQUFRQyxNQUFNLEVBQUVKLElBQUksRUFBRUssT0FBZ0I7d0JBQzFDLElBQUlvQixRQUFRM0YsT0FBTzRGLFlBQVk7d0JBQy9CLElBQUksT0FBTzFCLEtBQUt5QixLQUFLLEtBQUssYUFBYUEsUUFBUXpCLEtBQUt5QixLQUFLO3dCQUN6RCxNQUFNRSxTQUEwQnpGLE9BQU95Rjt3QkFFdkMsNERBQTREO3dCQUM1RCxxR0FBcUc7d0JBQ3JHLDhDQUE4Qzt3QkFDOUMsc0VBQXNFO3dCQUN0RSxnSkFBZ0o7d0JBQ2hKLElBQUlBLFFBQVFDLG1CQUFtQjs0QkFDN0IsTUFBTUQsUUFBUUMsa0JBQWtCO2dDQUM5QnZCO2dDQUNBb0I7Z0NBQ0F2RjtnQ0FDQTJGLFVBQVU7Z0NBQ1ZDLGdCQUFnQjtnQ0FDaEJDLGdCQUFnQjtnQ0FDaEJDLG9CQUFvQixFQUFFO2dDQUN0QnpDLEtBQUtjLFFBQVFkLEdBQUc7Z0NBQ2hCMEMsa0JBQWtCO2dDQUNsQkMsWUFBWTlCOzRCQUNkO3dCQUNGO3dCQUVBLE9BQU9BLE1BQU0sQ0FBQ2xFLE1BQU1WLElBQUksQ0FBQztvQkFDM0I7b0JBQ0FvQixNQUFNdEIsaUJBQWlCWSxPQUFPcEIsYUFBYWE7Z0JBQzdDO1lBQ0YsQ0FBQTtRQUNBd0csS0FBSyxDQUFDbEcsa0JBQW9DQyxRQUN4Q0EsTUFBTVIsTUFBTSxDQUFDcUIsTUFBTSxDQUFDLENBQUNxRiwrQkFBK0J0RTtnQkFDbEQsTUFBTUMsY0FBY2hDLGdCQUFnQixDQUFDK0IsU0FBU2xCLElBQUksQ0FBQztnQkFDbkQsSUFBSW1CLGFBQWEsT0FBT0EsWUFBWXFFLCtCQUErQnRFO2dCQUNuRSxPQUFPc0U7WUFDVCxHQUFHbkc7UUFDTG9HLFFBQVEsQ0FBQ3BHLGtCQUFvQ0M7WUFDM0MsTUFBTW9CLFdBQVdyQyxrQkFBa0JXLFlBQVlNLE1BQU1WLElBQUk7WUFFekQsSUFBSW9CLE9BQW9CLElBQUl4QyxnQkFBZ0I7Z0JBQzFDb0IsTUFBTThCO2dCQUNObUIsUUFBUXRELGNBQWNlO1lBQ3hCO1lBRUFVLE9BQU9WLE1BQU1vQyxPQUFPLEdBQUcsSUFBSS9ELFlBQVksSUFBSUMsZUFBZW9DLFNBQVNBO1lBQ25FQSxPQUFPdEIsaUJBQWlCWSxPQUFPVSxNQUFNakI7WUFFckMsT0FBTztnQkFDTCxHQUFHTSxnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1WLElBQUksQ0FBQyxFQUFFO29CQUFFb0I7Z0JBQUs7WUFDdkI7UUFDRjtRQUNBMEYsTUFBTSxDQUFDckcsa0JBQW9DQyxRQUN6Q0EsTUFBTW9HLElBQUksQ0FBQ3ZGLE1BQU0sQ0FBQyxDQUFDd0YsV0FBV0M7Z0JBQzVCLElBQUl6SCxXQUFXeUgsTUFBTTtvQkFDbkIsTUFBTXJHLGdCQUNKcUcsS0FBS3JHLGlCQUFpQmxCLGtCQUFrQlcsWUFBWVosUUFBUXdILElBQUloSCxJQUFJLEVBQUU7b0JBRXhFLElBQUksQ0FBQ0ssY0FBY08sS0FBSyxDQUFDK0IsVUFBVSxDQUFDaEMsY0FBYyxFQUFFO3dCQUNsRCxNQUFNRyxhQUFhZixnQkFBZ0I7NEJBQ2pDQyxNQUFNVzs0QkFDTlQsUUFBUThHLElBQUk5RyxNQUFNOzRCQUNsQkM7NEJBQ0FDLFlBQVlPOzRCQUNaTjs0QkFDQUM7d0JBQ0Y7d0JBRUEsSUFBSVMsT0FBT0MsSUFBSSxDQUFDRixXQUFXRyxTQUFTLElBQUlDLE1BQU0sRUFBRTs0QkFDOUNiLGNBQWNPLEtBQUssQ0FBQytCLFVBQVUsQ0FBQ2hDLGNBQWMsR0FBR0c7d0JBQ2xEO29CQUNGO29CQUVBLElBQUksQ0FBQ1QsY0FBY08sS0FBSyxDQUFDK0IsVUFBVSxDQUFDaEMsY0FBYyxFQUFFO3dCQUNsRCxPQUFPb0c7b0JBQ1Q7b0JBRUEsT0FBTzt3QkFDTCxHQUFHQSxTQUFTO3dCQUNaLENBQUNDLElBQUloSCxJQUFJLENBQUMsRUFBRTs0QkFBRW9CLE1BQU1mLGNBQWNPLEtBQUssQ0FBQytCLFVBQVUsQ0FBQ2hDLGNBQWM7d0JBQUM7b0JBQ3BFO2dCQUNGO2dCQUVBLE9BQU87b0JBQ0wsR0FBR29HLFNBQVM7b0JBQ1osR0FBR0MsSUFBSTlHLE1BQU0sQ0FBQ3FCLE1BQU0sQ0FBQyxDQUFDMEYsZ0JBQWdCM0U7d0JBQ3BDLE1BQU1DLGNBQWNoQyxnQkFBZ0IsQ0FBQytCLFNBQVNsQixJQUFJLENBQUM7d0JBQ25ELElBQUltQixhQUFhLE9BQU9BLFlBQVkwRSxnQkFBZ0IzRTt3QkFDcEQsT0FBTzJFO29CQUNULEdBQUdGLFVBQVU7Z0JBQ2Y7WUFDRixHQUFHdEc7UUFDTHlHLE1BQU0sQ0FBQ3pHLGtCQUFvQ0MsUUFBc0IsQ0FBQTtnQkFDL0QsR0FBR0QsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRTtvQkFDWm9CLE1BQU10QixpQkFDSlksT0FDQUEsTUFBTW9DLE9BQU8sS0FBSyxPQUFPLElBQUkvRCxZQUFZRyxpQkFBaUJBLGVBQzFEaUI7Z0JBRUo7WUFDRixDQUFBO1FBQ0FnSCxVQUFVLENBQUMxRyxrQkFBb0NDLFFBQTBCLENBQUE7Z0JBQ3ZFLEdBQUdELGdCQUFnQjtnQkFDbkIsQ0FBQ0MsTUFBTVYsSUFBSSxDQUFDLEVBQUU7b0JBQUVvQixNQUFNdEIsaUJBQWlCWSxPQUFPeEIsZUFBZWlCO2dCQUFlO1lBQzlFLENBQUE7UUFDQWlILFFBQVEsQ0FBQzNHLGtCQUFvQ0M7WUFDM0MsTUFBTSxFQUFFeUMsVUFBVSxFQUFFLEdBQUd6QztZQUV2QixNQUFNMkcsYUFBYTVILGtCQUFrQlcsWUFBWVosUUFBUWtCLE1BQU1WLElBQUksRUFBRTtZQUVyRSxzREFBc0Q7WUFDdEQsZ0VBQWdFO1lBQ2hFLDJFQUEyRTtZQUMzRSxtQ0FBbUM7WUFFbkMsTUFBTW9CLE9BQU90QixpQkFDWFksT0FDQUwsY0FBY3lELFdBQVcsQ0FBQ1gsV0FBVyxDQUFDeEIsT0FBTyxDQUFDUCxJQUFJLElBQUk2Qyx1QkFDdEQ5RDtZQUdGLE1BQU1tSCxhQUFhLENBQUM7WUFFcEIsSUFBSWhILE9BQU82RCxZQUFZLEVBQUU7Z0JBQ3ZCbUQsV0FBV2xELE1BQU0sR0FBRztvQkFDbEJoRCxNQUFNZixjQUFjTyxLQUFLLENBQUN5RCxlQUFlO2dCQUMzQztnQkFFQWlELFdBQVdoRCxjQUFjLEdBQUc7b0JBQzFCbEQsTUFBTWYsY0FBY08sS0FBSyxDQUFDMkQsdUJBQXVCO2dCQUNuRDtZQUNGO1lBRUEsTUFBTU8sd0JBQXdCcEUsTUFBTXlDLFVBQVU7WUFFOUMsTUFBTWlFLFNBQVM7Z0JBQ2I1QyxNQUFNOEM7Z0JBQ043QyxZQUFZO29CQUFFQyxZQUFZO2dCQUFHO2dCQUM3QixNQUFNQyxTQUFRQyxNQUFNLEVBQUVKLElBQUksRUFBRUssT0FBZ0I7b0JBQzFDLE1BQU1qQixRQUFRZ0IsTUFBTSxDQUFDbEUsTUFBTVYsSUFBSSxDQUFDO29CQUNoQyxNQUFNb0UsU0FBU0ksS0FBS0osTUFBTSxJQUFJUyxRQUFRZCxHQUFHLENBQUNLLE1BQU07b0JBQ2hELE1BQU1FLGlCQUFpQkUsS0FBS0YsY0FBYyxJQUFJTyxRQUFRZCxHQUFHLENBQUNPLGNBQWM7b0JBQ3hFLE1BQU1jLEtBQUt4QjtvQkFFWCxJQUFJd0IsSUFBSTt3QkFDTixNQUFNVyxrQkFBa0IsTUFBTWxCLFFBQVFkLEdBQUcsQ0FBQ3dCLGlCQUFpQixDQUFDQyxJQUFJLENBQzlEQyxLQUFLQyxTQUFTLENBQUM7NEJBQ2JiLFFBQVFkLEdBQUcsQ0FBQzRCLGFBQWE7NEJBQ3pCYjs0QkFDQU07NEJBQ0E7NEJBQ0E7NEJBQ0FoQjs0QkFDQUU7NEJBQ0E7NEJBQ0E7eUJBQ0Q7d0JBR0gsT0FBT3lCLG1CQUFtQjtvQkFDNUI7b0JBRUEsT0FBTztnQkFDVDtnQkFDQTNFO1lBQ0Y7WUFFQSxNQUFNbUcsY0FBY2xILGNBQWN5RCxXQUFXLENBQUNYLFdBQVcsQ0FBQzdDLE1BQU0sQ0FBQ0osTUFBTTtZQUV2RWtILE9BQU81QyxJQUFJLENBQUNnRCxLQUFLLEdBQUc7Z0JBQ2xCcEcsTUFBTXhCLG9CQUFvQjtvQkFDeEJJLE1BQU1xSDtvQkFDTm5ILFFBQVFxSDtvQkFDUm5ILFlBQVlpSDtnQkFDZDtZQUNGO1lBRUEsT0FBTztnQkFDTCxHQUFHNUcsZ0JBQWdCO2dCQUNuQixDQUFDQyxNQUFNVixJQUFJLENBQUMsRUFBRW9IO1lBQ2hCO1FBQ0Y7SUFDRjtJQUVBLE1BQU1LLGVBQWU7UUFDbkJ6SDtRQUNBRSxRQUFRLElBQ05BLE9BQU9xQixNQUFNLENBQUMsQ0FBQ2Qsa0JBQWtCQztnQkFDL0IsTUFBTWdILGNBQWNuSCxnQkFBZ0IsQ0FBQ0csTUFBTVUsSUFBSSxDQUFDO2dCQUVoRCxJQUFJLE9BQU9zRyxnQkFBZ0IsWUFBWTtvQkFDckMsT0FBT2pIO2dCQUNUO2dCQUVBLE9BQU87b0JBQ0wsR0FBR0EsZ0JBQWdCO29CQUNuQixHQUFHaUgsWUFBWWpILGtCQUFrQkMsTUFBTTtnQkFDekM7WUFDRixHQUFHVDtJQUNQO0lBRUEsTUFBTWdFLHdCQUF3QixJQUFJaEYsa0JBQWtCd0k7SUFFcEQsT0FBT3hEO0FBQ1Q7QUFFQSxlQUFlbEUsZ0JBQWUifQ==
@@ -1,52 +1,42 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _graphql = require("graphql");
12
- const buildPaginatedListType = (name, docType)=>new _graphql.GraphQLObjectType({
1
+ import { GraphQLBoolean, GraphQLInt, GraphQLList, GraphQLObjectType } from 'graphql';
2
+ const buildPaginatedListType = (name, docType)=>new GraphQLObjectType({
13
3
  name,
14
4
  fields: {
15
5
  docs: {
16
- type: new _graphql.GraphQLList(docType)
6
+ type: new GraphQLList(docType)
17
7
  },
18
8
  hasNextPage: {
19
- type: _graphql.GraphQLBoolean
9
+ type: GraphQLBoolean
20
10
  },
21
11
  hasPrevPage: {
22
- type: _graphql.GraphQLBoolean
12
+ type: GraphQLBoolean
23
13
  },
24
14
  limit: {
25
- type: _graphql.GraphQLInt
15
+ type: GraphQLInt
26
16
  },
27
17
  nextPage: {
28
- type: _graphql.GraphQLInt
18
+ type: GraphQLInt
29
19
  },
30
20
  offset: {
31
- type: _graphql.GraphQLInt
21
+ type: GraphQLInt
32
22
  },
33
23
  page: {
34
- type: _graphql.GraphQLInt
24
+ type: GraphQLInt
35
25
  },
36
26
  pagingCounter: {
37
- type: _graphql.GraphQLInt
27
+ type: GraphQLInt
38
28
  },
39
29
  prevPage: {
40
- type: _graphql.GraphQLInt
30
+ type: GraphQLInt
41
31
  },
42
32
  totalDocs: {
43
- type: _graphql.GraphQLInt
33
+ type: GraphQLInt
44
34
  },
45
35
  totalPages: {
46
- type: _graphql.GraphQLInt
36
+ type: GraphQLInt
47
37
  }
48
38
  }
49
39
  });
50
- const _default = buildPaginatedListType;
40
+ export default buildPaginatedListType;
51
41
 
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaFFMQm9vbGVhbiwgR3JhcGhRTEludCwgR3JhcGhRTExpc3QsIEdyYXBoUUxPYmplY3RUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuY29uc3QgYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZSA9IChuYW1lLCBkb2NUeXBlKSA9PlxuICBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgIG5hbWUsXG4gICAgZmllbGRzOiB7XG4gICAgICBkb2NzOiB7XG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChkb2NUeXBlKSxcbiAgICAgIH0sXG4gICAgICBoYXNOZXh0UGFnZTogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgaGFzUHJldlBhZ2U6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIG5leHRQYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIG9mZnNldDogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICBwYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIHBhZ2luZ0NvdW50ZXI6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgICAgcHJldlBhZ2U6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgICAgdG90YWxEb2NzOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIHRvdGFsUGFnZXM6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgIH0sXG4gIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGVcbiJdLCJuYW1lcyI6WyJidWlsZFBhZ2luYXRlZExpc3RUeXBlIiwibmFtZSIsImRvY1R5cGUiLCJHcmFwaFFMT2JqZWN0VHlwZSIsImZpZWxkcyIsImRvY3MiLCJ0eXBlIiwiR3JhcGhRTExpc3QiLCJoYXNOZXh0UGFnZSIsIkdyYXBoUUxCb29sZWFuIiwiaGFzUHJldlBhZ2UiLCJsaW1pdCIsIkdyYXBoUUxJbnQiLCJuZXh0UGFnZSIsIm9mZnNldCIsInBhZ2UiLCJwYWdpbmdDb3VudGVyIiwicHJldlBhZ2UiLCJ0b3RhbERvY3MiLCJ0b3RhbFBhZ2VzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNCQTs7O2VBQUE7Ozt5QkF0QjJFO0FBRTNFLE1BQU1BLHlCQUF5QixDQUFDQyxNQUFNQyxVQUNwQyxJQUFJQywwQkFBaUIsQ0FBQztRQUNwQkY7UUFDQUcsUUFBUTtZQUNOQyxNQUFNO2dCQUNKQyxNQUFNLElBQUlDLG9CQUFXLENBQUNMO1lBQ3hCO1lBQ0FNLGFBQWE7Z0JBQUVGLE1BQU1HLHVCQUFjO1lBQUM7WUFDcENDLGFBQWE7Z0JBQUVKLE1BQU1HLHVCQUFjO1lBQUM7WUFDcENFLE9BQU87Z0JBQUVMLE1BQU1NLG1CQUFVO1lBQUM7WUFDMUJDLFVBQVU7Z0JBQUVQLE1BQU1NLG1CQUFVO1lBQUM7WUFDN0JFLFFBQVE7Z0JBQUVSLE1BQU1NLG1CQUFVO1lBQUM7WUFDM0JHLE1BQU07Z0JBQUVULE1BQU1NLG1CQUFVO1lBQUM7WUFDekJJLGVBQWU7Z0JBQUVWLE1BQU1NLG1CQUFVO1lBQUM7WUFDbENLLFVBQVU7Z0JBQUVYLE1BQU1NLG1CQUFVO1lBQUM7WUFDN0JNLFdBQVc7Z0JBQUVaLE1BQU1NLG1CQUFVO1lBQUM7WUFDOUJPLFlBQVk7Z0JBQUViLE1BQU1NLG1CQUFVO1lBQUM7UUFDakM7SUFDRjtNQUVGLFdBQWVaIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaFFMQm9vbGVhbiwgR3JhcGhRTEludCwgR3JhcGhRTExpc3QsIEdyYXBoUUxPYmplY3RUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuY29uc3QgYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZSA9IChuYW1lLCBkb2NUeXBlKSA9PlxuICBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgIG5hbWUsXG4gICAgZmllbGRzOiB7XG4gICAgICBkb2NzOiB7XG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChkb2NUeXBlKSxcbiAgICAgIH0sXG4gICAgICBoYXNOZXh0UGFnZTogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgaGFzUHJldlBhZ2U6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIG5leHRQYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIG9mZnNldDogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICBwYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIHBhZ2luZ0NvdW50ZXI6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgICAgcHJldlBhZ2U6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgICAgdG90YWxEb2NzOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgIHRvdGFsUGFnZXM6IHsgdHlwZTogR3JhcGhRTEludCB9LFxuICAgIH0sXG4gIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGVcbiJdLCJuYW1lcyI6WyJHcmFwaFFMQm9vbGVhbiIsIkdyYXBoUUxJbnQiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxPYmplY3RUeXBlIiwiYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZSIsIm5hbWUiLCJkb2NUeXBlIiwiZmllbGRzIiwiZG9jcyIsInR5cGUiLCJoYXNOZXh0UGFnZSIsImhhc1ByZXZQYWdlIiwibGltaXQiLCJuZXh0UGFnZSIsIm9mZnNldCIsInBhZ2UiLCJwYWdpbmdDb3VudGVyIiwicHJldlBhZ2UiLCJ0b3RhbERvY3MiLCJ0b3RhbFBhZ2VzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxjQUFjLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxpQkFBaUIsUUFBUSxVQUFTO0FBRXBGLE1BQU1DLHlCQUF5QixDQUFDQyxNQUFNQyxVQUNwQyxJQUFJSCxrQkFBa0I7UUFDcEJFO1FBQ0FFLFFBQVE7WUFDTkMsTUFBTTtnQkFDSkMsTUFBTSxJQUFJUCxZQUFZSTtZQUN4QjtZQUNBSSxhQUFhO2dCQUFFRCxNQUFNVDtZQUFlO1lBQ3BDVyxhQUFhO2dCQUFFRixNQUFNVDtZQUFlO1lBQ3BDWSxPQUFPO2dCQUFFSCxNQUFNUjtZQUFXO1lBQzFCWSxVQUFVO2dCQUFFSixNQUFNUjtZQUFXO1lBQzdCYSxRQUFRO2dCQUFFTCxNQUFNUjtZQUFXO1lBQzNCYyxNQUFNO2dCQUFFTixNQUFNUjtZQUFXO1lBQ3pCZSxlQUFlO2dCQUFFUCxNQUFNUjtZQUFXO1lBQ2xDZ0IsVUFBVTtnQkFBRVIsTUFBTVI7WUFBVztZQUM3QmlCLFdBQVc7Z0JBQUVULE1BQU1SO1lBQVc7WUFDOUJrQixZQUFZO2dCQUFFVixNQUFNUjtZQUFXO1FBQ2pDO0lBQ0Y7QUFFRixlQUFlRyx1QkFBc0IifQ==