@ruvector/ruvllm 2.5.5 → 2.5.6
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/README.md +282 -282
- package/bin/cli.js +1020 -1020
- package/dist/cjs/benchmarks/embedding-benchmark.js +1 -1
- package/dist/cjs/benchmarks/index.js +1 -1
- package/dist/cjs/benchmarks/model-comparison.js +1 -1
- package/dist/cjs/benchmarks/routing-benchmark.js +1 -1
- package/dist/cjs/contrastive.js +70 -70
- package/dist/cjs/engine.js +13 -13
- package/dist/cjs/export.js +31 -31
- package/dist/cjs/federated.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/intelligence.js +1 -1
- package/dist/cjs/lora.js +1 -1
- package/dist/cjs/models.js +1 -1
- package/dist/cjs/native.js +1 -1
- package/dist/cjs/session.js +1 -1
- package/dist/cjs/simd.js +1 -1
- package/dist/cjs/sona.d.ts +36 -0
- package/dist/cjs/sona.d.ts.map +1 -1
- package/dist/cjs/sona.js +66 -4
- package/dist/cjs/streaming.js +1 -1
- package/dist/cjs/training.js +1 -1
- package/dist/cjs/types.js +1 -1
- package/dist/esm/benchmarks/embedding-benchmark.js +1 -1
- package/dist/esm/benchmarks/index.js +1 -1
- package/dist/esm/benchmarks/model-comparison.js +1 -1
- package/dist/esm/benchmarks/routing-benchmark.js +1 -1
- package/dist/esm/contrastive.js +70 -70
- package/dist/esm/engine.js +13 -13
- package/dist/esm/export.js +31 -31
- package/dist/esm/federated.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/intelligence.js +1 -1
- package/dist/esm/lora.js +1 -1
- package/dist/esm/models.js +1 -1
- package/dist/esm/native.js +1 -1
- package/dist/esm/session.js +1 -1
- package/dist/esm/simd.js +1 -1
- package/dist/esm/sona.d.ts +36 -0
- package/dist/esm/sona.d.ts.map +1 -1
- package/dist/esm/sona.js +66 -4
- package/dist/esm/streaming.js +1 -1
- package/dist/esm/training.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +133 -133
- package/scripts/ensemble-model-compare.js +287 -287
- package/scripts/huggingface/README.md +537 -537
- package/scripts/huggingface/publish.sh +112 -112
- package/scripts/hybrid-model-compare.js +373 -373
- package/scripts/improved-model-compare.js +288 -288
- package/scripts/optimized-model-compare.js +364 -364
- package/scripts/real-model-compare.js +280 -280
- package/scripts/training/agentic-flow-capabilities.json +329 -329
- package/scripts/training/claude-code-synth.js +505 -505
- package/scripts/training/claude-flow-capabilities.json +1322 -1322
- package/scripts/training/claude-hard-negatives.js +222 -222
- package/scripts/training/contrastive-finetune.js +517 -517
- package/scripts/training/ecosystem-triplets.jsonl +1466 -1466
- package/scripts/training/generate-ecosystem-triplets.js +1324 -1324
- package/scripts/training/routing-dataset.js +634 -634
- package/scripts/training/ruvector-capabilities.json +798 -798
- package/scripts/training/validate-ecosystem.js +381 -381
- package/scripts/training/validation-results.json +22 -22
package/dist/cjs/export.js
CHANGED
|
@@ -275,36 +275,36 @@ class ModelExporter {
|
|
|
275
275
|
...model.metadata,
|
|
276
276
|
lora_config: model.loraConfig,
|
|
277
277
|
}, null, 2);
|
|
278
|
-
const readme = `---
|
|
279
|
-
license: mit
|
|
280
|
-
tags:
|
|
281
|
-
- sona
|
|
282
|
-
- lora
|
|
283
|
-
- ruvector
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
# ${model.metadata.name}
|
|
287
|
-
|
|
288
|
-
${model.metadata.architecture} model trained with SONA adaptive learning.
|
|
289
|
-
|
|
290
|
-
## Usage
|
|
291
|
-
|
|
292
|
-
\`\`\`typescript
|
|
293
|
-
import { LoraAdapter, SafeTensorsReader } from '@ruvector/ruvllm';
|
|
294
|
-
|
|
295
|
-
const reader = new SafeTensorsReader(buffer);
|
|
296
|
-
const adapter = new LoraAdapter();
|
|
297
|
-
adapter.setWeights({
|
|
298
|
-
loraA: reader.getTensor2D('lora.A'),
|
|
299
|
-
loraB: reader.getTensor2D('lora.B'),
|
|
300
|
-
scaling: reader.getTensor1D('lora.scaling')[0],
|
|
301
|
-
});
|
|
302
|
-
\`\`\`
|
|
303
|
-
|
|
304
|
-
## Training Info
|
|
305
|
-
|
|
306
|
-
- Steps: ${model.metadata.training?.steps || 'N/A'}
|
|
307
|
-
- Final Loss: ${model.metadata.training?.loss || 'N/A'}
|
|
278
|
+
const readme = `---
|
|
279
|
+
license: mit
|
|
280
|
+
tags:
|
|
281
|
+
- sona
|
|
282
|
+
- lora
|
|
283
|
+
- ruvector
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
# ${model.metadata.name}
|
|
287
|
+
|
|
288
|
+
${model.metadata.architecture} model trained with SONA adaptive learning.
|
|
289
|
+
|
|
290
|
+
## Usage
|
|
291
|
+
|
|
292
|
+
\`\`\`typescript
|
|
293
|
+
import { LoraAdapter, SafeTensorsReader } from '@ruvector/ruvllm';
|
|
294
|
+
|
|
295
|
+
const reader = new SafeTensorsReader(buffer);
|
|
296
|
+
const adapter = new LoraAdapter();
|
|
297
|
+
adapter.setWeights({
|
|
298
|
+
loraA: reader.getTensor2D('lora.A'),
|
|
299
|
+
loraB: reader.getTensor2D('lora.B'),
|
|
300
|
+
scaling: reader.getTensor1D('lora.scaling')[0],
|
|
301
|
+
});
|
|
302
|
+
\`\`\`
|
|
303
|
+
|
|
304
|
+
## Training Info
|
|
305
|
+
|
|
306
|
+
- Steps: ${model.metadata.training?.steps || 'N/A'}
|
|
307
|
+
- Final Loss: ${model.metadata.training?.loss || 'N/A'}
|
|
308
308
|
`;
|
|
309
309
|
return { safetensors, config, readme };
|
|
310
310
|
}
|
|
@@ -419,4 +419,4 @@ class DatasetExporter {
|
|
|
419
419
|
}
|
|
420
420
|
}
|
|
421
421
|
exports.DatasetExporter = DatasetExporter;
|
|
422
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7OztBQWdDSDs7Ozs7R0FLRztBQUNILE1BQWEsaUJBQWlCO0lBQTlCO1FBQ1UsWUFBTyxHQUF5RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFFLGFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBMkdoRCxDQUFDO0lBekdDOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFrQixFQUFFLEtBQWU7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBWSxFQUFFLElBQWdCO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8s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WixPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVc7U0FDdkIsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXRDRCwwQ0FzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4cG9ydC9TZXJpYWxpemF0aW9uIGZvciBTT05BIE1vZGVsc1xuICpcbiAqIFN1cHBvcnQgZm9yIFNhZmVUZW5zb3JzLCBKU09OLCBhbmQgb3RoZXIgZXhwb3J0IGZvcm1hdHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE1vZGVsRXhwb3J0ZXIsIFNhZmVUZW5zb3JzV3JpdGVyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogLy8gRXhwb3J0IG1vZGVsIHRvIFNhZmVUZW5zb3JzIGZvcm1hdFxuICogY29uc3QgZXhwb3J0ZXIgPSBuZXcgTW9kZWxFeHBvcnRlcigpO1xuICogY29uc3QgYnVmZmVyID0gZXhwb3J0ZXIudG9TYWZlVGVuc29ycyh7XG4gKiAgIHdlaWdodHM6IGxvcmFBZGFwdGVyLmdldFdlaWdodHMoKSxcbiAqICAgY29uZmlnOiBsb3JhQWRhcHRlci5nZXRDb25maWcoKSxcbiAqIH0pO1xuICpcbiAqIC8vIFNhdmUgdG8gZmlsZVxuICogZnMud3JpdGVGaWxlU3luYygnbW9kZWwuc2FmZXRlbnNvcnMnLCBidWZmZXIpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgTG9SQUNvbmZpZywgTGVhcm5lZFBhdHRlcm4sIEV3Y1N0YXRzLCBFbWJlZGRpbmcsIE1vZGVsTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IExvcmFXZWlnaHRzIH0gZnJvbSAnLi9sb3JhJztcblxuLyoqXG4gKiBFeHBvcnRhYmxlIG1vZGVsIGRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRhYmxlTW9kZWwge1xuICAvKiogTW9kZWwgbWV0YWRhdGEgKi9cbiAgbWV0YWRhdGE6IE1vZGVsTWV0YWRhdGE7XG4gIC8qKiBMb1JBIHdlaWdodHMgKGlmIGFwcGxpY2FibGUpICovXG4gIGxvcmFXZWlnaHRzPzogTG9yYVdlaWdodHM7XG4gIC8qKiBMb1JBIGNvbmZpZyAqL1xuICBsb3JhQ29uZmlnPzogTG9SQUNvbmZpZztcbiAgLyoqIExlYXJuZWQgcGF0dGVybnMgKi9cbiAgcGF0dGVybnM/OiBMZWFybmVkUGF0dGVybltdO1xuICAvKiogRVdDIHN0YXRpc3RpY3MgKi9cbiAgZXdjU3RhdHM/OiBFd2NTdGF0cztcbiAgLyoqIFJhdyB0ZW5zb3JzICovXG4gIHRlbnNvcnM/OiBNYXA8c3RyaW5nLCBGbG9hdDMyQXJyYXk+O1xufVxuXG4vKipcbiAqIFNhZmVUZW5zb3JzIGhlYWRlciBlbnRyeVxuICovXG5pbnRlcmZhY2UgU2FmZVRlbnNvcnNIZWFkZXIge1xuICBkdHlwZTogc3RyaW5nO1xuICBzaGFwZTogbnVtYmVyW107XG4gIGRhdGFfb2Zmc2V0czogW251bWJlciwgbnVtYmVyXTtcbn1cblxuLyoqXG4gKiBTYWZlVGVuc29ycyBXcml0ZXJcbiAqXG4gKiBXcml0ZXMgdGVuc29ycyBpbiBTYWZlVGVuc29ycyBmb3JtYXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aFxuICogSHVnZ2luZ0ZhY2UgZWNvc3lzdGVtLlxuICovXG5leHBvcnQgY2xhc3MgU2FmZVRlbnNvcnNXcml0ZXIge1xuICBwcml2YXRlIHRlbnNvcnM6IE1hcDxzdHJpbmcsIHsgZGF0YTogRmxvYXQzMkFycmF5OyBzaGFwZTogbnVtYmVyW10gfT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvKipcbiAgICogQWRkIGEgdGVuc29yXG4gICAqL1xuICBhZGRUZW5zb3IobmFtZTogc3RyaW5nLCBkYXRhOiBGbG9hdDMyQXJyYXksIHNoYXBlOiBudW1iZXJbXSk6IHRoaXMge1xuICAgIHRoaXMudGVuc29ycy5zZXQobmFtZSwgeyBkYXRhLCBzaGFwZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgMkQgdGVuc29yIGZyb20gbnVtYmVyIGFycmF5XG4gICAqL1xuICBhZGQyRChuYW1lOiBzdHJpbmcsIGRhdGE6IG51bWJlcltdW10pOiB0aGlzIHtcbiAgICBjb25zdCByb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgY29scyA9IGRhdGFbMF0/Lmxlbmd0aCB8fCAwO1xuICAgIGNvbnN0IGZsYXQgPSBuZXcgRmxvYXQzMkFycmF5KHJvd3MgKiBjb2xzKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICBmbGF0W2kgKiBjb2xzICsgal0gPSBkYXRhW2ldW2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZFRlbnNvcihuYW1lLCBmbGF0LCBbcm93cywgY29sc10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCAxRCB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXlcbiAgICovXG4gIGFkZDFEKG5hbWU6IHN0cmluZywgZGF0YTogbnVtYmVyW10pOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUZW5zb3IobmFtZSwgbmV3IEZsb2F0MzJBcnJheShkYXRhKSwgW2RhdGEubGVuZ3RoXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG1ldGFkYXRhXG4gICAqL1xuICBhZGRNZXRhZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMubWV0YWRhdGFba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFNhZmVUZW5zb3JzIGJ1ZmZlclxuICAgKi9cbiAgYnVpbGQoKTogVWludDhBcnJheSB7XG4gICAgLy8gQnVpbGQgaGVhZGVyXG4gICAgY29uc3QgaGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBTYWZlVGVuc29yc0hlYWRlciB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XG4gICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICBjb25zdCB0ZW5zb3JEYXRhOiBVaW50OEFycmF5W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHsgZGF0YSwgc2hhcGUgfV0gb2YgdGhpcy50ZW5zb3JzKSB7XG4gICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKTtcbiAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBieXRlcy5sZW5ndGg7XG5cbiAgICAgIGhlYWRlcltuYW1lXSA9IHtcbiAgICAgICAgZHR5cGU6ICdGMzInLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgZGF0YV9vZmZzZXRzOiBbb2Zmc2V0LCBvZmZzZXQgKyBkYXRhTGVuZ3RoXSxcbiAgICAgIH07XG5cbiAgICAgIHRlbnNvckRhdGEucHVzaChieXRlcyk7XG4gICAgICBvZmZzZXQgKz0gZGF0YUxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0YWRhdGFcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgaGVhZGVyWydfX21ldGFkYXRhX18nXSA9IHRoaXMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgLy8gRW5jb2RlIGhlYWRlclxuICAgIGNvbnN0IGhlYWRlckpzb24gPSBKU09OLnN0cmluZ2lmeShoZWFkZXIpO1xuICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGhlYWRlckpzb24pO1xuXG4gICAgLy8gUGFkIGhlYWRlciB0byA4LWJ5dGUgYWxpZ25tZW50XG4gICAgY29uc3QgaGVhZGVyUGFkZGluZyA9ICg4IC0gKGhlYWRlckJ5dGVzLmxlbmd0aCAlIDgpKSAlIDg7XG4gICAgY29uc3QgcGFkZGVkSGVhZGVyTGVuZ3RoID0gaGVhZGVyQnl0ZXMubGVuZ3RoICsgaGVhZGVyUGFkZGluZztcblxuICAgIC8vIEJ1aWxkIGZpbmFsIGJ1ZmZlclxuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gOCArIHBhZGRlZEhlYWRlckxlbmd0aCArIG9mZnNldDtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKTtcblxuICAgIC8vIFdyaXRlIGhlYWRlciBsZW5ndGggKDggYnl0ZXMsIGxpdHRsZS1lbmRpYW4pXG4gICAgdmlldy5zZXRCaWdVaW50NjQoMCwgQmlnSW50KHBhZGRlZEhlYWRlckxlbmd0aCksIHRydWUpO1xuXG4gICAgLy8gV3JpdGUgaGVhZGVyXG4gICAgYnVmZmVyLnNldChoZWFkZXJCeXRlcywgOCk7XG5cbiAgICAvLyBXcml0ZSB0ZW5zb3IgZGF0YVxuICAgIGxldCBkYXRhT2Zmc2V0ID0gOCArIHBhZGRlZEhlYWRlckxlbmd0aDtcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgdGVuc29yRGF0YSkge1xuICAgICAgYnVmZmVyLnNldChkYXRhLCBkYXRhT2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgdGVuc29ycyBhbmQgbWV0YWRhdGFcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudGVuc29ycy5jbGVhcigpO1xuICAgIHRoaXMubWV0YWRhdGEgPSB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVUZW5zb3JzIFJlYWRlclxuICpcbiAqIFJlYWRzIHRlbnNvcnMgZnJvbSBTYWZlVGVuc29ycyBmb3JtYXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlVGVuc29yc1JlYWRlciB7XG4gIHByaXZhdGUgYnVmZmVyOiBVaW50OEFycmF5O1xuICBwcml2YXRlIGhlYWRlcjogUmVjb3JkPHN0cmluZywgU2FmZVRlbnNvcnNIZWFkZXIgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBwcml2YXRlIGRhdGFPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoYnVmZmVyOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5wYXJzZUhlYWRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW5zb3IgbmFtZXNcbiAgICovXG4gIGdldFRlbnNvck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oZWFkZXIpLmZpbHRlcihrID0+IGsgIT09ICdfX21ldGFkYXRhX18nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVuc29yIGJ5IG5hbWVcbiAgICovXG4gIGdldFRlbnNvcihuYW1lOiBzdHJpbmcpOiB7IGRhdGE6IEZsb2F0MzJBcnJheTsgc2hhcGU6IG51bWJlcltdIH0gfCBudWxsIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGVhZGVyW25hbWVdO1xuICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiAnZHR5cGUnIGluIGVudHJ5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGVuc29ySGVhZGVyID0gZW50cnkgYXMgU2FmZVRlbnNvcnNIZWFkZXI7XG4gICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGVuc29ySGVhZGVyLmRhdGFfb2Zmc2V0cztcbiAgICBjb25zdCBieXRlcyA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuZGF0YU9mZnNldCArIHN0YXJ0LCB0aGlzLmRhdGFPZmZzZXQgKyBlbmQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG5ldyBGbG9hdDMyQXJyYXkoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBieXRlcy5sZW5ndGggLyA0KSxcbiAgICAgIHNoYXBlOiB0ZW5zb3JIZWFkZXIuc2hhcGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVuc29yIGFzIDJEIGFycmF5XG4gICAqL1xuICBnZXRUZW5zb3IyRChuYW1lOiBzdHJpbmcpOiBudW1iZXJbXVtdIHwgbnVsbCB7XG4gICAgY29uc3QgdGVuc29yID0gdGhpcy5nZXRUZW5zb3IobmFtZSk7XG4gICAgaWYgKCF0ZW5zb3IgfHwgdGVuc29yLnNoYXBlLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBbcm93cywgY29sc10gPSB0ZW5zb3Iuc2hhcGU7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgY29uc3Qgcm93OiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgICAgcm93LnB1c2godGVuc29yLmRhdGFbaSAqIGNvbHMgKyBqXSk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRlbnNvciBhcyAxRCBhcnJheVxuICAgKi9cbiAgZ2V0VGVuc29yMUQobmFtZTogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLmdldFRlbnNvcihuYW1lKTtcbiAgICBpZiAoIXRlbnNvcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGVuc29yLmRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtZXRhZGF0YVxuICAgKi9cbiAgZ2V0TWV0YWRhdGEoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuaGVhZGVyWydfX21ldGFkYXRhX18nXTtcbiAgICBpZiAoIW1ldGEgfHwgdHlwZW9mIG1ldGEgIT09ICdvYmplY3QnKSByZXR1cm4ge307XG4gICAgcmV0dXJuIG1ldGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VIZWFkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlci5idWZmZXIsIHRoaXMuYnVmZmVyLmJ5dGVPZmZzZXQpO1xuICAgIGNvbnN0IGhlYWRlckxlbmd0aCA9IE51bWJlcih2aWV3LmdldEJpZ1VpbnQ2NCgwLCB0cnVlKSk7XG5cbiAgICBjb25zdCBoZWFkZXJCeXRlcyA9IHRoaXMuYnVmZmVyLnNsaWNlKDgsIDggKyBoZWFkZXJMZW5ndGgpO1xuICAgIGNvbnN0IGhlYWRlckpzb24gPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoaGVhZGVyQnl0ZXMpO1xuICAgIHRoaXMuaGVhZGVyID0gSlNPTi5wYXJzZShoZWFkZXJKc29uLnJlcGxhY2UoL1xcMCskLywgJycpKTsgLy8gUmVtb3ZlIHBhZGRpbmcgbnVsbHNcblxuICAgIHRoaXMuZGF0YU9mZnNldCA9IDggKyBoZWFkZXJMZW5ndGg7XG4gIH1cbn1cblxuLyoqXG4gKiBNb2RlbCBFeHBvcnRlclxuICpcbiAqIFVuaWZpZWQgZXhwb3J0IGludGVyZmFjZSBmb3IgU09OQSBtb2RlbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RlbEV4cG9ydGVyIHtcbiAgLyoqXG4gICAqIEV4cG9ydCB0byBTYWZlVGVuc29ycyBmb3JtYXRcbiAgICovXG4gIHRvU2FmZVRlbnNvcnMobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBTYWZlVGVuc29yc1dyaXRlcigpO1xuXG4gICAgLy8gQWRkIG1ldGFkYXRhXG4gICAgd3JpdGVyLmFkZE1ldGFkYXRhKCduYW1lJywgbW9kZWwubWV0YWRhdGEubmFtZSk7XG4gICAgd3JpdGVyLmFkZE1ldGFkYXRhKCd2ZXJzaW9uJywgbW9kZWwubWV0YWRhdGEudmVyc2lvbik7XG4gICAgd3JpdGVyLmFkZE1ldGFkYXRhKCdhcmNoaXRlY3R1cmUnLCBtb2RlbC5tZXRhZGF0YS5hcmNoaXRlY3R1cmUpO1xuXG4gICAgaWYgKG1vZGVsLm1ldGFkYXRhLnRyYWluaW5nKSB7XG4gICAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3RyYWluaW5nX3N0ZXBzJywgU3RyaW5nKG1vZGVsLm1ldGFkYXRhLnRyYWluaW5nLnN0ZXBzKSk7XG4gICAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3RyYWluaW5nX2xvc3MnLCBTdHJpbmcobW9kZWwubWV0YWRhdGEudHJhaW5pbmcubG9zcykpO1xuICAgIH1cblxuICAgIC8vIEFkZCBMb1JBIHdlaWdodHNcbiAgICBpZiAobW9kZWwubG9yYVdlaWdodHMpIHtcbiAgICAgIHdyaXRlci5hZGQyRCgnbG9yYS5BJywgbW9kZWwubG9yYVdlaWdodHMubG9yYUEpO1xuICAgICAgd3JpdGVyLmFkZDJEKCdsb3JhLkInLCBtb2RlbC5sb3JhV2VpZ2h0cy5sb3JhQik7XG4gICAgICB3cml0ZXIuYWRkMUQoJ2xvcmEuc2NhbGluZycsIFttb2RlbC5sb3JhV2VpZ2h0cy5zY2FsaW5nXSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHBhdHRlcm5zIGFzIGVtYmVkZGluZ3NcbiAgICBpZiAobW9kZWwucGF0dGVybnMgJiYgbW9kZWwucGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZW1iZWRkaW5nczogbnVtYmVyW11bXSA9IG1vZGVsLnBhdHRlcm5zLm1hcChwID0+IHAuZW1iZWRkaW5nKTtcbiAgICAgIHdyaXRlci5hZGQyRCgncGF0dGVybnMuZW1iZWRkaW5ncycsIGVtYmVkZGluZ3MpO1xuXG4gICAgICBjb25zdCBzdWNjZXNzUmF0ZXMgPSBtb2RlbC5wYXR0ZXJucy5tYXAocCA9PiBwLnN1Y2Nlc3NSYXRlKTtcbiAgICAgIHdyaXRlci5hZGQxRCgncGF0dGVybnMuc3VjY2Vzc19yYXRlcycsIHN1Y2Nlc3NSYXRlcyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJhdyB0ZW5zb3JzXG4gICAgaWYgKG1vZGVsLnRlbnNvcnMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIG1vZGVsLnRlbnNvcnMpIHtcbiAgICAgICAgd3JpdGVyLmFkZFRlbnNvcihuYW1lLCBkYXRhLCBbZGF0YS5sZW5ndGhdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd3JpdGVyLmJ1aWxkKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIEpTT04gZm9ybWF0XG4gICAqL1xuICB0b0pTT04obW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIG1ldGFkYXRhOiBtb2RlbC5tZXRhZGF0YSxcbiAgICAgIGxvcmFDb25maWc6IG1vZGVsLmxvcmFDb25maWcsXG4gICAgICBsb3JhV2VpZ2h0czogbW9kZWwubG9yYVdlaWdodHMsXG4gICAgICBwYXR0ZXJuczogbW9kZWwucGF0dGVybnMsXG4gICAgICBld2NTdGF0czogbW9kZWwuZXdjU3RhdHMsXG4gICAgfSwgbnVsbCwgMik7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIGNvbXBhY3QgYmluYXJ5IGZvcm1hdFxuICAgKi9cbiAgdG9CaW5hcnkobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTihtb2RlbCk7XG4gICAgY29uc3QganNvbkJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGpzb24pO1xuXG4gICAgLy8gU2ltcGxlIGZvcm1hdDogWzQtYnl0ZSBsZW5ndGhdW2pzb24gYnl0ZXNdXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNCArIGpzb25CeXRlcy5sZW5ndGgpO1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcik7XG4gICAgdmlldy5zZXRVaW50MzIoMCwganNvbkJ5dGVzLmxlbmd0aCwgdHJ1ZSk7XG4gICAgYnVmZmVyLnNldChqc29uQnl0ZXMsIDQpO1xuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgZm9yIEh1Z2dpbmdGYWNlIEh1YiBjb21wYXRpYmlsaXR5XG4gICAqL1xuICB0b0h1Z2dpbmdGYWNlKG1vZGVsOiBFeHBvcnRhYmxlTW9kZWwpOiB7XG4gICAgc2FmZXRlbnNvcnM6IFVpbnQ4QXJyYXk7XG4gICAgY29uZmlnOiBzdHJpbmc7XG4gICAgcmVhZG1lOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IHNhZmV0ZW5zb3JzID0gdGhpcy50b1NhZmVUZW5zb3JzKG1vZGVsKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIG1vZGVsX3R5cGU6ICdzb25hLWxvcmEnLFxuICAgICAgLi4ubW9kZWwubWV0YWRhdGEsXG4gICAgICBsb3JhX2NvbmZpZzogbW9kZWwubG9yYUNvbmZpZyxcbiAgICB9LCBudWxsLCAyKTtcblxuICAgIGNvbnN0IHJlYWRtZSA9IGAtLS1cbmxpY2Vuc2U6IG1pdFxudGFnczpcbi0gc29uYVxuLSBsb3JhXG4tIHJ1dmVjdG9yXG4tLS1cblxuIyAke21vZGVsLm1ldGFkYXRhLm5hbWV9XG5cbiR7bW9kZWwubWV0YWRhdGEuYXJjaGl0ZWN0dXJlfSBtb2RlbCB0cmFpbmVkIHdpdGggU09OQSBhZGFwdGl2ZSBsZWFybmluZy5cblxuIyMgVXNhZ2VcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIFNhZmVUZW5zb3JzUmVhZGVyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG5cbmNvbnN0IHJlYWRlciA9IG5ldyBTYWZlVGVuc29yc1JlYWRlcihidWZmZXIpO1xuY29uc3QgYWRhcHRlciA9IG5ldyBMb3JhQWRhcHRlcigpO1xuYWRhcHRlci5zZXRXZWlnaHRzKHtcbiAgbG9yYUE6IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5BJyksXG4gIGxvcmFCOiByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQicpLFxuICBzY2FsaW5nOiByZWFkZXIuZ2V0VGVuc29yMUQoJ2xvcmEuc2NhbGluZycpWzBdLFxufSk7XG5cXGBcXGBcXGBcblxuIyMgVHJhaW5pbmcgSW5mb1xuXG4tIFN0ZXBzOiAke21vZGVsLm1ldGFkYXRhLnRyYWluaW5nPy5zdGVwcyB8fCAnTi9BJ31cbi0gRmluYWwgTG9zczogJHttb2RlbC5tZXRhZGF0YS50cmFpbmluZz8ubG9zcyB8fCAnTi9BJ31cbmA7XG5cbiAgICByZXR1cm4geyBzYWZldGVuc29ycywgY29uZmlnLCByZWFkbWUgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1vZGVsIEltcG9ydGVyXG4gKlxuICogSW1wb3J0IG1vZGVscyBmcm9tIHZhcmlvdXMgZm9ybWF0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsSW1wb3J0ZXIge1xuICAvKipcbiAgICogSW1wb3J0IGZyb20gU2FmZVRlbnNvcnMgZm9ybWF0XG4gICAqL1xuICBmcm9tU2FmZVRlbnNvcnMoYnVmZmVyOiBVaW50OEFycmF5KTogUGFydGlhbDxFeHBvcnRhYmxlTW9kZWw+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgU2FmZVRlbnNvcnNSZWFkZXIoYnVmZmVyKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHJlYWRlci5nZXRNZXRhZGF0YSgpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4gPSB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8ICd1bmtub3duJyxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhcmNoaXRlY3R1cmU6IG1ldGFkYXRhLmFyY2hpdGVjdHVyZSB8fCAnc29uYS1sb3JhJyxcbiAgICAgICAgdHJhaW5pbmc6IG1ldGFkYXRhLnRyYWluaW5nX3N0ZXBzID8ge1xuICAgICAgICAgIHN0ZXBzOiBwYXJzZUludChtZXRhZGF0YS50cmFpbmluZ19zdGVwcyksXG4gICAgICAgICAgbG9zczogcGFyc2VGbG9hdChtZXRhZGF0YS50cmFpbmluZ19sb3NzIHx8ICcwJyksXG4gICAgICAgICAgbGVhcm5pbmdSYXRlOiAwLFxuICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gTG9hZCBMb1JBIHdlaWdodHNcbiAgICBjb25zdCBsb3JhQSA9IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5BJyk7XG4gICAgY29uc3QgbG9yYUIgPSByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQicpO1xuICAgIGNvbnN0IGxvcmFTY2FsaW5nID0gcmVhZGVyLmdldFRlbnNvcjFEKCdsb3JhLnNjYWxpbmcnKTtcblxuICAgIGlmIChsb3JhQSAmJiBsb3JhQiAmJiBsb3JhU2NhbGluZykge1xuICAgICAgcmVzdWx0LmxvcmFXZWlnaHRzID0ge1xuICAgICAgICBsb3JhQSxcbiAgICAgICAgbG9yYUIsXG4gICAgICAgIHNjYWxpbmc6IGxvcmFTY2FsaW5nWzBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHBhdHRlcm5zXG4gICAgY29uc3QgcGF0dGVybkVtYmVkZGluZ3MgPSByZWFkZXIuZ2V0VGVuc29yMkQoJ3BhdHRlcm5zLmVtYmVkZGluZ3MnKTtcbiAgICBjb25zdCBwYXR0ZXJuUmF0ZXMgPSByZWFkZXIuZ2V0VGVuc29yMUQoJ3BhdHRlcm5zLnN1Y2Nlc3NfcmF0ZXMnKTtcblxuICAgIGlmIChwYXR0ZXJuRW1iZWRkaW5ncyAmJiBwYXR0ZXJuUmF0ZXMpIHtcbiAgICAgIHJlc3VsdC5wYXR0ZXJucyA9IHBhdHRlcm5FbWJlZGRpbmdzLm1hcCgoZW1iZWRkaW5nLCBpKSA9PiAoe1xuICAgICAgICBpZDogYGltcG9ydGVkLSR7aX1gLFxuICAgICAgICB0eXBlOiAncXVlcnlfcmVzcG9uc2UnIGFzIGNvbnN0LFxuICAgICAgICBlbWJlZGRpbmcsXG4gICAgICAgIHN1Y2Nlc3NSYXRlOiBwYXR0ZXJuUmF0ZXNbaV0gfHwgMCxcbiAgICAgICAgdXNlQ291bnQ6IDAsXG4gICAgICAgIGxhc3RVc2VkOiBuZXcgRGF0ZSgpLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGZyb20gSlNPTiBmb3JtYXRcbiAgICovXG4gIGZyb21KU09OKGpzb246IHN0cmluZyk6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGZyb20gYmluYXJ5IGZvcm1hdFxuICAgKi9cbiAgZnJvbUJpbmFyeShidWZmZXI6IFVpbnQ4QXJyYXkpOiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4ge1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgIGNvbnN0IGpzb25CeXRlcyA9IGJ1ZmZlci5zbGljZSg0LCA0ICsgbGVuZ3RoKTtcbiAgICBjb25zdCBqc29uID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGpzb25CeXRlcyk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUpTT04oanNvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhc2V0IEV4cG9ydGVyXG4gKlxuICogRXhwb3J0IHRyYWluaW5nIGRhdGEgaW4gdmFyaW91cyBmb3JtYXRzLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YXNldEV4cG9ydGVyIHtcbiAgLyoqXG4gICAqIEV4cG9ydCB0byBKU09OTCBmb3JtYXQgKG9uZSBKU09OIHBlciBsaW5lKVxuICAgKi9cbiAgdG9KU09OTChkYXRhOiBBcnJheTx7IGlucHV0OiBFbWJlZGRpbmc7IG91dHB1dDogRW1iZWRkaW5nOyBxdWFsaXR5OiBudW1iZXIgfT4pOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhXG4gICAgICAubWFwKGl0ZW0gPT4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpbnB1dDogaXRlbS5pbnB1dCxcbiAgICAgICAgb3V0cHV0OiBpdGVtLm91dHB1dCxcbiAgICAgICAgcXVhbGl0eTogaXRlbS5xdWFsaXR5LFxuICAgICAgfSkpXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIENTViBmb3JtYXRcbiAgICovXG4gIHRvQ1NWKGRhdGE6IEFycmF5PHsgaW5wdXQ6IEVtYmVkZGluZzsgb3V0cHV0OiBFbWJlZGRpbmc7IHF1YWxpdHk6IG51bWJlciB9Pik6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gJ3F1YWxpdHksaW5wdXQsb3V0cHV0JztcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAoaXRlbSA9PlxuICAgICAgYCR7aXRlbS5xdWFsaXR5fSxcIiR7aXRlbS5pbnB1dC5qb2luKCcsJyl9XCIsXCIke2l0ZW0ub3V0cHV0LmpvaW4oJywnKX1cImBcbiAgICApO1xuICAgIHJldHVybiBbaGVhZGVyLCAuLi5yb3dzXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgcGF0dGVybnMgZm9yIHByZS10cmFpbmluZ1xuICAgKi9cbiAgdG9QcmV0cmFpbihwYXR0ZXJuczogTGVhcm5lZFBhdHRlcm5bXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdHRlcm5zXG4gICAgICAuZmlsdGVyKHAgPT4gcC5zdWNjZXNzUmF0ZSA+PSAwLjcpXG4gICAgICAubWFwKHAgPT4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBlbWJlZGRpbmc6IHAuZW1iZWRkaW5nLFxuICAgICAgICB0eXBlOiBwLnR5cGUsXG4gICAgICAgIHF1YWxpdHk6IHAuc3VjY2Vzc1JhdGUsXG4gICAgICB9KSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl19
|
|
422
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7OztBQWdDSDs7Ozs7R0FLRztBQUNILE1BQWEsaUJBQWlCO0lBQTlCO1FBQ1UsWUFBTyxHQUF5RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFFLGFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBMkdoRCxDQUFDO0lBekdDOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFrQixFQUFFLEtBQWU7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBWSxFQUFFLElBQWdCO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8s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WixPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVc7U0FDdkIsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXRDRCwwQ0FzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRXhwb3J0L1NlcmlhbGl6YXRpb24gZm9yIFNPTkEgTW9kZWxzXHJcbiAqXHJcbiAqIFN1cHBvcnQgZm9yIFNhZmVUZW5zb3JzLCBKU09OLCBhbmQgb3RoZXIgZXhwb3J0IGZvcm1hdHMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgTW9kZWxFeHBvcnRlciwgU2FmZVRlbnNvcnNXcml0ZXIgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogLy8gRXhwb3J0IG1vZGVsIHRvIFNhZmVUZW5zb3JzIGZvcm1hdFxyXG4gKiBjb25zdCBleHBvcnRlciA9IG5ldyBNb2RlbEV4cG9ydGVyKCk7XHJcbiAqIGNvbnN0IGJ1ZmZlciA9IGV4cG9ydGVyLnRvU2FmZVRlbnNvcnMoe1xyXG4gKiAgIHdlaWdodHM6IGxvcmFBZGFwdGVyLmdldFdlaWdodHMoKSxcclxuICogICBjb25maWc6IGxvcmFBZGFwdGVyLmdldENvbmZpZygpLFxyXG4gKiB9KTtcclxuICpcclxuICogLy8gU2F2ZSB0byBmaWxlXHJcbiAqIGZzLndyaXRlRmlsZVN5bmMoJ21vZGVsLnNhZmV0ZW5zb3JzJywgYnVmZmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTG9SQUNvbmZpZywgTGVhcm5lZFBhdHRlcm4sIEV3Y1N0YXRzLCBFbWJlZGRpbmcsIE1vZGVsTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgTG9yYVdlaWdodHMgfSBmcm9tICcuL2xvcmEnO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9ydGFibGUgbW9kZWwgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRhYmxlTW9kZWwge1xyXG4gIC8qKiBNb2RlbCBtZXRhZGF0YSAqL1xyXG4gIG1ldGFkYXRhOiBNb2RlbE1ldGFkYXRhO1xyXG4gIC8qKiBMb1JBIHdlaWdodHMgKGlmIGFwcGxpY2FibGUpICovXHJcbiAgbG9yYVdlaWdodHM/OiBMb3JhV2VpZ2h0cztcclxuICAvKiogTG9SQSBjb25maWcgKi9cclxuICBsb3JhQ29uZmlnPzogTG9SQUNvbmZpZztcclxuICAvKiogTGVhcm5lZCBwYXR0ZXJucyAqL1xyXG4gIHBhdHRlcm5zPzogTGVhcm5lZFBhdHRlcm5bXTtcclxuICAvKiogRVdDIHN0YXRpc3RpY3MgKi9cclxuICBld2NTdGF0cz86IEV3Y1N0YXRzO1xyXG4gIC8qKiBSYXcgdGVuc29ycyAqL1xyXG4gIHRlbnNvcnM/OiBNYXA8c3RyaW5nLCBGbG9hdDMyQXJyYXk+O1xyXG59XHJcblxyXG4vKipcclxuICogU2FmZVRlbnNvcnMgaGVhZGVyIGVudHJ5XHJcbiAqL1xyXG5pbnRlcmZhY2UgU2FmZVRlbnNvcnNIZWFkZXIge1xyXG4gIGR0eXBlOiBzdHJpbmc7XHJcbiAgc2hhcGU6IG51bWJlcltdO1xyXG4gIGRhdGFfb2Zmc2V0czogW251bWJlciwgbnVtYmVyXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhZmVUZW5zb3JzIFdyaXRlclxyXG4gKlxyXG4gKiBXcml0ZXMgdGVuc29ycyBpbiBTYWZlVGVuc29ycyBmb3JtYXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aFxyXG4gKiBIdWdnaW5nRmFjZSBlY29zeXN0ZW0uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2FmZVRlbnNvcnNXcml0ZXIge1xyXG4gIHByaXZhdGUgdGVuc29yczogTWFwPHN0cmluZywgeyBkYXRhOiBGbG9hdDMyQXJyYXk7IHNoYXBlOiBudW1iZXJbXSB9PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIHRlbnNvclxyXG4gICAqL1xyXG4gIGFkZFRlbnNvcihuYW1lOiBzdHJpbmcsIGRhdGE6IEZsb2F0MzJBcnJheSwgc2hhcGU6IG51bWJlcltdKTogdGhpcyB7XHJcbiAgICB0aGlzLnRlbnNvcnMuc2V0KG5hbWUsIHsgZGF0YSwgc2hhcGUgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCAyRCB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXlcclxuICAgKi9cclxuICBhZGQyRChuYW1lOiBzdHJpbmcsIGRhdGE6IG51bWJlcltdW10pOiB0aGlzIHtcclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLmxlbmd0aDtcclxuICAgIGNvbnN0IGNvbHMgPSBkYXRhWzBdPy5sZW5ndGggfHwgMDtcclxuICAgIGNvbnN0IGZsYXQgPSBuZXcgRmxvYXQzMkFycmF5KHJvd3MgKiBjb2xzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xyXG4gICAgICAgIGZsYXRbaSAqIGNvbHMgKyBqXSA9IGRhdGFbaV1bal07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5hZGRUZW5zb3IobmFtZSwgZmxhdCwgW3Jvd3MsIGNvbHNdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCAxRCB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXlcclxuICAgKi9cclxuICBhZGQxRChuYW1lOiBzdHJpbmcsIGRhdGE6IG51bWJlcltdKTogdGhpcyB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRUZW5zb3IobmFtZSwgbmV3IEZsb2F0MzJBcnJheShkYXRhKSwgW2RhdGEubGVuZ3RoXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgbWV0YWRhdGFcclxuICAgKi9cclxuICBhZGRNZXRhZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXMge1xyXG4gICAgdGhpcy5tZXRhZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIFNhZmVUZW5zb3JzIGJ1ZmZlclxyXG4gICAqL1xyXG4gIGJ1aWxkKCk6IFVpbnQ4QXJyYXkge1xyXG4gICAgLy8gQnVpbGQgaGVhZGVyXHJcbiAgICBjb25zdCBoZWFkZXI6IFJlY29yZDxzdHJpbmcsIFNhZmVUZW5zb3JzSGVhZGVyIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcclxuICAgIGxldCBvZmZzZXQgPSAwO1xyXG5cclxuICAgIGNvbnN0IHRlbnNvckRhdGE6IFVpbnQ4QXJyYXlbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgW25hbWUsIHsgZGF0YSwgc2hhcGUgfV0gb2YgdGhpcy50ZW5zb3JzKSB7XHJcbiAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xyXG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xyXG5cclxuICAgICAgaGVhZGVyW25hbWVdID0ge1xyXG4gICAgICAgIGR0eXBlOiAnRjMyJyxcclxuICAgICAgICBzaGFwZSxcclxuICAgICAgICBkYXRhX29mZnNldHM6IFtvZmZzZXQsIG9mZnNldCArIGRhdGFMZW5ndGhdLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGVuc29yRGF0YS5wdXNoKGJ5dGVzKTtcclxuICAgICAgb2Zmc2V0ICs9IGRhdGFMZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIG1ldGFkYXRhXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xyXG4gICAgICBoZWFkZXJbJ19fbWV0YWRhdGFfXyddID0gdGhpcy5tZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbmNvZGUgaGVhZGVyXHJcbiAgICBjb25zdCBoZWFkZXJKc29uID0gSlNPTi5zdHJpbmdpZnkoaGVhZGVyKTtcclxuICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGhlYWRlckpzb24pO1xyXG5cclxuICAgIC8vIFBhZCBoZWFkZXIgdG8gOC1ieXRlIGFsaWdubWVudFxyXG4gICAgY29uc3QgaGVhZGVyUGFkZGluZyA9ICg4IC0gKGhlYWRlckJ5dGVzLmxlbmd0aCAlIDgpKSAlIDg7XHJcbiAgICBjb25zdCBwYWRkZWRIZWFkZXJMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGggKyBoZWFkZXJQYWRkaW5nO1xyXG5cclxuICAgIC8vIEJ1aWxkIGZpbmFsIGJ1ZmZlclxyXG4gICAgY29uc3QgdG90YWxMZW5ndGggPSA4ICsgcGFkZGVkSGVhZGVyTGVuZ3RoICsgb2Zmc2V0O1xyXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKTtcclxuXHJcbiAgICAvLyBXcml0ZSBoZWFkZXIgbGVuZ3RoICg4IGJ5dGVzLCBsaXR0bGUtZW5kaWFuKVxyXG4gICAgdmlldy5zZXRCaWdVaW50NjQoMCwgQmlnSW50KHBhZGRlZEhlYWRlckxlbmd0aCksIHRydWUpO1xyXG5cclxuICAgIC8vIFdyaXRlIGhlYWRlclxyXG4gICAgYnVmZmVyLnNldChoZWFkZXJCeXRlcywgOCk7XHJcblxyXG4gICAgLy8gV3JpdGUgdGVuc29yIGRhdGFcclxuICAgIGxldCBkYXRhT2Zmc2V0ID0gOCArIHBhZGRlZEhlYWRlckxlbmd0aDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiB0ZW5zb3JEYXRhKSB7XHJcbiAgICAgIGJ1ZmZlci5zZXQoZGF0YSwgZGF0YU9mZnNldCk7XHJcbiAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCB0ZW5zb3JzIGFuZCBtZXRhZGF0YVxyXG4gICAqL1xyXG4gIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW5zb3JzLmNsZWFyKCk7XHJcbiAgICB0aGlzLm1ldGFkYXRhID0ge307XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2FmZVRlbnNvcnMgUmVhZGVyXHJcbiAqXHJcbiAqIFJlYWRzIHRlbnNvcnMgZnJvbSBTYWZlVGVuc29ycyBmb3JtYXQuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2FmZVRlbnNvcnNSZWFkZXIge1xyXG4gIHByaXZhdGUgYnVmZmVyOiBVaW50OEFycmF5O1xyXG4gIHByaXZhdGUgaGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBTYWZlVGVuc29yc0hlYWRlciB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XHJcbiAgcHJpdmF0ZSBkYXRhT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihidWZmZXI6IFVpbnQ4QXJyYXkpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xyXG4gICAgdGhpcy5wYXJzZUhlYWRlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRlbnNvciBuYW1lc1xyXG4gICAqL1xyXG4gIGdldFRlbnNvck5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcikuZmlsdGVyKGsgPT4gayAhPT0gJ19fbWV0YWRhdGFfXycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRlbnNvciBieSBuYW1lXHJcbiAgICovXHJcbiAgZ2V0VGVuc29yKG5hbWU6IHN0cmluZyk6IHsgZGF0YTogRmxvYXQzMkFycmF5OyBzaGFwZTogbnVtYmVyW10gfSB8IG51bGwge1xyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmhlYWRlcltuYW1lXTtcclxuICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiAnZHR5cGUnIGluIGVudHJ5ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ZW5zb3JIZWFkZXIgPSBlbnRyeSBhcyBTYWZlVGVuc29yc0hlYWRlcjtcclxuICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRlbnNvckhlYWRlci5kYXRhX29mZnNldHM7XHJcbiAgICBjb25zdCBieXRlcyA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuZGF0YU9mZnNldCArIHN0YXJ0LCB0aGlzLmRhdGFPZmZzZXQgKyBlbmQpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRhdGE6IG5ldyBGbG9hdDMyQXJyYXkoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBieXRlcy5sZW5ndGggLyA0KSxcclxuICAgICAgc2hhcGU6IHRlbnNvckhlYWRlci5zaGFwZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGVuc29yIGFzIDJEIGFycmF5XHJcbiAgICovXHJcbiAgZ2V0VGVuc29yMkQobmFtZTogc3RyaW5nKTogbnVtYmVyW11bXSB8IG51bGwge1xyXG4gICAgY29uc3QgdGVuc29yID0gdGhpcy5nZXRUZW5zb3IobmFtZSk7XHJcbiAgICBpZiAoIXRlbnNvciB8fCB0ZW5zb3Iuc2hhcGUubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBbcm93cywgY29sc10gPSB0ZW5zb3Iuc2hhcGU7XHJcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlcltdW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG4gICAgICBjb25zdCByb3c6IG51bWJlcltdID0gW107XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgICAgICAgcm93LnB1c2godGVuc29yLmRhdGFbaSAqIGNvbHMgKyBqXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0LnB1c2gocm93KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRlbnNvciBhcyAxRCBhcnJheVxyXG4gICAqL1xyXG4gIGdldFRlbnNvcjFEKG5hbWU6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCB7XHJcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLmdldFRlbnNvcihuYW1lKTtcclxuICAgIGlmICghdGVuc29yKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHRlbnNvci5kYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtZXRhZGF0YVxyXG4gICAqL1xyXG4gIGdldE1ldGFkYXRhKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgY29uc3QgbWV0YSA9IHRoaXMuaGVhZGVyWydfX21ldGFkYXRhX18nXTtcclxuICAgIGlmICghbWV0YSB8fCB0eXBlb2YgbWV0YSAhPT0gJ29iamVjdCcpIHJldHVybiB7fTtcclxuICAgIHJldHVybiBtZXRhIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlSGVhZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlci5idWZmZXIsIHRoaXMuYnVmZmVyLmJ5dGVPZmZzZXQpO1xyXG4gICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gTnVtYmVyKHZpZXcuZ2V0QmlnVWludDY0KDAsIHRydWUpKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJCeXRlcyA9IHRoaXMuYnVmZmVyLnNsaWNlKDgsIDggKyBoZWFkZXJMZW5ndGgpO1xyXG4gICAgY29uc3QgaGVhZGVySnNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShoZWFkZXJCeXRlcyk7XHJcbiAgICB0aGlzLmhlYWRlciA9IEpTT04ucGFyc2UoaGVhZGVySnNvbi5yZXBsYWNlKC9cXDArJC8sICcnKSk7IC8vIFJlbW92ZSBwYWRkaW5nIG51bGxzXHJcblxyXG4gICAgdGhpcy5kYXRhT2Zmc2V0ID0gOCArIGhlYWRlckxlbmd0aDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb2RlbCBFeHBvcnRlclxyXG4gKlxyXG4gKiBVbmlmaWVkIGV4cG9ydCBpbnRlcmZhY2UgZm9yIFNPTkEgbW9kZWxzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vZGVsRXhwb3J0ZXIge1xyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCB0byBTYWZlVGVuc29ycyBmb3JtYXRcclxuICAgKi9cclxuICB0b1NhZmVUZW5zb3JzKG1vZGVsOiBFeHBvcnRhYmxlTW9kZWwpOiBVaW50OEFycmF5IHtcclxuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBTYWZlVGVuc29yc1dyaXRlcigpO1xyXG5cclxuICAgIC8vIEFkZCBtZXRhZGF0YVxyXG4gICAgd3JpdGVyLmFkZE1ldGFkYXRhKCduYW1lJywgbW9kZWwubWV0YWRhdGEubmFtZSk7XHJcbiAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3ZlcnNpb24nLCBtb2RlbC5tZXRhZGF0YS52ZXJzaW9uKTtcclxuICAgIHdyaXRlci5hZGRNZXRhZGF0YSgnYXJjaGl0ZWN0dXJlJywgbW9kZWwubWV0YWRhdGEuYXJjaGl0ZWN0dXJlKTtcclxuXHJcbiAgICBpZiAobW9kZWwubWV0YWRhdGEudHJhaW5pbmcpIHtcclxuICAgICAgd3JpdGVyLmFkZE1ldGFkYXRhKCd0cmFpbmluZ19zdGVwcycsIFN0cmluZyhtb2RlbC5tZXRhZGF0YS50cmFpbmluZy5zdGVwcykpO1xyXG4gICAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3RyYWluaW5nX2xvc3MnLCBTdHJpbmcobW9kZWwubWV0YWRhdGEudHJhaW5pbmcubG9zcykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBMb1JBIHdlaWdodHNcclxuICAgIGlmIChtb2RlbC5sb3JhV2VpZ2h0cykge1xyXG4gICAgICB3cml0ZXIuYWRkMkQoJ2xvcmEuQScsIG1vZGVsLmxvcmFXZWlnaHRzLmxvcmFBKTtcclxuICAgICAgd3JpdGVyLmFkZDJEKCdsb3JhLkInLCBtb2RlbC5sb3JhV2VpZ2h0cy5sb3JhQik7XHJcbiAgICAgIHdyaXRlci5hZGQxRCgnbG9yYS5zY2FsaW5nJywgW21vZGVsLmxvcmFXZWlnaHRzLnNjYWxpbmddKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgcGF0dGVybnMgYXMgZW1iZWRkaW5nc1xyXG4gICAgaWYgKG1vZGVsLnBhdHRlcm5zICYmIG1vZGVsLnBhdHRlcm5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZW1iZWRkaW5nczogbnVtYmVyW11bXSA9IG1vZGVsLnBhdHRlcm5zLm1hcChwID0+IHAuZW1iZWRkaW5nKTtcclxuICAgICAgd3JpdGVyLmFkZDJEKCdwYXR0ZXJucy5lbWJlZGRpbmdzJywgZW1iZWRkaW5ncyk7XHJcblxyXG4gICAgICBjb25zdCBzdWNjZXNzUmF0ZXMgPSBtb2RlbC5wYXR0ZXJucy5tYXAocCA9PiBwLnN1Y2Nlc3NSYXRlKTtcclxuICAgICAgd3JpdGVyLmFkZDFEKCdwYXR0ZXJucy5zdWNjZXNzX3JhdGVzJywgc3VjY2Vzc1JhdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgcmF3IHRlbnNvcnNcclxuICAgIGlmIChtb2RlbC50ZW5zb3JzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIG1vZGVsLnRlbnNvcnMpIHtcclxuICAgICAgICB3cml0ZXIuYWRkVGVuc29yKG5hbWUsIGRhdGEsIFtkYXRhLmxlbmd0aF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyaXRlci5idWlsZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIEpTT04gZm9ybWF0XHJcbiAgICovXHJcbiAgdG9KU09OKG1vZGVsOiBFeHBvcnRhYmxlTW9kZWwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgbWV0YWRhdGE6IG1vZGVsLm1ldGFkYXRhLFxyXG4gICAgICBsb3JhQ29uZmlnOiBtb2RlbC5sb3JhQ29uZmlnLFxyXG4gICAgICBsb3JhV2VpZ2h0czogbW9kZWwubG9yYVdlaWdodHMsXHJcbiAgICAgIHBhdHRlcm5zOiBtb2RlbC5wYXR0ZXJucyxcclxuICAgICAgZXdjU3RhdHM6IG1vZGVsLmV3Y1N0YXRzLFxyXG4gICAgfSwgbnVsbCwgMik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gY29tcGFjdCBiaW5hcnkgZm9ybWF0XHJcbiAgICovXHJcbiAgdG9CaW5hcnkobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IFVpbnQ4QXJyYXkge1xyXG4gICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG1vZGVsKTtcclxuICAgIGNvbnN0IGpzb25CeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShqc29uKTtcclxuXHJcbiAgICAvLyBTaW1wbGUgZm9ybWF0OiBbNC1ieXRlIGxlbmd0aF1banNvbiBieXRlc11cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQgKyBqc29uQnl0ZXMubGVuZ3RoKTtcclxuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcik7XHJcbiAgICB2aWV3LnNldFVpbnQzMigwLCBqc29uQnl0ZXMubGVuZ3RoLCB0cnVlKTtcclxuICAgIGJ1ZmZlci5zZXQoanNvbkJ5dGVzLCA0KTtcclxuXHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IGZvciBIdWdnaW5nRmFjZSBIdWIgY29tcGF0aWJpbGl0eVxyXG4gICAqL1xyXG4gIHRvSHVnZ2luZ0ZhY2UobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IHtcclxuICAgIHNhZmV0ZW5zb3JzOiBVaW50OEFycmF5O1xyXG4gICAgY29uZmlnOiBzdHJpbmc7XHJcbiAgICByZWFkbWU6IHN0cmluZztcclxuICB9IHtcclxuICAgIGNvbnN0IHNhZmV0ZW5zb3JzID0gdGhpcy50b1NhZmVUZW5zb3JzKG1vZGVsKTtcclxuXHJcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgIG1vZGVsX3R5cGU6ICdzb25hLWxvcmEnLFxyXG4gICAgICAuLi5tb2RlbC5tZXRhZGF0YSxcclxuICAgICAgbG9yYV9jb25maWc6IG1vZGVsLmxvcmFDb25maWcsXHJcbiAgICB9LCBudWxsLCAyKTtcclxuXHJcbiAgICBjb25zdCByZWFkbWUgPSBgLS0tXHJcbmxpY2Vuc2U6IG1pdFxyXG50YWdzOlxyXG4tIHNvbmFcclxuLSBsb3JhXHJcbi0gcnV2ZWN0b3JcclxuLS0tXHJcblxyXG4jICR7bW9kZWwubWV0YWRhdGEubmFtZX1cclxuXHJcbiR7bW9kZWwubWV0YWRhdGEuYXJjaGl0ZWN0dXJlfSBtb2RlbCB0cmFpbmVkIHdpdGggU09OQSBhZGFwdGl2ZSBsZWFybmluZy5cclxuXHJcbiMjIFVzYWdlXHJcblxyXG5cXGBcXGBcXGB0eXBlc2NyaXB0XHJcbmltcG9ydCB7IExvcmFBZGFwdGVyLCBTYWZlVGVuc29yc1JlYWRlciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xyXG5cclxuY29uc3QgcmVhZGVyID0gbmV3IFNhZmVUZW5zb3JzUmVhZGVyKGJ1ZmZlcik7XHJcbmNvbnN0IGFkYXB0ZXIgPSBuZXcgTG9yYUFkYXB0ZXIoKTtcclxuYWRhcHRlci5zZXRXZWlnaHRzKHtcclxuICBsb3JhQTogcmVhZGVyLmdldFRlbnNvcjJEKCdsb3JhLkEnKSxcclxuICBsb3JhQjogcmVhZGVyLmdldFRlbnNvcjJEKCdsb3JhLkInKSxcclxuICBzY2FsaW5nOiByZWFkZXIuZ2V0VGVuc29yMUQoJ2xvcmEuc2NhbGluZycpWzBdLFxyXG59KTtcclxuXFxgXFxgXFxgXHJcblxyXG4jIyBUcmFpbmluZyBJbmZvXHJcblxyXG4tIFN0ZXBzOiAke21vZGVsLm1ldGFkYXRhLnRyYWluaW5nPy5zdGVwcyB8fCAnTi9BJ31cclxuLSBGaW5hbCBMb3NzOiAke21vZGVsLm1ldGFkYXRhLnRyYWluaW5nPy5sb3NzIHx8ICdOL0EnfVxyXG5gO1xyXG5cclxuICAgIHJldHVybiB7IHNhZmV0ZW5zb3JzLCBjb25maWcsIHJlYWRtZSB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE1vZGVsIEltcG9ydGVyXHJcbiAqXHJcbiAqIEltcG9ydCBtb2RlbHMgZnJvbSB2YXJpb3VzIGZvcm1hdHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTW9kZWxJbXBvcnRlciB7XHJcbiAgLyoqXHJcbiAgICogSW1wb3J0IGZyb20gU2FmZVRlbnNvcnMgZm9ybWF0XHJcbiAgICovXHJcbiAgZnJvbVNhZmVUZW5zb3JzKGJ1ZmZlcjogVWludDhBcnJheSk6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgU2FmZVRlbnNvcnNSZWFkZXIoYnVmZmVyKTtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gcmVhZGVyLmdldE1ldGFkYXRhKCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4gPSB7XHJcbiAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSB8fCAndW5rbm93bicsXHJcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxyXG4gICAgICAgIGFyY2hpdGVjdHVyZTogbWV0YWRhdGEuYXJjaGl0ZWN0dXJlIHx8ICdzb25hLWxvcmEnLFxyXG4gICAgICAgIHRyYWluaW5nOiBtZXRhZGF0YS50cmFpbmluZ19zdGVwcyA/IHtcclxuICAgICAgICAgIHN0ZXBzOiBwYXJzZUludChtZXRhZGF0YS50cmFpbmluZ19zdGVwcyksXHJcbiAgICAgICAgICBsb3NzOiBwYXJzZUZsb2F0KG1ldGFkYXRhLnRyYWluaW5nX2xvc3MgfHwgJzAnKSxcclxuICAgICAgICAgIGxlYXJuaW5nUmF0ZTogMCxcclxuICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBMb2FkIExvUkEgd2VpZ2h0c1xyXG4gICAgY29uc3QgbG9yYUEgPSByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQScpO1xyXG4gICAgY29uc3QgbG9yYUIgPSByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQicpO1xyXG4gICAgY29uc3QgbG9yYVNjYWxpbmcgPSByZWFkZXIuZ2V0VGVuc29yMUQoJ2xvcmEuc2NhbGluZycpO1xyXG5cclxuICAgIGlmIChsb3JhQSAmJiBsb3JhQiAmJiBsb3JhU2NhbGluZykge1xyXG4gICAgICByZXN1bHQubG9yYVdlaWdodHMgPSB7XHJcbiAgICAgICAgbG9yYUEsXHJcbiAgICAgICAgbG9yYUIsXHJcbiAgICAgICAgc2NhbGluZzogbG9yYVNjYWxpbmdbMF0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTG9hZCBwYXR0ZXJuc1xyXG4gICAgY29uc3QgcGF0dGVybkVtYmVkZGluZ3MgPSByZWFkZXIuZ2V0VGVuc29yMkQoJ3BhdHRlcm5zLmVtYmVkZGluZ3MnKTtcclxuICAgIGNvbnN0IHBhdHRlcm5SYXRlcyA9IHJlYWRlci5nZXRUZW5zb3IxRCgncGF0dGVybnMuc3VjY2Vzc19yYXRlcycpO1xyXG5cclxuICAgIGlmIChwYXR0ZXJuRW1iZWRkaW5ncyAmJiBwYXR0ZXJuUmF0ZXMpIHtcclxuICAgICAgcmVzdWx0LnBhdHRlcm5zID0gcGF0dGVybkVtYmVkZGluZ3MubWFwKChlbWJlZGRpbmcsIGkpID0+ICh7XHJcbiAgICAgICAgaWQ6IGBpbXBvcnRlZC0ke2l9YCxcclxuICAgICAgICB0eXBlOiAncXVlcnlfcmVzcG9uc2UnIGFzIGNvbnN0LFxyXG4gICAgICAgIGVtYmVkZGluZyxcclxuICAgICAgICBzdWNjZXNzUmF0ZTogcGF0dGVyblJhdGVzW2ldIHx8IDAsXHJcbiAgICAgICAgdXNlQ291bnQ6IDAsXHJcbiAgICAgICAgbGFzdFVzZWQ6IG5ldyBEYXRlKCksXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3J0IGZyb20gSlNPTiBmb3JtYXRcclxuICAgKi9cclxuICBmcm9tSlNPTihqc29uOiBzdHJpbmcpOiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4ge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvcnQgZnJvbSBiaW5hcnkgZm9ybWF0XHJcbiAgICovXHJcbiAgZnJvbUJpbmFyeShidWZmZXI6IFVpbnQ4QXJyYXkpOiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4ge1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCk7XHJcbiAgICBjb25zdCBsZW5ndGggPSB2aWV3LmdldFVpbnQzMigwLCB0cnVlKTtcclxuICAgIGNvbnN0IGpzb25CeXRlcyA9IGJ1ZmZlci5zbGljZSg0LCA0ICsgbGVuZ3RoKTtcclxuICAgIGNvbnN0IGpzb24gPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoanNvbkJ5dGVzKTtcclxuICAgIHJldHVybiB0aGlzLmZyb21KU09OKGpzb24pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERhdGFzZXQgRXhwb3J0ZXJcclxuICpcclxuICogRXhwb3J0IHRyYWluaW5nIGRhdGEgaW4gdmFyaW91cyBmb3JtYXRzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFzZXRFeHBvcnRlciB7XHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIEpTT05MIGZvcm1hdCAob25lIEpTT04gcGVyIGxpbmUpXHJcbiAgICovXHJcbiAgdG9KU09OTChkYXRhOiBBcnJheTx7IGlucHV0OiBFbWJlZGRpbmc7IG91dHB1dDogRW1iZWRkaW5nOyBxdWFsaXR5OiBudW1iZXIgfT4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGRhdGFcclxuICAgICAgLm1hcChpdGVtID0+IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICBpbnB1dDogaXRlbS5pbnB1dCxcclxuICAgICAgICBvdXRwdXQ6IGl0ZW0ub3V0cHV0LFxyXG4gICAgICAgIHF1YWxpdHk6IGl0ZW0ucXVhbGl0eSxcclxuICAgICAgfSkpXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCB0byBDU1YgZm9ybWF0XHJcbiAgICovXHJcbiAgdG9DU1YoZGF0YTogQXJyYXk8eyBpbnB1dDogRW1iZWRkaW5nOyBvdXRwdXQ6IEVtYmVkZGluZzsgcXVhbGl0eTogbnVtYmVyIH0+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGhlYWRlciA9ICdxdWFsaXR5LGlucHV0LG91dHB1dCc7XHJcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAoaXRlbSA9PlxyXG4gICAgICBgJHtpdGVtLnF1YWxpdHl9LFwiJHtpdGVtLmlucHV0LmpvaW4oJywnKX1cIixcIiR7aXRlbS5vdXRwdXQuam9pbignLCcpfVwiYFxyXG4gICAgKTtcclxuICAgIHJldHVybiBbaGVhZGVyLCAuLi5yb3dzXS5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBwYXR0ZXJucyBmb3IgcHJlLXRyYWluaW5nXHJcbiAgICovXHJcbiAgdG9QcmV0cmFpbihwYXR0ZXJuczogTGVhcm5lZFBhdHRlcm5bXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0dGVybnNcclxuICAgICAgLmZpbHRlcihwID0+IHAuc3VjY2Vzc1JhdGUgPj0gMC43KVxyXG4gICAgICAubWFwKHAgPT4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIGVtYmVkZGluZzogcC5lbWJlZGRpbmcsXHJcbiAgICAgICAgdHlwZTogcC50eXBlLFxyXG4gICAgICAgIHF1YWxpdHk6IHAuc3VjY2Vzc1JhdGUsXHJcbiAgICAgIH0pKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/dist/cjs/federated.js
CHANGED
|
@@ -522,4 +522,4 @@ class FederatedCoordinator {
|
|
|
522
522
|
}
|
|
523
523
|
}
|
|
524
524
|
exports.FederatedCoordinator = FederatedCoordinator;
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVkZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZlZGVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFjSCxpQ0FBdUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFNLHdCQUF3QixHQUE4QjtJQUMxRCxTQUFTLEVBQUUsR0FBRztJQUNkLFlBQVksRUFBRSxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFlBQVksRUFBRSxDQUFDO0lBQ2Ysa0JBQWtCLEVBQUUsR0FBRztJQUN2QixlQUFlLEVBQUUsRUFBRTtJQUNuQixTQUFTLEVBQUUsSUFBSTtJQUNmLGdCQUFnQixFQUFFLEdBQUc7Q0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSxjQUFjO0lBU3pCLFlBQVksT0FBZSxFQUFFLE1BQXdCO1FBTjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxvQkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2FBQzVFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDUCxH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LENBQUMsSUFBSSxPQUFPLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFTRCxvREEwU0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZlZGVyYXRlZCBMZWFybmluZyBmb3IgU09OQVxuICpcbiAqIEVuYWJsZSBkaXN0cmlidXRlZCBsZWFybmluZyBhY3Jvc3MgZXBoZW1lcmFsIGFnZW50cyB0aGF0IHNoYXJlXG4gKiB0cmFqZWN0b3JpZXMgd2l0aCBhIGNlbnRyYWwgY29vcmRpbmF0b3IuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICogYGBgXG4gKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiDilIIgIEFnZW50IEEgICAg4pSCICAgICDilIIgIEFnZW50IEIgICAg4pSCICAgICDilIIgIEFnZW50IEMgICAg4pSCXG4gKiDilIIgKGVwaGVtZXJhbCkg4pSCICAgICDilIIgKGVwaGVtZXJhbCkg4pSCICAgICDilIIgKGVwaGVtZXJhbCkg4pSCXG4gKiDilJTilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilJggICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKiAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICDilIIgICAgZXhwb3J0KCkgICAgICAg4pSCICAgIGV4cG9ydCgpICAgICAgIOKUgiAgICBleHBvcnQoKVxuICogICAgICAgIOKWvCAgICAgICAgICAgICAgICAgICDilrwgICAgICAgICAgICAgICAgICAg4pa8XG4gKiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICogICDilIIgICAgICAgICAgICBGZWRlcmF0ZWQgQ29vcmRpbmF0b3IgICAgICAgICAgICAgICDilIJcbiAqICAg4pSCICAgICAgICAgKHBlcnNpc3RlbnQsIGxhcmdlIGNhcGFjaXR5KSAgICAgICAgICAg4pSCXG4gKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEVwaGVtZXJhbEFnZW50LCBGZWRlcmF0ZWRDb29yZGluYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIC8vIENyZWF0ZSBjb29yZGluYXRvciAocGVyc2lzdGVudClcbiAqIGNvbnN0IGNvb3JkaW5hdG9yID0gbmV3IEZlZGVyYXRlZENvb3JkaW5hdG9yKCdjb29yZC0xJywgeyBoaWRkZW5EaW06IDI1NiB9KTtcbiAqXG4gKiAvLyBDcmVhdGUgZXBoZW1lcmFsIGFnZW50XG4gKiBjb25zdCBhZ2VudCA9IG5ldyBFcGhlbWVyYWxBZ2VudCgnYWdlbnQtMScsIHsgaGlkZGVuRGltOiAyNTYgfSk7XG4gKlxuICogLy8gQWdlbnQgcHJvY2Vzc2VzIHRhc2tzXG4gKiBhZ2VudC5wcm9jZXNzVGFzayhbMC4xLCAwLjIsIC4uLl0sIDAuODUpO1xuICogYWdlbnQucHJvY2Vzc1Rhc2soWzAuMywgMC40LCAuLi5dLCAwLjkyKTtcbiAqXG4gKiAvLyBFeHBvcnQgYW5kIGFnZ3JlZ2F0ZSBiZWZvcmUgYWdlbnQgdGVybWluYXRlc1xuICogY29uc3QgZXhwb3J0RGF0YSA9IGFnZW50LmV4cG9ydFN0YXRlKCk7XG4gKiBjb25zdCByZXN1bHQgPSBjb29yZGluYXRvci5hZ2dyZWdhdGUoZXhwb3J0RGF0YSk7XG4gKlxuICogY29uc29sZS5sb2coYEFjY2VwdGVkOiAke3Jlc3VsdC50cmFqZWN0b3JpZXNBY2NlcHRlZH1gKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7XG4gIEVtYmVkZGluZyxcbiAgTGVhcm5lZFBhdHRlcm4sXG4gIFBhdHRlcm5UeXBlLFxuICBGZWRlcmF0ZWRDb25maWcsXG4gIFRyYWplY3RvcnlFeHBvcnQsXG4gIEFnZW50RXhwb3J0U3RhdHMsXG4gIEFnZW50RXhwb3J0LFxuICBBZ2VudENvbnRyaWJ1dGlvbixcbiAgQWdncmVnYXRpb25SZXN1bHQsXG4gIENvb3JkaW5hdG9yU3RhdHMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUmVhc29uaW5nQmFuayB9IGZyb20gJy4vc29uYSc7XG5cbi8qKlxuICogRGVmYXVsdCBmZWRlcmF0ZWQgY29uZmlnXG4gKi9cbmNvbnN0IERFRkFVTFRfRkVERVJBVEVEX0NPTkZJRzogUmVxdWlyZWQ8RmVkZXJhdGVkQ29uZmlnPiA9IHtcbiAgaGlkZGVuRGltOiAyNTYsXG4gIGVtYmVkZGluZ0RpbTogMjU2LFxuICBtaWNyb0xvcmFSYW5rOiAyLFxuICBiYXNlTG9yYVJhbms6IDgsXG4gIHRyYWplY3RvcnlDYXBhY2l0eTogNTAwLFxuICBwYXR0ZXJuQ2x1c3RlcnM6IDI1LFxuICBld2NMYW1iZGE6IDIwMDAsXG4gIHF1YWxpdHlUaHJlc2hvbGQ6IDAuNCxcbn07XG5cbi8qKlxuICogRXBoZW1lcmFsIEFnZW50IGZvciBmZWRlcmF0ZWQgbGVhcm5pbmdcbiAqXG4gKiBDb2xsZWN0cyB0cmFqZWN0b3JpZXMgZHVyaW5nIGl0cyBzZXNzaW9uIGFuZCBleHBvcnRzIHN0YXRlIGJlZm9yZSB0ZXJtaW5hdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xuICpcbiAqIC8vIFByb2Nlc3MgdGFza3MgZHVyaW5nIHNlc3Npb25cbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZzEsIDAuODUpO1xuICogYWdlbnQucHJvY2Vzc1Rhc2tXaXRoUm91dGUoZW1iZWRkaW5nMiwgMC45MiwgJ2NvZGUtbW9kZWwnKTtcbiAqXG4gKiAvLyBFeHBvcnQgYmVmb3JlIHRlcm1pbmF0aW9uXG4gKiBjb25zdCBleHBvcnREYXRhID0gYWdlbnQuZXhwb3J0U3RhdGUoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRXBoZW1lcmFsQWdlbnQge1xuICBwcml2YXRlIGFnZW50SWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPEZlZGVyYXRlZENvbmZpZz47XG4gIHByaXZhdGUgdHJhamVjdG9yaWVzOiBUcmFqZWN0b3J5RXhwb3J0W10gPSBbXTtcbiAgcHJpdmF0ZSBzdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBxdWFsaXR5U2FtcGxlczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFzb25pbmdCYW5rOiBSZWFzb25pbmdCYW5rO1xuICBwcml2YXRlIGxvcmFXZWlnaHRzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGFnZW50SWQ6IHN0cmluZywgY29uZmlnPzogRmVkZXJhdGVkQ29uZmlnKSB7XG4gICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uREVGQVVMVF9GRURFUkFURURfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5yZWFzb25pbmdCYW5rID0gbmV3IFJlYXNvbmluZ0JhbmsoMC43KTtcblxuICAgIC8vIEluaXRpYWxpemUgbWljcm8tTG9SQSB3ZWlnaHRzXG4gICAgdGhpcy5sb3JhV2VpZ2h0cyA9IG5ldyBBcnJheSh0aGlzLmNvbmZpZy5oaWRkZW5EaW0gKiB0aGlzLmNvbmZpZy5taWNyb0xvcmFSYW5rKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKCkgPT4gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4wMSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFnZW50IElEXG4gICAqL1xuICBnZXRBZ2VudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWdlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgdGFzayBhbmQgcmVjb3JkIHRyYWplY3RvcnlcbiAgICovXG4gIHByb2Nlc3NUcmFqZWN0b3J5KFxuICAgIGVtYmVkZGluZzogRW1iZWRkaW5nLFxuICAgIGFjdGl2YXRpb25zOiBFbWJlZGRpbmcsXG4gICAgcXVhbGl0eTogbnVtYmVyLFxuICAgIHJvdXRlPzogc3RyaW5nLFxuICAgIGNvbnRleHQ6IHN0cmluZ1tdID0gW11cbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIFN0b3JlIHRyYWplY3RvcnkgZm9yIGV4cG9ydFxuICAgIHRoaXMudHJhamVjdG9yaWVzLnB1c2goe1xuICAgICAgZW1iZWRkaW5nOiBbLi4uZW1iZWRkaW5nXSxcbiAgICAgIHF1YWxpdHksXG4gICAgICByb3V0ZSxcbiAgICAgIGNvbnRleHQ6IFsuLi5jb250ZXh0XSxcbiAgICAgIHRpbWVzdGFtcDogbm93LFxuICAgIH0pO1xuXG4gICAgdGhpcy5xdWFsaXR5U2FtcGxlcy5wdXNoKHF1YWxpdHkpO1xuXG4gICAgLy8gU3RvcmUgaW4gbG9jYWwgcmVhc29uaW5nIGJhbmsgaWYgaGlnaCBxdWFsaXR5XG4gICAgaWYgKHF1YWxpdHkgPj0gMC43KSB7XG4gICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUoJ3F1ZXJ5X3Jlc3BvbnNlJywgZW1iZWRkaW5nKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgTG9SQSB3ZWlnaHRzIGJhc2VkIG9uIHF1YWxpdHlcbiAgICB0aGlzLnVwZGF0ZUxvcmFXZWlnaHRzKGVtYmVkZGluZywgcXVhbGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogU2ltcGxlIHByb2Nlc3MgdGFzayBtZXRob2RcbiAgICovXG4gIHByb2Nlc3NUYXNrKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NUcmFqZWN0b3J5KGVtYmVkZGluZywgZW1iZWRkaW5nLCBxdWFsaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRhc2sgd2l0aCByb3V0ZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHJvY2Vzc1Rhc2tXaXRoUm91dGUoZW1iZWRkaW5nOiBFbWJlZGRpbmcsIHF1YWxpdHk6IG51bWJlciwgcm91dGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzc1RyYWplY3RvcnkoZW1iZWRkaW5nLCBlbWJlZGRpbmcsIHF1YWxpdHksIHJvdXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBtaWNyby1Mb1JBIHRvIGhpZGRlbiBzdGF0ZXNcbiAgICovXG4gIGFwcGx5TWljcm9Mb3JhKGlucHV0OiBudW1iZXJbXSwgb3V0cHV0OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmsgPSB0aGlzLmNvbmZpZy5taWNyb0xvcmFSYW5rO1xuICAgIGNvbnN0IGRpbSA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcblxuICAgIC8vIFNpbXBsZSBsb3ctcmFuayBkZWNvbXBvc2l0aW9uOiBvdXRwdXQgPSBpbnB1dCArIEEgQCBCIEAgaW5wdXRcbiAgICAvLyBBIGlzIChkaW0geCByYW5rKSwgQiBpcyAocmFuayB4IGRpbSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSsrKSB7XG4gICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rOyByKyspIHtcbiAgICAgICAgbGV0IGJTdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbTsgaisrKSB7XG4gICAgICAgICAgY29uc3QgYklkeCA9IHIgKiBkaW0gKyBqO1xuICAgICAgICAgIGlmIChiSWR4IDwgdGhpcy5sb3JhV2VpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJTdW0gKz0gdGhpcy5sb3JhV2VpZ2h0c1tiSWR4XSAqIChpbnB1dFtqXSB8fCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYUlkeCA9IGkgKiByYW5rICsgcjtcbiAgICAgICAgaWYgKGFJZHggPCB0aGlzLmxvcmFXZWlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgIGRlbHRhICs9IHRoaXMubG9yYVdlaWdodHNbYUlkeF0gKiBiU3VtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXRwdXRbaV0gPSAoaW5wdXRbaV0gfHwgMCkgKyBkZWx0YSAqIDAuMTsgLy8gU2NhbGUgZmFjdG9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBudW1iZXIgb2YgY29sbGVjdGVkIHRyYWplY3Rvcmllc1xuICAgKi9cbiAgdHJhamVjdG9yeUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudHJhamVjdG9yaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXZlcmFnZSBxdWFsaXR5XG4gICAqL1xuICBhdmdRdWFsaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5xdWFsaXR5U2FtcGxlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1cHRpbWUgaW4gc2Vjb25kc1xuICAgKi9cbiAgdXB0aW1lU2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFnZW50IHN0YXRzXG4gICAqL1xuICBzdGF0cygpOiBBZ2VudEV4cG9ydFN0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxUcmFqZWN0b3JpZXM6IHRoaXMudHJhamVjdG9yaWVzLmxlbmd0aCxcbiAgICAgIGF2Z1F1YWxpdHk6IHRoaXMuYXZnUXVhbGl0eSgpLFxuICAgICAgcGF0dGVybnNMZWFybmVkOiB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgbG9jYWwgbGVhcm5pbmdcbiAgICovXG4gIGZvcmNlTGVhcm4oKTogc3RyaW5nIHtcbiAgICAvLyBQcnVuZSBsb3ctcGVyZm9ybWluZyBwYXR0ZXJuc1xuICAgIGNvbnN0IHBydW5lZCA9IHRoaXMucmVhc29uaW5nQmFuay5wcnVuZSgwLjMsIDMpO1xuICAgIHJldHVybiBgUHJ1bmVkICR7cHJ1bmVkfSBwYXR0ZXJucywgJHt0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zfSByZW1haW5pbmdgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsZWFybmVkIHBhdHRlcm5zXG4gICAqL1xuICBnZXRQYXR0ZXJucygpOiBMZWFybmVkUGF0dGVybltdIHtcbiAgICByZXR1cm4gdGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncXVlcnlfcmVzcG9uc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0cmFqZWN0b3JpZXMgKGFmdGVyIGV4cG9ydClcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudHJhamVjdG9yaWVzID0gW107XG4gICAgdGhpcy5xdWFsaXR5U2FtcGxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhZ2VudCBzdGF0ZSBmb3IgZmVkZXJhdGlvblxuICAgKlxuICAgKiBDYWxsIHRoaXMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBhZ2VudC5cbiAgICovXG4gIGV4cG9ydFN0YXRlKCk6IEFnZW50RXhwb3J0IHtcbiAgICAvLyBGb3JjZSBsZWFybmluZyBiZWZvcmUgZXhwb3J0XG4gICAgdGhpcy5mb3JjZUxlYXJuKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWdlbnRJZDogdGhpcy5hZ2VudElkLFxuICAgICAgdHJhamVjdG9yaWVzOiBbLi4udGhpcy50cmFqZWN0b3JpZXNdLFxuICAgICAgc3RhdHM6IHRoaXMuc3RhdHMoKSxcbiAgICAgIHNlc3Npb25EdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdG8gSlNPTlxuICAgKi9cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZXhwb3J0U3RhdGUoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxvcmFXZWlnaHRzKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBTaW1wbGUgZ3JhZGllbnQgdXBkYXRlIGJhc2VkIG9uIHF1YWxpdHlcbiAgICBjb25zdCBsciA9IDAuMDAxICogcXVhbGl0eTtcbiAgICBjb25zdCBkaW0gPSBNYXRoLm1pbihlbWJlZGRpbmcubGVuZ3RoLCB0aGlzLmNvbmZpZy5oaWRkZW5EaW0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkaW0sIHRoaXMubG9yYVdlaWdodHMubGVuZ3RoKTsgaSsrKSB7XG4gICAgICBjb25zdCBncmFkID0gZW1iZWRkaW5nW2kgJSBlbWJlZGRpbmcubGVuZ3RoXSAqIChxdWFsaXR5IC0gMC41KTtcbiAgICAgIHRoaXMubG9yYVdlaWdodHNbaV0gKz0gbHIgKiBncmFkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZlZGVyYXRlZCBMZWFybmluZyBDb29yZGluYXRvclxuICpcbiAqIEFnZ3JlZ2F0ZXMgbGVhcm5pbmcgZnJvbSBtdWx0aXBsZSBlcGhlbWVyYWwgYWdlbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb29yZGluYXRvciA9IG5ldyBGZWRlcmF0ZWRDb29yZGluYXRvcignY29vcmQtMScsIHsgaGlkZGVuRGltOiAyNTYgfSk7XG4gKlxuICogLy8gQWdncmVnYXRlIGV4cG9ydHMgZnJvbSBtdWx0aXBsZSBhZ2VudHNcbiAqIGZvciAoY29uc3QgYWdlbnRFeHBvcnQgb2YgYWdlbnRFeHBvcnRzKSB7XG4gKiAgIGNvbnN0IHJlc3VsdCA9IGNvb3JkaW5hdG9yLmFnZ3JlZ2F0ZShhZ2VudEV4cG9ydCk7XG4gKiAgIGNvbnNvbGUubG9nKGBBZ2VudCAke3Jlc3VsdC5hZ2VudElkfTogJHtyZXN1bHQudHJhamVjdG9yaWVzQWNjZXB0ZWR9IGFjY2VwdGVkYCk7XG4gKiB9XG4gKlxuICogLy8gR2V0IGNvb3JkaW5hdG9yIHN0YXRpc3RpY3NcbiAqIGNvbnN0IHN0YXRzID0gY29vcmRpbmF0b3Iuc3RhdHMoKTtcbiAqIGNvbnNvbGUubG9nKGBUb3RhbCBwYXR0ZXJuczogJHtzdGF0cy5wYXR0ZXJuc0xlYXJuZWR9YCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEZlZGVyYXRlZENvb3JkaW5hdG9yIHtcbiAgcHJpdmF0ZSBjb29yZGluYXRvcklkOiBzdHJpbmc7XG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxGZWRlcmF0ZWRDb25maWc+O1xuICBwcml2YXRlIGNvbnRyaWJ1dGlvbnM6IE1hcDxzdHJpbmcsIEFnZW50Q29udHJpYnV0aW9uPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0b3RhbFRyYWplY3RvcmllczogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb25zb2xpZGF0aW9uSW50ZXJ2YWw6IG51bWJlciA9IDUwO1xuICBwcml2YXRlIHJlYXNvbmluZ0Jhbms6IFJlYXNvbmluZ0Jhbms7XG4gIHByaXZhdGUgcXVhbGl0eVNhbXBsZXM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgbWFzdGVyTG9yYVdlaWdodHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoY29vcmRpbmF0b3JJZDogc3RyaW5nLCBjb25maWc/OiBGZWRlcmF0ZWRDb25maWcpIHtcbiAgICB0aGlzLmNvb3JkaW5hdG9ySWQgPSBjb29yZGluYXRvcklkO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4uREVGQVVMVF9GRURFUkFURURfQ09ORklHLFxuICAgICAgdHJhamVjdG9yeUNhcGFjaXR5OiA1MDAwMCwgLy8gTGFyZ2UgY2FwYWNpdHkgZm9yIGNvb3JkaW5hdG9yXG4gICAgICBwYXR0ZXJuQ2x1c3RlcnM6IDIwMCxcbiAgICAgIGJhc2VMb3JhUmFuazogMTYsIC8vIERlZXBlciBmb3IgYWdncmVnYXRpb25cbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICAgIHRoaXMucmVhc29uaW5nQmFuayA9IG5ldyBSZWFzb25pbmdCYW5rKHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtYXN0ZXIgTG9SQSB3ZWlnaHRzXG4gICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0cyA9IG5ldyBBcnJheSh0aGlzLmNvbmZpZy5oaWRkZW5EaW0gKiB0aGlzLmNvbmZpZy5iYXNlTG9yYVJhbmspXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoKSA9PiAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAwLjAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29vcmRpbmF0b3IgSURcbiAgICovXG4gIGdldENvb3JkaW5hdG9ySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb29yZGluYXRvcklkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBxdWFsaXR5IHRocmVzaG9sZCBmb3IgYWNjZXB0aW5nIHRyYWplY3Rvcmllc1xuICAgKi9cbiAgc2V0UXVhbGl0eVRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbnNvbGlkYXRpb24gaW50ZXJ2YWxcbiAgICovXG4gIHNldENvbnNvbGlkYXRpb25JbnRlcnZhbChpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25zb2xpZGF0aW9uSW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgYWdlbnQgZXhwb3J0IGludG8gY29vcmRpbmF0b3JcbiAgICovXG4gIGFnZ3JlZ2F0ZShleHBvcnREYXRhOiBBZ2VudEV4cG9ydCk6IEFnZ3JlZ2F0aW9uUmVzdWx0IHtcbiAgICBsZXQgYWNjZXB0ZWQgPSAwO1xuICAgIGxldCByZWplY3RlZCA9IDA7XG5cbiAgICAvLyBSZXBsYXkgdHJhamVjdG9yaWVzIGludG8gbWFzdGVyXG4gICAgZm9yIChjb25zdCB0cmFqIG9mIGV4cG9ydERhdGEudHJhamVjdG9yaWVzKSB7XG4gICAgICBpZiAodHJhai5xdWFsaXR5ID49IHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQpIHtcbiAgICAgICAgLy8gU3RvcmUgcGF0dGVyblxuICAgICAgICBjb25zdCBwYXR0ZXJuVHlwZSA9IHRoaXMucm91dGVUb1BhdHRlcm5UeXBlKHRyYWoucm91dGUpO1xuICAgICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUocGF0dGVyblR5cGUsIHRyYWouZW1iZWRkaW5nKTtcbiAgICAgICAgdGhpcy5xdWFsaXR5U2FtcGxlcy5wdXNoKHRyYWoucXVhbGl0eSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIG1hc3RlciBMb1JBIHdlaWdodHNcbiAgICAgICAgdGhpcy51cGRhdGVNYXN0ZXJMb3JhKHRyYWouZW1iZWRkaW5nLCB0cmFqLnF1YWxpdHkpO1xuXG4gICAgICAgIGFjY2VwdGVkKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3RlZCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG90YWxUcmFqZWN0b3JpZXMgKz0gYWNjZXB0ZWQ7XG5cbiAgICAvLyBSZWNvcmQgY29udHJpYnV0aW9uXG4gICAgdGhpcy5jb250cmlidXRpb25zLnNldChleHBvcnREYXRhLmFnZW50SWQsIHtcbiAgICAgIHRyYWplY3RvcnlDb3VudDogZXhwb3J0RGF0YS50cmFqZWN0b3JpZXMubGVuZ3RoLFxuICAgICAgYXZnUXVhbGl0eTogZXhwb3J0RGF0YS5zdGF0cy5hdmdRdWFsaXR5LFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgc2Vzc2lvbkR1cmF0aW9uTXM6IGV4cG9ydERhdGEuc2Vzc2lvbkR1cmF0aW9uTXMsXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvLWNvbnNvbGlkYXRlIGlmIG5lZWRlZFxuICAgIGNvbnN0IGNvbnNvbGlkYXRlZCA9IHRoaXMuc2hvdWxkQ29uc29saWRhdGUoKTtcbiAgICBpZiAoY29uc29saWRhdGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ29uc29saWRhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWdlbnRJZDogZXhwb3J0RGF0YS5hZ2VudElkLFxuICAgICAgdHJhamVjdG9yaWVzQWNjZXB0ZWQ6IGFjY2VwdGVkLFxuICAgICAgdHJhamVjdG9yaWVzUmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgICAgY29uc29saWRhdGVkLFxuICAgICAgdG90YWxBZ2VudHM6IHRoaXMuY29udHJpYnV0aW9ucy5zaXplLFxuICAgICAgdG90YWxUcmFqZWN0b3JpZXM6IHRoaXMudG90YWxUcmFqZWN0b3JpZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBjb25zb2xpZGF0aW9uIChsZWFybmluZylcbiAgICovXG4gIGZvcmNlQ29uc29saWRhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcnVuZWQgPSB0aGlzLnJlYXNvbmluZ0JhbmsucHJ1bmUoMC4zLCA1KTtcbiAgICByZXR1cm4gYENvbnNvbGlkYXRlZDogcHJ1bmVkICR7cHJ1bmVkfSBwYXR0ZXJucywgJHt0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zfSByZW1haW5pbmdgO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlIGxlYXJuaW5nIChhbGlhcylcbiAgICovXG4gIGNvbnNvbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9yY2VDb25zb2xpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbml0aWFsIHBhdHRlcm5zIGZvciBuZXcgYWdlbnRzICh3YXJtIHN0YXJ0KVxuICAgKi9cbiAgZ2V0SW5pdGlhbFBhdHRlcm5zKGs6IG51bWJlciA9IDEwKTogTGVhcm5lZFBhdHRlcm5bXSB7XG4gICAgY29uc3QgYWxsUGF0dGVybnMgPSBbXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdxdWVyeV9yZXNwb25zZScpLFxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncm91dGluZycpLFxuICAgIF07XG5cbiAgICAvLyBTb3J0IGJ5IHN1Y2Nlc3MgcmF0ZSBhbmQgcmV0dXJuIHRvcCBrXG4gICAgcmV0dXJuIGFsbFBhdHRlcm5zXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5zdWNjZXNzUmF0ZSAtIGEuc3VjY2Vzc1JhdGUpXG4gICAgICAuc2xpY2UoMCwgayk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBsZWFybmVkIHBhdHRlcm5zXG4gICAqL1xuICBnZXRBbGxQYXR0ZXJucygpOiBMZWFybmVkUGF0dGVybltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncXVlcnlfcmVzcG9uc2UnKSxcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3JvdXRpbmcnKSxcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ2NvbnRleHRfcmV0cmlldmFsJyksXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdjb3JyZWN0aW9uJyksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHNpbWlsYXIgcGF0dGVybnNcbiAgICovXG4gIGZpbmRQYXR0ZXJucyhxdWVyeTogRW1iZWRkaW5nLCBrOiBudW1iZXIpOiBMZWFybmVkUGF0dGVybltdIHtcbiAgICByZXR1cm4gdGhpcy5yZWFzb25pbmdCYW5rLmZpbmRTaW1pbGFyKHF1ZXJ5LCBrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBjb29yZGluYXRvcidzIExvUkEgdG8gaW5wdXRcbiAgICogT1BUSU1JWkVEOiBQcmUtY29tcHV0ZSBoaWRkZW4gbGF5ZXIgb25jZSwgcmV1c2UgdHlwZWQgYXJyYXlzXG4gICAqL1xuICBhcHBseUxvcmEoaW5wdXQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHJhbmsgPSB0aGlzLmNvbmZpZy5iYXNlTG9yYVJhbms7XG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCB0aGlzLmNvbmZpZy5oaWRkZW5EaW0pO1xuICAgIGNvbnN0IHdlaWdodHNMZW4gPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzLmxlbmd0aDtcblxuICAgIC8vIFByZS1jb21wdXRlIGhpZGRlbiBsYXllciAoaW5wdXQgQCBCKVxuICAgIGNvbnN0IGhpZGRlbiA9IG5ldyBGbG9hdDY0QXJyYXkocmFuayk7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rOyByKyspIHtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgY29uc3QgYmFzZUlkeCA9IHIgKiBkaW07XG4gICAgICAvLyBVbnJvbGwgdGhlIGlubmVyIGxvb3BcbiAgICAgIGxldCBqID0gMDtcbiAgICAgIGZvciAoOyBqICsgMyA8IGRpbSAmJiBiYXNlSWR4ICsgaiArIDMgPCB3ZWlnaHRzTGVuOyBqICs9IDQpIHtcbiAgICAgICAgc3VtICs9IHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGpdICogKGlucHV0W2pdIHx8IDApICtcbiAgICAgICAgICAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGogKyAxXSAqIChpbnB1dFtqICsgMV0gfHwgMCkgK1xuICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgaiArIDJdICogKGlucHV0W2ogKyAyXSB8fCAwKSArXG4gICAgICAgICAgICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqICsgM10gKiAoaW5wdXRbaiArIDNdIHx8IDApO1xuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBkaW0gJiYgYmFzZUlkeCArIGogPCB3ZWlnaHRzTGVuOyBqKyspIHtcbiAgICAgICAgc3VtICs9IHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGpdICogKGlucHV0W2pdIHx8IDApO1xuICAgICAgfVxuICAgICAgaGlkZGVuW3JdID0gc3VtO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgb3V0cHV0IChoaWRkZW4gQCBBICsgaW5wdXQpXG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IEFycmF5KGlucHV0Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPCBkaW0pIHtcbiAgICAgICAgbGV0IGRlbHRhID0gMDtcbiAgICAgICAgY29uc3QgYmFzZUlkeCA9IGkgKiByYW5rO1xuICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IHJhbmsgJiYgYmFzZUlkeCArIHIgPCB3ZWlnaHRzTGVuOyByKyspIHtcbiAgICAgICAgICBkZWx0YSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyByXSAqIGhpZGRlbltyXTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXRbaV0gPSAoaW5wdXRbaV0gfHwgMCkgKyBkZWx0YSAqIDAuMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtpXSA9IGlucHV0W2ldIHx8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29vcmRpbmF0b3Igc3RhdGlzdGljc1xuICAgKi9cbiAgc3RhdHMoKTogQ29vcmRpbmF0b3JTdGF0cyB7XG4gICAgY29uc3QgYXZnUXVhbGl0eSA9IHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnF1YWxpdHlTYW1wbGVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gdGhpcy5xdWFsaXR5U2FtcGxlcy5sZW5ndGhcbiAgICAgIDogMDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb29yZGluYXRvcklkOiB0aGlzLmNvb3JkaW5hdG9ySWQsXG4gICAgICB0b3RhbEFnZW50czogdGhpcy5jb250cmlidXRpb25zLnNpemUsXG4gICAgICB0b3RhbFRyYWplY3RvcmllczogdGhpcy50b3RhbFRyYWplY3RvcmllcyxcbiAgICAgIHBhdHRlcm5zTGVhcm5lZDogdGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJucyxcbiAgICAgIGF2Z1F1YWxpdHksXG4gICAgICBxdWFsaXR5VGhyZXNob2xkOiB0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5XG4gICAqL1xuICBnZXRDb250cmlidXRpb25zKCk6IE1hcDxzdHJpbmcsIEFnZW50Q29udHJpYnV0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5jb250cmlidXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdG90YWwgYWdlbnQgY291bnRcbiAgICovXG4gIGFnZW50Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb250cmlidXRpb25zLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRvdGFsIHRyYWplY3RvcnkgY291bnRcbiAgICovXG4gIGdldFRvdGFsVHJhamVjdG9yaWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxUcmFqZWN0b3JpZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNvbnRyaWJ1dGlvbnNcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJpYnV0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMudG90YWxUcmFqZWN0b3JpZXMgPSAwO1xuICAgIHRoaXMucXVhbGl0eVNhbXBsZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgY29vcmRpbmF0b3Igc3RhdGVcbiAgICovXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb29yZGluYXRvcklkOiB0aGlzLmNvb3JkaW5hdG9ySWQsXG4gICAgICBzdGF0czogdGhpcy5zdGF0cygpLFxuICAgICAgY29udHJpYnV0aW9uczogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuY29udHJpYnV0aW9ucyksXG4gICAgICBwYXR0ZXJuczogdGhpcy5nZXRBbGxQYXR0ZXJucygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhZ2VudCB3aXRoIGNvb3JkaW5hdG9yJ3MgbGVhcm5lZCBwYXR0ZXJuc1xuICAgKi9cbiAgY3JlYXRlQWdlbnQoYWdlbnRJZDogc3RyaW5nKTogRXBoZW1lcmFsQWdlbnQge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KGFnZW50SWQsIHtcbiAgICAgIGhpZGRlbkRpbTogdGhpcy5jb25maWcuaGlkZGVuRGltLFxuICAgICAgZW1iZWRkaW5nRGltOiB0aGlzLmNvbmZpZy5lbWJlZGRpbmdEaW0sXG4gICAgICBtaWNyb0xvcmFSYW5rOiB0aGlzLmNvbmZpZy5taWNyb0xvcmFSYW5rLFxuICAgIH0pO1xuXG4gICAgLy8gV2FybSBzdGFydDogcHJvY2VzcyBpbml0aWFsIHBhdHRlcm5zIGFzIHBvc2l0aXZlIGV4YW1wbGVzXG4gICAgY29uc3QgaW5pdGlhbFBhdHRlcm5zID0gdGhpcy5nZXRJbml0aWFsUGF0dGVybnMoNSk7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGluaXRpYWxQYXR0ZXJucykge1xuICAgICAgYWdlbnQucHJvY2Vzc1Rhc2socGF0dGVybi5lbWJlZGRpbmcsIHBhdHRlcm4uc3VjY2Vzc1JhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBhZ2VudDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQ29uc29saWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJpYnV0aW9ucy5zaXplICUgdGhpcy5jb25zb2xpZGF0aW9uSW50ZXJ2YWwgPT09IDAgJiZcbiAgICAgICAgICAgdGhpcy5jb250cmlidXRpb25zLnNpemUgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSByb3V0ZVRvUGF0dGVyblR5cGUocm91dGU/OiBzdHJpbmcpOiBQYXR0ZXJuVHlwZSB7XG4gICAgaWYgKCFyb3V0ZSkgcmV0dXJuICdxdWVyeV9yZXNwb25zZSc7XG4gICAgaWYgKHJvdXRlLmluY2x1ZGVzKCdjb2RlJykpIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xuICAgIGlmIChyb3V0ZS5pbmNsdWRlcygncm91dGUnKSkgcmV0dXJuICdyb3V0aW5nJztcbiAgICBpZiAocm91dGUuaW5jbHVkZXMoJ21lbW9yeScpKSByZXR1cm4gJ2NvbnRleHRfcmV0cmlldmFsJztcbiAgICByZXR1cm4gJ3F1ZXJ5X3Jlc3BvbnNlJztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFzdGVyTG9yYShlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbHIgPSAwLjAwMDUgKiBxdWFsaXR5OyAvLyBTbG93ZXIgbGVhcm5pbmcgZm9yIGNvb3JkaW5hdG9yXG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oZW1iZWRkaW5nLmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oZGltLCB0aGlzLm1hc3RlckxvcmFXZWlnaHRzLmxlbmd0aCk7IGkrKykge1xuICAgICAgY29uc3QgZ3JhZCA9IGVtYmVkZGluZ1tpICUgZW1iZWRkaW5nLmxlbmd0aF0gKiAocXVhbGl0eSAtIDAuNSk7XG4gICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2ldICs9IGxyICogZ3JhZDtcblxuICAgICAgLy8gRVdDIHJlZ3VsYXJpemF0aW9uIC0gcHJldmVudCBsYXJnZSB3ZWlnaHQgY2hhbmdlc1xuICAgICAgY29uc3QgcGVuYWx0eSA9IHRoaXMuY29uZmlnLmV3Y0xhbWJkYSAqIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbaV0gKiAwLjAwMDE7XG4gICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2ldIC09IHBlbmFsdHk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
525
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVkZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZlZGVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFjSCxpQ0FBdUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFNLHdCQUF3QixHQUE4QjtJQUMxRCxTQUFTLEVBQUUsR0FBRztJQUNkLFlBQVksRUFBRSxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFlBQVksRUFBRSxDQUFDO0lBQ2Ysa0JBQWtCLEVBQUUsR0FBRztJQUN2QixlQUFlLEVBQUUsRUFBRTtJQUNuQixTQUFTLEVBQUUsSUFBSTtJQUNmLGdCQUFnQixFQUFFLEdBQUc7Q0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSxjQUFjO0lBU3pCLFlBQVksT0FBZSxFQUFFLE1BQXdCO1FBTjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxvQkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2FBQzVFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDUCxH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LENBQUMsSUFBSSxPQUFPLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFTRCxvREEwU0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmVkZXJhdGVkIExlYXJuaW5nIGZvciBTT05BXHJcbiAqXHJcbiAqIEVuYWJsZSBkaXN0cmlidXRlZCBsZWFybmluZyBhY3Jvc3MgZXBoZW1lcmFsIGFnZW50cyB0aGF0IHNoYXJlXHJcbiAqIHRyYWplY3RvcmllcyB3aXRoIGEgY2VudHJhbCBjb29yZGluYXRvci5cclxuICpcclxuICogQXJjaGl0ZWN0dXJlOlxyXG4gKiBgYGBcclxuICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxyXG4gKiDilIIgIEFnZW50IEEgICAg4pSCICAgICDilIIgIEFnZW50IEIgICAg4pSCICAgICDilIIgIEFnZW50IEMgICAg4pSCXHJcbiAqIOKUgiAoZXBoZW1lcmFsKSDilIIgICAgIOKUgiAoZXBoZW1lcmFsKSDilIIgICAgIOKUgiAoZXBoZW1lcmFsKSDilIJcclxuICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilJTilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilJggICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxyXG4gKiAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICDilIJcclxuICogICAgICAgIOKUgiAgICBleHBvcnQoKSAgICAgICDilIIgICAgZXhwb3J0KCkgICAgICAg4pSCICAgIGV4cG9ydCgpXHJcbiAqICAgICAgICDilrwgICAgICAgICAgICAgICAgICAg4pa8ICAgICAgICAgICAgICAgICAgIOKWvFxyXG4gKiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxyXG4gKiAgIOKUgiAgICAgICAgICAgIEZlZGVyYXRlZCBDb29yZGluYXRvciAgICAgICAgICAgICAgIOKUglxyXG4gKiAgIOKUgiAgICAgICAgIChwZXJzaXN0ZW50LCBsYXJnZSBjYXBhY2l0eSkgICAgICAgICAgIOKUglxyXG4gKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxyXG4gKiBgYGBcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpbXBvcnQgeyBFcGhlbWVyYWxBZ2VudCwgRmVkZXJhdGVkQ29vcmRpbmF0b3IgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogLy8gQ3JlYXRlIGNvb3JkaW5hdG9yIChwZXJzaXN0ZW50KVxyXG4gKiBjb25zdCBjb29yZGluYXRvciA9IG5ldyBGZWRlcmF0ZWRDb29yZGluYXRvcignY29vcmQtMScsIHsgaGlkZGVuRGltOiAyNTYgfSk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBlcGhlbWVyYWwgYWdlbnRcclxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xyXG4gKlxyXG4gKiAvLyBBZ2VudCBwcm9jZXNzZXMgdGFza3NcclxuICogYWdlbnQucHJvY2Vzc1Rhc2soWzAuMSwgMC4yLCAuLi5dLCAwLjg1KTtcclxuICogYWdlbnQucHJvY2Vzc1Rhc2soWzAuMywgMC40LCAuLi5dLCAwLjkyKTtcclxuICpcclxuICogLy8gRXhwb3J0IGFuZCBhZ2dyZWdhdGUgYmVmb3JlIGFnZW50IHRlcm1pbmF0ZXNcclxuICogY29uc3QgZXhwb3J0RGF0YSA9IGFnZW50LmV4cG9ydFN0YXRlKCk7XHJcbiAqIGNvbnN0IHJlc3VsdCA9IGNvb3JkaW5hdG9yLmFnZ3JlZ2F0ZShleHBvcnREYXRhKTtcclxuICpcclxuICogY29uc29sZS5sb2coYEFjY2VwdGVkOiAke3Jlc3VsdC50cmFqZWN0b3JpZXNBY2NlcHRlZH1gKTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBFbWJlZGRpbmcsXHJcbiAgTGVhcm5lZFBhdHRlcm4sXHJcbiAgUGF0dGVyblR5cGUsXHJcbiAgRmVkZXJhdGVkQ29uZmlnLFxyXG4gIFRyYWplY3RvcnlFeHBvcnQsXHJcbiAgQWdlbnRFeHBvcnRTdGF0cyxcclxuICBBZ2VudEV4cG9ydCxcclxuICBBZ2VudENvbnRyaWJ1dGlvbixcclxuICBBZ2dyZWdhdGlvblJlc3VsdCxcclxuICBDb29yZGluYXRvclN0YXRzLFxyXG59IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBSZWFzb25pbmdCYW5rIH0gZnJvbSAnLi9zb25hJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGZlZGVyYXRlZCBjb25maWdcclxuICovXHJcbmNvbnN0IERFRkFVTFRfRkVERVJBVEVEX0NPTkZJRzogUmVxdWlyZWQ8RmVkZXJhdGVkQ29uZmlnPiA9IHtcclxuICBoaWRkZW5EaW06IDI1NixcclxuICBlbWJlZGRpbmdEaW06IDI1NixcclxuICBtaWNyb0xvcmFSYW5rOiAyLFxyXG4gIGJhc2VMb3JhUmFuazogOCxcclxuICB0cmFqZWN0b3J5Q2FwYWNpdHk6IDUwMCxcclxuICBwYXR0ZXJuQ2x1c3RlcnM6IDI1LFxyXG4gIGV3Y0xhbWJkYTogMjAwMCxcclxuICBxdWFsaXR5VGhyZXNob2xkOiAwLjQsXHJcbn07XHJcblxyXG4vKipcclxuICogRXBoZW1lcmFsIEFnZW50IGZvciBmZWRlcmF0ZWQgbGVhcm5pbmdcclxuICpcclxuICogQ29sbGVjdHMgdHJhamVjdG9yaWVzIGR1cmluZyBpdHMgc2Vzc2lvbiBhbmQgZXhwb3J0cyBzdGF0ZSBiZWZvcmUgdGVybWluYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xyXG4gKlxyXG4gKiAvLyBQcm9jZXNzIHRhc2tzIGR1cmluZyBzZXNzaW9uXHJcbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZzEsIDAuODUpO1xyXG4gKiBhZ2VudC5wcm9jZXNzVGFza1dpdGhSb3V0ZShlbWJlZGRpbmcyLCAwLjkyLCAnY29kZS1tb2RlbCcpO1xyXG4gKlxyXG4gKiAvLyBFeHBvcnQgYmVmb3JlIHRlcm1pbmF0aW9uXHJcbiAqIGNvbnN0IGV4cG9ydERhdGEgPSBhZ2VudC5leHBvcnRTdGF0ZSgpO1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFcGhlbWVyYWxBZ2VudCB7XHJcbiAgcHJpdmF0ZSBhZ2VudElkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPEZlZGVyYXRlZENvbmZpZz47XHJcbiAgcHJpdmF0ZSB0cmFqZWN0b3JpZXM6IFRyYWplY3RvcnlFeHBvcnRbXSA9IFtdO1xyXG4gIHByaXZhdGUgc3RhcnRUaW1lOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBxdWFsaXR5U2FtcGxlczogbnVtYmVyW10gPSBbXTtcclxuICBwcml2YXRlIHJlYXNvbmluZ0Jhbms6IFJlYXNvbmluZ0Jhbms7XHJcbiAgcHJpdmF0ZSBsb3JhV2VpZ2h0czogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoYWdlbnRJZDogc3RyaW5nLCBjb25maWc/OiBGZWRlcmF0ZWRDb25maWcpIHtcclxuICAgIHRoaXMuYWdlbnRJZCA9IGFnZW50SWQ7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uREVGQVVMVF9GRURFUkFURURfQ09ORklHLCAuLi5jb25maWcgfTtcclxuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIHRoaXMucmVhc29uaW5nQmFuayA9IG5ldyBSZWFzb25pbmdCYW5rKDAuNyk7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBtaWNyby1Mb1JBIHdlaWdodHNcclxuICAgIHRoaXMubG9yYVdlaWdodHMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcuaGlkZGVuRGltICogdGhpcy5jb25maWcubWljcm9Mb3JhUmFuaylcclxuICAgICAgLmZpbGwoMClcclxuICAgICAgLm1hcCgoKSA9PiAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAwLjAxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhZ2VudCBJRFxyXG4gICAqL1xyXG4gIGdldEFnZW50SWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmFnZW50SWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGEgdGFzayBhbmQgcmVjb3JkIHRyYWplY3RvcnlcclxuICAgKi9cclxuICBwcm9jZXNzVHJhamVjdG9yeShcclxuICAgIGVtYmVkZGluZzogRW1iZWRkaW5nLFxyXG4gICAgYWN0aXZhdGlvbnM6IEVtYmVkZGluZyxcclxuICAgIHF1YWxpdHk6IG51bWJlcixcclxuICAgIHJvdXRlPzogc3RyaW5nLFxyXG4gICAgY29udGV4dDogc3RyaW5nW10gPSBbXVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAvLyBTdG9yZSB0cmFqZWN0b3J5IGZvciBleHBvcnRcclxuICAgIHRoaXMudHJhamVjdG9yaWVzLnB1c2goe1xyXG4gICAgICBlbWJlZGRpbmc6IFsuLi5lbWJlZGRpbmddLFxyXG4gICAgICBxdWFsaXR5LFxyXG4gICAgICByb3V0ZSxcclxuICAgICAgY29udGV4dDogWy4uLmNvbnRleHRdLFxyXG4gICAgICB0aW1lc3RhbXA6IG5vdyxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVhbGl0eVNhbXBsZXMucHVzaChxdWFsaXR5KTtcclxuXHJcbiAgICAvLyBTdG9yZSBpbiBsb2NhbCByZWFzb25pbmcgYmFuayBpZiBoaWdoIHF1YWxpdHlcclxuICAgIGlmIChxdWFsaXR5ID49IDAuNykge1xyXG4gICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUoJ3F1ZXJ5X3Jlc3BvbnNlJywgZW1iZWRkaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgTG9SQSB3ZWlnaHRzIGJhc2VkIG9uIHF1YWxpdHlcclxuICAgIHRoaXMudXBkYXRlTG9yYVdlaWdodHMoZW1iZWRkaW5nLCBxdWFsaXR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpbXBsZSBwcm9jZXNzIHRhc2sgbWV0aG9kXHJcbiAgICovXHJcbiAgcHJvY2Vzc1Rhc2soZW1iZWRkaW5nOiBFbWJlZGRpbmcsIHF1YWxpdHk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzVHJhamVjdG9yeShlbWJlZGRpbmcsIGVtYmVkZGluZywgcXVhbGl0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIHRhc2sgd2l0aCByb3V0ZSBpbmZvcm1hdGlvblxyXG4gICAqL1xyXG4gIHByb2Nlc3NUYXNrV2l0aFJvdXRlKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIsIHJvdXRlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvY2Vzc1RyYWplY3RvcnkoZW1iZWRkaW5nLCBlbWJlZGRpbmcsIHF1YWxpdHksIHJvdXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IG1pY3JvLUxvUkEgdG8gaGlkZGVuIHN0YXRlc1xyXG4gICAqL1xyXG4gIGFwcGx5TWljcm9Mb3JhKGlucHV0OiBudW1iZXJbXSwgb3V0cHV0OiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgcmFuayA9IHRoaXMuY29uZmlnLm1pY3JvTG9yYVJhbms7XHJcbiAgICBjb25zdCBkaW0gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XHJcblxyXG4gICAgLy8gU2ltcGxlIGxvdy1yYW5rIGRlY29tcG9zaXRpb246IG91dHB1dCA9IGlucHV0ICsgQSBAIEIgQCBpbnB1dFxyXG4gICAgLy8gQSBpcyAoZGltIHggcmFuayksIEIgaXMgKHJhbmsgeCBkaW0pXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSsrKSB7XHJcbiAgICAgIGxldCBkZWx0YSA9IDA7XHJcbiAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmFuazsgcisrKSB7XHJcbiAgICAgICAgbGV0IGJTdW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGltOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGJJZHggPSByICogZGltICsgajtcclxuICAgICAgICAgIGlmIChiSWR4IDwgdGhpcy5sb3JhV2VpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYlN1bSArPSB0aGlzLmxvcmFXZWlnaHRzW2JJZHhdICogKGlucHV0W2pdIHx8IDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhSWR4ID0gaSAqIHJhbmsgKyByO1xyXG4gICAgICAgIGlmIChhSWR4IDwgdGhpcy5sb3JhV2VpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICAgIGRlbHRhICs9IHRoaXMubG9yYVdlaWdodHNbYUlkeF0gKiBiU3VtO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvdXRwdXRbaV0gPSAoaW5wdXRbaV0gfHwgMCkgKyBkZWx0YSAqIDAuMTsgLy8gU2NhbGUgZmFjdG9yXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbnVtYmVyIG9mIGNvbGxlY3RlZCB0cmFqZWN0b3JpZXNcclxuICAgKi9cclxuICB0cmFqZWN0b3J5Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRyYWplY3Rvcmllcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYXZlcmFnZSBxdWFsaXR5XHJcbiAgICovXHJcbiAgYXZnUXVhbGl0eSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcclxuICAgIHJldHVybiB0aGlzLnF1YWxpdHlTYW1wbGVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gdGhpcy5xdWFsaXR5U2FtcGxlcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdXB0aW1lIGluIHNlY29uZHNcclxuICAgKi9cclxuICB1cHRpbWVTZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lKSAvIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFnZW50IHN0YXRzXHJcbiAgICovXHJcbiAgc3RhdHMoKTogQWdlbnRFeHBvcnRTdGF0cyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbFRyYWplY3RvcmllczogdGhpcy50cmFqZWN0b3JpZXMubGVuZ3RoLFxyXG4gICAgICBhdmdRdWFsaXR5OiB0aGlzLmF2Z1F1YWxpdHkoKSxcclxuICAgICAgcGF0dGVybnNMZWFybmVkOiB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIGxvY2FsIGxlYXJuaW5nXHJcbiAgICovXHJcbiAgZm9yY2VMZWFybigpOiBzdHJpbmcge1xyXG4gICAgLy8gUHJ1bmUgbG93LXBlcmZvcm1pbmcgcGF0dGVybnNcclxuICAgIGNvbnN0IHBydW5lZCA9IHRoaXMucmVhc29uaW5nQmFuay5wcnVuZSgwLjMsIDMpO1xyXG4gICAgcmV0dXJuIGBQcnVuZWQgJHtwcnVuZWR9IHBhdHRlcm5zLCAke3RoaXMucmVhc29uaW5nQmFuay5zdGF0cygpLnRvdGFsUGF0dGVybnN9IHJlbWFpbmluZ2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbGVhcm5lZCBwYXR0ZXJuc1xyXG4gICAqL1xyXG4gIGdldFBhdHRlcm5zKCk6IExlYXJuZWRQYXR0ZXJuW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3F1ZXJ5X3Jlc3BvbnNlJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0cmFqZWN0b3JpZXMgKGFmdGVyIGV4cG9ydClcclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhamVjdG9yaWVzID0gW107XHJcbiAgICB0aGlzLnF1YWxpdHlTYW1wbGVzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYWdlbnQgc3RhdGUgZm9yIGZlZGVyYXRpb25cclxuICAgKlxyXG4gICAqIENhbGwgdGhpcyBiZWZvcmUgdGVybWluYXRpbmcgdGhlIGFnZW50LlxyXG4gICAqL1xyXG4gIGV4cG9ydFN0YXRlKCk6IEFnZW50RXhwb3J0IHtcclxuICAgIC8vIEZvcmNlIGxlYXJuaW5nIGJlZm9yZSBleHBvcnRcclxuICAgIHRoaXMuZm9yY2VMZWFybigpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFnZW50SWQ6IHRoaXMuYWdlbnRJZCxcclxuICAgICAgdHJhamVjdG9yaWVzOiBbLi4udGhpcy50cmFqZWN0b3JpZXNdLFxyXG4gICAgICBzdGF0czogdGhpcy5zdGF0cygpLFxyXG4gICAgICBzZXNzaW9uRHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLFxyXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHRvIEpTT05cclxuICAgKi9cclxuICB0b0pTT04oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmV4cG9ydFN0YXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb3JhV2VpZ2h0cyhlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBTaW1wbGUgZ3JhZGllbnQgdXBkYXRlIGJhc2VkIG9uIHF1YWxpdHlcclxuICAgIGNvbnN0IGxyID0gMC4wMDEgKiBxdWFsaXR5O1xyXG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oZW1iZWRkaW5nLmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGRpbSwgdGhpcy5sb3JhV2VpZ2h0cy5sZW5ndGgpOyBpKyspIHtcclxuICAgICAgY29uc3QgZ3JhZCA9IGVtYmVkZGluZ1tpICUgZW1iZWRkaW5nLmxlbmd0aF0gKiAocXVhbGl0eSAtIDAuNSk7XHJcbiAgICAgIHRoaXMubG9yYVdlaWdodHNbaV0gKz0gbHIgKiBncmFkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEZlZGVyYXRlZCBMZWFybmluZyBDb29yZGluYXRvclxyXG4gKlxyXG4gKiBBZ2dyZWdhdGVzIGxlYXJuaW5nIGZyb20gbXVsdGlwbGUgZXBoZW1lcmFsIGFnZW50cy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb29yZGluYXRvciA9IG5ldyBGZWRlcmF0ZWRDb29yZGluYXRvcignY29vcmQtMScsIHsgaGlkZGVuRGltOiAyNTYgfSk7XHJcbiAqXHJcbiAqIC8vIEFnZ3JlZ2F0ZSBleHBvcnRzIGZyb20gbXVsdGlwbGUgYWdlbnRzXHJcbiAqIGZvciAoY29uc3QgYWdlbnRFeHBvcnQgb2YgYWdlbnRFeHBvcnRzKSB7XHJcbiAqICAgY29uc3QgcmVzdWx0ID0gY29vcmRpbmF0b3IuYWdncmVnYXRlKGFnZW50RXhwb3J0KTtcclxuICogICBjb25zb2xlLmxvZyhgQWdlbnQgJHtyZXN1bHQuYWdlbnRJZH06ICR7cmVzdWx0LnRyYWplY3Rvcmllc0FjY2VwdGVkfSBhY2NlcHRlZGApO1xyXG4gKiB9XHJcbiAqXHJcbiAqIC8vIEdldCBjb29yZGluYXRvciBzdGF0aXN0aWNzXHJcbiAqIGNvbnN0IHN0YXRzID0gY29vcmRpbmF0b3Iuc3RhdHMoKTtcclxuICogY29uc29sZS5sb2coYFRvdGFsIHBhdHRlcm5zOiAke3N0YXRzLnBhdHRlcm5zTGVhcm5lZH1gKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmVkZXJhdGVkQ29vcmRpbmF0b3Ige1xyXG4gIHByaXZhdGUgY29vcmRpbmF0b3JJZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxGZWRlcmF0ZWRDb25maWc+O1xyXG4gIHByaXZhdGUgY29udHJpYnV0aW9uczogTWFwPHN0cmluZywgQWdlbnRDb250cmlidXRpb24+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgdG90YWxUcmFqZWN0b3JpZXM6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBjb25zb2xpZGF0aW9uSW50ZXJ2YWw6IG51bWJlciA9IDUwO1xyXG4gIHByaXZhdGUgcmVhc29uaW5nQmFuazogUmVhc29uaW5nQmFuaztcclxuICBwcml2YXRlIHF1YWxpdHlTYW1wbGVzOiBudW1iZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgbWFzdGVyTG9yYVdlaWdodHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvb3JkaW5hdG9ySWQ6IHN0cmluZywgY29uZmlnPzogRmVkZXJhdGVkQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvb3JkaW5hdG9ySWQgPSBjb29yZGluYXRvcklkO1xyXG4gICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgIC4uLkRFRkFVTFRfRkVERVJBVEVEX0NPTkZJRyxcclxuICAgICAgdHJhamVjdG9yeUNhcGFjaXR5OiA1MDAwMCwgLy8gTGFyZ2UgY2FwYWNpdHkgZm9yIGNvb3JkaW5hdG9yXHJcbiAgICAgIHBhdHRlcm5DbHVzdGVyczogMjAwLFxyXG4gICAgICBiYXNlTG9yYVJhbms6IDE2LCAvLyBEZWVwZXIgZm9yIGFnZ3JlZ2F0aW9uXHJcbiAgICAgIC4uLmNvbmZpZyxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlYXNvbmluZ0JhbmsgPSBuZXcgUmVhc29uaW5nQmFuayh0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkKTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIG1hc3RlciBMb1JBIHdlaWdodHNcclxuICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcuaGlkZGVuRGltICogdGhpcy5jb25maWcuYmFzZUxvcmFSYW5rKVxyXG4gICAgICAuZmlsbCgwKVxyXG4gICAgICAubWFwKCgpID0+IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNvb3JkaW5hdG9yIElEXHJcbiAgICovXHJcbiAgZ2V0Q29vcmRpbmF0b3JJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0b3JJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBxdWFsaXR5IHRocmVzaG9sZCBmb3IgYWNjZXB0aW5nIHRyYWplY3Rvcmllc1xyXG4gICAqL1xyXG4gIHNldFF1YWxpdHlUaHJlc2hvbGQodGhyZXNob2xkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29uc29saWRhdGlvbiBpbnRlcnZhbFxyXG4gICAqL1xyXG4gIHNldENvbnNvbGlkYXRpb25JbnRlcnZhbChpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnNvbGlkYXRpb25JbnRlcnZhbCA9IGludGVydmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWdncmVnYXRlIGFnZW50IGV4cG9ydCBpbnRvIGNvb3JkaW5hdG9yXHJcbiAgICovXHJcbiAgYWdncmVnYXRlKGV4cG9ydERhdGE6IEFnZW50RXhwb3J0KTogQWdncmVnYXRpb25SZXN1bHQge1xyXG4gICAgbGV0IGFjY2VwdGVkID0gMDtcclxuICAgIGxldCByZWplY3RlZCA9IDA7XHJcblxyXG4gICAgLy8gUmVwbGF5IHRyYWplY3RvcmllcyBpbnRvIG1hc3RlclxyXG4gICAgZm9yIChjb25zdCB0cmFqIG9mIGV4cG9ydERhdGEudHJhamVjdG9yaWVzKSB7XHJcbiAgICAgIGlmICh0cmFqLnF1YWxpdHkgPj0gdGhpcy5jb25maWcucXVhbGl0eVRocmVzaG9sZCkge1xyXG4gICAgICAgIC8vIFN0b3JlIHBhdHRlcm5cclxuICAgICAgICBjb25zdCBwYXR0ZXJuVHlwZSA9IHRoaXMucm91dGVUb1BhdHRlcm5UeXBlKHRyYWoucm91dGUpO1xyXG4gICAgICAgIHRoaXMucmVhc29uaW5nQmFuay5zdG9yZShwYXR0ZXJuVHlwZSwgdHJhai5lbWJlZGRpbmcpO1xyXG4gICAgICAgIHRoaXMucXVhbGl0eVNhbXBsZXMucHVzaCh0cmFqLnF1YWxpdHkpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgbWFzdGVyIExvUkEgd2VpZ2h0c1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWFzdGVyTG9yYSh0cmFqLmVtYmVkZGluZywgdHJhai5xdWFsaXR5KTtcclxuXHJcbiAgICAgICAgYWNjZXB0ZWQrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3RlZCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b3RhbFRyYWplY3RvcmllcyArPSBhY2NlcHRlZDtcclxuXHJcbiAgICAvLyBSZWNvcmQgY29udHJpYnV0aW9uXHJcbiAgICB0aGlzLmNvbnRyaWJ1dGlvbnMuc2V0KGV4cG9ydERhdGEuYWdlbnRJZCwge1xyXG4gICAgICB0cmFqZWN0b3J5Q291bnQ6IGV4cG9ydERhdGEudHJhamVjdG9yaWVzLmxlbmd0aCxcclxuICAgICAgYXZnUXVhbGl0eTogZXhwb3J0RGF0YS5zdGF0cy5hdmdRdWFsaXR5LFxyXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgIHNlc3Npb25EdXJhdGlvbk1zOiBleHBvcnREYXRhLnNlc3Npb25EdXJhdGlvbk1zLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXV0by1jb25zb2xpZGF0ZSBpZiBuZWVkZWRcclxuICAgIGNvbnN0IGNvbnNvbGlkYXRlZCA9IHRoaXMuc2hvdWxkQ29uc29saWRhdGUoKTtcclxuICAgIGlmIChjb25zb2xpZGF0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JjZUNvbnNvbGlkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWdlbnRJZDogZXhwb3J0RGF0YS5hZ2VudElkLFxyXG4gICAgICB0cmFqZWN0b3JpZXNBY2NlcHRlZDogYWNjZXB0ZWQsXHJcbiAgICAgIHRyYWplY3Rvcmllc1JlamVjdGVkOiByZWplY3RlZCxcclxuICAgICAgY29uc29saWRhdGVkLFxyXG4gICAgICB0b3RhbEFnZW50czogdGhpcy5jb250cmlidXRpb25zLnNpemUsXHJcbiAgICAgIHRvdGFsVHJhamVjdG9yaWVzOiB0aGlzLnRvdGFsVHJhamVjdG9yaWVzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcmNlIGNvbnNvbGlkYXRpb24gKGxlYXJuaW5nKVxyXG4gICAqL1xyXG4gIGZvcmNlQ29uc29saWRhdGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBydW5lZCA9IHRoaXMucmVhc29uaW5nQmFuay5wcnVuZSgwLjMsIDUpO1xyXG4gICAgcmV0dXJuIGBDb25zb2xpZGF0ZWQ6IHBydW5lZCAke3BydW5lZH0gcGF0dGVybnMsICR7dGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJuc30gcmVtYWluaW5nYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnNvbGlkYXRlIGxlYXJuaW5nIChhbGlhcylcclxuICAgKi9cclxuICBjb25zb2xpZGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9yY2VDb25zb2xpZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGluaXRpYWwgcGF0dGVybnMgZm9yIG5ldyBhZ2VudHMgKHdhcm0gc3RhcnQpXHJcbiAgICovXHJcbiAgZ2V0SW5pdGlhbFBhdHRlcm5zKGs6IG51bWJlciA9IDEwKTogTGVhcm5lZFBhdHRlcm5bXSB7XHJcbiAgICBjb25zdCBhbGxQYXR0ZXJucyA9IFtcclxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncXVlcnlfcmVzcG9uc2UnKSxcclxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncm91dGluZycpLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBTb3J0IGJ5IHN1Y2Nlc3MgcmF0ZSBhbmQgcmV0dXJuIHRvcCBrXHJcbiAgICByZXR1cm4gYWxsUGF0dGVybnNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc3VjY2Vzc1JhdGUgLSBhLnN1Y2Nlc3NSYXRlKVxyXG4gICAgICAuc2xpY2UoMCwgayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIGxlYXJuZWQgcGF0dGVybnNcclxuICAgKi9cclxuICBnZXRBbGxQYXR0ZXJucygpOiBMZWFybmVkUGF0dGVybltdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3F1ZXJ5X3Jlc3BvbnNlJyksXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3JvdXRpbmcnKSxcclxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgnY29udGV4dF9yZXRyaWV2YWwnKSxcclxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgnY29ycmVjdGlvbicpLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgc2ltaWxhciBwYXR0ZXJuc1xyXG4gICAqL1xyXG4gIGZpbmRQYXR0ZXJucyhxdWVyeTogRW1iZWRkaW5nLCBrOiBudW1iZXIpOiBMZWFybmVkUGF0dGVybltdIHtcclxuICAgIHJldHVybiB0aGlzLnJlYXNvbmluZ0JhbmsuZmluZFNpbWlsYXIocXVlcnksIGspO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgY29vcmRpbmF0b3IncyBMb1JBIHRvIGlucHV0XHJcbiAgICogT1BUSU1JWkVEOiBQcmUtY29tcHV0ZSBoaWRkZW4gbGF5ZXIgb25jZSwgcmV1c2UgdHlwZWQgYXJyYXlzXHJcbiAgICovXHJcbiAgYXBwbHlMb3JhKGlucHV0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IHJhbmsgPSB0aGlzLmNvbmZpZy5iYXNlTG9yYVJhbms7XHJcbiAgICBjb25zdCBkaW0gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XHJcbiAgICBjb25zdCB3ZWlnaHRzTGVuID0gdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0cy5sZW5ndGg7XHJcblxyXG4gICAgLy8gUHJlLWNvbXB1dGUgaGlkZGVuIGxheWVyIChpbnB1dCBAIEIpXHJcbiAgICBjb25zdCBoaWRkZW4gPSBuZXcgRmxvYXQ2NEFycmF5KHJhbmspO1xyXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rOyByKyspIHtcclxuICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgIGNvbnN0IGJhc2VJZHggPSByICogZGltO1xyXG4gICAgICAvLyBVbnJvbGwgdGhlIGlubmVyIGxvb3BcclxuICAgICAgbGV0IGogPSAwO1xyXG4gICAgICBmb3IgKDsgaiArIDMgPCBkaW0gJiYgYmFzZUlkeCArIGogKyAzIDwgd2VpZ2h0c0xlbjsgaiArPSA0KSB7XHJcbiAgICAgICAgc3VtICs9IHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGpdICogKGlucHV0W2pdIHx8IDApICtcclxuICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgaiArIDFdICogKGlucHV0W2ogKyAxXSB8fCAwKSArXHJcbiAgICAgICAgICAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGogKyAyXSAqIChpbnB1dFtqICsgMl0gfHwgMCkgK1xyXG4gICAgICAgICAgICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqICsgM10gKiAoaW5wdXRbaiArIDNdIHx8IDApO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoOyBqIDwgZGltICYmIGJhc2VJZHggKyBqIDwgd2VpZ2h0c0xlbjsgaisrKSB7XHJcbiAgICAgICAgc3VtICs9IHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGpdICogKGlucHV0W2pdIHx8IDApO1xyXG4gICAgICB9XHJcbiAgICAgIGhpZGRlbltyXSA9IHN1bTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb21wdXRlIG91dHB1dCAoaGlkZGVuIEAgQSArIGlucHV0KVxyXG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IEFycmF5KGlucHV0Lmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpIDwgZGltKSB7XHJcbiAgICAgICAgbGV0IGRlbHRhID0gMDtcclxuICAgICAgICBjb25zdCBiYXNlSWR4ID0gaSAqIHJhbms7XHJcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rICYmIGJhc2VJZHggKyByIDwgd2VpZ2h0c0xlbjsgcisrKSB7XHJcbiAgICAgICAgICBkZWx0YSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyByXSAqIGhpZGRlbltyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIHx8IDApICsgZGVsdGEgKiAwLjE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3V0cHV0W2ldID0gaW5wdXRbaV0gfHwgMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY29vcmRpbmF0b3Igc3RhdGlzdGljc1xyXG4gICAqL1xyXG4gIHN0YXRzKCk6IENvb3JkaW5hdG9yU3RhdHMge1xyXG4gICAgY29uc3QgYXZnUXVhbGl0eSA9IHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoID4gMFxyXG4gICAgICA/IHRoaXMucXVhbGl0eVNhbXBsZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyB0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aFxyXG4gICAgICA6IDA7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29vcmRpbmF0b3JJZDogdGhpcy5jb29yZGluYXRvcklkLFxyXG4gICAgICB0b3RhbEFnZW50czogdGhpcy5jb250cmlidXRpb25zLnNpemUsXHJcbiAgICAgIHRvdGFsVHJhamVjdG9yaWVzOiB0aGlzLnRvdGFsVHJhamVjdG9yaWVzLFxyXG4gICAgICBwYXR0ZXJuc0xlYXJuZWQ6IHRoaXMucmVhc29uaW5nQmFuay5zdGF0cygpLnRvdGFsUGF0dGVybnMsXHJcbiAgICAgIGF2Z1F1YWxpdHksXHJcbiAgICAgIHF1YWxpdHlUaHJlc2hvbGQ6IHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5XHJcbiAgICovXHJcbiAgZ2V0Q29udHJpYnV0aW9ucygpOiBNYXA8c3RyaW5nLCBBZ2VudENvbnRyaWJ1dGlvbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5jb250cmlidXRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0b3RhbCBhZ2VudCBjb3VudFxyXG4gICAqL1xyXG4gIGFnZW50Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyaWJ1dGlvbnMuc2l6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0b3RhbCB0cmFqZWN0b3J5IGNvdW50XHJcbiAgICovXHJcbiAgZ2V0VG90YWxUcmFqZWN0b3JpZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsVHJhamVjdG9yaWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIGNvbnRyaWJ1dGlvbnNcclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJpYnV0aW9ucy5jbGVhcigpO1xyXG4gICAgdGhpcy50b3RhbFRyYWplY3RvcmllcyA9IDA7XHJcbiAgICB0aGlzLnF1YWxpdHlTYW1wbGVzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgY29vcmRpbmF0b3Igc3RhdGVcclxuICAgKi9cclxuICB0b0pTT04oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgIGNvb3JkaW5hdG9ySWQ6IHRoaXMuY29vcmRpbmF0b3JJZCxcclxuICAgICAgc3RhdHM6IHRoaXMuc3RhdHMoKSxcclxuICAgICAgY29udHJpYnV0aW9uczogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuY29udHJpYnV0aW9ucyksXHJcbiAgICAgIHBhdHRlcm5zOiB0aGlzLmdldEFsbFBhdHRlcm5zKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhZ2VudCB3aXRoIGNvb3JkaW5hdG9yJ3MgbGVhcm5lZCBwYXR0ZXJuc1xyXG4gICAqL1xyXG4gIGNyZWF0ZUFnZW50KGFnZW50SWQ6IHN0cmluZyk6IEVwaGVtZXJhbEFnZW50IHtcclxuICAgIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KGFnZW50SWQsIHtcclxuICAgICAgaGlkZGVuRGltOiB0aGlzLmNvbmZpZy5oaWRkZW5EaW0sXHJcbiAgICAgIGVtYmVkZGluZ0RpbTogdGhpcy5jb25maWcuZW1iZWRkaW5nRGltLFxyXG4gICAgICBtaWNyb0xvcmFSYW5rOiB0aGlzLmNvbmZpZy5taWNyb0xvcmFSYW5rLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2FybSBzdGFydDogcHJvY2VzcyBpbml0aWFsIHBhdHRlcm5zIGFzIHBvc2l0aXZlIGV4YW1wbGVzXHJcbiAgICBjb25zdCBpbml0aWFsUGF0dGVybnMgPSB0aGlzLmdldEluaXRpYWxQYXR0ZXJucyg1KTtcclxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpbml0aWFsUGF0dGVybnMpIHtcclxuICAgICAgYWdlbnQucHJvY2Vzc1Rhc2socGF0dGVybi5lbWJlZGRpbmcsIHBhdHRlcm4uc3VjY2Vzc1JhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhZ2VudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvdWxkQ29uc29saWRhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cmlidXRpb25zLnNpemUgJSB0aGlzLmNvbnNvbGlkYXRpb25JbnRlcnZhbCA9PT0gMCAmJlxyXG4gICAgICAgICAgIHRoaXMuY29udHJpYnV0aW9ucy5zaXplID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcm91dGVUb1BhdHRlcm5UeXBlKHJvdXRlPzogc3RyaW5nKTogUGF0dGVyblR5cGUge1xyXG4gICAgaWYgKCFyb3V0ZSkgcmV0dXJuICdxdWVyeV9yZXNwb25zZSc7XHJcbiAgICBpZiAocm91dGUuaW5jbHVkZXMoJ2NvZGUnKSkgcmV0dXJuICdxdWVyeV9yZXNwb25zZSc7XHJcbiAgICBpZiAocm91dGUuaW5jbHVkZXMoJ3JvdXRlJykpIHJldHVybiAncm91dGluZyc7XHJcbiAgICBpZiAocm91dGUuaW5jbHVkZXMoJ21lbW9yeScpKSByZXR1cm4gJ2NvbnRleHRfcmV0cmlldmFsJztcclxuICAgIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNYXN0ZXJMb3JhKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxyID0gMC4wMDA1ICogcXVhbGl0eTsgLy8gU2xvd2VyIGxlYXJuaW5nIGZvciBjb29yZGluYXRvclxyXG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oZW1iZWRkaW5nLmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGRpbSwgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0cy5sZW5ndGgpOyBpKyspIHtcclxuICAgICAgY29uc3QgZ3JhZCA9IGVtYmVkZGluZ1tpICUgZW1iZWRkaW5nLmxlbmd0aF0gKiAocXVhbGl0eSAtIDAuNSk7XHJcbiAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbaV0gKz0gbHIgKiBncmFkO1xyXG5cclxuICAgICAgLy8gRVdDIHJlZ3VsYXJpemF0aW9uIC0gcHJldmVudCBsYXJnZSB3ZWlnaHQgY2hhbmdlc1xyXG4gICAgICBjb25zdCBwZW5hbHR5ID0gdGhpcy5jb25maWcuZXdjTGFtYmRhICogdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tpXSAqIDAuMDAwMTtcclxuICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tpXSAtPSBwZW5hbHR5O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
package/dist/cjs/index.js
CHANGED
|
@@ -101,4 +101,4 @@ Object.defineProperty(exports, "hasSimdSupport", { enumerable: true, get: functi
|
|
|
101
101
|
// Default export
|
|
102
102
|
var engine_1 = require("./engine");
|
|
103
103
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return engine_1.RuvLLM; } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxhQUFhO0FBQ2IsMENBQXdCO0FBRXhCLGNBQWM7QUFDZCwyQ0FBeUI7QUFFekIsa0JBQWtCO0FBQ2xCLHlDQUF1QjtBQUV2QixxQkFBcUI7QUFDckIsNENBQTBCO0FBRTFCLG9CQUFvQjtBQUNwQiw4Q0FBNEI7QUFFNUIsdUJBQXVCO0FBQ3ZCLHlDQUF1QjtBQUV2QixxQkFBcUI7QUFDckIsOENBQTRCO0FBRTVCLGdCQUFnQjtBQUNoQix5Q0FBdUI7QUFFdkIsdUJBQXVCO0FBQ3ZCLDJDQUF5QjtBQUV6QixvQkFBb0I7QUFDcEIsNkNBQTJCO0FBRTNCLDBCQUEwQjtBQUMxQixnREFBOEI7QUFFOUIsZ0NBQWdDO0FBQ2hDLDJDQUF5QjtBQUV6Qix1Q0FBdUM7QUFDdkMsK0NBQTZCO0FBRTdCLDRDQUE0QztBQUM1QyxpREFBK0I7QUFFL0IsNEJBQTRCO0FBQzVCLG1DQUFtRDtBQUExQyxpR0FBQSxPQUFPLE9BQUE7QUFBRSx3R0FBQSxjQUFjLE9BQUE7QUFFaEMsaUJBQWlCO0FBQ2pCLG1DQUE2QztBQUFwQyxpR0FBQSxNQUFNLE9BQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQHJ1dmVjdG9yL3J1dmxsbSAtIFNlbGYtbGVhcm5pbmcgTExNIG9yY2hlc3RyYXRpb25cclxuICpcclxuICogUnV2TExNIGNvbWJpbmVzIFNPTkEgYWRhcHRpdmUgbGVhcm5pbmcgd2l0aCBITlNXIG1lbW9yeSxcclxuICogRmFzdEdSTk4gcm91dGluZywgYW5kIFNJTUQtb3B0aW1pemVkIGluZmVyZW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpbXBvcnQgeyBSdXZMTE0sIFNlc3Npb25NYW5hZ2VyLCBTb25hQ29vcmRpbmF0b3IgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogY29uc3QgbGxtID0gbmV3IFJ1dkxMTSh7IGxlYXJuaW5nRW5hYmxlZDogdHJ1ZSB9KTtcclxuICogY29uc3Qgc2Vzc2lvbnMgPSBuZXcgU2Vzc2lvbk1hbmFnZXIobGxtKTtcclxuICogY29uc3Qgc29uYSA9IG5ldyBTb25hQ29vcmRpbmF0b3IoKTtcclxuICpcclxuICogLy8gUXVlcnkgd2l0aCBzZXNzaW9uIGNvbnRleHRcclxuICogY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25zLmNyZWF0ZSgpO1xyXG4gKiBjb25zdCByZXNwb25zZSA9IHNlc3Npb25zLmNoYXQoc2Vzc2lvbi5pZCwgJ1doYXQgaXMgQUk/Jyk7XHJcbiAqXHJcbiAqIC8vIFRyYWNrIGxlYXJuaW5nIHRyYWplY3RvcnlcclxuICogY29uc3QgdHJhamVjdG9yeSA9IG5ldyBUcmFqZWN0b3J5QnVpbGRlcigpXHJcbiAqICAgLnN0YXJ0U3RlcCgncXVlcnknLCAnV2hhdCBpcyBBST8nKVxyXG4gKiAgIC5lbmRTdGVwKHJlc3BvbnNlLnRleHQsIHJlc3BvbnNlLmNvbmZpZGVuY2UpXHJcbiAqICAgLmNvbXBsZXRlKCdzdWNjZXNzJyk7XHJcbiAqXHJcbiAqIHNvbmEucmVjb3JkVHJhamVjdG9yeSh0cmFqZWN0b3J5KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBleGFtcGxlIEZlZGVyYXRlZCBMZWFybmluZ1xyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IEVwaGVtZXJhbEFnZW50LCBGZWRlcmF0ZWRDb29yZGluYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xyXG4gKlxyXG4gKiAvLyBDZW50cmFsIGNvb3JkaW5hdG9yXHJcbiAqIGNvbnN0IGNvb3JkaW5hdG9yID0gbmV3IEZlZGVyYXRlZENvb3JkaW5hdG9yKCdjb29yZC0xJyk7XHJcbiAqXHJcbiAqIC8vIEVwaGVtZXJhbCBhZ2VudHMgcHJvY2VzcyB0YXNrcyBhbmQgZXhwb3J0XHJcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KCdhZ2VudC0xJyk7XHJcbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZywgMC45KTtcclxuICogY29uc3QgZXhwb3J0RGF0YSA9IGFnZW50LmV4cG9ydFN0YXRlKCk7XHJcbiAqXHJcbiAqIC8vIEFnZ3JlZ2F0ZSBsZWFybmluZ1xyXG4gKiBjb29yZGluYXRvci5hZ2dyZWdhdGUoZXhwb3J0RGF0YSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXhhbXBsZSBMb1JBIEFkYXB0ZXJzXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIExvcmFNYW5hZ2VyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcbiAqXHJcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgTG9yYUFkYXB0ZXIoeyByYW5rOiA4LCBhbHBoYTogMTYgfSk7XHJcbiAqIGNvbnN0IG91dHB1dCA9IGFkYXB0ZXIuZm9yd2FyZChpbnB1dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcbi8vIENvcmUgdHlwZXNcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vLyBNYWluIGVuZ2luZVxyXG5leHBvcnQgKiBmcm9tICcuL2VuZ2luZSc7XHJcblxyXG4vLyBTSU1EIG9wZXJhdGlvbnNcclxuZXhwb3J0ICogZnJvbSAnLi9zaW1kJztcclxuXHJcbi8vIFNlc3Npb24gbWFuYWdlbWVudFxyXG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24nO1xyXG5cclxuLy8gU3RyZWFtaW5nIHN1cHBvcnRcclxuZXhwb3J0ICogZnJvbSAnLi9zdHJlYW1pbmcnO1xyXG5cclxuLy8gU09OQSBsZWFybmluZyBzeXN0ZW1cclxuZXhwb3J0ICogZnJvbSAnLi9zb25hJztcclxuXHJcbi8vIEZlZGVyYXRlZCBsZWFybmluZ1xyXG5leHBvcnQgKiBmcm9tICcuL2ZlZGVyYXRlZCc7XHJcblxyXG4vLyBMb1JBIGFkYXB0ZXJzXHJcbmV4cG9ydCAqIGZyb20gJy4vbG9yYSc7XHJcblxyXG4vLyBFeHBvcnQvc2VyaWFsaXphdGlvblxyXG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydCc7XHJcblxyXG4vLyBUcmFpbmluZyBwaXBlbGluZVxyXG5leHBvcnQgKiBmcm9tICcuL3RyYWluaW5nJztcclxuXHJcbi8vIENvbnRyYXN0aXZlIGZpbmUtdHVuaW5nXHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhc3RpdmUnO1xyXG5cclxuLy8gTW9kZWwgZG93bmxvYWRlciBhbmQgcmVnaXN0cnlcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xyXG5cclxuLy8gQmVuY2htYXJrcyBmb3IgQ2xhdWRlIENvZGUgdXNlIGNhc2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vYmVuY2htYXJrcyc7XHJcblxyXG4vLyBFeHRlcm5hbCBJbnRlbGxpZ2VuY2UgUHJvdmlkZXJzIChBRFItMDQzKVxyXG5leHBvcnQgKiBmcm9tICcuL2ludGVsbGlnZW5jZSc7XHJcblxyXG4vLyBOYXRpdmUgYmluZGluZ3MgdXRpbGl0aWVzXHJcbmV4cG9ydCB7IHZlcnNpb24sIGhhc1NpbWRTdXBwb3J0IH0gZnJvbSAnLi9uYXRpdmUnO1xyXG5cclxuLy8gRGVmYXVsdCBleHBvcnRcclxuZXhwb3J0IHsgUnV2TExNIGFzIGRlZmF1bHQgfSBmcm9tICcuL2VuZ2luZSc7XHJcbiJdfQ==
|
package/dist/cjs/intelligence.js
CHANGED
|
@@ -223,4 +223,4 @@ class IntelligenceLoader {
|
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
225
|
exports.IntelligenceLoader = IntelligenceLoader;
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWxsaWdlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVsbGlnZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0Isd0NBQXdDO0FBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUMseUNBQXlDO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsS0FBTSxDQUFDO0FBRXBDLDJCQUEyQjtBQUMzQixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRTFFLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBc0Z6RCxTQUFTLGdCQUFnQixDQUFDLEdBQVk7SUFDcEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDeEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFZO0lBQ25DLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7SUFDbkMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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IEludGVsbGlnZW5jZSBQcm92aWRlcnMgZm9yIFNPTkEgTGVhcm5pbmcgKEFEUi0wNDMpXG4gKlxuICogVHlwZVNjcmlwdCBiaW5kaW5ncyBmb3IgdGhlIEludGVsbGlnZW5jZVByb3ZpZGVyIHRyYWl0LCBlbmFibGluZ1xuICogZXh0ZXJuYWwgc3lzdGVtcyB0byBmZWVkIHF1YWxpdHkgc2lnbmFscyBpbnRvIFJ1dkxMTSdzIGxlYXJuaW5nIGxvb3BzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBJbnRlbGxpZ2VuY2VMb2FkZXIsIEZpbGVTaWduYWxQcm92aWRlciwgUXVhbGl0eVNpZ25hbCB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBJbnRlbGxpZ2VuY2VMb2FkZXIoKTtcbiAqIGxvYWRlci5yZWdpc3RlclByb3ZpZGVyKG5ldyBGaWxlU2lnbmFsUHJvdmlkZXIoJy4vc2lnbmFscy5qc29uJykpO1xuICpcbiAqIGNvbnN0IHsgc2lnbmFscywgZXJyb3JzIH0gPSBsb2FkZXIubG9hZEFsbFNpZ25hbHMoKTtcbiAqIGNvbnNvbGUubG9nKGBMb2FkZWQgJHtzaWduYWxzLmxlbmd0aH0gc2lnbmFsc2ApO1xuICogYGBgXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqIE1heGltdW0gc2lnbmFsIGZpbGUgc2l6ZSAoMTAgTWlCKSAqL1xuY29uc3QgTUFYX1NJR05BTF9GSUxFX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuXG4vKiogTWF4aW11bSBudW1iZXIgb2Ygc2lnbmFscyBwZXIgZmlsZSAqL1xuY29uc3QgTUFYX1NJR05BTFNfUEVSX0ZJTEUgPSAxMF8wMDA7XG5cbi8qKiBWYWxpZCBvdXRjb21lIHZhbHVlcyAqL1xuY29uc3QgVkFMSURfT1VUQ09NRVMgPSBuZXcgU2V0KFsnc3VjY2VzcycsICdwYXJ0aWFsX3N1Y2Nlc3MnLCAnZmFpbHVyZSddKTtcblxuLyoqIFZhbGlkIGh1bWFuIHZlcmRpY3QgdmFsdWVzICovXG5jb25zdCBWQUxJRF9WRVJESUNUUyA9IG5ldyBTZXQoWydhcHByb3ZlZCcsICdyZWplY3RlZCddKTtcblxuLyoqXG4gKiBBIHF1YWxpdHkgc2lnbmFsIGZyb20gYW4gZXh0ZXJuYWwgc3lzdGVtLlxuICpcbiAqIFJlcHJlc2VudHMgb25lIGNvbXBsZXRlZCB0YXNrIHdpdGggcXVhbGl0eSBhc3Nlc3NtZW50IGRhdGFcbiAqIHRoYXQgY2FuIGZlZWQgaW50byBTT05BIHRyYWplY3RvcmllcywgdGhlIGVtYmVkZGluZyBjbGFzc2lmaWVyLFxuICogYW5kIG1vZGVsIHJvdXRlciBjYWxpYnJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5U2lnbmFsIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNpZ25hbCAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgdGFzayBkZXNjcmlwdGlvbiAodXNlZCBmb3IgZW1iZWRkaW5nIGdlbmVyYXRpb24pICovXG4gIHRhc2tEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogRXhlY3V0aW9uIG91dGNvbWUgKi9cbiAgb3V0Y29tZTogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gIC8qKiBDb21wb3NpdGUgcXVhbGl0eSBzY29yZSAoMC4wIC0gMS4wKSAqL1xuICBxdWFsaXR5U2NvcmU6IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuIHZlcmRpY3QgKi9cbiAgaHVtYW5WZXJkaWN0PzogJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCc7XG4gIC8qKiBPcHRpb25hbCBzdHJ1Y3R1cmVkIHF1YWxpdHkgZmFjdG9ycyBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cbiAgcXVhbGl0eUZhY3RvcnM/OiBRdWFsaXR5RmFjdG9ycztcbiAgLyoqIElTTyA4NjAxIHRpbWVzdGFtcCBvZiB0YXNrIGNvbXBsZXRpb24gKi9cbiAgY29tcGxldGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFudWxhciBxdWFsaXR5IGZhY3RvciBicmVha2Rvd24uXG4gKlxuICogTm90IGFsbCBwcm92aWRlcnMgd2lsbCBoYXZlIGFsbCBmYWN0b3JzLiBVbmRlZmluZWQgZmllbGRzIG1lYW5cbiAqIFwibm90IGFzc2Vzc2VkXCIgKGRpc3RpbmN0IGZyb20gMC4wLCB3aGljaCBtZWFucyBcImFzc2Vzc2VkIGFzIHplcm9cIikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUZhY3RvcnMge1xuICBhY2NlcHRhbmNlQ3JpdGVyaWFNZXQ/OiBudW1iZXI7XG4gIHRlc3RzUGFzc2luZz86IG51bWJlcjtcbiAgbm9SZWdyZXNzaW9ucz86IG51bWJlcjtcbiAgbGludENsZWFuPzogbnVtYmVyO1xuICB0eXBlQ2hlY2tDbGVhbj86IG51bWJlcjtcbiAgZm9sbG93c1BhdHRlcm5zPzogbnVtYmVyO1xuICBjb250ZXh0UmVsZXZhbmNlPzogbnVtYmVyO1xuICByZWFzb25pbmdDb2hlcmVuY2U/OiBudW1iZXI7XG4gIGV4ZWN1dGlvbkVmZmljaWVuY3k/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUXVhbGl0eSB3ZWlnaHQgb3ZlcnJpZGVzIGZyb20gYSBwcm92aWRlci5cbiAqXG4gKiBXZWlnaHRzIHNob3VsZCBzdW0gdG8gYXBwcm94aW1hdGVseSAxLjAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cyB7XG4gIHRhc2tDb21wbGV0aW9uOiBudW1iZXI7XG4gIGNvZGVRdWFsaXR5OiBudW1iZXI7XG4gIHByb2Nlc3M6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFcnJvciBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBiYXRjaCBsb2FkaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRXJyb3Ige1xuICBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBncm91cGVkIGxvYWRpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJSZXN1bHQge1xuICBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdO1xuICB3ZWlnaHRzPzogUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGV4dGVybmFsIHN5c3RlbXMgdGhhdCBzdXBwbHkgcXVhbGl0eSBzaWduYWxzIHRvIFJ1dkxMTS5cbiAqXG4gKiBJbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgYW5kIHJlZ2lzdGVyIHdpdGggSW50ZWxsaWdlbmNlTG9hZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVsbGlnZW5jZVByb3ZpZGVyIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgcHJvdmlkZXIgKi9cbiAgbmFtZSgpOiBzdHJpbmc7XG4gIC8qKiBMb2FkIHF1YWxpdHkgc2lnbmFscyBmcm9tIHRoaXMgcHJvdmlkZXIncyBkYXRhIHNvdXJjZSAqL1xuICBsb2FkU2lnbmFscygpOiBRdWFsaXR5U2lnbmFsW107XG4gIC8qKiBPcHRpb25hbCBxdWFsaXR5IHdlaWdodCBvdmVycmlkZXMgKi9cbiAgcXVhbGl0eVdlaWdodHM/KCk6IFByb3ZpZGVyUXVhbGl0eVdlaWdodHMgfCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbiA9IE51bWJlcih2YWwpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEgPyBuIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU91dGNvbWUodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIHtcbiAgY29uc3QgcyA9IFN0cmluZyh2YWwgPz8gJ2ZhaWx1cmUnKTtcbiAgcmV0dXJuIFZBTElEX09VVENPTUVTLmhhcyhzKSA/IHMgYXMgUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIDogJ2ZhaWx1cmUnO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZlcmRpY3QodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnaHVtYW5WZXJkaWN0J10gfCB1bmRlZmluZWQge1xuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzID0gU3RyaW5nKHZhbCk7XG4gIHJldHVybiBWQUxJRF9WRVJESUNUUy5oYXMocykgPyBzIGFzIFF1YWxpdHlTaWduYWxbJ2h1bWFuVmVyZGljdCddIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjb3JlKHZhbDogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsID8/IDApO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDwgMCB8fCBuID4gMSkgcmV0dXJuIDA7XG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBtYXBRdWFsaXR5RmFjdG9ycyhyYXc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVhbGl0eUZhY3RvcnMge1xuICByZXR1cm4ge1xuICAgIGFjY2VwdGFuY2VDcml0ZXJpYU1ldDogYXNPcHRpb25hbE51bWJlcihyYXcuYWNjZXB0YW5jZV9jcml0ZXJpYV9tZXQpLFxuICAgIHRlc3RzUGFzc2luZzogYXNPcHRpb25hbE51bWJlcihyYXcudGVzdHNfcGFzc2luZyksXG4gICAgbm9SZWdyZXNzaW9uczogYXNPcHRpb25hbE51bWJlcihyYXcubm9fcmVncmVzc2lvbnMpLFxuICAgIGxpbnRDbGVhbjogYXNPcHRpb25hbE51bWJlcihyYXcubGludF9jbGVhbiksXG4gICAgdHlwZUNoZWNrQ2xlYW46IGFzT3B0aW9uYWxOdW1iZXIocmF3LnR5cGVfY2hlY2tfY2xlYW4pLFxuICAgIGZvbGxvd3NQYXR0ZXJuczogYXNPcHRpb25hbE51bWJlcihyYXcuZm9sbG93c19wYXR0ZXJucyksXG4gICAgY29udGV4dFJlbGV2YW5jZTogYXNPcHRpb25hbE51bWJlcihyYXcuY29udGV4dF9yZWxldmFuY2UpLFxuICAgIHJlYXNvbmluZ0NvaGVyZW5jZTogYXNPcHRpb25hbE51bWJlcihyYXcucmVhc29uaW5nX2NvaGVyZW5jZSksXG4gICAgZXhlY3V0aW9uRWZmaWNpZW5jeTogYXNPcHRpb25hbE51bWJlcihyYXcuZXhlY3V0aW9uX2VmZmljaWVuY3kpLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWx0LWluIGZpbGUtYmFzZWQgaW50ZWxsaWdlbmNlIHByb3ZpZGVyLlxuICpcbiAqIFJlYWRzIHF1YWxpdHkgc2lnbmFscyBmcm9tIGEgSlNPTiBmaWxlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHByb3ZpZGVyXG4gKiBmb3Igbm9uLVJ1c3QgaW50ZWdyYXRpb25zIHRoYXQgd3JpdGUgc2lnbmFsIGZpbGVzLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZVNpZ25hbFByb3ZpZGVyIGltcGxlbWVudHMgSW50ZWxsaWdlbmNlUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZmlsZS1zaWduYWxzJztcbiAgfVxuXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIChwcmV2ZW50IE9PTSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmModGhpcy5maWxlUGF0aCk7XG4gICAgaWYgKHN0YXQuc2l6ZSA+IE1BWF9TSUdOQUxfRklMRV9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTaWduYWwgZmlsZSBleGNlZWRzIG1heCBzaXplICgke3N0YXQuc2l6ZX0gYnl0ZXMsIGxpbWl0ICR7TUFYX1NJR05BTF9GSUxFX1NJWkV9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKHRoaXMuZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGRhdGE6IHVua25vd24gPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc2lnbmFsIGNvdW50XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gTUFYX1NJR05BTFNfUEVSX0ZJTEUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNpZ25hbCBmaWxlIGNvbnRhaW5zICR7ZGF0YS5sZW5ndGh9IHNpZ25hbHMsIG1heCBpcyAke01BWF9TSUdOQUxTX1BFUl9GSUxFfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgcWZSYXcgPSAoaXRlbS5xdWFsaXR5X2ZhY3RvcnMgPz8gaXRlbS5xdWFsaXR5RmFjdG9ycykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogU3RyaW5nKGl0ZW0uaWQgPz8gJycpLFxuICAgICAgICB0YXNrRGVzY3JpcHRpb246IFN0cmluZyhpdGVtLnRhc2tfZGVzY3JpcHRpb24gPz8gaXRlbS50YXNrRGVzY3JpcHRpb24gPz8gJycpLFxuICAgICAgICBvdXRjb21lOiB2YWxpZGF0ZU91dGNvbWUoaXRlbS5vdXRjb21lKSxcbiAgICAgICAgcXVhbGl0eVNjb3JlOiB2YWxpZGF0ZVNjb3JlKGl0ZW0ucXVhbGl0eV9zY29yZSA/PyBpdGVtLnF1YWxpdHlTY29yZSksXG4gICAgICAgIGh1bWFuVmVyZGljdDogdmFsaWRhdGVWZXJkaWN0KGl0ZW0uaHVtYW5fdmVyZGljdCA/PyBpdGVtLmh1bWFuVmVyZGljdCksXG4gICAgICAgIHF1YWxpdHlGYWN0b3JzOiBxZlJhdyA/IG1hcFF1YWxpdHlGYWN0b3JzKHFmUmF3KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcGxldGVkQXQ6IFN0cmluZyhpdGVtLmNvbXBsZXRlZF9hdCA/PyBpdGVtLmNvbXBsZXRlZEF0ID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcXVhbGl0eVdlaWdodHMoKTogUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cyB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdlaWdodHNQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgJ3F1YWxpdHktd2VpZ2h0cy5qc29uJyk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMod2VpZ2h0c1BhdGgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKHdlaWdodHNQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrQ29tcGxldGlvbjogTnVtYmVyKGRhdGEudGFza19jb21wbGV0aW9uID8/IGRhdGEudGFza0NvbXBsZXRpb24gPz8gMC41KSxcbiAgICAgICAgY29kZVF1YWxpdHk6IE51bWJlcihkYXRhLmNvZGVfcXVhbGl0eSA/PyBkYXRhLmNvZGVRdWFsaXR5ID8/IDAuMyksXG4gICAgICAgIHByb2Nlc3M6IE51bWJlcihkYXRhLnByb2Nlc3MgPz8gMC4yKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgcXVhbGl0eSBzaWduYWxzIGZyb20gbXVsdGlwbGUgcmVnaXN0ZXJlZCBwcm92aWRlcnMuXG4gKlxuICogSWYgbm8gcHJvdmlkZXJzIGFyZSByZWdpc3RlcmVkLCBsb2FkQWxsU2lnbmFscyByZXR1cm5zIGVtcHR5IGFycmF5c1xuICogd2l0aCB6ZXJvIG92ZXJoZWFkLlxuICovXG5leHBvcnQgY2xhc3MgSW50ZWxsaWdlbmNlTG9hZGVyIHtcbiAgcHJpdmF0ZSBwcm92aWRlcnM6IEludGVsbGlnZW5jZVByb3ZpZGVyW10gPSBbXTtcblxuICAvKiogUmVnaXN0ZXIgYW4gZXh0ZXJuYWwgaW50ZWxsaWdlbmNlIHByb3ZpZGVyICovXG4gIHJlZ2lzdGVyUHJvdmlkZXIocHJvdmlkZXI6IEludGVsbGlnZW5jZVByb3ZpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgcHJvdmlkZXJzICovXG4gIGdldCBwcm92aWRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBwcm92aWRlcnMgKi9cbiAgZ2V0IHByb3ZpZGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLm5hbWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBzaWduYWxzIGZyb20gYWxsIHJlZ2lzdGVyZWQgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBOb24tZmF0YWw6IGlmIGEgcHJvdmlkZXIgZmFpbHMsIGl0cyBlcnJvciBpcyBjYXB0dXJlZCBidXRcbiAgICogb3RoZXIgcHJvdmlkZXJzIGNvbnRpbnVlIGxvYWRpbmcuXG4gICAqL1xuICBsb2FkQWxsU2lnbmFscygpOiB7IHNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXTsgZXJyb3JzOiBQcm92aWRlckVycm9yW10gfSB7XG4gICAgY29uc3Qgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdID0gW107XG4gICAgY29uc3QgZXJyb3JzOiBQcm92aWRlckVycm9yW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdGhpcy5wcm92aWRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XG4gICAgICAgIHNpZ25hbHMucHVzaCguLi5wcm92aWRlclNpZ25hbHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiBwcm92aWRlci5uYW1lKCksXG4gICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzaWduYWxzLCBlcnJvcnMgfTtcbiAgfVxuXG4gIC8qKiBMb2FkIHNpZ25hbHMgZ3JvdXBlZCBieSBwcm92aWRlciB3aXRoIHdlaWdodCBvdmVycmlkZXMgKi9cbiAgbG9hZEdyb3VwZWQoKTogUHJvdmlkZXJSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiB7XG4gICAgICBsZXQgcHJvdmlkZXJTaWduYWxzOiBRdWFsaXR5U2lnbmFsW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm9uLWZhdGFsXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlck5hbWU6IHByb3ZpZGVyLm5hbWUoKSxcbiAgICAgICAgc2lnbmFsczogcHJvdmlkZXJTaWduYWxzLFxuICAgICAgICB3ZWlnaHRzOiBwcm92aWRlci5xdWFsaXR5V2VpZ2h0cz8uKCksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWxsaWdlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVsbGlnZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0Isd0NBQXdDO0FBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUMseUNBQXlDO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsS0FBTSxDQUFDO0FBRXBDLDJCQUEyQjtBQUMzQixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRTFFLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBc0Z6RCxTQUFTLGdCQUFnQixDQUFDLEdBQVk7SUFDcEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDeEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFZO0lBQ25DLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7SUFDbkMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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YWwgSW50ZWxsaWdlbmNlIFByb3ZpZGVycyBmb3IgU09OQSBMZWFybmluZyAoQURSLTA0MylcclxuICpcclxuICogVHlwZVNjcmlwdCBiaW5kaW5ncyBmb3IgdGhlIEludGVsbGlnZW5jZVByb3ZpZGVyIHRyYWl0LCBlbmFibGluZ1xyXG4gKiBleHRlcm5hbCBzeXN0ZW1zIHRvIGZlZWQgcXVhbGl0eSBzaWduYWxzIGludG8gUnV2TExNJ3MgbGVhcm5pbmcgbG9vcHMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgSW50ZWxsaWdlbmNlTG9hZGVyLCBGaWxlU2lnbmFsUHJvdmlkZXIsIFF1YWxpdHlTaWduYWwgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEludGVsbGlnZW5jZUxvYWRlcigpO1xyXG4gKiBsb2FkZXIucmVnaXN0ZXJQcm92aWRlcihuZXcgRmlsZVNpZ25hbFByb3ZpZGVyKCcuL3NpZ25hbHMuanNvbicpKTtcclxuICpcclxuICogY29uc3QgeyBzaWduYWxzLCBlcnJvcnMgfSA9IGxvYWRlci5sb2FkQWxsU2lnbmFscygpO1xyXG4gKiBjb25zb2xlLmxvZyhgTG9hZGVkICR7c2lnbmFscy5sZW5ndGh9IHNpZ25hbHNgKTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuLyoqIE1heGltdW0gc2lnbmFsIGZpbGUgc2l6ZSAoMTAgTWlCKSAqL1xyXG5jb25zdCBNQVhfU0lHTkFMX0ZJTEVfU0laRSA9IDEwICogMTAyNCAqIDEwMjQ7XHJcblxyXG4vKiogTWF4aW11bSBudW1iZXIgb2Ygc2lnbmFscyBwZXIgZmlsZSAqL1xyXG5jb25zdCBNQVhfU0lHTkFMU19QRVJfRklMRSA9IDEwXzAwMDtcclxuXHJcbi8qKiBWYWxpZCBvdXRjb21lIHZhbHVlcyAqL1xyXG5jb25zdCBWQUxJRF9PVVRDT01FUyA9IG5ldyBTZXQoWydzdWNjZXNzJywgJ3BhcnRpYWxfc3VjY2VzcycsICdmYWlsdXJlJ10pO1xyXG5cclxuLyoqIFZhbGlkIGh1bWFuIHZlcmRpY3QgdmFsdWVzICovXHJcbmNvbnN0IFZBTElEX1ZFUkRJQ1RTID0gbmV3IFNldChbJ2FwcHJvdmVkJywgJ3JlamVjdGVkJ10pO1xyXG5cclxuLyoqXHJcbiAqIEEgcXVhbGl0eSBzaWduYWwgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0uXHJcbiAqXHJcbiAqIFJlcHJlc2VudHMgb25lIGNvbXBsZXRlZCB0YXNrIHdpdGggcXVhbGl0eSBhc3Nlc3NtZW50IGRhdGFcclxuICogdGhhdCBjYW4gZmVlZCBpbnRvIFNPTkEgdHJhamVjdG9yaWVzLCB0aGUgZW1iZWRkaW5nIGNsYXNzaWZpZXIsXHJcbiAqIGFuZCBtb2RlbCByb3V0ZXIgY2FsaWJyYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlTaWduYWwge1xyXG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzaWduYWwgKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBIdW1hbi1yZWFkYWJsZSB0YXNrIGRlc2NyaXB0aW9uICh1c2VkIGZvciBlbWJlZGRpbmcgZ2VuZXJhdGlvbikgKi9cclxuICB0YXNrRGVzY3JpcHRpb246IHN0cmluZztcclxuICAvKiogRXhlY3V0aW9uIG91dGNvbWUgKi9cclxuICBvdXRjb21lOiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcclxuICAvKiogQ29tcG9zaXRlIHF1YWxpdHkgc2NvcmUgKDAuMCAtIDEuMCkgKi9cclxuICBxdWFsaXR5U2NvcmU6IG51bWJlcjtcclxuICAvKiogT3B0aW9uYWwgaHVtYW4gdmVyZGljdCAqL1xyXG4gIGh1bWFuVmVyZGljdD86ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnO1xyXG4gIC8qKiBPcHRpb25hbCBzdHJ1Y3R1cmVkIHF1YWxpdHkgZmFjdG9ycyBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cclxuICBxdWFsaXR5RmFjdG9ycz86IFF1YWxpdHlGYWN0b3JzO1xyXG4gIC8qKiBJU08gODYwMSB0aW1lc3RhbXAgb2YgdGFzayBjb21wbGV0aW9uICovXHJcbiAgY29tcGxldGVkQXQ6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdyYW51bGFyIHF1YWxpdHkgZmFjdG9yIGJyZWFrZG93bi5cclxuICpcclxuICogTm90IGFsbCBwcm92aWRlcnMgd2lsbCBoYXZlIGFsbCBmYWN0b3JzLiBVbmRlZmluZWQgZmllbGRzIG1lYW5cclxuICogXCJub3QgYXNzZXNzZWRcIiAoZGlzdGluY3QgZnJvbSAwLjAsIHdoaWNoIG1lYW5zIFwiYXNzZXNzZWQgYXMgemVyb1wiKS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUZhY3RvcnMge1xyXG4gIGFjY2VwdGFuY2VDcml0ZXJpYU1ldD86IG51bWJlcjtcclxuICB0ZXN0c1Bhc3Npbmc/OiBudW1iZXI7XHJcbiAgbm9SZWdyZXNzaW9ucz86IG51bWJlcjtcclxuICBsaW50Q2xlYW4/OiBudW1iZXI7XHJcbiAgdHlwZUNoZWNrQ2xlYW4/OiBudW1iZXI7XHJcbiAgZm9sbG93c1BhdHRlcm5zPzogbnVtYmVyO1xyXG4gIGNvbnRleHRSZWxldmFuY2U/OiBudW1iZXI7XHJcbiAgcmVhc29uaW5nQ29oZXJlbmNlPzogbnVtYmVyO1xyXG4gIGV4ZWN1dGlvbkVmZmljaWVuY3k/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBRdWFsaXR5IHdlaWdodCBvdmVycmlkZXMgZnJvbSBhIHByb3ZpZGVyLlxyXG4gKlxyXG4gKiBXZWlnaHRzIHNob3VsZCBzdW0gdG8gYXBwcm94aW1hdGVseSAxLjAuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyUXVhbGl0eVdlaWdodHMge1xyXG4gIHRhc2tDb21wbGV0aW9uOiBudW1iZXI7XHJcbiAgY29kZVF1YWxpdHk6IG51bWJlcjtcclxuICBwcm9jZXNzOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFcnJvciBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBiYXRjaCBsb2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckVycm9yIHtcclxuICBwcm92aWRlck5hbWU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXN1bHQgZnJvbSBhIHNpbmdsZSBwcm92aWRlciBkdXJpbmcgZ3JvdXBlZCBsb2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclJlc3VsdCB7XHJcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdO1xyXG4gIHdlaWdodHM/OiBQcm92aWRlclF1YWxpdHlXZWlnaHRzO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBleHRlcm5hbCBzeXN0ZW1zIHRoYXQgc3VwcGx5IHF1YWxpdHkgc2lnbmFscyB0byBSdXZMTE0uXHJcbiAqXHJcbiAqIEltcGxlbWVudCB0aGlzIGludGVyZmFjZSBhbmQgcmVnaXN0ZXIgd2l0aCBJbnRlbGxpZ2VuY2VMb2FkZXIuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEludGVsbGlnZW5jZVByb3ZpZGVyIHtcclxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBwcm92aWRlciAqL1xyXG4gIG5hbWUoKTogc3RyaW5nO1xyXG4gIC8qKiBMb2FkIHF1YWxpdHkgc2lnbmFscyBmcm9tIHRoaXMgcHJvdmlkZXIncyBkYXRhIHNvdXJjZSAqL1xyXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXTtcclxuICAvKiogT3B0aW9uYWwgcXVhbGl0eSB3ZWlnaHQgb3ZlcnJpZGVzICovXHJcbiAgcXVhbGl0eVdlaWdodHM/KCk6IFByb3ZpZGVyUXVhbGl0eVdlaWdodHMgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsKTtcclxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEgPyBuIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZU91dGNvbWUodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIHtcclxuICBjb25zdCBzID0gU3RyaW5nKHZhbCA/PyAnZmFpbHVyZScpO1xyXG4gIHJldHVybiBWQUxJRF9PVVRDT01FUy5oYXMocykgPyBzIGFzIFF1YWxpdHlTaWduYWxbJ291dGNvbWUnXSA6ICdmYWlsdXJlJztcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVWZXJkaWN0KHZhbDogdW5rbm93bik6IFF1YWxpdHlTaWduYWxbJ2h1bWFuVmVyZGljdCddIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGNvbnN0IHMgPSBTdHJpbmcodmFsKTtcclxuICByZXR1cm4gVkFMSURfVkVSRElDVFMuaGFzKHMpID8gcyBhcyBRdWFsaXR5U2lnbmFsWydodW1hblZlcmRpY3QnXSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVTY29yZSh2YWw6IHVua25vd24pOiBudW1iZXIge1xyXG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsID8/IDApO1xyXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPCAwIHx8IG4gPiAxKSByZXR1cm4gMDtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFwUXVhbGl0eUZhY3RvcnMocmF3OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFF1YWxpdHlGYWN0b3JzIHtcclxuICByZXR1cm4ge1xyXG4gICAgYWNjZXB0YW5jZUNyaXRlcmlhTWV0OiBhc09wdGlvbmFsTnVtYmVyKHJhdy5hY2NlcHRhbmNlX2NyaXRlcmlhX21ldCksXHJcbiAgICB0ZXN0c1Bhc3Npbmc6IGFzT3B0aW9uYWxOdW1iZXIocmF3LnRlc3RzX3Bhc3NpbmcpLFxyXG4gICAgbm9SZWdyZXNzaW9uczogYXNPcHRpb25hbE51bWJlcihyYXcubm9fcmVncmVzc2lvbnMpLFxyXG4gICAgbGludENsZWFuOiBhc09wdGlvbmFsTnVtYmVyKHJhdy5saW50X2NsZWFuKSxcclxuICAgIHR5cGVDaGVja0NsZWFuOiBhc09wdGlvbmFsTnVtYmVyKHJhdy50eXBlX2NoZWNrX2NsZWFuKSxcclxuICAgIGZvbGxvd3NQYXR0ZXJuczogYXNPcHRpb25hbE51bWJlcihyYXcuZm9sbG93c19wYXR0ZXJucyksXHJcbiAgICBjb250ZXh0UmVsZXZhbmNlOiBhc09wdGlvbmFsTnVtYmVyKHJhdy5jb250ZXh0X3JlbGV2YW5jZSksXHJcbiAgICByZWFzb25pbmdDb2hlcmVuY2U6IGFzT3B0aW9uYWxOdW1iZXIocmF3LnJlYXNvbmluZ19jb2hlcmVuY2UpLFxyXG4gICAgZXhlY3V0aW9uRWZmaWNpZW5jeTogYXNPcHRpb25hbE51bWJlcihyYXcuZXhlY3V0aW9uX2VmZmljaWVuY3kpLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsdC1pbiBmaWxlLWJhc2VkIGludGVsbGlnZW5jZSBwcm92aWRlci5cclxuICpcclxuICogUmVhZHMgcXVhbGl0eSBzaWduYWxzIGZyb20gYSBKU09OIGZpbGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgcHJvdmlkZXJcclxuICogZm9yIG5vbi1SdXN0IGludGVncmF0aW9ucyB0aGF0IHdyaXRlIHNpZ25hbCBmaWxlcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGaWxlU2lnbmFsUHJvdmlkZXIgaW1wbGVtZW50cyBJbnRlbGxpZ2VuY2VQcm92aWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcclxuICB9XHJcblxyXG4gIG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZmlsZS1zaWduYWxzJztcclxuICB9XHJcblxyXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXSB7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5maWxlUGF0aCkpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgcmVhZGluZyAocHJldmVudCBPT00pXHJcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmModGhpcy5maWxlUGF0aCk7XHJcbiAgICBpZiAoc3RhdC5zaXplID4gTUFYX1NJR05BTF9GSUxFX1NJWkUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBTaWduYWwgZmlsZSBleGNlZWRzIG1heCBzaXplICgke3N0YXQuc2l6ZX0gYnl0ZXMsIGxpbWl0ICR7TUFYX1NJR05BTF9GSUxFX1NJWkV9KWBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmModGhpcy5maWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBjb25zdCBkYXRhOiB1bmtub3duID0gSlNPTi5wYXJzZShyYXcpO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBzaWduYWwgY291bnRcclxuICAgIGlmIChkYXRhLmxlbmd0aCA+IE1BWF9TSUdOQUxTX1BFUl9GSUxFKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgU2lnbmFsIGZpbGUgY29udGFpbnMgJHtkYXRhLmxlbmd0aH0gc2lnbmFscywgbWF4IGlzICR7TUFYX1NJR05BTFNfUEVSX0ZJTEV9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcclxuICAgICAgY29uc3QgcWZSYXcgPSAoaXRlbS5xdWFsaXR5X2ZhY3RvcnMgPz8gaXRlbS5xdWFsaXR5RmFjdG9ycykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmlkID8/ICcnKSxcclxuICAgICAgICB0YXNrRGVzY3JpcHRpb246IFN0cmluZyhpdGVtLnRhc2tfZGVzY3JpcHRpb24gPz8gaXRlbS50YXNrRGVzY3JpcHRpb24gPz8gJycpLFxyXG4gICAgICAgIG91dGNvbWU6IHZhbGlkYXRlT3V0Y29tZShpdGVtLm91dGNvbWUpLFxyXG4gICAgICAgIHF1YWxpdHlTY29yZTogdmFsaWRhdGVTY29yZShpdGVtLnF1YWxpdHlfc2NvcmUgPz8gaXRlbS5xdWFsaXR5U2NvcmUpLFxyXG4gICAgICAgIGh1bWFuVmVyZGljdDogdmFsaWRhdGVWZXJkaWN0KGl0ZW0uaHVtYW5fdmVyZGljdCA/PyBpdGVtLmh1bWFuVmVyZGljdCksXHJcbiAgICAgICAgcXVhbGl0eUZhY3RvcnM6IHFmUmF3ID8gbWFwUXVhbGl0eUZhY3RvcnMocWZSYXcpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGNvbXBsZXRlZEF0OiBTdHJpbmcoaXRlbS5jb21wbGV0ZWRfYXQgPz8gaXRlbS5jb21wbGV0ZWRBdCA/PyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBxdWFsaXR5V2VpZ2h0cygpOiBQcm92aWRlclF1YWxpdHlXZWlnaHRzIHwgdW5kZWZpbmVkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHdlaWdodHNQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgJ3F1YWxpdHktd2VpZ2h0cy5qc29uJyk7XHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyh3ZWlnaHRzUGF0aCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyh3ZWlnaHRzUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFza0NvbXBsZXRpb246IE51bWJlcihkYXRhLnRhc2tfY29tcGxldGlvbiA/PyBkYXRhLnRhc2tDb21wbGV0aW9uID8/IDAuNSksXHJcbiAgICAgICAgY29kZVF1YWxpdHk6IE51bWJlcihkYXRhLmNvZGVfcXVhbGl0eSA/PyBkYXRhLmNvZGVRdWFsaXR5ID8/IDAuMyksXHJcbiAgICAgICAgcHJvY2VzczogTnVtYmVyKGRhdGEucHJvY2VzcyA/PyAwLjIpLFxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWdncmVnYXRlcyBxdWFsaXR5IHNpZ25hbHMgZnJvbSBtdWx0aXBsZSByZWdpc3RlcmVkIHByb3ZpZGVycy5cclxuICpcclxuICogSWYgbm8gcHJvdmlkZXJzIGFyZSByZWdpc3RlcmVkLCBsb2FkQWxsU2lnbmFscyByZXR1cm5zIGVtcHR5IGFycmF5c1xyXG4gKiB3aXRoIHplcm8gb3ZlcmhlYWQuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW50ZWxsaWdlbmNlTG9hZGVyIHtcclxuICBwcml2YXRlIHByb3ZpZGVyczogSW50ZWxsaWdlbmNlUHJvdmlkZXJbXSA9IFtdO1xyXG5cclxuICAvKiogUmVnaXN0ZXIgYW4gZXh0ZXJuYWwgaW50ZWxsaWdlbmNlIHByb3ZpZGVyICovXHJcbiAgcmVnaXN0ZXJQcm92aWRlcihwcm92aWRlcjogSW50ZWxsaWdlbmNlUHJvdmlkZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIHByb3ZpZGVycyAqL1xyXG4gIGdldCBwcm92aWRlckNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIHByb3ZpZGVycyAqL1xyXG4gIGdldCBwcm92aWRlck5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLm5hbWUoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNpZ25hbHMgZnJvbSBhbGwgcmVnaXN0ZXJlZCBwcm92aWRlcnMuXHJcbiAgICpcclxuICAgKiBOb24tZmF0YWw6IGlmIGEgcHJvdmlkZXIgZmFpbHMsIGl0cyBlcnJvciBpcyBjYXB0dXJlZCBidXRcclxuICAgKiBvdGhlciBwcm92aWRlcnMgY29udGludWUgbG9hZGluZy5cclxuICAgKi9cclxuICBsb2FkQWxsU2lnbmFscygpOiB7IHNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXTsgZXJyb3JzOiBQcm92aWRlckVycm9yW10gfSB7XHJcbiAgICBjb25zdCBzaWduYWxzOiBRdWFsaXR5U2lnbmFsW10gPSBbXTtcclxuICAgIGNvbnN0IGVycm9yczogUHJvdmlkZXJFcnJvcltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBvZiB0aGlzLnByb3ZpZGVycykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XHJcbiAgICAgICAgc2lnbmFscy5wdXNoKC4uLnByb3ZpZGVyU2lnbmFscyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgICAgICBwcm92aWRlck5hbWU6IHByb3ZpZGVyLm5hbWUoKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHNpZ25hbHMsIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIExvYWQgc2lnbmFscyBncm91cGVkIGJ5IHByb3ZpZGVyIHdpdGggd2VpZ2h0IG92ZXJyaWRlcyAqL1xyXG4gIGxvYWRHcm91cGVkKCk6IFByb3ZpZGVyUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiB7XHJcbiAgICAgIGxldCBwcm92aWRlclNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXSA9IFtdO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIE5vbi1mYXRhbFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvdmlkZXJOYW1lOiBwcm92aWRlci5uYW1lKCksXHJcbiAgICAgICAgc2lnbmFsczogcHJvdmlkZXJTaWduYWxzLFxyXG4gICAgICAgIHdlaWdodHM6IHByb3ZpZGVyLnF1YWxpdHlXZWlnaHRzPy4oKSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|