@payloadcms/db-postgres 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,12 +21,14 @@ type Args = {
21
21
  aliasTable?: GenericTable;
22
22
  collectionPath: string;
23
23
  columnPrefix?: string;
24
+ constraintPath?: string;
24
25
  constraints?: Constraint[];
25
26
  fields: (Field | TabAsField)[];
26
27
  joinAliases: BuildQueryJoinAliases;
27
28
  joins: BuildQueryJoins;
28
29
  locale?: string;
29
30
  pathSegments: string[];
31
+ rootTableName?: string;
30
32
  selectFields: Record<string, GenericColumn>;
31
33
  tableName: string;
32
34
  };
@@ -35,6 +37,6 @@ type Args = {
35
37
  * Adds tables to `join`
36
38
  * @returns TableColumn
37
39
  */
38
- export declare const getTableColumnFromPath: ({ adapter, aliasTable, collectionPath, columnPrefix, constraints, fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, selectFields, tableName, }: Args) => TableColumn;
40
+ export declare const getTableColumnFromPath: ({ adapter, aliasTable, collectionPath, columnPrefix, constraintPath: incomingConstraintPath, constraints, fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, }: Args) => TableColumn;
39
41
  export {};
40
42
  //# sourceMappingURL=getTableColumnFromPath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAU1E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE1E,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,kBAAkB,CAAA;IACzB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,WAAW,EAAE,qBAAqB,CAAA;IAClC,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,qLAahC,IAAI,KAAG,WAgWT,CAAA"}
1
+ {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAU1E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE1E,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,kBAAkB,CAAA;IACzB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,WAAW,EAAE,qBAAqB,CAAA;IAClC,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,mQAehC,IAAI,KAAG,WAgXT,CAAA"}
@@ -20,9 +20,11 @@ function _interop_require_default(obj) {
20
20
  default: obj
21
21
  };
22
22
  }
23
- const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, selectFields, tableName })=>{
23
+ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName })=>{
24
24
  const fieldPath = incomingSegments[0];
25
25
  let locale = incomingLocale;
26
+ const rootTableName = incomingRootTableName || tableName;
27
+ let constraintPath = incomingConstraintPath || '';
26
28
  const field = (0, _utilities.flattenTopLevelFields)(fields).find((fieldToFind)=>(0, _types.fieldAffectsData)(fieldToFind) && fieldToFind.name === fieldPath);
27
29
  let newTableName = tableName;
28
30
  if (!field && fieldPath === 'id') {
@@ -58,6 +60,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
58
60
  aliasTable,
59
61
  collectionPath,
60
62
  columnPrefix,
63
+ constraintPath,
61
64
  constraints,
62
65
  fields: field.tabs.map((tab)=>({
63
66
  ...tab,
@@ -67,6 +70,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
67
70
  joins,
68
71
  locale,
69
72
  pathSegments: pathSegments.slice(1),
73
+ rootTableName,
70
74
  selectFields,
71
75
  tableName: newTableName
72
76
  });
@@ -79,12 +83,14 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
79
83
  aliasTable,
80
84
  collectionPath,
81
85
  columnPrefix: `${columnPrefix}${field.name}_`,
86
+ constraintPath,
82
87
  constraints,
83
88
  fields: field.fields,
84
89
  joinAliases,
85
90
  joins,
86
91
  locale,
87
92
  pathSegments: pathSegments.slice(1),
93
+ rootTableName,
88
94
  selectFields,
89
95
  tableName: newTableName
90
96
  });
@@ -94,12 +100,14 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
94
100
  aliasTable,
95
101
  collectionPath,
96
102
  columnPrefix,
103
+ constraintPath,
97
104
  constraints,
98
105
  fields: field.fields,
99
106
  joinAliases,
100
107
  joins,
101
108
  locale,
102
109
  pathSegments: pathSegments.slice(1),
110
+ rootTableName,
103
111
  selectFields,
104
112
  tableName: newTableName
105
113
  });
@@ -122,12 +130,14 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
122
130
  aliasTable,
123
131
  collectionPath,
124
132
  columnPrefix: `${columnPrefix}${field.name}_`,
133
+ constraintPath,
125
134
  constraints,
126
135
  fields: field.fields,
127
136
  joinAliases,
128
137
  joins,
129
138
  locale,
130
139
  pathSegments: pathSegments.slice(1),
140
+ rootTableName,
131
141
  selectFields,
132
142
  tableName: newTableName
133
143
  });
@@ -135,6 +145,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
135
145
  case 'array':
136
146
  {
137
147
  newTableName = `${tableName}_${(0, _tosnakecase.default)(field.name)}`;
148
+ constraintPath = `${constraintPath}${field.name}.%.`;
138
149
  if (locale && field.localized && adapter.payload.config.localization) {
139
150
  joins[newTableName] = (0, _drizzleorm.and)((0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), (0, _drizzleorm.eq)(adapter.tables[newTableName]._locale, locale));
140
151
  if (locale !== 'all') {
@@ -150,12 +161,14 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
150
161
  return getTableColumnFromPath({
151
162
  adapter,
152
163
  collectionPath,
164
+ constraintPath,
153
165
  constraints,
154
166
  fields: field.fields,
155
167
  joinAliases,
156
168
  joins,
157
169
  locale,
158
170
  pathSegments: pathSegments.slice(1),
171
+ rootTableName,
159
172
  selectFields,
160
173
  tableName: newTableName
161
174
  });
@@ -173,12 +186,14 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
173
186
  result = getTableColumnFromPath({
174
187
  adapter,
175
188
  collectionPath,
189
+ constraintPath: '',
176
190
  constraints: blockConstraints,
177
191
  fields: block.fields,
178
192
  joinAliases,
179
193
  joins,
180
194
  locale,
181
195
  pathSegments: pathSegments.slice(1),
196
+ rootTableName,
182
197
  selectFields: blockSelectFields,
183
198
  tableName: newTableName
184
199
  });
@@ -224,20 +239,20 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
224
239
  case 'upload':
225
240
  {
226
241
  let relationshipFields;
227
- const relationTableName = `${tableName}_rels`;
242
+ const relationTableName = `${rootTableName}_rels`;
228
243
  const newCollectionPath = pathSegments.slice(1).join('.');
229
244
  const aliasRelationshipTableName = (0, _uuid.v4)();
230
245
  const aliasRelationshipTable = (0, _pgcore.alias)(adapter.tables[relationTableName], aliasRelationshipTableName);
231
246
  // Join in the relationships table
232
247
  joinAliases.push({
233
- condition: (0, _drizzleorm.eq)((aliasTable || adapter.tables[tableName]).id, aliasRelationshipTable.parent),
248
+ condition: (0, _drizzleorm.eq)((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent),
234
249
  table: aliasRelationshipTable
235
250
  });
236
251
  selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path;
237
252
  constraints.push({
238
253
  columnName: 'path',
239
254
  table: aliasRelationshipTable,
240
- value: field.name
255
+ value: `${constraintPath}${field.name}`
241
256
  });
242
257
  let newAliasTable;
243
258
  if (typeof field.relationTo === 'string') {
@@ -292,6 +307,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
292
307
  joins,
293
308
  locale,
294
309
  pathSegments: pathSegments.slice(1),
310
+ rootTableName: newTableName,
295
311
  selectFields,
296
312
  tableName: newTableName
297
313
  });
@@ -330,4 +346,4 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
330
346
  throw new _errors.APIError(`Cannot find field for path at ${fieldPath}`);
331
347
  };
332
348
 
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxuICB2YWx1ZTogdW5rbm93blxufVxuXG50eXBlIFRhYmxlQ29sdW1uID0ge1xuICBjb2x1bW5OYW1lPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W11cbiAgZmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YVxuICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZT86ICh2YWw6IHVua25vd24pID0+IHN0cmluZ1xuICBwYXRoU2VnbWVudHM/OiBzdHJpbmdbXVxuICByYXdDb2x1bW4/OiBTUUxcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxufVxuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBhbGlhc1RhYmxlPzogR2VuZXJpY1RhYmxlXG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgc2VsZWN0RmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBHZW5lcmljQ29sdW1uPlxuICB0YWJsZU5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggdG8gdGFibGUgYW5kIGNvbHVtbiBuYW1lXG4gKiBBZGRzIHRhYmxlcyB0byBgam9pbmBcbiAqIEByZXR1cm5zIFRhYmxlQ29sdW1uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYWJsZUNvbHVtbkZyb21QYXRoID0gKHtcbiAgYWRhcHRlcixcbiAgYWxpYXNUYWJsZSxcbiAgY29sbGVjdGlvblBhdGgsXG4gIGNvbHVtblByZWZpeCA9ICcnLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbn06IEFyZ3MpOiBUYWJsZUNvbHVtbiA9PiB7XG4gIGNvbnN0IGZpZWxkUGF0aCA9IGluY29taW5nU2VnbWVudHNbMF1cbiAgbGV0IGxvY2FsZSA9IGluY29taW5nTG9jYWxlXG4gIGNvbnN0IGZpZWxkID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcyBhcyBGaWVsZFtdKS5maW5kKFxuICAgIChmaWVsZFRvRmluZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZFRvRmluZCkgJiYgZmllbGRUb0ZpbmQubmFtZSA9PT0gZmllbGRQYXRoLFxuICApIGFzIEZpZWxkIHwgVGFiQXNGaWVsZFxuICBsZXQgbmV3VGFibGVOYW1lID0gdGFibGVOYW1lXG5cbiAgaWYgKCFmaWVsZCAmJiBmaWVsZFBhdGggPT09ICdpZCcpIHtcbiAgICBzZWxlY3RGaWVsZHMuaWQgPSBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLmlkXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6ICdpZCcsXG4gICAgICBjb25zdHJhaW50cyxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgfSxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgIGpvaW5zW3RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXg6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9X2AsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX2xvY2FsZSwgbG9jYWxlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgICAgICAgY29uc3QgaGFzQmxvY2tGaWVsZCA9IGZpZWxkLmJsb2Nrcy5zb21lKChibG9jaykgPT4ge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICBjb25zdCBibG9ja0NvbnN0cmFpbnRzID0gW11cbiAgICAgICAgICBjb25zdCBibG9ja1NlbGVjdEZpZWxkcyA9IHt9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBmaW5lLCBub3QgZXZlcnkgYmxvY2sgd2lsbCBoYXZlIHRoZSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGJsb2NrVGFibGVDb2x1bW4gPSByZXN1bHRcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLmNvbmNhdChibG9ja0NvbnN0cmFpbnRzKVxuICAgICAgICAgIHNlbGVjdEZpZWxkcyA9IHsgLi4uc2VsZWN0RmllbGRzLCAuLi5ibG9ja1NlbGVjdEZpZWxkcyB9XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICAgIGlmIChoYXNCbG9ja0ZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGJsb2NrVGFibGVDb2x1bW4uY29sdW1uTmFtZSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQ6IGJsb2NrVGFibGVDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICAgIHJhd0NvbHVtbjogYmxvY2tUYWJsZUNvbHVtbi5yYXdDb2x1bW4sXG4gICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgbGV0IHJlbGF0aW9uc2hpcEZpZWxkc1xuICAgICAgICBjb25zdCByZWxhdGlvblRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG5cbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUgPSB1dWlkKClcbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSA9IGFsaWFzKFxuICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3JlbGF0aW9uVGFibGVOYW1lXSxcbiAgICAgICAgICBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEpvaW4gaW4gdGhlIHJlbGF0aW9uc2hpcHMgdGFibGVcbiAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgY29uZGl0aW9uOiBlcShcbiAgICAgICAgICAgIChhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0pLmlkLFxuICAgICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZS5wYXJlbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgfSlcblxuICAgICAgICBzZWxlY3RGaWVsZHNbYCR7cmVsYXRpb25UYWJsZU5hbWV9LnBhdGhgXSA9IGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aFxuXG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdwYXRoJyxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIC8vIElmIGxvY2FsaXplZCwgd2UgZ28gdG8gbG9jYWxpemVkIHRhYmxlIGFuZCBzZXQgYWxpYXNUYWJsZSB0byB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIHNvIGl0IGlzIG5vdCBwaWNrZWQgdXAgYmVsb3cgdG8gYmUgdXNlZCBhcyB0YXJnZXRUYWJsZVxuICAgICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXVxuXG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEocGFyZW50VGFibGUuaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKVxuXG4gICAgICAgICAgICBhbGlhc1RhYmxlID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRhcmdldFRhYmxlID0gYWxpYXNUYWJsZSB8fCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdXG5cbiAgICAgICAgICBzZWxlY3RGaWVsZHNbYCR7bmV3VGFibGVOYW1lfS4ke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF0gPVxuICAgICAgICAgICAgdGFyZ2V0VGFibGVbYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1gXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgIHRhYmxlOiB0YXJnZXRUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgQVBJRXJyb3IoYENhbm5vdCBmaW5kIGZpZWxkIGZvciBwYXRoIGF0ICR7ZmllbGRQYXRofWApXG59XG4iXSwibmFtZXMiOlsiZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCIsImFkYXB0ZXIiLCJhbGlhc1RhYmxlIiwiY29sbGVjdGlvblBhdGgiLCJjb2x1bW5QcmVmaXgiLCJjb25zdHJhaW50cyIsImZpZWxkcyIsImpvaW5BbGlhc2VzIiwiam9pbnMiLCJsb2NhbGUiLCJpbmNvbWluZ0xvY2FsZSIsInBhdGhTZWdtZW50cyIsImluY29taW5nU2VnbWVudHMiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJmaWVsZFBhdGgiLCJmaWVsZCIsImZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyIsImZpbmQiLCJmaWVsZFRvRmluZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsInRhYkhhc05hbWUiLCJlcSIsIl9wYXJlbnRJRCIsInB1c2giLCJ2YWx1ZSIsInRvU25ha2VDYXNlIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJoYXNCbG9ja0ZpZWxkIiwiYmxvY2tzIiwic29tZSIsImJsb2NrIiwic2x1ZyIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsInV1aWQiLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlIiwiYWxpYXMiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwic3FsIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtEdkJBOzs7ZUFBQUE7Ozs0QkE5Q2dCO3dCQUNQO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBd0NwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxjQUFjLEVBQUUsRUFDaEJDLE1BQU0sRUFDTkMsV0FBVyxFQUNYQyxLQUFLLEVBQ0xDLFFBQVFDLGNBQWMsRUFDdEJDLGNBQWNDLGdCQUFnQixFQUM5QkMsWUFBWSxFQUNaQyxTQUFTLEVBQ0o7SUFDTCxNQUFNQyxZQUFZSCxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ3JDLElBQUlILFNBQVNDO0lBQ2IsTUFBTU0sUUFBUUMsSUFBQUEsZ0NBQXFCLEVBQUNYLFFBQW1CWSxJQUFJLENBQ3pELENBQUNDLGNBQWdCQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsZ0JBQWdCQSxZQUFZRSxJQUFJLEtBQUtOO0lBRXpFLElBQUlPLGVBQWVSO0lBRW5CLElBQUksQ0FBQ0UsU0FBU0QsY0FBYyxNQUFNO1FBQ2hDRixhQUFhVSxFQUFFLEdBQUd0QixRQUFRdUIsTUFBTSxDQUFDRixhQUFhLENBQUNDLEVBQUU7UUFDakQsT0FBTztZQUNMRSxZQUFZO1lBQ1pwQjtZQUNBVyxPQUFPO2dCQUNMSyxNQUFNO2dCQUNOSyxNQUFNO1lBQ1I7WUFDQUMsT0FBTzFCLFFBQVF1QixNQUFNLENBQUNGLGFBQWE7UUFDckM7SUFDRjtJQUVBLElBQUlOLE9BQU87UUFDVCxNQUFNTCxlQUFlO2VBQUlDO1NBQWlCO1FBRTFDLCtCQUErQjtRQUMvQixxRUFBcUU7UUFDckUsSUFBSSxlQUFlSSxTQUFTQSxNQUFNWSxTQUFTLElBQUkzQixRQUFRNEIsT0FBTyxDQUFDQyxNQUFNLENBQUNDLFlBQVksRUFBRTtZQUNsRixNQUFNQyxnQkFBZ0IvQixRQUFRNEIsT0FBTyxDQUFDQyxNQUFNLENBQUNDLFlBQVksQ0FBQ0UsV0FBVyxDQUFDZixJQUFJLENBQ3hFLENBQUNULFNBQVdBLFdBQVdFLFlBQVksQ0FBQyxFQUFFO1lBR3hDLElBQUlxQixlQUFlO2dCQUNqQnZCLFNBQVN1QjtnQkFDVHJCLGFBQWF1QixNQUFNLENBQUMsR0FBRztZQUN6QjtRQUNGO1FBRUEsT0FBUWxCLE1BQU1VLElBQUk7WUFDaEIsS0FBSztnQkFBUTtvQkFDWCxPQUFPMUIsdUJBQXVCO3dCQUM1QkM7d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDO3dCQUNBQyxRQUFRVSxNQUFNbUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsTUFBUyxDQUFBO2dDQUMvQixHQUFHQSxHQUFHO2dDQUNOWCxNQUFNOzRCQUNSLENBQUE7d0JBQ0FuQjt3QkFDQUM7d0JBQ0FDO3dCQUNBRSxjQUFjQSxhQUFhMkIsS0FBSyxDQUFDO3dCQUNqQ3pCO3dCQUNBQyxXQUFXUTtvQkFDYjtnQkFDRjtZQUNBLEtBQUs7Z0JBQU87b0JBQ1YsSUFBSWlCLElBQUFBLGlCQUFVLEVBQUN2QixRQUFRO3dCQUNyQixPQUFPaEIsdUJBQXVCOzRCQUM1QkM7NEJBQ0FDOzRCQUNBQzs0QkFDQUMsY0FBYyxDQUFDLEVBQUVBLGFBQWEsRUFBRVksTUFBTUssSUFBSSxDQUFDLENBQUMsQ0FBQzs0QkFDN0NoQjs0QkFDQUMsUUFBUVUsTUFBTVYsTUFBTTs0QkFDcEJDOzRCQUNBQzs0QkFDQUM7NEJBQ0FFLGNBQWNBLGFBQWEyQixLQUFLLENBQUM7NEJBQ2pDekI7NEJBQ0FDLFdBQVdRO3dCQUNiO29CQUNGO29CQUNBLE9BQU90Qix1QkFBdUI7d0JBQzVCQzt3QkFDQUM7d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDLFFBQVFVLE1BQU1WLE1BQU07d0JBQ3BCQzt3QkFDQUM7d0JBQ0FDO3dCQUNBRSxjQUFjQSxhQUFhMkIsS0FBSyxDQUFDO3dCQUNqQ3pCO3dCQUNBQyxXQUFXUTtvQkFDYjtnQkFDRjtZQUVBLEtBQUs7Z0JBQVM7b0JBQ1osSUFBSWIsVUFBVU8sTUFBTVksU0FBUyxJQUFJM0IsUUFBUTRCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxZQUFZLEVBQUU7d0JBQ3BFVCxlQUFlLENBQUMsRUFBRVIsVUFBVSxRQUFRLENBQUM7d0JBRXJDTixLQUFLLENBQUNNLFVBQVUsR0FBRzBCLElBQUFBLGNBQUUsRUFDbkJ2QyxRQUFRdUIsTUFBTSxDQUFDVixVQUFVLENBQUNTLEVBQUUsRUFDNUJ0QixRQUFRdUIsTUFBTSxDQUFDRixhQUFhLENBQUNtQixTQUFTO3dCQUV4QyxJQUFJaEMsV0FBVyxPQUFPOzRCQUNwQkosWUFBWXFDLElBQUksQ0FBQztnQ0FDZmpCLFlBQVk7Z0NBQ1pFLE9BQU8xQixRQUFRdUIsTUFBTSxDQUFDRixhQUFhO2dDQUNuQ3FCLE9BQU9sQzs0QkFDVDt3QkFDRjtvQkFDRjtvQkFDQSxPQUFPVCx1QkFBdUI7d0JBQzVCQzt3QkFDQUM7d0JBQ0FDO3dCQUNBQyxjQUFjLENBQUMsRUFBRUEsYUFBYSxFQUFFWSxNQUFNSyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUM3Q2hCO3dCQUNBQyxRQUFRVSxNQUFNVixNQUFNO3dCQUNwQkM7d0JBQ0FDO3dCQUNBQzt3QkFDQUUsY0FBY0EsYUFBYTJCLEtBQUssQ0FBQzt3QkFDakN6Qjt3QkFDQUMsV0FBV1E7b0JBQ2I7Z0JBQ0Y7WUFFQSxLQUFLO2dCQUFTO29CQUNaQSxlQUFlLENBQUMsRUFBRVIsVUFBVSxDQUFDLEVBQUU4QixJQUFBQSxvQkFBVyxFQUFDNUIsTUFBTUssSUFBSSxFQUFFLENBQUM7b0JBQ3hELElBQUlaLFVBQVVPLE1BQU1ZLFNBQVMsSUFBSTNCLFFBQVE0QixPQUFPLENBQUNDLE1BQU0sQ0FBQ0MsWUFBWSxFQUFFO3dCQUNwRXZCLEtBQUssQ0FBQ2MsYUFBYSxHQUFHdUIsSUFBQUEsZUFBRyxFQUN2QkwsSUFBQUEsY0FBRSxFQUFDdkMsUUFBUXVCLE1BQU0sQ0FBQ1YsVUFBVSxDQUFDUyxFQUFFLEVBQUV0QixRQUFRdUIsTUFBTSxDQUFDRixhQUFhLENBQUNtQixTQUFTLEdBQ3ZFRCxJQUFBQSxjQUFFLEVBQUN2QyxRQUFRdUIsTUFBTSxDQUFDRixhQUFhLENBQUN3QixPQUFPLEVBQUVyQzt3QkFFM0MsSUFBSUEsV0FBVyxPQUFPOzRCQUNwQkosWUFBWXFDLElBQUksQ0FBQztnQ0FDZmpCLFlBQVk7Z0NBQ1pFLE9BQU8xQixRQUFRdUIsTUFBTSxDQUFDRixhQUFhO2dDQUNuQ3FCLE9BQU9sQzs0QkFDVDt3QkFDRjtvQkFDRixPQUFPO3dCQUNMRCxLQUFLLENBQUNjLGFBQWEsR0FBR2tCLElBQUFBLGNBQUUsRUFDdEJ2QyxRQUFRdUIsTUFBTSxDQUFDVixVQUFVLENBQUNTLEVBQUUsRUFDNUJ0QixRQUFRdUIsTUFBTSxDQUFDRixhQUFhLENBQUNtQixTQUFTO29CQUUxQztvQkFDQSxPQUFPekMsdUJBQXVCO3dCQUM1QkM7d0JBQ0FFO3dCQUNBRTt3QkFDQUMsUUFBUVUsTUFBTVYsTUFBTTt3QkFDcEJDO3dCQUNBQzt3QkFDQUM7d0JBQ0FFLGNBQWNBLGFBQWEyQixLQUFLLENBQUM7d0JBQ2pDekI7d0JBQ0FDLFdBQVdRO29CQUNiO2dCQUNGO1lBRUEsS0FBSztnQkFBVTtvQkFDYixJQUFJeUI7b0JBQ0osSUFBSXpCO29CQUNKLE1BQU0wQixnQkFBZ0JoQyxNQUFNaUMsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0M7d0JBQ3ZDN0IsZUFBZSxDQUFDLEVBQUVSLFVBQVUsUUFBUSxFQUFFOEIsSUFBQUEsb0JBQVcsRUFBQ08sTUFBTUMsSUFBSSxFQUFFLENBQUM7d0JBQy9ELElBQUlDO3dCQUNKLE1BQU1DLG1CQUFtQixFQUFFO3dCQUMzQixNQUFNQyxvQkFBb0IsQ0FBQzt3QkFDM0IsSUFBSTs0QkFDRkYsU0FBU3JELHVCQUF1QjtnQ0FDOUJDO2dDQUNBRTtnQ0FDQUUsYUFBYWlEO2dDQUNiaEQsUUFBUTZDLE1BQU03QyxNQUFNO2dDQUNwQkM7Z0NBQ0FDO2dDQUNBQztnQ0FDQUUsY0FBY0EsYUFBYTJCLEtBQUssQ0FBQztnQ0FDakN6QixjQUFjMEM7Z0NBQ2R6QyxXQUFXUTs0QkFDYjt3QkFDRixFQUFFLE9BQU9rQyxPQUFPO3dCQUNkLG9EQUFvRDt3QkFDdEQ7d0JBQ0EsSUFBSSxDQUFDSCxRQUFROzRCQUNYO3dCQUNGO3dCQUNBTixtQkFBbUJNO3dCQUNuQmhELGNBQWNBLFlBQVlvRCxNQUFNLENBQUNIO3dCQUNqQ3pDLGVBQWU7NEJBQUUsR0FBR0EsWUFBWTs0QkFBRSxHQUFHMEMsaUJBQWlCO3dCQUFDO3dCQUN2RCxJQUFJdkMsTUFBTVksU0FBUyxJQUFJM0IsUUFBUTRCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxZQUFZLEVBQUU7NEJBQzFEdkIsS0FBSyxDQUFDYyxhQUFhLEdBQUd1QixJQUFBQSxlQUFHLEVBQ3ZCTCxJQUFBQSxjQUFFLEVBQUN2QyxRQUFRdUIsTUFBTSxDQUFDVixVQUFVLENBQUNTLEVBQUUsRUFBRXRCLFFBQVF1QixNQUFNLENBQUNGLGFBQWEsQ0FBQ21CLFNBQVMsR0FDdkVELElBQUFBLGNBQUUsRUFBQ3ZDLFFBQVF1QixNQUFNLENBQUNGLGFBQWEsQ0FBQ3dCLE9BQU8sRUFBRXJDOzRCQUUzQyxJQUFJQSxRQUFRO2dDQUNWSixZQUFZcUMsSUFBSSxDQUFDO29DQUNmakIsWUFBWTtvQ0FDWkUsT0FBTzFCLFFBQVF1QixNQUFNLENBQUNGLGFBQWE7b0NBQ25DcUIsT0FBT2xDO2dDQUNUOzRCQUNGO3dCQUNGLE9BQU87NEJBQ0xELEtBQUssQ0FBQ2MsYUFBYSxHQUFHa0IsSUFBQUEsY0FBRSxFQUN0QnZDLFFBQVF1QixNQUFNLENBQUNWLFVBQVUsQ0FBQ1MsRUFBRSxFQUM1QnRCLFFBQVF1QixNQUFNLENBQUNGLGFBQWEsQ0FBQ21CLFNBQVM7d0JBRTFDO3dCQUNBLE9BQU9ZO29CQUNUO29CQUNBLElBQUlMLGVBQWU7d0JBQ2pCLE9BQU87NEJBQ0x2QixZQUFZc0IsaUJBQWlCdEIsVUFBVTs0QkFDdkNwQjs0QkFDQVcsT0FBTytCLGlCQUFpQi9CLEtBQUs7NEJBQzdCTCxjQUFjQSxhQUFhMkIsS0FBSyxDQUFDOzRCQUNqQ29CLFdBQVdYLGlCQUFpQlcsU0FBUzs0QkFDckMvQixPQUFPMUIsUUFBUXVCLE1BQU0sQ0FBQ0YsYUFBYTt3QkFDckM7b0JBQ0Y7b0JBQ0E7Z0JBQ0Y7WUFFQSxLQUFLO1lBQ0wsS0FBSztnQkFBVTtvQkFDYixJQUFJcUM7b0JBQ0osTUFBTUMsb0JBQW9CLENBQUMsRUFBRTlDLFVBQVUsS0FBSyxDQUFDO29CQUM3QyxNQUFNK0Msb0JBQW9CbEQsYUFBYTJCLEtBQUssQ0FBQyxHQUFHd0IsSUFBSSxDQUFDO29CQUVyRCxNQUFNQyw2QkFBNkJDLElBQUFBLFFBQUk7b0JBQ3ZDLE1BQU1DLHlCQUF5QkMsSUFBQUEsYUFBSyxFQUNsQ2pFLFFBQVF1QixNQUFNLENBQUNvQyxrQkFBa0IsRUFDakNHO29CQUdGLGtDQUFrQztvQkFDbEN4RCxZQUFZbUMsSUFBSSxDQUFDO3dCQUNmeUIsV0FBVzNCLElBQUFBLGNBQUUsRUFDWCxBQUFDdEMsQ0FBQUEsY0FBY0QsUUFBUXVCLE1BQU0sQ0FBQ1YsVUFBVSxBQUFELEVBQUdTLEVBQUUsRUFDNUMwQyx1QkFBdUJHLE1BQU07d0JBRS9CekMsT0FBT3NDO29CQUNUO29CQUVBcEQsWUFBWSxDQUFDLENBQUMsRUFBRStDLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxHQUFHSyx1QkFBdUJJLElBQUk7b0JBRXZFaEUsWUFBWXFDLElBQUksQ0FBQzt3QkFDZmpCLFlBQVk7d0JBQ1pFLE9BQU9zQzt3QkFDUHRCLE9BQU8zQixNQUFNSyxJQUFJO29CQUNuQjtvQkFFQSxJQUFJaUQ7b0JBRUosSUFBSSxPQUFPdEQsTUFBTXVELFVBQVUsS0FBSyxVQUFVO3dCQUN4Q2pELGVBQWUsQ0FBQyxFQUFFc0IsSUFBQUEsb0JBQVcsRUFBQzVCLE1BQU11RCxVQUFVLEVBQUUsQ0FBQzt3QkFDakQsb0NBQW9DO3dCQUNwQ1oscUJBQXFCMUQsUUFBUTRCLE9BQU8sQ0FBQzJDLFdBQVcsQ0FBQ3hELE1BQU11RCxVQUFVLENBQUMsQ0FBQ3pDLE1BQU0sQ0FBQ3hCLE1BQU07d0JBRWhGZ0UsZ0JBQWdCSixJQUFBQSxhQUFLLEVBQUNqRSxRQUFRdUIsTUFBTSxDQUFDRixhQUFhLEVBQUVzQixJQUFBQSxvQkFBVyxFQUFDb0IsSUFBQUEsUUFBSTt3QkFFcEV6RCxZQUFZbUMsSUFBSSxDQUFDOzRCQUNmeUIsV0FBVzNCLElBQUFBLGNBQUUsRUFBQzhCLGNBQWMvQyxFQUFFLEVBQUUwQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUVqRCxNQUFNdUQsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUMvRTVDLE9BQU8yQzt3QkFDVDt3QkFFQSxJQUFJVCxzQkFBc0IsSUFBSTs0QkFDNUIsT0FBTztnQ0FDTHBDLFlBQVksQ0FBQyxFQUFFVCxNQUFNdUQsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQ0FDbkNsRTtnQ0FDQVc7Z0NBQ0FXLE9BQU9zQzs0QkFDVDt3QkFDRjtvQkFDRixPQUFPLElBQUlKLHNCQUFzQixTQUFTO3dCQUN4QyxNQUFNWSxvQkFBb0J6RCxNQUFNdUQsVUFBVSxDQUFDbkMsR0FBRyxDQUM1QyxDQUFDbUMsYUFBZSxDQUFDLENBQUMsRUFBRVIsMkJBQTJCLEdBQUcsRUFBRW5CLElBQUFBLG9CQUFXLEVBQUMyQixZQUFZLElBQUksQ0FBQzt3QkFFbkYsT0FBTzs0QkFDTGxFOzRCQUNBVzs0QkFDQTBDLFdBQVdnQixlQUFHLENBQUNDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRUYsa0JBQWtCWCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzlEbkMsT0FBT3NDO3dCQUNUO29CQUNGLE9BQU8sSUFBSUosc0JBQXNCLGNBQWM7d0JBQzdDLE1BQU1VLGFBQWFLLE1BQU1DLE9BQU8sQ0FBQzdELE1BQU11RCxVQUFVLElBQUl2RCxNQUFNdUQsVUFBVSxHQUFHOzRCQUFDdkQsTUFBTXVELFVBQVU7eUJBQUM7d0JBRTFGLE9BQU87NEJBQ0xsRTs0QkFDQVc7NEJBQ0E4RCx5QkFBeUIsQ0FBQ0M7Z0NBQ3hCLE1BQU1DLGtCQUFrQlQsV0FBV3JELElBQUksQ0FBQyxDQUFDK0QsV0FBYUEsYUFBYUY7Z0NBQ25FLElBQUlDLGlCQUFpQixPQUFPLENBQUMsRUFBRUEsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbEQsT0FBT0U7NEJBQ1Q7NEJBQ0F2RCxPQUFPc0M7d0JBQ1Q7b0JBQ0YsT0FBTzt3QkFDTCxNQUFNLElBQUlrQixnQkFBUSxDQUFDO29CQUNyQjtvQkFFQSxPQUFPbkYsdUJBQXVCO3dCQUM1QkM7d0JBQ0FDLFlBQVlvRTt3QkFDWm5FLGdCQUFnQjBEO3dCQUNoQnhEO3dCQUNBQyxRQUFRcUQ7d0JBQ1JwRDt3QkFDQUM7d0JBQ0FDO3dCQUNBRSxjQUFjQSxhQUFhMkIsS0FBSyxDQUFDO3dCQUNqQ3pCO3dCQUNBQyxXQUFXUTtvQkFDYjtnQkFDRjtZQUVBO2dCQUFTO29CQUNQLElBQUlGLElBQUFBLHVCQUFnQixFQUFDSixRQUFRO3dCQUMzQixJQUFJQSxNQUFNWSxTQUFTLElBQUkzQixRQUFRNEIsT0FBTyxDQUFDQyxNQUFNLENBQUNDLFlBQVksRUFBRTs0QkFDMUQseUVBQXlFOzRCQUN6RSx5REFBeUQ7NEJBQ3pEVCxlQUFlLENBQUMsRUFBRVIsVUFBVSxRQUFRLENBQUM7NEJBRXJDLE1BQU1zRSxjQUFjbEYsY0FBY0QsUUFBUXVCLE1BQU0sQ0FBQ1YsVUFBVTs0QkFFM0ROLEtBQUssQ0FBQ2MsYUFBYSxHQUFHa0IsSUFBQUEsY0FBRSxFQUFDNEMsWUFBWTdELEVBQUUsRUFBRXRCLFFBQVF1QixNQUFNLENBQUNGLGFBQWEsQ0FBQ21CLFNBQVM7NEJBRS9FdkMsYUFBYWdGOzRCQUViLElBQUl6RSxXQUFXLE9BQU87Z0NBQ3BCSixZQUFZcUMsSUFBSSxDQUFDO29DQUNmakIsWUFBWTtvQ0FDWkUsT0FBTzFCLFFBQVF1QixNQUFNLENBQUNGLGFBQWE7b0NBQ25DcUIsT0FBT2xDO2dDQUNUOzRCQUNGO3dCQUNGO3dCQUVBLE1BQU00RSxjQUFjbkYsY0FBY0QsUUFBUXVCLE1BQU0sQ0FBQ0YsYUFBYTt3QkFFOURULFlBQVksQ0FBQyxDQUFDLEVBQUVTLGFBQWEsQ0FBQyxFQUFFbEIsYUFBYSxFQUFFWSxNQUFNSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQzFEZ0UsV0FBVyxDQUFDLENBQUMsRUFBRWpGLGFBQWEsRUFBRVksTUFBTUssSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFFN0MsT0FBTzs0QkFDTEksWUFBWSxDQUFDLEVBQUVyQixhQUFhLEVBQUVZLE1BQU1LLElBQUksQ0FBQyxDQUFDOzRCQUMxQ2hCOzRCQUNBVzs0QkFDQUwsY0FBY0E7NEJBQ2RnQixPQUFPMEQ7d0JBQ1Q7b0JBQ0Y7Z0JBQ0Y7UUFDRjtJQUNGO0lBRUEsTUFBTSxJQUFJRixnQkFBUSxDQUFDLENBQUMsOEJBQThCLEVBQUVwRSxVQUFVLENBQUM7QUFDakUifQ==
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxuICB2YWx1ZTogdW5rbm93blxufVxuXG50eXBlIFRhYmxlQ29sdW1uID0ge1xuICBjb2x1bW5OYW1lPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W11cbiAgZmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YVxuICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZT86ICh2YWw6IHVua25vd24pID0+IHN0cmluZ1xuICBwYXRoU2VnbWVudHM/OiBzdHJpbmdbXVxuICByYXdDb2x1bW4/OiBTUUxcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxufVxuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBhbGlhc1RhYmxlPzogR2VuZXJpY1RhYmxlXG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRQYXRoPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRyYW5zZm9ybXMgcGF0aCB0byB0YWJsZSBhbmQgY29sdW1uIG5hbWVcbiAqIEFkZHMgdGFibGVzIHRvIGBqb2luYFxuICogQHJldHVybnMgVGFibGVDb2x1bW5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggPSAoe1xuICBhZGFwdGVyLFxuICBhbGlhc1RhYmxlLFxuICBjb2xsZWN0aW9uUGF0aCxcbiAgY29sdW1uUHJlZml4ID0gJycsXG4gIGNvbnN0cmFpbnRQYXRoOiBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHNlbGVjdEZpZWxkcyxcbiAgdGFibGVOYW1lLFxufTogQXJncyk6IFRhYmxlQ29sdW1uID0+IHtcbiAgY29uc3QgZmllbGRQYXRoID0gaW5jb21pbmdTZWdtZW50c1swXVxuICBsZXQgbG9jYWxlID0gaW5jb21pbmdMb2NhbGVcbiAgY29uc3Qgcm9vdFRhYmxlTmFtZSA9IGluY29taW5nUm9vdFRhYmxlTmFtZSB8fCB0YWJsZU5hbWVcbiAgbGV0IGNvbnN0cmFpbnRQYXRoID0gaW5jb21pbmdDb25zdHJhaW50UGF0aCB8fCAnJ1xuXG4gIGNvbnN0IGZpZWxkID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcyBhcyBGaWVsZFtdKS5maW5kKFxuICAgIChmaWVsZFRvRmluZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZFRvRmluZCkgJiYgZmllbGRUb0ZpbmQubmFtZSA9PT0gZmllbGRQYXRoLFxuICApIGFzIEZpZWxkIHwgVGFiQXNGaWVsZFxuICBsZXQgbmV3VGFibGVOYW1lID0gdGFibGVOYW1lXG5cbiAgaWYgKCFmaWVsZCAmJiBmaWVsZFBhdGggPT09ICdpZCcpIHtcbiAgICBzZWxlY3RGaWVsZHMuaWQgPSBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLmlkXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6ICdpZCcsXG4gICAgICBjb25zdHJhaW50cyxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgfSxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSAndGFiJzoge1xuICAgICAgICBpZiAodGFiSGFzTmFtZShmaWVsZCkpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgICAgY29sdW1uUHJlZml4OiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfV9gLFxuICAgICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgICBqb2lucyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKGxvY2FsZSAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2xvY2FsZXNgXG5cbiAgICAgICAgICBqb2luc1t0YWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29sdW1uUHJlZml4OiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfV9gLFxuICAgICAgICAgIGNvbnN0cmFpbnRQYXRoLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgIGNvbnN0cmFpbnRQYXRoID0gYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfS4lLmBcbiAgICAgICAgaWYgKGxvY2FsZSAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gYW5kKFxuICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpLFxuICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fbG9jYWxlLCBsb2NhbGUpLFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbnN0cmFpbnRQYXRoLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBsZXQgYmxvY2tUYWJsZUNvbHVtbjogVGFibGVDb2x1bW5cbiAgICAgICAgbGV0IG5ld1RhYmxlTmFtZTogc3RyaW5nXG4gICAgICAgIGNvbnN0IGhhc0Jsb2NrRmllbGQgPSBmaWVsZC5ibG9ja3Muc29tZSgoYmxvY2spID0+IHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgY29uc3QgYmxvY2tDb25zdHJhaW50cyA9IFtdXG4gICAgICAgICAgY29uc3QgYmxvY2tTZWxlY3RGaWVsZHMgPSB7fVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRQYXRoOiAnJyxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBmaW5lLCBub3QgZXZlcnkgYmxvY2sgd2lsbCBoYXZlIHRoZSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGJsb2NrVGFibGVDb2x1bW4gPSByZXN1bHRcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLmNvbmNhdChibG9ja0NvbnN0cmFpbnRzKVxuICAgICAgICAgIHNlbGVjdEZpZWxkcyA9IHsgLi4uc2VsZWN0RmllbGRzLCAuLi5ibG9ja1NlbGVjdEZpZWxkcyB9XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICAgIGlmIChoYXNCbG9ja0ZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGJsb2NrVGFibGVDb2x1bW4uY29sdW1uTmFtZSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQ6IGJsb2NrVGFibGVDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICAgIHJhd0NvbHVtbjogYmxvY2tUYWJsZUNvbHVtbi5yYXdDb2x1bW4sXG4gICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgbGV0IHJlbGF0aW9uc2hpcEZpZWxkc1xuICAgICAgICBjb25zdCByZWxhdGlvblRhYmxlTmFtZSA9IGAke3Jvb3RUYWJsZU5hbWV9X3JlbHNgXG4gICAgICAgIGNvbnN0IG5ld0NvbGxlY3Rpb25QYXRoID0gcGF0aFNlZ21lbnRzLnNsaWNlKDEpLmpvaW4oJy4nKVxuICAgICAgICBjb25zdCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSA9IHV1aWQoKVxuICAgICAgICBjb25zdCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlID0gYWxpYXMoXG4gICAgICAgICAgYWRhcHRlci50YWJsZXNbcmVsYXRpb25UYWJsZU5hbWVdLFxuICAgICAgICAgIGFsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gSm9pbiBpbiB0aGUgcmVsYXRpb25zaGlwcyB0YWJsZVxuICAgICAgICBqb2luQWxpYXNlcy5wdXNoKHtcbiAgICAgICAgICBjb25kaXRpb246IGVxKFxuICAgICAgICAgICAgKGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0pLmlkLFxuICAgICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZS5wYXJlbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgfSlcblxuICAgICAgICBzZWxlY3RGaWVsZHNbYCR7cmVsYXRpb25UYWJsZU5hbWV9LnBhdGhgXSA9IGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aFxuXG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdwYXRoJyxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB2YWx1ZTogYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IG5ld0FsaWFzVGFibGVcblxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkLnJlbGF0aW9uVG8gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dG9TbmFrZUNhc2UoZmllbGQucmVsYXRpb25Ubyl9YFxuICAgICAgICAgIC8vIHBhcmVudCB0byByZWxhdGlvbnNoaXAgam9pbiB0YWJsZVxuICAgICAgICAgIHJlbGF0aW9uc2hpcEZpZWxkcyA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tmaWVsZC5yZWxhdGlvblRvXS5jb25maWcuZmllbGRzXG5cbiAgICAgICAgICBuZXdBbGlhc1RhYmxlID0gYWxpYXMoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSwgdG9TbmFrZUNhc2UodXVpZCgpKSlcblxuICAgICAgICAgIGpvaW5BbGlhc2VzLnB1c2goe1xuICAgICAgICAgICAgY29uZGl0aW9uOiBlcShuZXdBbGlhc1RhYmxlLmlkLCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlW2Ake2ZpZWxkLnJlbGF0aW9uVG99SURgXSksXG4gICAgICAgICAgICB0YWJsZTogbmV3QWxpYXNUYWJsZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKG5ld0NvbGxlY3Rpb25QYXRoID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogYCR7ZmllbGQucmVsYXRpb25Ub31JRGAsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5ld0NvbGxlY3Rpb25QYXRoID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgY29uc3QgdGFibGVDb2x1bW5zTmFtZXMgPSBmaWVsZC5yZWxhdGlvblRvLm1hcChcbiAgICAgICAgICAgIChyZWxhdGlvblRvKSA9PiBgXCIke2FsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lfVwiLlwiJHt0b1NuYWtlQ2FzZShyZWxhdGlvblRvKX1faWRcImAsXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBzcWwucmF3KGBDT0FMRVNDRSgke3RhYmxlQ29sdW1uc05hbWVzLmpvaW4oJywgJyl9KWApLFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5ld0NvbGxlY3Rpb25QYXRoID09PSAncmVsYXRpb25UbycpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGlvblRvID0gQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSA/IGZpZWxkLnJlbGF0aW9uVG8gOiBbZmllbGQucmVsYXRpb25Ub11cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFJlbGF0aW9uID0gcmVsYXRpb25Uby5maW5kKChyZWxhdGlvbikgPT4gcmVsYXRpb24gPT09IHZhbClcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZWRSZWxhdGlvbikgcmV0dXJuIGAke21hdGNoZWRSZWxhdGlvbn1JRGBcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhYmxlOiBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoJ05vdCBzdXBwb3J0ZWQnKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZTogbmV3QWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aDogbmV3Q29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiByZWxhdGlvbnNoaXBGaWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgLy8gSWYgbG9jYWxpemVkLCB3ZSBnbyB0byBsb2NhbGl6ZWQgdGFibGUgYW5kIHNldCBhbGlhc1RhYmxlIHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gc28gaXQgaXMgbm90IHBpY2tlZCB1cCBiZWxvdyB0byBiZSB1c2VkIGFzIHRhcmdldFRhYmxlXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2xvY2FsZXNgXG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhYmxlID0gYWxpYXNUYWJsZSB8fCBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdXG5cbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShwYXJlbnRUYWJsZS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpXG5cbiAgICAgICAgICAgIGFsaWFzVGFibGUgPSB1bmRlZmluZWRcblxuICAgICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0VGFibGUgPSBhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV1cblxuICAgICAgICAgIHNlbGVjdEZpZWxkc1tgJHtuZXdUYWJsZU5hbWV9LiR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1gXSA9XG4gICAgICAgICAgICB0YXJnZXRUYWJsZVtgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWBdXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1gLFxuICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgdGFibGU6IHRhcmdldFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBUElFcnJvcihgQ2Fubm90IGZpbmQgZmllbGQgZm9yIHBhdGggYXQgJHtmaWVsZFBhdGh9YClcbn1cbiJdLCJuYW1lcyI6WyJnZXRUYWJsZUNvbHVtbkZyb21QYXRoIiwiYWRhcHRlciIsImFsaWFzVGFibGUiLCJjb2xsZWN0aW9uUGF0aCIsImNvbHVtblByZWZpeCIsImNvbnN0cmFpbnRQYXRoIiwiaW5jb21pbmdDb25zdHJhaW50UGF0aCIsImNvbnN0cmFpbnRzIiwiZmllbGRzIiwiam9pbkFsaWFzZXMiLCJqb2lucyIsImxvY2FsZSIsImluY29taW5nTG9jYWxlIiwicGF0aFNlZ21lbnRzIiwiaW5jb21pbmdTZWdtZW50cyIsInJvb3RUYWJsZU5hbWUiLCJpbmNvbWluZ1Jvb3RUYWJsZU5hbWUiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJmaWVsZFBhdGgiLCJmaWVsZCIsImZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyIsImZpbmQiLCJmaWVsZFRvRmluZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsInRhYkhhc05hbWUiLCJlcSIsIl9wYXJlbnRJRCIsInB1c2giLCJ2YWx1ZSIsInRvU25ha2VDYXNlIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJoYXNCbG9ja0ZpZWxkIiwiYmxvY2tzIiwic29tZSIsImJsb2NrIiwic2x1ZyIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsInV1aWQiLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlIiwiYWxpYXMiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwic3FsIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQW9EdkJBOzs7ZUFBQUE7Ozs0QkFoRGdCO3dCQUNQO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBMENwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxnQkFBZ0JDLHNCQUFzQixFQUN0Q0MsY0FBYyxFQUFFLEVBQ2hCQyxNQUFNLEVBQ05DLFdBQVcsRUFDWEMsS0FBSyxFQUNMQyxRQUFRQyxjQUFjLEVBQ3RCQyxjQUFjQyxnQkFBZ0IsRUFDOUJDLGVBQWVDLHFCQUFxQixFQUNwQ0MsWUFBWSxFQUNaQyxTQUFTLEVBQ0o7SUFDTCxNQUFNQyxZQUFZTCxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ3JDLElBQUlILFNBQVNDO0lBQ2IsTUFBTUcsZ0JBQWdCQyx5QkFBeUJFO0lBQy9DLElBQUliLGlC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
@@ -1 +1 @@
1
- {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,KAAK,EAAY,KAAK,EAAE,MAAM,eAAe,CAAA;AAM3D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAS1E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,WAAW,EAAE,qBAAqB,CAAA;IAClC,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CA8JrB"}
1
+ {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,KAAK,EAAY,KAAK,EAAE,MAAM,eAAe,CAAA;AAM3D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAS1E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,WAAW,EAAE,qBAAqB,CAAA;IAClC,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAkKrB"}
@@ -70,7 +70,11 @@ async function parseParams({ adapter, fields, joinAliases, joins, locale, select
70
70
  });
71
71
  const val = where[relationOrPath][operator];
72
72
  queryConstraints.forEach(({ columnName: col, table: constraintTable, value })=>{
73
- constraints.push(_operatorMap.operatorMap.equals(constraintTable[col], value));
73
+ if (typeof value === 'string' && value.indexOf('%') > -1) {
74
+ constraints.push(_operatorMap.operatorMap.like(constraintTable[col], value));
75
+ } else {
76
+ constraints.push(_operatorMap.operatorMap.equals(constraintTable[col], value));
77
+ }
74
78
  });
75
79
  if ([
76
80
  'json',
@@ -149,4 +153,4 @@ async function parseParams({ adapter, fields, joinAliases, joins, locale, select
149
153
  return result;
150
154
  }
151
155
 
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL3BhcnNlUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBPcGVyYXRvciwgV2hlcmUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGlsaWtlLCBpc05vdE51bGwsIGlzTnVsbCwgbmUsIG5vdEluQXJyYXksIG9yLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tICdwYXlsb2FkL2Vycm9ycydcbmltcG9ydCB7IHZhbGlkT3BlcmF0b3JzIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQnVpbGRRdWVyeUpvaW5BbGlhc2VzLCBCdWlsZFF1ZXJ5Sm9pbnMgfSBmcm9tICcuL2J1aWxkUXVlcnknXG5cbmltcG9ydCB7IGJ1aWxkQW5kT3JDb25kaXRpb25zIH0gZnJvbSAnLi9idWlsZEFuZE9yQ29uZGl0aW9ucydcbmltcG9ydCB7IGNyZWF0ZUpTT05RdWVyeSB9IGZyb20gJy4vY3JlYXRlSlNPTlF1ZXJ5J1xuaW1wb3J0IHsgY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwgfSBmcm9tICcuL2NyZWF0ZUpTT05RdWVyeS9jb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCdcbmltcG9ydCB7IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggfSBmcm9tICcuL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgnXG5pbXBvcnQgeyBvcGVyYXRvck1hcCB9IGZyb20gJy4vb3BlcmF0b3JNYXAnXG5pbXBvcnQgeyBzYW5pdGl6ZVF1ZXJ5VmFsdWUgfSBmcm9tICcuL3Nhbml0aXplUXVlcnlWYWx1ZSdcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgZmllbGRzOiBGaWVsZFtdXG4gIGpvaW5BbGlhc2VzOiBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXNcbiAgam9pbnM6IEJ1aWxkUXVlcnlKb2luc1xuICBsb2NhbGU6IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIHdoZXJlOiBXaGVyZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQYXJhbXMoe1xuICBhZGFwdGVyLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbiAgd2hlcmUsXG59OiBBcmdzKTogUHJvbWlzZTxTUUw+IHtcbiAgbGV0IHJlc3VsdDogU1FMXG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTUUxbXSA9IFtdXG5cbiAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDApIHtcbiAgICAvLyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgd2hlcmVLZXkgaXMgYW4gQU5ELCBPUiwgb3IgYSBzY2hlbWEgcGF0aFxuICAgIGZvciAoY29uc3QgcmVsYXRpb25PclBhdGggb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICBpZiAocmVsYXRpb25PclBhdGgpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gd2hlcmVbcmVsYXRpb25PclBhdGhdXG4gICAgICAgIGxldCBjb25kaXRpb25PcGVyYXRvcjogJ2FuZCcgfCAnb3InXG4gICAgICAgIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnYW5kJykge1xuICAgICAgICAgIGNvbmRpdGlvbk9wZXJhdG9yID0gJ2FuZCdcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnb3InKSB7XG4gICAgICAgICAgY29uZGl0aW9uT3BlcmF0b3IgPSAnb3InXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0Q29uZGl0aW9ucyA9IGF3YWl0IGJ1aWxkQW5kT3JDb25kaXRpb25zKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgd2hlcmU6IGNvbmRpdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChidWlsdENvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvck1hcFtjb25kaXRpb25PcGVyYXRvcl0ocmVzdWx0LCAuLi5idWlsdENvbmRpdGlvbnMpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvck1hcFtjb25kaXRpb25PcGVyYXRvcl0oLi4uYnVpbHRDb25kaXRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJdCdzIGEgcGF0aCAtIGFuZCB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgY29tcGFyaXNvbnMgb24gYSBzaW5nbGUgcGF0aC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSAtIHRpdGxlIGxpa2UgJ3Rlc3QnIGFuZCB0aXRsZSBub3QgZXF1YWwgdG8gJ3Rlc3RlcidcbiAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGxvb3Agb24ga2V5cyBhZ2FpbiBoZXJlIHRvIGhhbmRsZSBlYWNoIG9wZXJhdG9yIGluZGVwZW5kZW50bHlcbiAgICAgICAgICBjb25zdCBwYXRoT3BlcmF0b3JzID0gd2hlcmVbcmVsYXRpb25PclBhdGhdXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3BlcmF0b3JzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcGVyYXRvciBvZiBPYmplY3Qua2V5cyhwYXRoT3BlcmF0b3JzKSkge1xuICAgICAgICAgICAgICBpZiAodmFsaWRPcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IgYXMgT3BlcmF0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBxdWVyeUNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgIHJhd0NvbHVtbixcbiAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgIH0gPSBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uUGF0aDogcmVsYXRpb25PclBhdGgsXG4gICAgICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiByZWxhdGlvbk9yUGF0aC5yZXBsYWNlKC9fXy9nLCAnLicpLnNwbGl0KCcuJyksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHdoZXJlW3JlbGF0aW9uT3JQYXRoXVtvcGVyYXRvcl1cblxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29uc3RyYWludHMuZm9yRWFjaCgoeyBjb2x1bW5OYW1lOiBjb2wsIHRhYmxlOiBjb25zdHJhaW50VGFibGUsIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gob3BlcmF0b3JNYXAuZXF1YWxzKGNvbnN0cmFpbnRUYWJsZVtjb2xdLCB2YWx1ZSkpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChbJ2pzb24nLCAncmljaFRleHQnXS5pbmNsdWRlcyhmaWVsZC50eXBlKSAmJiBBcnJheS5pc0FycmF5KHBhdGhTZWdtZW50cykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aFNlZ21lbnRzLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICBzZWdtZW50cy51bnNoaWZ0KHRhYmxlW2NvbHVtbk5hbWVdLm5hbWUpXG5cbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAncmljaFRleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25RdWVyeSA9IGNyZWF0ZUpTT05RdWVyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBzZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICB0cmVhdEFzQXJyYXk6IFsnY2hpbGRyZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmVhdFJvb3RBc0FycmF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChzcWwucmF3KGpzb25RdWVyeSkpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvblF1ZXJ5ID0gY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwocGF0aFNlZ21lbnRzKVxuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNxbC5yYXcoYCR7dGFibGVbY29sdW1uTmFtZV0ubmFtZX0ke2pzb25RdWVyeX0gPSAnJSR7dmFsfSUnYCkpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdldE5vdE51bGxDb2x1bW5CeVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUodmFsKVxuICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChpc05vdE51bGwodGFibGVbY29sdW1uTmFtZV0pKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoW3sgcGF0aDogcmVsYXRpb25PclBhdGggfV0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2xpa2UnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBhbmQoLi4udmFsLnNwbGl0KCcgJykubWFwKCh3b3JkKSA9PiBpbGlrZSh0YWJsZVtjb2x1bW5OYW1lXSwgYCUke3dvcmR9JWApKSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgb3BlcmF0b3I6IHF1ZXJ5T3BlcmF0b3IsIHZhbHVlOiBxdWVyeVZhbHVlIH0gPSBzYW5pdGl6ZVF1ZXJ5VmFsdWUoe1xuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgIHJlbGF0aW9uT3JQYXRoLFxuICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAocXVlcnlPcGVyYXRvciA9PT0gJ25vdF9lcXVhbHMnICYmIHF1ZXJ5VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG9yKFxuICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbChyYXdDb2x1bW4gfHwgdGFibGVbY29sdW1uTmFtZV0pLFxuICAgICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICAgICAgICAgICAgICAgICAgICBuZTxhbnk+KHJhd0NvbHVtbiB8fCB0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyB8fCBmaWVsZC50eXBlID09PSAndXBsb2FkJykgJiZcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocXVlcnlWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAnbm90X2luJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3FsYCR7bm90SW5BcnJheSh0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSl9IE9SXG4gICAgICAgICAgICAgICAgICAgICR7dGFibGVbY29sdW1uTmFtZV19XG4gICAgICAgICAgICAgICAgICAgIElTXG4gICAgICAgICAgICAgICAgICAgIE5VTExgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvck1hcFtxdWVyeU9wZXJhdG9yXShyYXdDb2x1bW4gfHwgdGFibGVbY29sdW1uTmFtZV0sIHF1ZXJ5VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY29uc3RyYWludHMubGVuZ3RoID4gMCkge1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdCA9IGFuZChyZXN1bHQsIC4uLmNvbnN0cmFpbnRzKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBhbmQoLi4uY29uc3RyYWludHMpXG4gICAgfVxuICB9XG4gIGlmIChjb25zdHJhaW50cy5sZW5ndGggPT09IDEgJiYgIXJlc3VsdCkge1xuICAgIDtbcmVzdWx0XSA9IGNvbnN0cmFpbnRzXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsicGFyc2VQYXJhbXMiLCJhZGFwdGVyIiwiZmllbGRzIiwiam9pbkFsaWFzZXMiLCJqb2lucyIsImxvY2FsZSIsInNlbGVjdEZpZWxkcyIsInRhYmxlTmFtZSIsIndoZXJlIiwicmVzdWx0IiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicmVsYXRpb25PclBhdGgiLCJjb25kaXRpb24iLCJjb25kaXRpb25PcGVyYXRvciIsInRvTG93ZXJDYXNlIiwiQXJyYXkiLCJpc0FycmF5IiwiYnVpbHRDb25kaXRpb25zIiwiYnVpbGRBbmRPckNvbmRpdGlvbnMiLCJvcGVyYXRvck1hcCIsInBhdGhPcGVyYXRvcnMiLCJvcGVyYXRvciIsInZhbGlkT3BlcmF0b3JzIiwiaW5jbHVkZXMiLCJjb2x1bW5OYW1lIiwicXVlcnlDb25zdHJhaW50cyIsImZpZWxkIiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJwYXRoU2VnbWVudHMiLCJyYXdDb2x1bW4iLCJ0YWJsZSIsImdldFRhYmxlQ29sdW1uRnJvbVBhdGgiLCJjb2xsZWN0aW9uUGF0aCIsInJlcGxhY2UiLCJzcGxpdCIsInZhbCIsImZvckVhY2giLCJjb2wiLCJjb25zdHJhaW50VGFibGUiLCJ2YWx1ZSIsInB1c2giLCJlcXVhbHMiLCJ0eXBlIiwic2VnbWVudHMiLCJzbGljZSIsInVuc2hpZnQiLCJuYW1lIiwianNvblF1ZXJ5IiwiY3JlYXRlSlNPTlF1ZXJ5IiwidHJlYXRBc0FycmF5IiwidHJlYXRSb290QXNBcnJheSIsInNxbCIsInJhdyIsImNvbnZlcnRQYXRoVG9KU09OVHJhdmVyc2FsIiwiaXNOb3ROdWxsIiwiUXVlcnlFcnJvciIsInBhdGgiLCJhbmQiLCJtYXAiLCJ3b3JkIiwiaWxpa2UiLCJxdWVyeU9wZXJhdG9yIiwicXVlcnlWYWx1ZSIsInNhbml0aXplUXVlcnlWYWx1ZSIsIm9yIiwiaXNOdWxsIiwibmUiLCJub3RJbkFycmF5Il0sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7Ozs7K0JBNkJiQTs7O2VBQUFBOzs7NEJBekJpRDt3QkFDNUM7dUJBQ0k7c0NBS007aUNBQ0w7NENBQ1c7d0NBQ0o7NkJBQ1g7b0NBQ087QUFhNUIsZUFB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
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL3BhcnNlUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBPcGVyYXRvciwgV2hlcmUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGlsaWtlLCBpc05vdE51bGwsIGlzTnVsbCwgbmUsIG5vdEluQXJyYXksIG9yLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tICdwYXlsb2FkL2Vycm9ycydcbmltcG9ydCB7IHZhbGlkT3BlcmF0b3JzIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQnVpbGRRdWVyeUpvaW5BbGlhc2VzLCBCdWlsZFF1ZXJ5Sm9pbnMgfSBmcm9tICcuL2J1aWxkUXVlcnknXG5cbmltcG9ydCB7IGJ1aWxkQW5kT3JDb25kaXRpb25zIH0gZnJvbSAnLi9idWlsZEFuZE9yQ29uZGl0aW9ucydcbmltcG9ydCB7IGNyZWF0ZUpTT05RdWVyeSB9IGZyb20gJy4vY3JlYXRlSlNPTlF1ZXJ5J1xuaW1wb3J0IHsgY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwgfSBmcm9tICcuL2NyZWF0ZUpTT05RdWVyeS9jb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCdcbmltcG9ydCB7IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggfSBmcm9tICcuL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgnXG5pbXBvcnQgeyBvcGVyYXRvck1hcCB9IGZyb20gJy4vb3BlcmF0b3JNYXAnXG5pbXBvcnQgeyBzYW5pdGl6ZVF1ZXJ5VmFsdWUgfSBmcm9tICcuL3Nhbml0aXplUXVlcnlWYWx1ZSdcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgZmllbGRzOiBGaWVsZFtdXG4gIGpvaW5BbGlhc2VzOiBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXNcbiAgam9pbnM6IEJ1aWxkUXVlcnlKb2luc1xuICBsb2NhbGU6IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIHdoZXJlOiBXaGVyZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQYXJhbXMoe1xuICBhZGFwdGVyLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbiAgd2hlcmUsXG59OiBBcmdzKTogUHJvbWlzZTxTUUw+IHtcbiAgbGV0IHJlc3VsdDogU1FMXG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTUUxbXSA9IFtdXG5cbiAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDApIHtcbiAgICAvLyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgd2hlcmVLZXkgaXMgYW4gQU5ELCBPUiwgb3IgYSBzY2hlbWEgcGF0aFxuICAgIGZvciAoY29uc3QgcmVsYXRpb25PclBhdGggb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICBpZiAocmVsYXRpb25PclBhdGgpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gd2hlcmVbcmVsYXRpb25PclBhdGhdXG4gICAgICAgIGxldCBjb25kaXRpb25PcGVyYXRvcjogJ2FuZCcgfCAnb3InXG4gICAgICAgIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnYW5kJykge1xuICAgICAgICAgIGNvbmRpdGlvbk9wZXJhdG9yID0gJ2FuZCdcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnb3InKSB7XG4gICAgICAgICAgY29uZGl0aW9uT3BlcmF0b3IgPSAnb3InXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0Q29uZGl0aW9ucyA9IGF3YWl0IGJ1aWxkQW5kT3JDb25kaXRpb25zKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgd2hlcmU6IGNvbmRpdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChidWlsdENvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvck1hcFtjb25kaXRpb25PcGVyYXRvcl0ocmVzdWx0LCAuLi5idWlsdENvbmRpdGlvbnMpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvck1hcFtjb25kaXRpb25PcGVyYXRvcl0oLi4uYnVpbHRDb25kaXRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJdCdzIGEgcGF0aCAtIGFuZCB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgY29tcGFyaXNvbnMgb24gYSBzaW5nbGUgcGF0aC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSAtIHRpdGxlIGxpa2UgJ3Rlc3QnIGFuZCB0aXRsZSBub3QgZXF1YWwgdG8gJ3Rlc3RlcidcbiAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGxvb3Agb24ga2V5cyBhZ2FpbiBoZXJlIHRvIGhhbmRsZSBlYWNoIG9wZXJhdG9yIGluZGVwZW5kZW50bHlcbiAgICAgICAgICBjb25zdCBwYXRoT3BlcmF0b3JzID0gd2hlcmVbcmVsYXRpb25PclBhdGhdXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3BlcmF0b3JzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcGVyYXRvciBvZiBPYmplY3Qua2V5cyhwYXRoT3BlcmF0b3JzKSkge1xuICAgICAgICAgICAgICBpZiAodmFsaWRPcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IgYXMgT3BlcmF0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBxdWVyeUNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgIHJhd0NvbHVtbixcbiAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgIH0gPSBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uUGF0aDogcmVsYXRpb25PclBhdGgsXG4gICAgICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiByZWxhdGlvbk9yUGF0aC5yZXBsYWNlKC9fXy9nLCAnLicpLnNwbGl0KCcuJyksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHdoZXJlW3JlbGF0aW9uT3JQYXRoXVtvcGVyYXRvcl1cblxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29uc3RyYWludHMuZm9yRWFjaCgoeyBjb2x1bW5OYW1lOiBjb2wsIHRhYmxlOiBjb25zdHJhaW50VGFibGUsIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluZGV4T2YoJyUnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gob3BlcmF0b3JNYXAubGlrZShjb25zdHJhaW50VGFibGVbY29sXSwgdmFsdWUpKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChvcGVyYXRvck1hcC5lcXVhbHMoY29uc3RyYWludFRhYmxlW2NvbF0sIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKFsnanNvbicsICdyaWNoVGV4dCddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmIEFycmF5LmlzQXJyYXkocGF0aFNlZ21lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoU2VnbWVudHMuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnVuc2hpZnQodGFibGVbY29sdW1uTmFtZV0ubmFtZSlcblxuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdyaWNoVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvblF1ZXJ5ID0gY3JlYXRlSlNPTlF1ZXJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICBwYXRoU2VnbWVudHM6IHNlZ21lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgIHRyZWF0QXNBcnJheTogWydjaGlsZHJlbiddLFxuICAgICAgICAgICAgICAgICAgICAgIHRyZWF0Um9vdEFzQXJyYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNxbC5yYXcoanNvblF1ZXJ5KSlcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uUXVlcnkgPSBjb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbChwYXRoU2VnbWVudHMpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goc3FsLnJhdyhgJHt0YWJsZVtjb2x1bW5OYW1lXS5uYW1lfSR7anNvblF1ZXJ5fSA9ICclJHt2YWx9JSdgKSlcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZSh2YWwpXG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGlzTm90TnVsbCh0YWJsZVtjb2x1bW5OYW1lXSkpXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihbeyBwYXRoOiByZWxhdGlvbk9yUGF0aCB9XSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnbGlrZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGFuZCguLi52YWwuc3BsaXQoJyAnKS5tYXAoKHdvcmQpID0+IGlsaWtlKHRhYmxlW2NvbHVtbk5hbWVdLCBgJSR7d29yZH0lYCkpKSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcGVyYXRvcjogcXVlcnlPcGVyYXRvciwgdmFsdWU6IHF1ZXJ5VmFsdWUgfSA9IHNhbml0aXplUXVlcnlWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgcmVsYXRpb25PclBhdGgsXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChxdWVyeU9wZXJhdG9yID09PSAnbm90X2VxdWFscycgJiYgcXVlcnlWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgb3IoXG4gICAgICAgICAgICAgICAgICAgICAgaXNOdWxsKHJhd0NvbHVtbiB8fCB0YWJsZVtjb2x1bW5OYW1lXSksXG4gICAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICAgICAgICAgICAgICAgICAgICAgIG5lPGFueT4ocmF3Q29sdW1uIHx8IHRhYmxlW2NvbHVtbk5hbWVdLCBxdWVyeVZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgKGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnIHx8IGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnKSAmJlxuICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShxdWVyeVZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICdub3RfaW4nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzcWxgJHtub3RJbkFycmF5KHRhYmxlW2NvbHVtbk5hbWVdLCBxdWVyeVZhbHVlKX0gT1JcbiAgICAgICAgICAgICAgICAgICAgJHt0YWJsZVtjb2x1bW5OYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgSVNcbiAgICAgICAgICAgICAgICAgICAgTlVMTGAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTWFwW3F1ZXJ5T3BlcmF0b3JdKHJhd0NvbHVtbiB8fCB0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb25zdHJhaW50cy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0ID0gYW5kKHJlc3VsdCwgLi4uY29uc3RyYWludHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGFuZCguLi5jb25zdHJhaW50cylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnN0cmFpbnRzLmxlbmd0aCA9PT0gMSAmJiAhcmVzdWx0KSB7XG4gICAgO1tyZXN1bHRdID0gY29uc3RyYWludHNcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVBhcmFtcyIsImFkYXB0ZXIiLCJmaWVsZHMiLCJqb2luQWxpYXNlcyIsImpvaW5zIiwibG9jYWxlIiwic2VsZWN0RmllbGRzIiwidGFibGVOYW1lIiwid2hlcmUiLCJyZXN1bHQiLCJjb25zdHJhaW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJyZWxhdGlvbk9yUGF0aCIsImNvbmRpdGlvbiIsImNvbmRpdGlvbk9wZXJhdG9yIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJidWlsdENvbmRpdGlvbnMiLCJidWlsZEFuZE9yQ29uZGl0aW9ucyIsIm9wZXJhdG9yTWFwIiwicGF0aE9wZXJhdG9ycyIsIm9wZXJhdG9yIiwidmFsaWRPcGVyYXRvcnMiLCJpbmNsdWRlcyIsImNvbHVtbk5hbWUiLCJxdWVyeUNvbnN0cmFpbnRzIiwiZmllbGQiLCJnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZSIsInBhdGhTZWdtZW50cyIsInJhd0NvbHVtbiIsInRhYmxlIiwiZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwicmVwbGFjZSIsInNwbGl0IiwidmFsIiwiZm9yRWFjaCIsImNvbCIsImNvbnN0cmFpbnRUYWJsZSIsInZhbHVlIiwiaW5kZXhPZiIsInB1c2giLCJsaWtlIiwiZXF1YWxzIiwidHlwZSIsInNlZ21lbnRzIiwic2xpY2UiLCJ1bnNoaWZ0IiwibmFtZSIsImpzb25RdWVyeSIsImNyZWF0ZUpTT05RdWVyeSIsInRyZWF0QXNBcnJheSIsInRyZWF0Um9vdEFzQXJyYXkiLCJzcWwiLCJyYXciLCJjb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCIsImlzTm90TnVsbCIsIlF1ZXJ5RXJyb3IiLCJwYXRoIiwiYW5kIiwibWFwIiwid29yZCIsImlsaWtlIiwicXVlcnlPcGVyYXRvciIsInF1ZXJ5VmFsdWUiLCJzYW5pdGl6ZVF1ZXJ5VmFsdWUiLCJvciIsImlzTnVsbCIsIm5lIiwibm90SW5BcnJheSJdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DOzs7OytCQTZCYkE7OztlQUFBQTs7OzRCQXpCaUQ7d0JBQzVDO3VCQUNJO3NDQUtNO2lDQUNMOzRDQUNXO3dDQUNKOzZCQUNYO29DQUNPO0FBYTVCLGVBQWVBLFlBQVksRUFDaENDLE9BQU8sRUFDUEMsTUFBTSxFQUNOQyxXQUFXLEVBQ1hDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxZQUFZLEVBQ1pDLFNBQVMsRUFDVEMsS0FBSyxFQUNBO0lBQ0wsSUFBSUM7SUFDSixNQUFNQyxjQUFxQixFQUFFO0lBRTdCLElBQUksT0FBT0YsVUFBVSxZQUFZRyxPQUFPQyxJQUFJLENBQUNKLE9BQU9LLE1BQU0sR0FBRyxHQUFHO1FBQzlELHVFQUF1RTtRQUN2RSxLQUFLLE1BQU1DLGtCQUFrQkgsT0FBT0MsSUFBSSxDQUFDSixPQUFRO1lBQy9DLElBQUlNLGdCQUFnQjtnQkFDbEIsTUFBTUMsWUFBWVAsS0FBSyxDQUFDTSxlQUFlO2dCQUN2QyxJQUFJRTtnQkFDSixJQUFJRixlQUFlRyxXQUFXLE9BQU8sT0FBTztvQkFDMUNELG9CQUFvQjtnQkFDdEIsT0FBTyxJQUFJRixlQUFlRyxXQUFXLE9BQU8sTUFBTTtvQkFDaERELG9CQUFvQjtnQkFDdEI7Z0JBQ0EsSUFBSUUsTUFBTUMsT0FBTyxDQUFDSixZQUFZO29CQUM1QixNQUFNSyxrQkFBa0IsTUFBTUMsSUFBQUEsMENBQW9CLEVBQUM7d0JBQ2pEcEI7d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDLE9BQU9PO29CQUNUO29CQUNBLElBQUlLLGdCQUFnQlAsTUFBTSxHQUFHLEdBQUc7d0JBQzlCLElBQUlKLFFBQVE7NEJBQ1ZBLFNBQVNhLHdCQUFXLENBQUNOLGtCQUFr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
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoBtD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAQ/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,cAAc,kSAoBxB,IAAI,KAAG,MA4eT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoBtD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAQ/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,cAAc,kSAoBxB,IAAI,KAAG,MAqfT,CAAA"}
@@ -175,6 +175,7 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
175
175
  }
176
176
  case 'array':
177
177
  {
178
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
178
179
  const arrayTableName = `${newTableName}_${(0, _tosnakecase.default)(field.name)}`;
179
180
  const baseColumns = {
180
181
  _order: (0, _pgcore.integer)('_order').notNull(),
@@ -194,7 +195,7 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
194
195
  adapter,
195
196
  baseColumns,
196
197
  baseExtraConfig,
197
- disableNotNull,
198
+ disableNotNull: disableNotNullFromHere,
198
199
  disableUnique,
199
200
  fields: field.fields,
200
201
  rootRelationsToBuild,
@@ -228,6 +229,7 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
228
229
  }
229
230
  case 'blocks':
230
231
  {
232
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
231
233
  field.blocks.forEach((block)=>{
232
234
  const blockTableName = `${rootTableName}_blocks_${(0, _tosnakecase.default)(block.slug)}`;
233
235
  if (!adapter.tables[blockTableName]) {
@@ -251,7 +253,7 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
251
253
  adapter,
252
254
  baseColumns,
253
255
  baseExtraConfig,
254
- disableNotNull,
256
+ disableNotNull: disableNotNullFromHere,
255
257
  disableUnique,
256
258
  fields: block.fields,
257
259
  rootRelationsToBuild,
@@ -323,12 +325,13 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
323
325
  if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true;
324
326
  break;
325
327
  }
328
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
326
329
  const { hasLocalizedField: groupHasLocalizedField, hasLocalizedManyNumberField: groupHasLocalizedManyNumberField, hasLocalizedRelationshipField: groupHasLocalizedRelationshipField, hasManyNumberField: groupHasManyNumberField } = traverseFields({
327
330
  adapter,
328
331
  buildRelationships,
329
332
  columnPrefix: `${columnName}_`,
330
333
  columns,
331
- disableNotNull,
334
+ disableNotNull: disableNotNullFromHere,
332
335
  disableUnique,
333
336
  fieldPrefix: `${fieldName}_`,
334
337
  fields: field.fields,
@@ -352,12 +355,13 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
352
355
  }
353
356
  case 'tabs':
354
357
  {
358
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
355
359
  const { hasLocalizedField: tabHasLocalizedField, hasLocalizedManyNumberField: tabHasLocalizedManyNumberField, hasLocalizedRelationshipField: tabHasLocalizedRelationshipField, hasManyNumberField: tabHasManyNumberField } = traverseFields({
356
360
  adapter,
357
361
  buildRelationships,
358
362
  columnPrefix,
359
363
  columns,
360
- disableNotNull,
364
+ disableNotNull: disableNotNullFromHere,
361
365
  disableUnique,
362
366
  fieldPrefix,
363
367
  fields: field.tabs.map((tab)=>({
@@ -385,12 +389,13 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
385
389
  case 'row':
386
390
  case 'collapsible':
387
391
  {
392
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
388
393
  const { hasLocalizedField: rowHasLocalizedField, hasLocalizedManyNumberField: rowHasLocalizedManyNumberField, hasLocalizedRelationshipField: rowHasLocalizedRelationshipField, hasManyNumberField: rowHasManyNumberField } = traverseFields({
389
394
  adapter,
390
395
  buildRelationships,
391
396
  columnPrefix,
392
397
  columns,
393
- disableNotNull,
398
+ disableNotNull: disableNotNullFromHere,
394
399
  disableUnique,
395
400
  fieldPrefix,
396
401
  fields: field.fields,
@@ -439,4 +444,4 @@ const traverseFields = ({ adapter, buildRelationships, columnPrefix, columns, di
439
444
  };
440
445
  };
441
446
 
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbXBvcnQgeyBoYXNMb2NhbGVzVGFibGUgfSBmcm9tICcuLi91dGlsaXRpZXMvaGFzTG9jYWxlc1RhYmxlJ1xuaW1wb3J0IHsgYnVpbGRUYWJsZSB9IGZyb20gJy4vYnVpbGQnXG5pbXBvcnQgeyBjcmVhdGVJbmRleCB9IGZyb20gJy4vY3JlYXRlSW5kZXgnXG5pbXBvcnQgeyBwYXJlbnRJRENvbHVtbk1hcCB9IGZyb20gJy4vcGFyZW50SURDb2x1bW5NYXAnXG5pbXBvcnQgeyB2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCB9IGZyb20gJy4vdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwnXG5cbnR5cGUgQXJncyA9IHtcbiAgYWRhcHRlcjogUG9zdGdyZXNBZGFwdGVyXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBjb2x1bW5QcmVmaXg/OiBzdHJpbmdcbiAgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlPzogYm9vbGVhblxuICBmaWVsZFByZWZpeD86IHN0cmluZ1xuICBmaWVsZHM6IChGaWVsZCB8IFRhYkFzRmllbGQpW11cbiAgZm9yY2VMb2NhbGl6ZWQ/OiBib29sZWFuXG4gIGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPlxuICBsb2NhbGVzQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIG5ld1RhYmxlTmFtZTogc3RyaW5nXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nXG4gIHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcmVsYXRpb25zaGlwczogU2V0PHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ/OiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJvb3RUYWJsZUlEQ29sVHlwZTogc3RyaW5nXG4gIHJvb3RUYWJsZU5hbWU6IHN0cmluZ1xufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTG9jYWxpemVkRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBib29sZWFuXG4gIGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRmllbGRzID0gKHtcbiAgYWRhcHRlcixcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgbGV0IHBhcmVudElEQ29sVHlwZSA9ICdpbnRlZ2VyJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnTnVtZXJpY0J1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICdudW1lcmljJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnVmFyY2hhckJ1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICd2YXJjaGFyJ1xuXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmICgnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gJ2lkJykgcmV0dXJuXG4gICAgbGV0IGNvbHVtbk5hbWU6IHN0cmluZ1xuICAgIGxldCBmaWVsZE5hbWU6IHN0cmluZ1xuXG4gICAgbGV0IHRhcmdldFRhYmxlID0gY29sdW1uc1xuICAgIGxldCB0YXJnZXRJbmRleGVzID0gaW5kZXhlc1xuXG4gICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICBjb2x1bW5OYW1lID0gYCR7Y29sdW1uUHJlZml4IHx8ICcnfSR7ZmllbGQubmFtZVswXSA9PT0gJ18nID8gJ18nIDogJyd9JHt0b1NuYWtlQ2FzZShcbiAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICl9YFxuICAgICAgZmllbGROYW1lID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcblxuICAgICAgLy8gSWYgZmllbGQgaXMgbG9jYWxpemVkLFxuICAgICAgLy8gYWRkIHRoZSBjb2x1bW4gdG8gdGhlIGxvY2FsZSB0YWJsZSBpbnN0ZWFkIG9mIG1haW4gdGFibGVcbiAgICAgIGlmIChhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiAmJiAoZmllbGQubG9jYWxpemVkIHx8IGZvcmNlTG9jYWxpemVkKSkge1xuICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgdGFyZ2V0VGFibGUgPSBsb2NhbGVzQ29sdW1uc1xuICAgICAgICB0YXJnZXRJbmRleGVzID0gbG9jYWxlc0luZGV4ZXNcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoZmllbGQudW5pcXVlIHx8IGZpZWxkLmluZGV4KSAmJlxuICAgICAgICAhWydhcnJheScsICdibG9ja3MnLCAnZ3JvdXAnLCAncG9pbnQnLCAncmVsYXRpb25zaGlwJywgJ3VwbG9hZCddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmXG4gICAgICAgICEoZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake2ZpZWxkLm5hbWV9SWR4YF0gPSBjcmVhdGVJbmRleCh7XG4gICAgICAgICAgbmFtZTogZmllbGROYW1lLFxuICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgdW5pcXVlOiBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgY2FzZSAnY29kZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9ICdpbmRleCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSBudW1iZXIgZmllbGRzLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSBudW1lcmljKGNvbHVtbk5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmljaFRleHQnOlxuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGpzb25iKGNvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB0aW1lc3RhbXAoY29sdW1uTmFtZSwge1xuICAgICAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgIGNvbnN0IGVudW1OYW1lID0gYGVudW1fJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuXG4gICAgICAgIGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdID0gcGdFbnVtKFxuICAgICAgICAgIGVudW1OYW1lLFxuICAgICAgICAgIGZpZWxkLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25Jc09iamVjdChvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH0pIGFzIFtzdHJpbmcsIC4uLnN0cmluZ1tdXSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJiBmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0VGFibGVOYW1lID0gYCR7bmV3VGFibGVOYW1lfV8ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbcGFyZW50SURDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICB2YWx1ZTogYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0oJ3ZhbHVlJyksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIG9yZGVySWR4OiAoY29scykgPT4gaW5kZXgoJ29yZGVyX2lkeCcpLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoJ3BhcmVudF9pZHgnKS5vbihjb2xzLnBhcmVudCksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgYmFzZUNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5sb2NhbGVJZHggPSAoY29scykgPT4gaW5kZXgoJ2xvY2FsZV9pZHgnKS5vbihjb2xzLmxvY2FsZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy52YWx1ZSA9IChjb2xzKSA9PiBpbmRleCgndmFsdWVfaWR4Jykub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGFycmF5VGFibGVOYW1lID0gYCR7bmV3VGFibGVOYW1lfV8ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgX3BhcmVudElEOiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdfcGFyZW50X2lkJylcbiAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgID4gPSB7XG4gICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoJ19vcmRlcl9pZHgnKS5vbihjb2xzLl9vcmRlciksXG4gICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoJ19wYXJlbnRfaWRfaWR4Jykub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PiBpbmRleCgnX2xvY2FsZV9pZHgnKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJlbGF0aW9uc1RvQnVpbGQ6IHN1YlJlbGF0aW9uc1RvQnVpbGQgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc2hpcHM6IHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgdGFibGVOYW1lOiBhcnJheVRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICByZWxhdGlvbnNUb0J1aWxkLnNldChmaWVsZE5hbWUsIGFycmF5VGFibGVOYW1lKVxuXG4gICAgICAgIGNvbnN0IGFycmF5VGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMoYWRhcHRlci50YWJsZXNbYXJyYXlUYWJsZU5hbWVdLCAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxlc1RhYmxlKGZpZWxkLmZpZWxkcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fbG9jYWxlcyA9IG1hbnkoYWRhcHRlci50YWJsZXNbYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZXNgXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuXG4gICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHthcnJheVRhYmxlTmFtZX1gXSA9IGFycmF5VGFibGVSZWxhdGlvbnNcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGZpZWxkLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGlmICghYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcm9vdFRhYmxlSURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXRoOiB0ZXh0KCdfcGF0aCcpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoJ29yZGVyX2lkeCcpLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoJ3BhcmVudF9pZF9pZHgnKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgICAgICAgIF9wYXRoSWR4OiAoY29scykgPT4gaW5kZXgoJ3BhdGhfaWR4Jykub24oY29scy5fcGF0aCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PiBpbmRleCgnbG9jYWxlX2lkeCcpLm9uKGNvbHMuX2xvY2FsZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkIH0gPSBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc2hpcHM6IHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgdGFibGVOYW1lOiBibG9ja1RhYmxlTmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMoXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgKHsgbWFueSwgb25lIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgICAgICAgX3BhcmVudElEOiBvbmUoYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0sIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiBbYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLl9wYXJlbnRJRF0sXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFthZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTG9jYWxlc1RhYmxlKGJsb2NrLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5fbG9jYWxlcyA9IG1hbnkoYWRhcHRlci50YWJsZXNbYCR7YmxvY2tUYWJsZU5hbWV9X2xvY2FsZXNgXSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YmxvY2tUYWJsZU5hbWV9YF0gPSBibG9ja1RhYmxlUmVsYXRpb25zXG4gICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCh7XG4gICAgICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICAgICBsb2NhbGl6ZWQ6IGZpZWxkLmxvY2FsaXplZCxcbiAgICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQuc2V0KGBfYmxvY2tzXyR7YmxvY2suc2x1Z31gLCBibG9ja1RhYmxlTmFtZSlcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWInOlxuICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgIGlmICghKCduYW1lJyBpbiBmaWVsZCkpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXg6IGAke2NvbHVtbk5hbWV9X2AsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbCxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4OiBgJHtmaWVsZE5hbWV9X2AsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZm9yY2VMb2NhbGl6ZWQ6IGZpZWxkLmxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogYCR7cGFyZW50VGFibGVOYW1lfV8ke2NvbHVtbk5hbWV9YCxcbiAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYnMnOiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogdGFiSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiB0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogdGFiSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC50YWJzLm1hcCgodGFiKSA9PiAoeyAuLi50YWIsIHR5cGU6ICd0YWInIH0pKSxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3Jvdyc6XG4gICAgICBjYXNlICdjb2xsYXBzaWJsZSc6IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiByb3dIYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IHJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogcm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiByb3dIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6XG4gICAgICBjYXNlICd1cGxvYWQnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgIGZpZWxkLnJlbGF0aW9uVG8uZm9yRWFjaCgocmVsYXRpb24pID0+IHJlbGF0aW9uc2hpcHMuYWRkKHJlbGF0aW9uKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLmFkZChmaWVsZC5yZWxhdGlvblRvKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZmllbGQuYWRtaW4gJiYgZmllbGQuYWRtaW4uY29uZGl0aW9uXG5cbiAgICBpZiAoXG4gICAgICAhZGlzYWJsZU5vdE51bGwgJiZcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gJiZcbiAgICAgICdyZXF1aXJlZCcgaW4gZmllbGQgJiZcbiAgICAgIGZpZWxkLnJlcXVpcmVkICYmXG4gICAgICAhY29uZGl0aW9uXG4gICAgKSB7XG4gICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdLm5vdE51bGwoKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4ge1xuICAgIGhhc0xvY2FsaXplZEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICBoYXNNYW55TnVtYmVyRmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJjb2x1bW5QcmVmaXgiLCJjb2x1bW5zIiwiZGlzYWJsZU5vdE51bGwiLCJkaXNhYmxlVW5pcXVlIiwiZmllbGRQcmVmaXgiLCJmaWVsZHMiLCJmb3JjZUxvY2FsaXplZCIsImluZGV4ZXMiLCJsb2NhbGVzQ29sdW1ucyIsImxvY2FsZXNJbmRleGVzIiwibmV3VGFibGVOYW1lIiwicGFyZW50VGFibGVOYW1lIiwicmVsYXRpb25zVG9CdWlsZCIsInJlbGF0aW9uc2hpcHMiLCJyb290UmVsYXRpb25zVG9CdWlsZCIsInJvb3RUYWJsZUlEQ29sVHlwZSIsInJvb3RUYWJsZU5hbWUiLCJoYXNMb2NhbGl6ZWRGaWVsZCIsImhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicGFyZW50SURDb2xUeXBlIiwiaWQiLCJQZ051bWVyaWNCdWlsZGVyIiwiUGdWYXJjaGFyQnVpbGRlciIsImZvckVhY2giLCJmaWVsZCIsIm5hbWUiLCJjb2x1bW5OYW1lIiwiZmllbGROYW1lIiwidGFyZ2V0VGFibGUiLCJ0YXJnZXRJbmRleGVzIiwiZmllbGRBZmZlY3RzRGF0YSIsInRvU25ha2VDYXNlIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsaXplZCIsInVuaXF1ZSIsImluZGV4IiwiaW5jbHVkZXMiLCJ0eXBlIiwiaGFzTWFueSIsImNyZWF0ZUluZGV4IiwidmFyY2hhciIsIkludmFsaWRDb25maWd1cmF0aW9uIiwibnVtZXJpYyIsImpzb25iIiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImVudW1OYW1lIiwiZW51bXMiLCJwZ0VudW0iLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwib3B0aW9uSXNPYmplY3QiLCJ2YWx1ZSIsInNlbGVjdFRhYmxlTmFtZSIsImJhc2VDb2x1bW5zIiwib3JkZXIiLCJpbnRlZ2VyIiwibm90TnVsbCIsInBhcmVudCIsInBhcmVudElEQ29sdW1uTWFwIiwicmVmZXJlbmNlcyIsInRhYmxlcyIsIm9uRGVsZXRlIiwiYmFzZUV4dHJhQ29uZmlnIiwib3JkZXJJZHgiLCJjb2xzIiwib24iLCJwYXJlbnRJZHgiLCJsb2NhbGUiLCJlbnVtX19sb2NhbGVzIiwibG9jYWxlSWR4IiwiYnVpbGRUYWJsZSIsInRhYmxlTmFtZSIsInNldCIsInNlbGVjdFRhYmxlUmVsYXRpb25zIiwicmVsYXRpb25zIiwib25lIiwicmVzdWx0IiwiYm9vbGVhbiIsImFycmF5VGFibGVOYW1lIiwiX29yZGVyIiwiX3BhcmVudElEIiwiX29yZGVySWR4IiwiX3BhcmVudElESWR4IiwiX2xvY2FsZSIsIl9sb2NhbGVJZHgiLCJzdWJSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFJlbGF0aW9uc2hpcHMiLCJhcnJheVRhYmxlUmVsYXRpb25zIiwibWFueSIsImhhc0xvY2FsZXNUYWJsZSIsIl9sb2NhbGVzIiwidmFsIiwia2V5IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja1RhYmxlTmFtZSIsInNsdWciLCJfcGF0aCIsInRleHQiLCJfcGF0aElkeCIsImJsb2NrVGFibGVSZWxhdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCIsInRhYmxlIiwiZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImdyb3VwSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInRhYkhhc01hbnlOdW1iZXJGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwicm93SGFzTWFueU51bWJlckZpZWxkIiwiQXJyYXkiLCJpc0FycmF5Iiwi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
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbXBvcnQgeyBoYXNMb2NhbGVzVGFibGUgfSBmcm9tICcuLi91dGlsaXRpZXMvaGFzTG9jYWxlc1RhYmxlJ1xuaW1wb3J0IHsgYnVpbGRUYWJsZSB9IGZyb20gJy4vYnVpbGQnXG5pbXBvcnQgeyBjcmVhdGVJbmRleCB9IGZyb20gJy4vY3JlYXRlSW5kZXgnXG5pbXBvcnQgeyBwYXJlbnRJRENvbHVtbk1hcCB9IGZyb20gJy4vcGFyZW50SURDb2x1bW5NYXAnXG5pbXBvcnQgeyB2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCB9IGZyb20gJy4vdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwnXG5cbnR5cGUgQXJncyA9IHtcbiAgYWRhcHRlcjogUG9zdGdyZXNBZGFwdGVyXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBjb2x1bW5QcmVmaXg/OiBzdHJpbmdcbiAgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlPzogYm9vbGVhblxuICBmaWVsZFByZWZpeD86IHN0cmluZ1xuICBmaWVsZHM6IChGaWVsZCB8IFRhYkFzRmllbGQpW11cbiAgZm9yY2VMb2NhbGl6ZWQ/OiBib29sZWFuXG4gIGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPlxuICBsb2NhbGVzQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIG5ld1RhYmxlTmFtZTogc3RyaW5nXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nXG4gIHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcmVsYXRpb25zaGlwczogU2V0PHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ/OiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJvb3RUYWJsZUlEQ29sVHlwZTogc3RyaW5nXG4gIHJvb3RUYWJsZU5hbWU6IHN0cmluZ1xufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTG9jYWxpemVkRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBib29sZWFuXG4gIGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRmllbGRzID0gKHtcbiAgYWRhcHRlcixcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgbGV0IHBhcmVudElEQ29sVHlwZSA9ICdpbnRlZ2VyJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnTnVtZXJpY0J1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICdudW1lcmljJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnVmFyY2hhckJ1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICd2YXJjaGFyJ1xuXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmICgnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gJ2lkJykgcmV0dXJuXG4gICAgbGV0IGNvbHVtbk5hbWU6IHN0cmluZ1xuICAgIGxldCBmaWVsZE5hbWU6IHN0cmluZ1xuXG4gICAgbGV0IHRhcmdldFRhYmxlID0gY29sdW1uc1xuICAgIGxldCB0YXJnZXRJbmRleGVzID0gaW5kZXhlc1xuXG4gICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICBjb2x1bW5OYW1lID0gYCR7Y29sdW1uUHJlZml4IHx8ICcnfSR7ZmllbGQubmFtZVswXSA9PT0gJ18nID8gJ18nIDogJyd9JHt0b1NuYWtlQ2FzZShcbiAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICl9YFxuICAgICAgZmllbGROYW1lID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcblxuICAgICAgLy8gSWYgZmllbGQgaXMgbG9jYWxpemVkLFxuICAgICAgLy8gYWRkIHRoZSBjb2x1bW4gdG8gdGhlIGxvY2FsZSB0YWJsZSBpbnN0ZWFkIG9mIG1haW4gdGFibGVcbiAgICAgIGlmIChhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiAmJiAoZmllbGQubG9jYWxpemVkIHx8IGZvcmNlTG9jYWxpemVkKSkge1xuICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgdGFyZ2V0VGFibGUgPSBsb2NhbGVzQ29sdW1uc1xuICAgICAgICB0YXJnZXRJbmRleGVzID0gbG9jYWxlc0luZGV4ZXNcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoZmllbGQudW5pcXVlIHx8IGZpZWxkLmluZGV4KSAmJlxuICAgICAgICAhWydhcnJheScsICdibG9ja3MnLCAnZ3JvdXAnLCAncG9pbnQnLCAncmVsYXRpb25zaGlwJywgJ3VwbG9hZCddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmXG4gICAgICAgICEoZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake2ZpZWxkLm5hbWV9SWR4YF0gPSBjcmVhdGVJbmRleCh7XG4gICAgICAgICAgbmFtZTogZmllbGROYW1lLFxuICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgdW5pcXVlOiBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgY2FzZSAnY29kZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9ICdpbmRleCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSBudW1iZXIgZmllbGRzLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSBudW1lcmljKGNvbHVtbk5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmljaFRleHQnOlxuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGpzb25iKGNvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB0aW1lc3RhbXAoY29sdW1uTmFtZSwge1xuICAgICAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgIGNvbnN0IGVudW1OYW1lID0gYGVudW1fJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuXG4gICAgICAgIGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdID0gcGdFbnVtKFxuICAgICAgICAgIGVudW1OYW1lLFxuICAgICAgICAgIGZpZWxkLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25Jc09iamVjdChvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH0pIGFzIFtzdHJpbmcsIC4uLnN0cmluZ1tdXSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJiBmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0VGFibGVOYW1lID0gYCR7bmV3VGFibGVOYW1lfV8ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbcGFyZW50SURDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICB2YWx1ZTogYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0oJ3ZhbHVlJyksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIG9yZGVySWR4OiAoY29scykgPT4gaW5kZXgoJ29yZGVyX2lkeCcpLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoJ3BhcmVudF9pZHgnKS5vbihjb2xzLnBhcmVudCksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgYmFzZUNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5sb2NhbGVJZHggPSAoY29scykgPT4gaW5kZXgoJ2xvY2FsZV9pZHgnKS5vbihjb2xzLmxvY2FsZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy52YWx1ZSA9IChjb2xzKSA9PiBpbmRleCgndmFsdWVfaWR4Jykub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleCgnX29yZGVyX2lkeCcpLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICBfcGFyZW50SURJZHg6IChjb2xzKSA9PiBpbmRleCgnX3BhcmVudF9pZF9pZHgnKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5fbG9jYWxlSWR4ID0gKGNvbHMpID0+IGluZGV4KCdfbG9jYWxlX2lkeCcpLm9uKGNvbHMuX2xvY2FsZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290UmVsYXRpb25zaGlwczogcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IGFycmF5VGFibGVOYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJlbGF0aW9uc1RvQnVpbGQuc2V0KGZpZWxkTmFtZSwgYXJyYXlUYWJsZU5hbWUpXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0sICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0sIHtcbiAgICAgICAgICAgICAgZmllbGRzOiBbYWRhcHRlci50YWJsZXNbYXJyYXlUYWJsZU5hbWVdLl9wYXJlbnRJRF0sXG4gICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFthZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoZmllbGQuZmllbGRzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHthcnJheVRhYmxlTmFtZX1fbG9jYWxlc2BdKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YlJlbGF0aW9uc1RvQnVpbGQuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFueShhZGFwdGVyLnRhYmxlc1t2YWxdKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2FycmF5VGFibGVOYW1lfWBdID0gYXJyYXlUYWJsZVJlbGF0aW9uc1xuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2Jsb2Nrcyc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBmaWVsZC5ibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICBjb25zdCBibG9ja1RhYmxlTmFtZSA9IGAke3Jvb3RUYWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcjogaW50ZWdlcignX29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3Jvb3RUYWJsZUlEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGF0aDogdGV4dCgnX3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICAgID4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcklkeDogKGNvbHMpID0+IGluZGV4KCdvcmRlcl9pZHgnKS5vbihjb2xzLl9vcmRlciksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KCdwYXJlbnRfaWRfaWR4Jykub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBfcGF0aElkeDogKGNvbHMpID0+IGluZGV4KCdwYXRoX2lkeCcpLm9uKGNvbHMuX3BhdGgpLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLl9sb2NhbGVJZHggPSAoY29scykgPT4gaW5kZXgoJ2xvY2FsZV9pZHgnKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGJhc2VDb2x1bW5zLFxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgICBmaWVsZHM6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogYmxvY2tUYWJsZU5hbWUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBjb25zdCBibG9ja1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShibG9jay5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2Jsb2NrVGFibGVOYW1lfWBdID0gYmxvY2tUYWJsZVJlbGF0aW9uc1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwoe1xuICAgICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLnNldChgX2Jsb2Nrc18ke2Jsb2NrLnNsdWd9YCwgYmxvY2tUYWJsZU5hbWUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFiJzpcbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBpZiAoISgnbmFtZScgaW4gZmllbGQpKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IGdyb3VwSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgICAgcmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXg6IGAke2NvbHVtbk5hbWV9X2AsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4OiBgJHtmaWVsZE5hbWV9X2AsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZm9yY2VMb2NhbGl6ZWQ6IGZpZWxkLmxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogYCR7cGFyZW50VGFibGVOYW1lfV8ke2NvbHVtbk5hbWV9YCxcbiAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYnMnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiB0YWJIYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IHRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogdGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiB0YWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7IC4uLnRhYiwgdHlwZTogJ3RhYicgfSkpLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncm93JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHJvd0hhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiByb3dIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IHJvd0hhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocm93SGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgIGhhc01hbnlOdW1iZXJGaWVsZCxcbiAgfVxufVxuIl0sIm5hbWVzIjpbInRyYXZlcnNlRmllbGRzIiwiYWRhcHRlciIsImJ1aWxkUmVsYXRpb25zaGlwcyIsImNvbHVtblByZWZpeCIsImNvbHVtbnMiLCJkaXNhYmxlTm90TnVsbCIsImRpc2FibGVVbmlxdWUiLCJmaWVsZFByZWZpeCIsImZpZWxkcyIsImZvcmNlTG9jYWxpemVkIiwiaW5kZXhlcyIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJuZXdUYWJsZU5hbWUiLCJwYXJlbnRUYWJsZU5hbWUiLCJyZWxhdGlvbnNUb0J1aWxkIiwicmVsYXRpb25zaGlwcyIsInJvb3RSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFRhYmxlSURDb2xUeXBlIiwicm9vdFRhYmxlTmFtZSIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55TnVtYmVyRmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJwYXJlbnRJRENvbFR5cGUiLCJpZCIsIlBnTnVtZXJpY0J1aWxkZXIiLCJQZ1ZhcmNoYXJCdWlsZGVyIiwiZm9yRWFjaCIsImZpZWxkIiwibmFtZSIsImNvbHVtbk5hbWUiLCJmaWVsZE5hbWUiLCJ0YXJnZXRUYWJsZSIsInRhcmdldEluZGV4ZXMiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibG9jYWxpemVkIiwidW5pcXVlIiwiaW5kZXgiLCJpbmNsdWRlcyIsInR5cGUiLCJoYXNNYW55IiwiY3JlYXRlSW5kZXgiLCJ2YXJjaGFyIiwiSW52YWxpZENvbmZpZ3VyYXRpb24iLCJudW1lcmljIiwianNvbmIiLCJ0aW1lc3RhbXAiLCJtb2RlIiwicHJlY2lzaW9uIiwid2l0aFRpbWV6b25lIiwiZW51bU5hbWUiLCJlbnVtcyIsInBnRW51bSIsIm9wdGlvbnMiLCJtYXAiLCJvcHRpb24iLCJvcHRpb25Jc09iamVjdCIsInZhbHVlIiwic2VsZWN0VGFibGVOYW1lIiwiYmFzZUNvbHVtbnMiLCJvcmRlciIsImludGVnZXIiLCJub3ROdWxsIiwicGFyZW50IiwicGFyZW50SURDb2x1bW5NYXAiLCJyZWZlcmVuY2VzIiwidGFibGVzIiwib25EZWxldGUiLCJiYXNlRXh0cmFDb25maWciLCJvcmRlcklkeCIsImNvbHMiLCJvbiIsInBhcmVudElkeCIsImxvY2FsZSIsImVudW1fX2xvY2FsZXMiLCJsb2NhbGVJZHgiLCJidWlsZFRhYmxlIiwidGFibGVOYW1lIiwic2V0Iiwic2VsZWN0VGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbnMiLCJvbmUiLCJyZXN1bHQiLCJib29sZWFuIiwiZGlzYWJsZU5vdE51bGxGcm9tSGVyZSIsIkJvb2xlYW4iLCJhZG1pbiIsImNvbmRpdGlvbiIsImFycmF5VGFibGVOYW1lIiwiX29yZGVyIiwiX3BhcmVudElEIiwiX29yZGVySWR4IiwiX3BhcmVudElESWR4IiwiX2xvY2FsZSIsIl9sb2NhbGVJZHgiLCJzdWJSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFJlbGF0aW9uc2hpcHMiLCJhcnJheVRhYmxlUmVsYXRpb25zIiwibWFueSIsImhhc0xvY2FsZXNUYWJsZSIsIl9sb2NhbGVzIiwidmFsIiwia2V5IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja1RhYmxlTmFtZSIsInNsdWciLCJfcGF0aCIsInRleHQiLCJfcGF0aElkeCIsImJsb2NrVGFibGVSZWxhdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCIsInRhYmxlIiwiZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImdyb3VwSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInRhYkhhc01hbnlOdW1iZXJGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwicm93SGFzTWFueU51bWJlckZpZWxkIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsInJlbGF0aW9uIiwiYWRkIiwicmVxdWlyZWQiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkE0RHZCQTs7O2VBQUFBOzs7NEJBdkRhO3dCQWFuQjt3QkFDOEI7dUJBQ1k7b0VBQ3pCO2lDQUlRO3VCQUNMOzZCQUNDO21DQUNNO2tEQUNlOzs7Ozs7QUErQjFDLE1BQU1BLGlCQUFpQixDQUFDLEVBQzdCQyxPQUFPLEVBQ1BDLGtCQUFrQixFQUNsQkMsWUFBWSxFQUNaQyxPQUFPLEVBQ1BDLGNBQWMsRUFDZEMsZ0JBQWdCLEtBQUssRUFDckJDLFdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-postgres",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "The officially supported Postgres database adapter for Payload",
5
5
  "repository": "https://github.com/payloadcms/payload",
6
6
  "license": "MIT",
@@ -25,10 +25,7 @@
25
25
  "@types/pg": "8.10.2",
26
26
  "@types/to-snake-case": "1.0.0",
27
27
  "@payloadcms/eslint-config": "0.0.1",
28
- "payload": "2.0.5"
29
- },
30
- "peerDependencies": {
31
- "better-sqlite3": "^8.5.0"
28
+ "payload": "2.0.6"
32
29
  },
33
30
  "publishConfig": {
34
31
  "registry": "https://registry.npmjs.org/"