appium 2.0.0-beta.19 → 2.0.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/check-npm-pack-files.js +23 -0
- package/build/commands-yml/parse.js +319 -0
- package/build/commands-yml/validator.js +130 -0
- package/build/index.js +19 -0
- package/build/lib/appium-config.schema.json +0 -0
- package/build/lib/appium.js +84 -69
- package/build/lib/cli/args.js +87 -223
- package/build/lib/cli/extension-command.js +2 -2
- package/build/lib/cli/extension.js +14 -6
- package/build/lib/cli/parser.js +146 -106
- package/build/lib/config-file.js +141 -0
- package/build/lib/config.js +28 -77
- package/build/lib/driver-config.js +41 -20
- package/build/lib/ext-config-io.js +165 -0
- package/build/lib/extension-config.js +110 -60
- package/build/lib/grid-register.js +19 -21
- package/build/lib/main.js +135 -72
- package/build/lib/plugin-config.js +18 -9
- package/build/lib/schema/appium-config-schema.js +253 -0
- package/build/lib/schema/arg-spec.js +120 -0
- package/build/lib/schema/cli-args.js +188 -0
- package/build/lib/schema/cli-transformers.js +76 -0
- package/build/lib/schema/index.js +36 -0
- package/build/lib/schema/keywords.js +72 -0
- package/build/lib/schema/schema.js +357 -0
- package/build/lib/utils.js +24 -33
- package/build/postinstall.js +90 -0
- package/build/test/cli/cli-e2e-specs.js +221 -0
- package/build/test/cli/cli-helpers.js +86 -0
- package/build/test/cli/cli-specs.js +71 -0
- package/build/test/cli/fixtures/test-driver/package.json +27 -0
- package/build/test/cli/schema-args-specs.js +48 -0
- package/build/test/cli/schema-e2e-specs.js +47 -0
- package/build/test/config-e2e-specs.js +112 -0
- package/build/test/config-file-e2e-specs.js +209 -0
- package/build/test/config-file-specs.js +281 -0
- package/build/test/config-specs.js +159 -0
- package/build/test/driver-e2e-specs.js +435 -0
- package/build/test/driver-specs.js +321 -0
- package/build/test/ext-config-io-specs.js +181 -0
- package/build/test/extension-config-specs.js +365 -0
- package/build/test/fixtures/allow-feat.txt +5 -0
- package/build/test/fixtures/caps.json +3 -0
- package/build/test/fixtures/config/allow-insecure.txt +3 -0
- package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +5 -0
- package/build/test/fixtures/config/appium.config.bad.json +32 -0
- package/build/test/fixtures/config/appium.config.ext-good.json +9 -0
- package/build/test/fixtures/config/appium.config.ext-unknown-props.json +10 -0
- package/build/test/fixtures/config/appium.config.good.js +40 -0
- package/build/test/fixtures/config/appium.config.good.json +33 -0
- package/build/test/fixtures/config/appium.config.good.yaml +30 -0
- package/build/test/fixtures/config/appium.config.invalid.json +31 -0
- package/build/test/fixtures/config/appium.config.security-array.json +5 -0
- package/build/test/fixtures/config/appium.config.security-delimited.json +5 -0
- package/build/test/fixtures/config/appium.config.security-path.json +5 -0
- package/build/test/fixtures/config/driver-fake.config.json +8 -0
- package/build/test/fixtures/config/nodeconfig.json +3 -0
- package/build/test/fixtures/config/plugin-fake.config.json +0 -0
- package/build/test/fixtures/default-args.js +35 -0
- package/build/test/fixtures/deny-feat.txt +5 -0
- package/build/test/fixtures/driver.schema.js +20 -0
- package/build/test/fixtures/extensions.yaml +27 -0
- package/build/test/fixtures/flattened-schema.js +504 -0
- package/build/test/fixtures/plugin.schema.js +20 -0
- package/build/test/fixtures/schema-with-extensions.js +28 -0
- package/build/test/grid-register-specs.js +74 -0
- package/build/test/helpers.js +75 -0
- package/build/test/logger-specs.js +76 -0
- package/build/test/npm-specs.js +20 -0
- package/build/test/parser-specs.js +314 -0
- package/build/test/plugin-e2e-specs.js +316 -0
- package/build/test/schema/arg-spec-specs.js +70 -0
- package/build/test/schema/cli-args-specs.js +431 -0
- package/build/test/schema/schema-specs.js +389 -0
- package/build/test/utils-specs.js +266 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +278 -0
- package/lib/appium.js +99 -75
- package/lib/cli/args.js +138 -335
- package/lib/cli/extension-command.js +7 -6
- package/lib/cli/extension.js +12 -4
- package/lib/cli/parser.js +251 -96
- package/lib/config-file.js +227 -0
- package/lib/config.js +63 -79
- package/lib/driver-config.js +66 -11
- package/lib/ext-config-io.js +287 -0
- package/lib/extension-config.js +209 -66
- package/lib/grid-register.js +24 -21
- package/lib/main.js +145 -71
- package/lib/plugin-config.js +33 -3
- package/lib/schema/appium-config-schema.js +287 -0
- package/lib/schema/arg-spec.js +222 -0
- package/lib/schema/cli-args.js +285 -0
- package/lib/schema/cli-transformers.js +123 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +135 -0
- package/lib/schema/schema.js +577 -0
- package/lib/utils.js +29 -52
- package/package.json +17 -16
- package/types/appium-config.d.ts +197 -0
- package/types/types.d.ts +201 -0
- package/build/lib/cli/argparse-actions.js +0 -104
- package/build/lib/cli/parser-helpers.js +0 -106
- package/lib/cli/argparse-actions.js +0 -77
- package/lib/cli/parser-helpers.js +0 -106
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsFromSchema = exports.getArgSpec = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _ajv = _interopRequireDefault(require("ajv"));
|
|
15
|
+
|
|
16
|
+
var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
|
|
17
|
+
|
|
18
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
19
|
+
|
|
20
|
+
var _path = _interopRequireDefault(require("path"));
|
|
21
|
+
|
|
22
|
+
var _extensionConfig = require("../extension-config");
|
|
23
|
+
|
|
24
|
+
var _utils = require("../utils");
|
|
25
|
+
|
|
26
|
+
var _appiumConfigSchema = _interopRequireDefault(require("./appium-config-schema"));
|
|
27
|
+
|
|
28
|
+
var _argSpec = require("./arg-spec");
|
|
29
|
+
|
|
30
|
+
var _keywords = require("./keywords");
|
|
31
|
+
|
|
32
|
+
const ALLOWED_SCHEMA_EXTENSIONS = new Set(['.json', '.js', '.cjs']);
|
|
33
|
+
exports.ALLOWED_SCHEMA_EXTENSIONS = ALLOWED_SCHEMA_EXTENSIONS;
|
|
34
|
+
|
|
35
|
+
class AppiumSchema {
|
|
36
|
+
constructor() {
|
|
37
|
+
(0, _defineProperty2.default)(this, "_argSpecs", new _utils.ReadonlyMap());
|
|
38
|
+
(0, _defineProperty2.default)(this, "_registeredSchemas", {
|
|
39
|
+
[_extensionConfig.DRIVER_TYPE]: new Map(),
|
|
40
|
+
[_extensionConfig.PLUGIN_TYPE]: new Map()
|
|
41
|
+
});
|
|
42
|
+
(0, _defineProperty2.default)(this, "_ajv", void 0);
|
|
43
|
+
(0, _defineProperty2.default)(this, "_finalizedSchemas", null);
|
|
44
|
+
this._ajv = AppiumSchema._instantiateAjv();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static create() {
|
|
48
|
+
var _AppiumSchema$_instan;
|
|
49
|
+
|
|
50
|
+
const instance = (_AppiumSchema$_instan = AppiumSchema._instance) !== null && _AppiumSchema$_instan !== void 0 ? _AppiumSchema$_instan : new AppiumSchema();
|
|
51
|
+
AppiumSchema._instance = instance;
|
|
52
|
+
|
|
53
|
+
_lodash.default.bindAll(instance, ['finalize', 'flatten', 'getArgSpec', 'getDefaults', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'reset', 'validate']);
|
|
54
|
+
|
|
55
|
+
return instance;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
hasRegisteredSchema(extType, extName) {
|
|
59
|
+
return this._registeredSchemas[extType].has(extName);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
isFinalized() {
|
|
63
|
+
return Boolean(this._finalizedSchemas);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
finalize() {
|
|
67
|
+
if (this.isFinalized()) {
|
|
68
|
+
return this._finalizedSchemas;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const ajv = this._ajv;
|
|
72
|
+
|
|
73
|
+
const baseSchema = _lodash.default.cloneDeep(_appiumConfigSchema.default);
|
|
74
|
+
|
|
75
|
+
const addArgSpecs = (schema, extType, extName) => {
|
|
76
|
+
for (let [propName, propSchema] of Object.entries(schema)) {
|
|
77
|
+
const argSpec = _argSpec.ArgSpec.create(propName, {
|
|
78
|
+
dest: propSchema.appiumCliDest,
|
|
79
|
+
defaultValue: propSchema.default,
|
|
80
|
+
extType,
|
|
81
|
+
extName
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const {
|
|
85
|
+
arg
|
|
86
|
+
} = argSpec;
|
|
87
|
+
|
|
88
|
+
this._argSpecs.set(arg, argSpec);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
addArgSpecs(_lodash.default.omit(baseSchema.properties.server.properties, [_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]));
|
|
93
|
+
const finalizedSchemas = {};
|
|
94
|
+
|
|
95
|
+
const finalSchema = _lodash.default.reduce(this._registeredSchemas, (baseSchema, extensionSchemas, extType) => {
|
|
96
|
+
extensionSchemas.forEach((schema, extName) => {
|
|
97
|
+
const $ref = _argSpec.ArgSpec.toSchemaBaseRef(extType, extName);
|
|
98
|
+
|
|
99
|
+
schema.$id = $ref;
|
|
100
|
+
schema.additionalProperties = false;
|
|
101
|
+
baseSchema.properties.server.properties[extType].properties[extName] = {
|
|
102
|
+
$ref,
|
|
103
|
+
$comment: extName
|
|
104
|
+
};
|
|
105
|
+
ajv.validateSchema(schema, true);
|
|
106
|
+
addArgSpecs(schema.properties, extType, extName);
|
|
107
|
+
ajv.addSchema(schema, $ref);
|
|
108
|
+
finalizedSchemas[$ref] = schema;
|
|
109
|
+
});
|
|
110
|
+
return baseSchema;
|
|
111
|
+
}, baseSchema);
|
|
112
|
+
|
|
113
|
+
ajv.addSchema(finalSchema, _argSpec.APPIUM_CONFIG_SCHEMA_ID);
|
|
114
|
+
finalizedSchemas[_argSpec.APPIUM_CONFIG_SCHEMA_ID] = finalSchema;
|
|
115
|
+
ajv.validateSchema(finalSchema, true);
|
|
116
|
+
this._finalizedSchemas = finalizedSchemas;
|
|
117
|
+
return Object.freeze(finalizedSchemas);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
static _instantiateAjv() {
|
|
121
|
+
const ajv = (0, _ajvFormats.default)(new _ajv.default({
|
|
122
|
+
allErrors: true
|
|
123
|
+
}));
|
|
124
|
+
|
|
125
|
+
_lodash.default.forEach(_keywords.keywords, keyword => {
|
|
126
|
+
ajv.addKeyword(keyword);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return ajv;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
reset() {
|
|
133
|
+
for (const schemaId of Object.keys((_this$_finalizedSchem = this._finalizedSchemas) !== null && _this$_finalizedSchem !== void 0 ? _this$_finalizedSchem : {})) {
|
|
134
|
+
var _this$_finalizedSchem;
|
|
135
|
+
|
|
136
|
+
this._ajv.removeSchema(schemaId);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
this._argSpecs = new _utils.ReadonlyMap();
|
|
140
|
+
this._registeredSchemas = {
|
|
141
|
+
[_extensionConfig.DRIVER_TYPE]: new Map(),
|
|
142
|
+
[_extensionConfig.PLUGIN_TYPE]: new Map()
|
|
143
|
+
};
|
|
144
|
+
this._finalizedSchemas = null;
|
|
145
|
+
this._ajv = AppiumSchema._instantiateAjv();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
registerSchema(extType, extName, schema) {
|
|
149
|
+
if (!(extType && extName && !_lodash.default.isEmpty(schema))) {
|
|
150
|
+
throw new TypeError('Expected nonempty extension type, extension name and schema parameters');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const normalizedExtName = _lodash.default.kebabCase(extName);
|
|
154
|
+
|
|
155
|
+
if (this.hasRegisteredSchema(extType, normalizedExtName)) {
|
|
156
|
+
if (this._registeredSchemas[extType].get(normalizedExtName) === schema) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
throw new SchemaNameConflictError(extType, extName);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this._ajv.validateSchema(schema, true);
|
|
164
|
+
|
|
165
|
+
this._registeredSchemas[extType].set(normalizedExtName, schema);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
getArgSpec(name, extType, extName) {
|
|
169
|
+
return this._argSpecs.get(_argSpec.ArgSpec.toArg(name, extType, extName));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
hasArgSpec(name, extType, extName) {
|
|
173
|
+
return this._argSpecs.has(_argSpec.ArgSpec.toArg(name, extType, extName));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
getDefaults() {
|
|
177
|
+
if (!this.isFinalized()) {
|
|
178
|
+
throw new SchemaFinalizationError();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return [...this._argSpecs.values()].reduce((defaults, {
|
|
182
|
+
defaultValue,
|
|
183
|
+
dest
|
|
184
|
+
}) => {
|
|
185
|
+
if (!_lodash.default.isUndefined(defaultValue)) {
|
|
186
|
+
defaults[dest] = defaultValue;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return defaults;
|
|
190
|
+
}, {});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
flatten() {
|
|
194
|
+
const schema = this.getSchema();
|
|
195
|
+
const stack = [{
|
|
196
|
+
properties: schema.properties,
|
|
197
|
+
prefix: []
|
|
198
|
+
}];
|
|
199
|
+
const flattened = [];
|
|
200
|
+
|
|
201
|
+
for (const {
|
|
202
|
+
properties,
|
|
203
|
+
prefix
|
|
204
|
+
} of stack) {
|
|
205
|
+
const pairs = _lodash.default.toPairs(properties);
|
|
206
|
+
|
|
207
|
+
for (const [key, value] of pairs) {
|
|
208
|
+
const {
|
|
209
|
+
properties,
|
|
210
|
+
$ref
|
|
211
|
+
} = value;
|
|
212
|
+
|
|
213
|
+
if (properties) {
|
|
214
|
+
stack.push({
|
|
215
|
+
properties,
|
|
216
|
+
prefix: key === _argSpec.SERVER_PROP_NAME ? [] : [...prefix, key]
|
|
217
|
+
});
|
|
218
|
+
} else if ($ref) {
|
|
219
|
+
let refSchema;
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
refSchema = this.getSchema($ref);
|
|
223
|
+
} catch (err) {
|
|
224
|
+
throw new SchemaUnknownSchemaError($ref);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const {
|
|
228
|
+
normalizedExtName
|
|
229
|
+
} = _argSpec.ArgSpec.extensionInfoFromRootSchemaId($ref);
|
|
230
|
+
|
|
231
|
+
if (!normalizedExtName) {
|
|
232
|
+
throw new ReferenceError(`Could not determine extension name from schema ID ${$ref}. This is a bug.`);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
stack.push({
|
|
236
|
+
properties: refSchema.properties,
|
|
237
|
+
prefix: [...prefix, key, normalizedExtName]
|
|
238
|
+
});
|
|
239
|
+
} else if (key !== _extensionConfig.DRIVER_TYPE && key !== _extensionConfig.PLUGIN_TYPE) {
|
|
240
|
+
const [extType, extName] = prefix;
|
|
241
|
+
const argSpec = this.getArgSpec(key, extType, extName);
|
|
242
|
+
|
|
243
|
+
if (!argSpec) {
|
|
244
|
+
throw new ReferenceError(`Unknown argument with key ${key}, extType ${extType} and extName ${extName}. This is a bug.`);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
flattened.push({
|
|
248
|
+
schema: _lodash.default.cloneDeep(value),
|
|
249
|
+
argSpec
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return flattened;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
getSchema(ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
|
|
259
|
+
return this._getValidator(ref).schema;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
_getValidator(id = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
|
|
263
|
+
const validator = this._ajv.getSchema(id);
|
|
264
|
+
|
|
265
|
+
if (!validator) {
|
|
266
|
+
if (id === _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
|
|
267
|
+
throw new SchemaFinalizationError();
|
|
268
|
+
} else {
|
|
269
|
+
throw new SchemaUnknownSchemaError(id);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return validator;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
validate(value, ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
|
|
277
|
+
const validator = this._getValidator(ref);
|
|
278
|
+
|
|
279
|
+
return !validator(value) && _lodash.default.isArray(validator.errors) ? [...validator.errors] : [];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
static isAllowedSchemaFileExtension(filename) {
|
|
283
|
+
return ALLOWED_SCHEMA_EXTENSIONS.has(_path.default.extname(filename));
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
(0, _defineProperty2.default)(AppiumSchema, "_instance", void 0);
|
|
289
|
+
|
|
290
|
+
class SchemaFinalizationError extends Error {
|
|
291
|
+
constructor() {
|
|
292
|
+
super('Schema not yet finalized; `finalize()` must be called first.');
|
|
293
|
+
(0, _defineProperty2.default)(this, "code", 'APPIUMERR_SCHEMA_FINALIZATION');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
exports.SchemaFinalizationError = SchemaFinalizationError;
|
|
299
|
+
|
|
300
|
+
class SchemaNameConflictError extends Error {
|
|
301
|
+
constructor(extType, extName) {
|
|
302
|
+
super(`Name for ${extType} schema "${extName}" conflicts with an existing schema`);
|
|
303
|
+
(0, _defineProperty2.default)(this, "code", 'APPIUMERR_SCHEMA_NAME_CONFLICT');
|
|
304
|
+
(0, _defineProperty2.default)(this, "data", void 0);
|
|
305
|
+
this.data = {
|
|
306
|
+
extType,
|
|
307
|
+
extName
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
exports.SchemaNameConflictError = SchemaNameConflictError;
|
|
314
|
+
|
|
315
|
+
class SchemaUnknownSchemaError extends ReferenceError {
|
|
316
|
+
constructor(schemaId) {
|
|
317
|
+
super(`Unknown schema: "${schemaId}"`);
|
|
318
|
+
(0, _defineProperty2.default)(this, "code", 'APPIUMERR_SCHEMA_UNKNOWN_SCHEMA');
|
|
319
|
+
(0, _defineProperty2.default)(this, "data", void 0);
|
|
320
|
+
this.data = {
|
|
321
|
+
schemaId
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
|
|
328
|
+
const appiumSchema = AppiumSchema.create();
|
|
329
|
+
const {
|
|
330
|
+
registerSchema,
|
|
331
|
+
getArgSpec,
|
|
332
|
+
hasArgSpec,
|
|
333
|
+
isFinalized,
|
|
334
|
+
finalize: finalizeSchema,
|
|
335
|
+
reset: resetSchema,
|
|
336
|
+
validate,
|
|
337
|
+
getSchema,
|
|
338
|
+
flatten: flattenSchema,
|
|
339
|
+
getDefaults: getDefaultsFromSchema
|
|
340
|
+
} = appiumSchema;
|
|
341
|
+
exports.getDefaultsFromSchema = getDefaultsFromSchema;
|
|
342
|
+
exports.flattenSchema = flattenSchema;
|
|
343
|
+
exports.getSchema = getSchema;
|
|
344
|
+
exports.validate = validate;
|
|
345
|
+
exports.resetSchema = resetSchema;
|
|
346
|
+
exports.finalizeSchema = finalizeSchema;
|
|
347
|
+
exports.isFinalized = isFinalized;
|
|
348
|
+
exports.hasArgSpec = hasArgSpec;
|
|
349
|
+
exports.getArgSpec = getArgSpec;
|
|
350
|
+
exports.registerSchema = registerSchema;
|
|
351
|
+
const {
|
|
352
|
+
isAllowedSchemaFileExtension
|
|
353
|
+
} = AppiumSchema;
|
|
354
|
+
exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;require('source-map-support').install();
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJTZXQiLCJBcHBpdW1TY2hlbWEiLCJjb25zdHJ1Y3RvciIsIlJlYWRvbmx5TWFwIiwiRFJJVkVSX1RZUEUiLCJNYXAiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFudGlhdGVBanYiLCJjcmVhdGUiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl8iLCJiaW5kQWxsIiwiaGFzUmVnaXN0ZXJlZFNjaGVtYSIsImV4dFR5cGUiLCJleHROYW1lIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiaGFzIiwiaXNGaW5hbGl6ZWQiLCJCb29sZWFuIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbGl6ZSIsImFqdiIsImJhc2VTY2hlbWEiLCJjbG9uZURlZXAiLCJhcHBpdW1Db25maWdTY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIl9hcmdTcGVjcyIsInNldCIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzRW1wdHkiLCJUeXBlRXJyb3IiLCJub3JtYWxpemVkRXh0TmFtZSIsImtlYmFiQ2FzZSIsImdldCIsIlNjaGVtYU5hbWVDb25mbGljdEVycm9yIiwiZ2V0QXJnU3BlYyIsIm5hbWUiLCJ0b0FyZyIsImhhc0FyZ1NwZWMiLCJnZXREZWZhdWx0cyIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwidmFsdWVzIiwiZGVmYXVsdHMiLCJpc1VuZGVmaW5lZCIsImZsYXR0ZW4iLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsImtleSIsInZhbHVlIiwicHVzaCIsIlNFUlZFUl9QUk9QX05BTUUiLCJyZWZTY2hlbWEiLCJlcnIiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsIlJlZmVyZW5jZUVycm9yIiwicmVmIiwiX2dldFZhbGlkYXRvciIsImlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGUiLCJpc0FycmF5IiwiZXJyb3JzIiwiaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiIsImZpbGVuYW1lIiwicGF0aCIsImV4dG5hbWUiLCJFcnJvciIsImRhdGEiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRnJvbVNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtPLE1BQU1BLHlCQUF5QixHQUFHLElBQUlDLEdBQUosQ0FBUSxDQUFDLE9BQUQsRUFBVSxLQUFWLEVBQWlCLE1BQWpCLENBQVIsQ0FBbEM7OztBQU9QLE1BQU1DLFlBQU4sQ0FBbUI7QUFtRGpCQyxFQUFBQSxXQUFXLEdBQUk7QUFBQSxxREF6Q0gsSUFBSUMsa0JBQUosRUF5Q0c7QUFBQSw4REEvQk07QUFB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RStELFFBQUYsRUFBWTtBQUNyQixVQUFPLG9CQUFtQkEsUUFBUyxHQUFuQztBQURxQixnREFWaEIsaUNBVWdCO0FBQUE7QUFFckIsU0FBSytDLElBQUwsR0FBWTtBQUFDL0MsTUFBQUE7QUFBRCxLQUFaO0FBQ0Q7O0FBakIwRDs7O0FBb0I3RCxNQUFNZ0QsWUFBWSxHQUFHaEgsWUFBWSxDQUFDUSxNQUFiLEVBQXJCO0FBRU8sTUFBTTtBQUNYMkQsRUFBQUEsY0FEVztBQUVYTyxFQUFBQSxVQUZXO0FBR1hHLEVBQUFBLFVBSFc7QUFJWDNELEVBQUFBLFdBSlc7QUFLWEcsRUFBQUEsUUFBUSxFQUFFNEYsY0FMQztBQU1YbEQsRUFBQUEsS0FBSyxFQUFFbUQsV0FOSTtBQU9YWCxFQUFBQSxRQVBXO0FBUVhuQixFQUFBQSxTQVJXO0FBU1hELEVBQUFBLE9BQU8sRUFBRWdDLGFBVEU7QUFVWHJDLEVBQUFBLFdBQVcsRUFBRXNDO0FBVkYsSUFXVEosWUFYRzs7Ozs7Ozs7Ozs7QUFZQSxNQUFNO0FBQUNOLEVBQUFBO0FBQUQsSUFBaUMxRyxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge1JlYWRvbmx5TWFwfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgYXBwaXVtQ29uZmlnU2NoZW1hIGZyb20gJy4vYXBwaXVtLWNvbmZpZy1zY2hlbWEnO1xuaW1wb3J0IHtBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQge2tleXdvcmRzfSBmcm9tICcuL2tleXdvcmRzJztcblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seU1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUmVhZG9ubHlNYXAoKTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZXh0ZW5zaW9uIHR5cGVzIHRvIGV4dGVuc2lvbiBuYW1lcyB0byBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbmFtaW5nIGNvbmZsaWN0cy4gVGhlIHNjaGVtYXNcbiAgICogYXJlIHN0b3JlZCBoZXJlIGluIG1lbW9yeSB1bnRpbCB0aGUgaW5zdGFuY2UgaXMgX2ZpbmFsaXplZF8uXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8RXh0ZW5zaW9uVHlwZSxNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD4+fVxuICAgKi9cbiAgX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1tEUklWRVJfVFlQRV06IG5ldyBNYXAoKSwgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpfTtcblxuICAvKipcbiAgICogQWp2IGluc3RhbmNlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBanZ9XG4gICAqL1xuICBfYWp2O1xuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgb2Ygc2NoZW1hIElEcyB0byBmaW5hbGl6ZWQgc2NoZW1hcy5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHJlZmVyZW5jZXMsIGJ1dCByYXRoZXIgdGhlIHJvb3Qgc2NoZW1hcyB0aGVtc2VsdmVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+P31cbiAgICovXG4gIF9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgQWp2LCBhZGRzIHN0YW5kYXJkIGZvcm1hdHMgYW5kIG91ciBjdXN0b20ga2V5d29yZHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9ucG0uaW0vYWp2LWZvcm1hdHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiBmb3Ige0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2VzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSBjcmVhdGVzIGEgbmV3IG9uZS5cbiAgICogQmluZHMgcHVibGljIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZSAoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID8/IG5ldyBBcHBpdW1TY2hlbWEoKTtcbiAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICdmaW5hbGl6ZScsXG4gICAgICAnZmxhdHRlbicsXG4gICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICdyZXNldCcsXG4gICAgICAndmFsaWRhdGUnLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD59ICovIChcbiAgICAgICAgdGhpcy5fZmluYWxpemVkU2NoZW1hc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhanYgPSB0aGlzLl9hanY7XG5cbiAgICAvLyBBanYgd2lsbCBfbXV0YXRlXyB0aGUgc2NoZW1hLCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LlxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSBfLmNsb25lRGVlcCgvKiogQHR5cGUge1N0cmljdFNjaGVtYU9iamVjdH0gKi8oYXBwaXVtQ29uZmlnU2NoZW1hKSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovKHNjaGVtYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYmFzZVNjaGVtYTtcbiAgICAgIH0sXG4gICAgICBiYXNlU2NoZW1hLFxuICAgICk7XG5cbiAgICBhanYuYWRkU2NoZW1hKGZpbmFsU2NoZW1hLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCk7XG4gICAgZmluYWxpemVkU2NoZW1hc1tBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF0gPSBmaW5hbFNjaGVtYTtcbiAgICBhanYudmFsaWRhdGVTY2hlbWEoZmluYWxTY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IGZpbmFsaXplZFNjaGVtYXM7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBhbmQgY3JlYXRlcyBhbiBBanYgaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBanZ9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbnRpYXRlQWp2ICgpIHtcbiAgICBjb25zdCBhanYgPSBhZGRGb3JtYXRzKFxuICAgICAgbmV3IEFqdih7XG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBub3QgbXVjaCB2YWxpZGF0aW9uIGFjdHVhbGx5IGhhcHBlbnNcbiAgICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIGFkZCBjdXN0b20ga2V5d29yZHMgdG8gYWp2LiBzZWUgc2NoZW1hLWtleXdvcmRzLmpzXG4gICAgXy5mb3JFYWNoKGtleXdvcmRzLCAoa2V5d29yZCkgPT4ge1xuICAgICAgYWp2LmFkZEtleXdvcmQoa2V5d29yZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWp2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGlzIGluc3RhbmNlIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS5cbiAgICpcbiAgICogLSBSZW1vdmVzIGFsbCBhZGRlZCBzY2hlbWFzIGZyb20gdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2Yge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9XG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2YgcmVnaXN0ZXJlZCBzY2hlbWFzXG4gICAqIC0gU2V0cyB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYS5fZmluYWxpemVkIF9maW5hbGl6ZWR9IGZsYWcgdG8gYGZhbHNlYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0byBjYWxsIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGFnYWluLCB5b3UnbGwgd2FudCB0byBjYWxsIHRoaXMgZmlyc3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVzZXQgKCkge1xuICAgIGZvciAoY29uc3Qgc2NoZW1hSWQgb2YgT2JqZWN0LmtleXModGhpcy5fZmluYWxpemVkU2NoZW1hcyA/PyB7fSkpIHtcbiAgICAgIHRoaXMuX2Fqdi5yZW1vdmVTY2hlbWEoc2NoZW1hSWQpO1xuICAgIH1cbiAgICB0aGlzLl9hcmdTcGVjcyA9IG5ldyBSZWFkb25seU1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSAmJiAhXy5pc0VtcHR5KHNjaGVtYSkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgbm9uZW1wdHkgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lIGFuZCBzY2hlbWEgcGFyYW1ldGVycycsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5IGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY1snZGVmYXVsdFZhbHVlJ10+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKFxuICAgICAgKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUge3twcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W119ICovXG4gICAgY29uc3Qgc3RhY2sgPSBbe3Byb3BlcnRpZXM6IHNjaGVtYS5wcm9wZXJ0aWVzLCBwcmVmaXg6IFtdfV07XG4gICAgLyoqIEB0eXBlIHtGbGF0dGVuZWRTY2hlbWF9ICovXG4gICAgY29uc3QgZmxhdHRlbmVkID0gW107XG5cbiAgICAvLyB0aGlzIGJpdCBpcyBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0gcmV3cml0dGVuIGFzIGEgZm9yIGxvb3AuXG4gICAgLy8gd2hlbiB3ZSBmaW5kIHNvbWV0aGluZyB3ZSB3YW50IHRvIHRyYXZlcnNlLCB3ZSBhZGQgaXQgdG8gYHN0YWNrYFxuICAgIGZvciAoY29uc3Qge3Byb3BlcnRpZXMsIHByZWZpeH0gb2Ygc3RhY2spIHtcbiAgICAgIGNvbnN0IHBhaXJzID0gXy50b1BhaXJzKHByb3BlcnRpZXMpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qge3Byb3BlcnRpZXMsICRyZWZ9ID0gdmFsdWU7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBrZXkgPT09IFNFUlZFUl9QUk9QX05BTUUgPyBbXSA6IFsuLi5wcmVmaXgsIGtleV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHJlZikge1xuICAgICAgICAgIGxldCByZWZTY2hlbWE7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlZlNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCRyZWYpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGV4dGVuc2lvbiBzY2hlbWEgc3VwcGxpZXMgYSAkcmVmIHRvIGEgbm9uLWV4aXN0ZW50IHNjaGVtYVxuICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcigkcmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge25vcm1hbGl6ZWRFeHROYW1lfSA9XG4gICAgICAgICAgICBBcmdTcGVjLmV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkKCRyZWYpO1xuICAgICAgICAgIGlmICghbm9ybWFsaXplZEV4dE5hbWUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGV4dGVuc2lvbiBuYW1lIGZyb20gc2NoZW1hIElEICR7JHJlZn0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllczogcmVmU2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IFsuLi5wcmVmaXgsIGtleSwgbm9ybWFsaXplZEV4dE5hbWVdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPT0gRFJJVkVSX1RZUEUgJiYga2V5ICE9PSBQTFVHSU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IFtleHRUeXBlLCBleHROYW1lXSA9IHByZWZpeDtcbiAgICAgICAgICBjb25zdCBhcmdTcGVjID0gdGhpcy5nZXRBcmdTcGVjKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgLyoqIEB0eXBlIHtFeHRlbnNpb25UeXBlfSAqLyAoZXh0VHlwZSksXG4gICAgICAgICAgICBleHROYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhcmdTcGVjKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBhcmd1bWVudCB3aXRoIGtleSAke2tleX0sIGV4dFR5cGUgJHtleHRUeXBlfSBhbmQgZXh0TmFtZSAke2V4dE5hbWV9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbGF0dGVuZWQucHVzaCh7c2NoZW1hOiBfLmNsb25lRGVlcCh2YWx1ZSksIGFyZ1NwZWN9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzY2hlbWEgaXRzZWxmXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWZdIC0gU2NoZW1hIElEXG4gICAqIEB0aHJvd3MgSWYgdGhlIHNjaGVtYSBoYXMgbm90IHlldCBiZWVuIF9maW5hbGl6ZWRfXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufSAqLyAoXG4gICAgICB0aGlzLl9nZXRWYWxpZGF0b3IocmVmKVxuICAgICk7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuY29uc3QgYXBwaXVtU2NoZW1hID0gQXBwaXVtU2NoZW1hLmNyZWF0ZSgpO1xuXG5leHBvcnQgY29uc3Qge1xuICByZWdpc3RlclNjaGVtYSxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGcm9tU2NoZW1hLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYge3tzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXX0gRmxhdHRlbmVkU2NoZW1hXG4gKi9cbiJdLCJmaWxlIjoibGliL3NjaGVtYS9zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
package/build/lib/utils.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.ReadonlyMap = void 0;
|
|
9
9
|
exports.getPackageVersion = getPackageVersion;
|
|
10
10
|
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
11
11
|
exports.inspectObject = inspectObject;
|
|
@@ -13,7 +13,6 @@ exports.parseCapsForInnerDriver = parseCapsForInnerDriver;
|
|
|
13
13
|
exports.pullSettings = pullSettings;
|
|
14
14
|
exports.removeAppiumPrefixes = removeAppiumPrefixes;
|
|
15
15
|
exports.rootDir = void 0;
|
|
16
|
-
exports.validateExtensionArgs = validateExtensionArgs;
|
|
17
16
|
|
|
18
17
|
require("source-map-support/register");
|
|
19
18
|
|
|
@@ -60,35 +59,6 @@ function inspectObject(args) {
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
function getExtensionArgs(extensionArgs, extensionName) {
|
|
64
|
-
if (!_lodash.default.has(extensionArgs, extensionName)) {
|
|
65
|
-
return {};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (!_lodash.default.isPlainObject(extensionArgs[extensionName])) {
|
|
69
|
-
throw new TypeError(`Driver or plugin arguments must be plain objects`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return extensionArgs[extensionName];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function ensureNoUnknownArgs(extensionArgs, argsConstraints) {
|
|
76
|
-
const knownArgNames = Object.keys(argsConstraints);
|
|
77
|
-
|
|
78
|
-
const unknownArgs = _lodash.default.difference(Object.keys(extensionArgs), knownArgNames);
|
|
79
|
-
|
|
80
|
-
if (unknownArgs.length > 0) {
|
|
81
|
-
throw new Error(`Some arguments were not recognized: ${JSON.stringify(unknownArgs)}. ` + `Are you sure they are in the list of supported args? ${JSON.stringify(knownArgNames)}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function validateExtensionArgs(extensionArgs, argsConstraints) {
|
|
86
|
-
if (!_lodash.default.isEmpty(extensionArgs) && !_lodash.default.isEmpty(argsConstraints)) {
|
|
87
|
-
ensureNoUnknownArgs(extensionArgs, argsConstraints);
|
|
88
|
-
(0, _baseDriver.validateCaps)(extensionArgs, argsConstraints);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
62
|
function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraints = {}, defaultCapabilities = {}) {
|
|
93
63
|
const hasW3CCaps = _lodash.default.isPlainObject(w3cCapabilities) && (_lodash.default.has(w3cCapabilities, 'alwaysMatch') || _lodash.default.has(w3cCapabilities, 'firstMatch'));
|
|
94
64
|
|
|
@@ -243,7 +213,28 @@ function pullSettings(caps) {
|
|
|
243
213
|
|
|
244
214
|
const rootDir = _support.fs.findRoot(__dirname);
|
|
245
215
|
|
|
246
|
-
exports.rootDir = rootDir;
|
|
216
|
+
exports.rootDir = rootDir;
|
|
217
|
+
|
|
218
|
+
class ReadonlyMap extends Map {
|
|
219
|
+
set(key, value) {
|
|
220
|
+
if (this.has(key)) {
|
|
221
|
+
throw new Error(`${key} is already set`);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return super.set(key, value);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
delete(key) {
|
|
228
|
+
throw new Error(`${key} cannot be deleted`);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
clear() {
|
|
232
|
+
throw new Error(`Cannot clear ReadonlyMap`);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
exports.ReadonlyMap = ReadonlyMap;require('source-map-support').install();
|
|
247
238
|
|
|
248
239
|
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImluc3BlY3RPYmplY3QiLCJhcmdzIiwiZ2V0VmFsdWVBcnJheSIsIm9iaiIsImluZGVudCIsIl8iLCJpc09iamVjdCIsInN0ckFyciIsImFyZyIsInZhbHVlIiwidG9QYWlycyIsInB1c2giLCJzaGlmdCIsImxvZ2dlciIsImluZm8iLCJ2YWwiLCJnZXRFeHRlbnNpb25BcmdzIiwiZXh0ZW5zaW9uQXJncyIsImV4dGVuc2lvbk5hbWUiLCJoYXMiLCJpc1BsYWluT2JqZWN0IiwiVHlwZUVycm9yIiwiZW5zdXJlTm9Vbmtub3duQXJncyIsImFyZ3NDb25zdHJhaW50cyIsImtub3duQXJnTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwidW5rbm93bkFyZ3MiLCJkaWZmZXJlbmNlIiwibGVuZ3RoIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVFeHRlbnNpb25BcmdzIiwiaXNFbXB0eSIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwianNvbndwQ2FwYWJpbGl0aWVzIiwidzNjQ2FwYWJpbGl0aWVzIiwiY29uc3RyYWludHMiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwiaGFzVzNDQ2FwcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJjbG9uZURlZXAiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwiaXNDYXBBbHJlYWR5U2V0IiwiZmlyc3RNYXRjaEVudHJ5IiwiZmlyc3RNYXRjaCIsInJlbW92ZUFwcGl1bVByZWZpeGVzIiwicmVtb3ZlQXBwaXVtUHJlZml4IiwiYWx3YXlzTWF0Y2giLCJhc3NpZ24iLCJtZXNzYWdlIiwiaW5zZXJ0QXBwaXVtUHJlZml4ZXMiLCJjYXBzIiwiU1RBTkRBUkRfQ0FQUyIsInByZWZpeGVkQ2FwcyIsIm5hbWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJyb290RGlyIiwiZnMiLCJmaW5kUm9vdCIsIl9fZGlybmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLFFBQTFCOztBQUVBLFNBQVNDLGFBQVQsQ0FBd0JDLElBQXhCLEVBQThCO0FBQzVCLFdBQVNDLGFBQVQsQ0FBd0JDLEdBQXhCLEVBQTZCQyxNQUFNLEdBQUcsSUFBdEMsRUFBNEM7QUFDMUMsUUFBSSxDQUFDQyxnQkFBRUMsUUFBRixDQUFXSCxHQUFYLENBQUwsRUFBc0I7QUFDcEIsYUFBTyxDQUFDQSxHQUFELENBQVA7QUFDRDs7QUFFRCxRQUFJSSxNQUFNLEdBQUcsQ0FBQyxHQUFELENBQWI7O0FBQ0EsU0FBSyxJQUFJLENBQUNDLEdBQUQsRUFBTUMsS0FBTixDQUFULElBQXlCSixnQkFBRUssT0FBRixDQUFVUCxHQUFWLENBQXpCLEVBQXlDO0FBQ3ZDLFVBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0csS0FBWCxDQUFMLEVBQXdCO0FBQ3RCRixRQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEtBQUlJLEdBQUksS0FBSUMsS0FBTSxFQUF4QztBQUNELE9BRkQsTUFFTztBQUNMQSxRQUFBQSxLQUFLLEdBQUdQLGFBQWEsQ0FBQ08sS0FBRCxFQUFTLEdBQUVMLE1BQU8sSUFBbEIsQ0FBckI7QUFDQUcsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQWEsR0FBRVAsTUFBTyxLQUFJSSxHQUFJLEtBQUlDLEtBQUssQ0FB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U0FBT1UsTUFBUDtBQUNEOztBQUVELE1BQU1HLE9BQU8sR0FBR0MsWUFBR0MsUUFBSCxDQUFZQyxTQUFaLENBQWhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTLCB2YWxpZGF0ZUNhcHMgYXMgdmFsaWRhdGVBcmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5cbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QgKGFyZ3MpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVBcnJheSAob2JqLCBpbmRlbnQgPSAnICAnKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG5cbiAgICBsZXQgc3RyQXJyID0gWyd7J107XG4gICAgZm9yIChsZXQgW2FyZywgdmFsdWVdIG9mIF8udG9QYWlycyhvYmopKSB7XG4gICAgICBpZiAoIV8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWVBcnJheSh2YWx1ZSwgYCR7aW5kZW50fSAgYCk7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZS5zaGlmdCgpfWApO1xuICAgICAgICBzdHJBcnIucHVzaCguLi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ckFyci5wdXNoKGAke2luZGVudH19YCk7XG4gICAgcmV0dXJuIHN0ckFycjtcbiAgfVxuICBmb3IgKGxldCBbYXJnLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGFyZ3MpKSB7XG4gICAgdmFsdWUgPSBnZXRWYWx1ZUFycmF5KHZhbHVlKTtcbiAgICBsb2dnZXIuaW5mbyhgICAke2FyZ306ICR7dmFsdWUuc2hpZnQoKX1gKTtcbiAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKHZhbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgQ0xJIGFyZ3MgYW5kIHRoZSBuYW1lIG9mIGEgZHJpdmVyIG9yIHBsdWdpbiwgZXh0cmFjdCB0aG9zZSBhcmdzIGZvciB0aGF0IHBsdWdpblxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVuc2lvbkFyZ3MgLSBhcmd1bWVudHMgb2YgdGhlIGZvcm0ge1tleHROYW1lXToge1thcmdOYW1lXTogW2FyZ1ZhbHVlXX19XG4gKiBAcGFyYW0ge3N0cmluZ30gZXh0ZW5zaW9uTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb25cbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGFyZyBvYmplY3QgZm9yIHRoYXQgZXh0ZW5zaW9uIGFsb25lXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MgKGV4dGVuc2lvbkFyZ3MsIGV4dGVuc2lvbk5hbWUpIHtcbiAgaWYgKCFfLmhhcyhleHRlbnNpb25BcmdzLCBleHRlbnNpb25OYW1lKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChleHRlbnNpb25BcmdzW2V4dGVuc2lvbk5hbWVdKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYERyaXZlciBvciBwbHVnaW4gYXJndW1lbnRzIG11c3QgYmUgcGxhaW4gb2JqZWN0c2ApO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25BcmdzW2V4dGVuc2lvbk5hbWVdO1xufVxuXG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgYXJncyBhbmQgYSBzZXQgb2YgY29uc3RyYWludHMsIHRocm93IGFuIGVycm9yIGlmIGFueSBhcmdzIGFyZSBub3QgbWVudGlvbmVkIGluXG4gKiB0aGUgc2V0IG9mIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZXh0ZW5zaW9uQXJncyB0aGUgYXJnc1xuICogQHBhcmFtIHtPYmplY3R9IGFyZ3NDb25zdHJhaW50cyB0aGUgY29uc3RyYWludHMgb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW55IGFyZ3Mgd2VyZSBub3QgcmVjb2duaXplZFxuICovXG5mdW5jdGlvbiBlbnN1cmVOb1Vua25vd25BcmdzIChleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpIHtcbiAgY29uc3Qga25vd25BcmdOYW1lcyA9IE9iamVjdC5rZXlzKGFyZ3NDb25zdHJhaW50cyk7XG4gIGNvbnN0IHVua25vd25BcmdzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKGV4dGVuc2lvbkFyZ3MpLCBrbm93bkFyZ05hbWVzKTtcbiAgaWYgKHVua25vd25BcmdzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgYXJndW1lbnRzIHdlcmUgbm90IHJlY29nbml6ZWQ6ICR7SlNPTi5zdHJpbmdpZnkodW5rbm93bkFyZ3MpfS4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBBcmUgeW91IHN1cmUgdGhleSBhcmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGFyZ3M/ICR7SlNPTi5zdHJpbmdpZnkoa25vd25BcmdOYW1lcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhIHNldCBvZiBkcml2ZXIvcGx1Z2luIGFyZ3MgcGFzc2VkIGluIGJ5IHVzZXIsIGFuZCBhcmcgY29uc3RyYWludHNcbiAqIGFuZCB0aHJvd3MgYW4gZXJyb3IgaWYgYW55IGFyZyBpcyB1bmtub3duIG9yIG9mIHRoZSBpbmNvcnJlY3QgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBleHRlbnNpb25BcmdzIC0gRHJpdmVyIG9yIFBsdWdpbiBzcGVjaWZpYyBhcmdzXG4gKiBAcGFyYW0ge29iamVjdH0gYXJnc0NvbnN0cmFpbnRzIC0gQ29uc3RyYWludHMgZm9yIGFyZ3VtZW50c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFueSBhcmdzIGFyZSBub3QgcmVjb2duaXplZCBvciBhcmUgb2YgYW4gaW52YWxpZCB0eXBlXG4qL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHRlbnNpb25BcmdzIChleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpIHtcbiAgaWYgKCFfLmlzRW1wdHkoZXh0ZW5zaW9uQXJncykgJiYgIV8uaXNFbXB0eShhcmdzQ29uc3RyYWludHMpKSB7XG4gICAgZW5zdXJlTm9Vbmtub3duQXJncyhleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpO1xuICAgIHZhbGlkYXRlQXJncyhleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpO1xuICB9XG59XG5cblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENhcGFiaWxpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciAoanNvbndwQ2FwYWJpbGl0aWVzLCB3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzID0ge30sIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7fSkge1xuICAvLyBDaGVjayBpZiB0aGUgY2FsbGVyIHNlbnQgSlNPTldQIGNhcHMsIFczQyBjYXBzLCBvciBib3RoXG4gIGNvbnN0IGhhc1czQ0NhcHMgPSBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0ge307XG4gIGxldCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSBudWxsO1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gbnVsbDtcblxuICBpZiAoIWhhc1czQ0NhcHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlbW92ZUFwcGl1bVByZWZpeGVzKGRlZmF1bHRDYXBhYmlsaXRpZXMpLCBqc29ud3BDYXBhYmlsaXRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBNSlNPTldQIGNhcHNcbiAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMgPSB7Li4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgfVxuXG4gIC8vIEdldCBXM0MgY2Fwc1xuICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgIC8vIENhbGwgdGhlIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGFsZ29yaXRobSB0byBmaW5kIG1hdGNoaW5nIGNhcHMgb24gdGhlIFczQ1xuICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qbGlwcHMvc2ltcGxlLXdkLXNwZWMjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4gICAgdHJ5IHtcbiAgICAgIGRlc2lyZWRDYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyh3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmluZm8oYENvdWxkIG5vdCBwYXJzZSBXM0MgY2FwYWJpbGl0aWVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7ZGVzaXJlZENhcHMsIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcywgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLCBwcm90b2NvbH07XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXhlcyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3QgZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgZml4ZWRDYXBzW3JlbW92ZUFwcGl1bVByZWZpeChuYW1lKV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXggKGtleSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtXM0NfQVBQSVVNX1BSRUZJWH06YDtcbiAgcmV0dXJuIF8uc3RhcnRzV2l0aChrZXksIHByZWZpeCkgPyBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpIDoga2V5O1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbiAocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSB8fCBfLmlzRW1wdHkoY2FwcykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXFxic2V0dGluZ3NcXFsoXFxTKylcXF0kLy5leGVjKGtleSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IHZhbHVlO1xuICAgIGRlbGV0ZSBjYXBzW2tleV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3Qgcm9vdERpciA9IGZzLmZpbmRSb290KF9fZGlybmFtZSk7XG5cbmV4cG9ydCB7XG4gIGluc3BlY3RPYmplY3QsIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcm9vdERpcixcbiAgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsIGdldEV4dGVuc2lvbkFyZ3MsXG4gIHZhbGlkYXRlRXh0ZW5zaW9uQXJnc1xufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
240
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImluc3BlY3RPYmplY3QiLCJhcmdzIiwiZ2V0VmFsdWVBcnJheSIsIm9iaiIsImluZGVudCIsIl8iLCJpc09iamVjdCIsInN0ckFyciIsImFyZyIsInZhbHVlIiwidG9QYWlycyIsInB1c2giLCJzaGlmdCIsImxvZ2dlciIsImluZm8iLCJ2YWwiLCJwYXJzZUNhcHNGb3JJbm5lckRyaXZlciIsImpzb253cENhcGFiaWxpdGllcyIsInczY0NhcGFiaWxpdGllcyIsImNvbnN0cmFpbnRzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImhhc1czQ0NhcHMiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwiaGFzSlNPTldQQ2FwcyIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJXM0MiLCJlcnJvciIsIkVycm9yIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBLZXkiLCJkZWZhdWx0Q2FwVmFsdWUiLCJpc0NhcEFscmVhZHlTZXQiLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwicmVtb3ZlQXBwaXVtUHJlZml4ZXMiLCJyZW1vdmVBcHBpdW1QcmVmaXgiLCJhbHdheXNNYXRjaCIsIk9iamVjdCIsImFzc2lnbiIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsImluY2x1ZGVzIiwiZml4ZWRDYXBzIiwia2V5IiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsImdldFBhY2thZ2VWZXJzaW9uIiwicGtnTmFtZSIsInBrZ0luZm8iLCJyZXF1aXJlIiwidmVyc2lvbiIsInB1bGxTZXR0aW5ncyIsInJlc3VsdCIsIm1hdGNoIiwiZXhlYyIsInJvb3REaXIiLCJmcyIsImZpbmRSb290IiwiX19kaXJuYW1lIiwiUmVhZG9ubHlNYXAiLCJNYXAiLCJzZXQiLCJkZWxldGUiLCJjbGVhciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7O0FBRUEsU0FBU0MsYUFBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsV0FBU0MsYUFBVCxDQUF3QkMsR0FBeEIsRUFBNkJDLE1BQU0sR0FBRyxJQUF0QyxFQUE0QztBQUMxQyxRQUFJLENBQUNDLGdCQUFFQyxRQUFGLENBQVdILEdBQVgsQ0FBTCxFQUFzQjtBQUNwQixhQUFPLENBQUNBLEdBQUQsQ0FBUDtBQUNEOztBQUVELFFBQUlJLE1BQU0sR0FBRyxDQUFDLEdBQUQsQ0FBYjs7QUFDQSxTQUFLLElBQUksQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLENBQVQsSUFBeUJKLGdCQUFFSyxPQUFGLENBQVVQLEdBQVYsQ0FBekIsRUFBeUM7QUFDdkMsVUFBSSxDQUFDRSxnQkFBRUMsUUFBRixDQUFXRyxLQUFYLENBQUwsRUFBd0I7QUFDdEJGLFFBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sS0FBSUksR0FBSSxLQUFJQyxLQUFNLEVBQXhDO0FBQ0QsT0FGRCxNQUVPO0FBQ0xBLFFBQUFBLEtBQUssR0FBR1AsYUFBYSxDQUFDTyxLQUFELEVBQVMsR0FBRUwsTUFBTyxJQUFsQixDQUFyQjtBQUNBRyxRQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEtBQUlJLEdBQUksS0FBSUMsS0FBSyxDQUFDRyxLQUFOLEVBQWMsRUFBaEQ7QUFDQUwsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQVksR0FBR0YsS0FBZjtBQUNEO0FBQ0Y7O0FBQ0RGLElBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sR0FBdEI7QUFDQSxXQUFPRyxNQUFQO0FBQ0Q7O0FBQ0QsT0FB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QUtjLEdBQUwsQ0FBUzhCLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFNLElBQUlyQixLQUFKLENBQVcsR0FBRXFCLEdBQUksaUJBQWpCLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU1vQixHQUFOLENBQVVwQixHQUFWLEVBQWU1QyxLQUFmLENBQVA7QUFDRDs7QUFFRGlFLEVBQUFBLE1BQU0sQ0FBRXJCLEdBQUYsRUFBTztBQUNYLFVBQU0sSUFBSXJCLEtBQUosQ0FBVyxHQUFFcUIsR0FBSSxvQkFBakIsQ0FBTjtBQUNEOztBQUVEc0IsRUFBQUEsS0FBSyxHQUFJO0FBQ1AsVUFBTSxJQUFJM0MsS0FBSixDQUFXLDBCQUFYLENBQU47QUFDRDs7QUFsQjJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5cbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QgKGFyZ3MpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVBcnJheSAob2JqLCBpbmRlbnQgPSAnICAnKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG5cbiAgICBsZXQgc3RyQXJyID0gWyd7J107XG4gICAgZm9yIChsZXQgW2FyZywgdmFsdWVdIG9mIF8udG9QYWlycyhvYmopKSB7XG4gICAgICBpZiAoIV8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWVBcnJheSh2YWx1ZSwgYCR7aW5kZW50fSAgYCk7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZS5zaGlmdCgpfWApO1xuICAgICAgICBzdHJBcnIucHVzaCguLi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ckFyci5wdXNoKGAke2luZGVudH19YCk7XG4gICAgcmV0dXJuIHN0ckFycjtcbiAgfVxuICBmb3IgKGxldCBbYXJnLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGFyZ3MpKSB7XG4gICAgdmFsdWUgPSBnZXRWYWx1ZUFycmF5KHZhbHVlKTtcbiAgICBsb2dnZXIuaW5mbyhgICAke2FyZ306ICR7dmFsdWUuc2hpZnQoKX1gKTtcbiAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKHZhbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25zdHJhaW50c1xuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IHt9O1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0gbnVsbDtcbiAgbGV0IHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyA9IG51bGw7XG5cbiAgaWYgKCFoYXNXM0NDYXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBQUk9UT0NPTFMuVzNDLFxuICAgICAgZXJyb3I6IG5ldyBFcnJvcignVzNDIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgcHJvdmlkZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KVxuICAgICAgICAgICAgICAmJiBfLmhhcyhyZW1vdmVBcHBpdW1QcmVmaXhlcyhmaXJzdE1hdGNoRW50cnkpLCByZW1vdmVBcHBpdW1QcmVmaXgoZGVmYXVsdENhcEtleSkpKSB7XG4gICAgICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGFsd2F5c01hdGNoIGVudHJpZXNcbiAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gaXNDYXBBbHJlYWR5U2V0IHx8IChfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKVxuICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKHczY0NhcGFiaWxpdGllcy5hbHdheXNNYXRjaCksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpO1xuICAgICAgICBpZiAoaXNDYXBBbHJlYWR5U2V0KSB7XG4gICAgICAgICAgLy8gU2tpcCBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcHJvdmlkZWQgY2Fwc1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgdGhlIGRlZmF1bHQgY2FwYWJpbGl0eSBpZiBpdCBpcyBub3Qgb3ZlcnJpZGRlblxuICAgICAgICBpZiAoXy5pc0VtcHR5KHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoKSkge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoID0gW3tbZGVmYXVsdENhcEtleV06IGRlZmF1bHRDYXBWYWx1ZX1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoWzBdW2RlZmF1bHRDYXBLZXldID0gZGVmYXVsdENhcFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgICBqc29ud3BDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCByZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwganNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyB3M2MgY2FwYWJpbGl0aWVzIHBheWxvYWQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtYXRjaGluZyBjYXBzIGluIGBhbHdheXNNYXRjaGBcbiAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSB7XG4gICAgICBhbHdheXNNYXRjaDogey4uLmluc2VydEFwcGl1bVByZWZpeGVzKGRlc2lyZWRDYXBzKX0sXG4gICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9O1xufVxuXG4vKipcbiAqIFRha2VzIGEgY2FwYWJpbGl0aWVzIG9iamVjdHMgYW5kIHByZWZpeGVzIGNhcGFiaWxpdGllcyB3aXRoIGBhcHBpdW06YFxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgRGVzaXJlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzIChjYXBzKSB7XG4gIC8vIFN0YW5kYXJkLCBub24tcHJlZml4ZWQgY2FwYWJpbGl0aWVzIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLXRhYmxlLW9mLXN0YW5kYXJkLWNhcGFiaWxpdGllcylcbiAgY29uc3QgU1RBTkRBUkRfQ0FQUyA9IFtcbiAgICAnYnJvd3Nlck5hbWUnLFxuICAgICdicm93c2VyVmVyc2lvbicsXG4gICAgJ3BsYXRmb3JtTmFtZScsXG4gICAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAgICdwYWdlTG9hZFN0cmF0ZWd5JyxcbiAgICAncHJveHknLFxuICAgICdzZXRXaW5kb3dSZWN0JyxcbiAgICAndGltZW91dHMnLFxuICAgICd1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcidcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IGZpeGVkQ2FwcyA9IHt9O1xuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGZpeGVkQ2Fwc1tyZW1vdmVBcHBpdW1QcmVmaXgobmFtZSldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4IChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24gKHBrZ05hbWUpIHtcbiAgY29uc3QgcGtnSW5mbyA9IHJlcXVpcmUoYCR7cGtnTmFtZX0vcGFja2FnZS5qc29uYCkgfHwge307XG4gIHJldHVybiBwa2dJbmZvLnZlcnNpb247XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIEFwcGl1bSBzZXR0aW5ncyBmcm9tIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgYXJndW1lbnQuXG4gKiBFYWNoIHNldHRpbmcgaXRlbSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgc2V0dGluZ1tzZXR0aW5nX25hbWVdOiBzZXR0aW5nX3ZhbHVlYFxuICogVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCBpdHNlbGYgZ2V0cyBtdXRhdGVkLCBzbyBpdCBkb2VzIG5vdCBjb250YWluIHBhcnNlZFxuICogc2V0dGluZ3MgYW55bW9yZSB0byBhdm9pZCBmdXJ0aGVyIHBhcnNpbmcgaXNzdWVzLlxuICogQ2hlY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvc2V0dGluZ3MubWRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGF2YWlsYWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IGNhcHMgLSBDYXBhYmlsaXRpZXMgZGljdGlvbmFyeS4gSXQgaXMgbXV0YXRlZCBpZlxuICogb25lIG9yIG1vcmUgc2V0dGluZ3MgaGF2ZSBiZWVuIHB1bGxlZCBmcm9tIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gZW1wdHkgZGljdGlvbmFyeSBpZiB0aGUgZ2l2ZW4gY2FwcyBjb250YWlucyBub1xuICogc2V0dGluZyBpdGVtcyBvciBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBwYXJzZWQgQXBwaXVtIHNldHRpbmcgbmFtZXMgYWxvbmcgd2l0aFxuICogdGhlaXIgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBwdWxsU2V0dGluZ3MgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykgfHwgXy5pc0VtcHR5KGNhcHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGNvbnN0IG1hdGNoID0gL1xcYnNldHRpbmdzXFxbKFxcUyspXFxdJC8uZXhlYyhrZXkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFttYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICBkZWxldGUgY2Fwc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHJvb3REaXIgPSBmcy5maW5kUm9vdChfX2Rpcm5hbWUpO1xuXG5cbi8qKlxuICogQSBNYXAgd2hlcmUgeW91IGNhbiBzZXQgcHJvcGVydGllcywgYnV0IG9ubHkgb25jZS4gQW5kIHlvdSBjYW4ndCByZW1vdmUgYW55dGhpbmcuIFNvIHRoZXJlLlxuICogQHRlbXBsYXRlIEssVlxuICogQGV4dGVuZHMge01hcDxLLFY+fVxuICovXG5jbGFzcyBSZWFkb25seU1hcCBleHRlbmRzIE1hcCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0t9IGtleVxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlXG4gICAqL1xuICBzZXQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gaXMgYWxyZWFkeSBzZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGRlbGV0ZSAoa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gY2Fubm90IGJlIGRlbGV0ZWRgKTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSZWFkb25seU1hcGApO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGluc3BlY3RPYmplY3QsIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcm9vdERpcixcbiAgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsIFJlYWRvbmx5TWFwXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|