@tsi-developpement/tsi-shared-ui 1.10.2 → 1.10.4
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/esm2022/lib/functions/index.mjs +2 -1
- package/esm2022/lib/functions/number.functions.mjs +93 -0
- package/esm2022/lib/guards/index.mjs +1 -2
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +3 -3
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +5 -14
- package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs +4 -6
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +3 -6
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +218 -172
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/functions/index.d.ts +1 -0
- package/lib/functions/number.functions.d.ts +49 -0
- package/lib/guards/index.d.ts +0 -1
- package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
- package/package.json +1 -1
- package/esm2022/lib/guards/admin.guard.mjs +0 -37
- package/lib/guards/admin.guard.d.ts +0 -14
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './array.functions';
|
|
2
2
|
export * from './library-initializer';
|
|
3
3
|
export * from './common.functions';
|
|
4
|
+
export * from './number.functions';
|
|
4
5
|
// export * from './modal-open.function'
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvZnVuY3Rpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsd0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcnJheS5mdW5jdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYnJhcnktaW5pdGlhbGl6ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi5mdW5jdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL251bWJlci5mdW5jdGlvbnMnO1xyXG4vLyBleHBvcnQgKiBmcm9tICcuL21vZGFsLW9wZW4uZnVuY3Rpb24nIl19
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Numeric helpers that avoid IEEE 754 floating-point accumulation errors.
|
|
3
|
+
*
|
|
4
|
+
* JavaScript's `number` is an IEEE 754 double, so decimal fractions such as
|
|
5
|
+
* `0.1` or `0.2` have no exact binary representation. Summing them naively
|
|
6
|
+
* (`a + b + c ...`) lets each rounding error compound, producing artifacts like
|
|
7
|
+
* `0.1 + 0.2 === 0.30000000000000004`.
|
|
8
|
+
*
|
|
9
|
+
* These helpers use integer scaling: every value is scaled up to an integer by
|
|
10
|
+
* the largest number of decimal places present, the addition is performed in the
|
|
11
|
+
* (exact) integer domain, then the result is scaled back down. No third-party
|
|
12
|
+
* dependency is required.
|
|
13
|
+
*
|
|
14
|
+
* Boundary: integer scaling can exceed `Number.MAX_SAFE_INTEGER` when summing
|
|
15
|
+
* very large numbers at high decimal precision (e.g. 6-decimal values totalling
|
|
16
|
+
* into the billions). For currency (2 decimals) the safe headroom is ~9e13, so
|
|
17
|
+
* this is a non-issue in practice.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Counts the number of significant decimal places in a finite number,
|
|
21
|
+
* correctly handling values serialized in exponential notation (e.g. `1e-7`).
|
|
22
|
+
*
|
|
23
|
+
* @param value - The number to inspect.
|
|
24
|
+
* @returns The count of decimal places (0 for integers and non-finite input).
|
|
25
|
+
*/
|
|
26
|
+
function decimalPlaces(value) {
|
|
27
|
+
if (!Number.isFinite(value))
|
|
28
|
+
return 0;
|
|
29
|
+
const text = Math.abs(value).toString();
|
|
30
|
+
// Exponential notation, e.g. "1e-7" or "1.23e-4".
|
|
31
|
+
const exponentIndex = text.indexOf('e-');
|
|
32
|
+
if (exponentIndex >= 0) {
|
|
33
|
+
const mantissa = text.slice(0, exponentIndex);
|
|
34
|
+
const exponent = Number(text.slice(exponentIndex + 2));
|
|
35
|
+
const mantissaDecimals = mantissa.includes('.') ? mantissa.split('.')[1].length : 0;
|
|
36
|
+
return mantissaDecimals + exponent;
|
|
37
|
+
}
|
|
38
|
+
const dotIndex = text.indexOf('.');
|
|
39
|
+
return dotIndex >= 0 ? text.length - dotIndex - 1 : 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sums an array of numbers without IEEE 754 accumulation error.
|
|
43
|
+
*
|
|
44
|
+
* Uses integer scaling for an exact decimal result. `null`, `undefined` and
|
|
45
|
+
* non-finite entries (`NaN`, `Infinity`) are ignored (contribute `0`) so a
|
|
46
|
+
* single missing/invalid cell cannot poison the whole total. An empty,
|
|
47
|
+
* `null` or `undefined` input returns `0`.
|
|
48
|
+
*
|
|
49
|
+
* @param values - The values to sum (may contain gaps).
|
|
50
|
+
* @returns The precise sum, or `0` when there is nothing to add.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* preciseSum([0.1, 0.2]); // 0.3 (not 0.30000000000000004)
|
|
54
|
+
* preciseSum([1.005, 2.5, 3]); // 6.505
|
|
55
|
+
* preciseSum([10, null, undefined]); // 10
|
|
56
|
+
* preciseSum([]); // 0
|
|
57
|
+
*/
|
|
58
|
+
export function preciseSum(values) {
|
|
59
|
+
if (values == null || values.length === 0)
|
|
60
|
+
return 0;
|
|
61
|
+
let maxDecimals = 0;
|
|
62
|
+
for (const value of values) {
|
|
63
|
+
if (value != null && Number.isFinite(value)) {
|
|
64
|
+
const decimals = decimalPlaces(value);
|
|
65
|
+
if (decimals > maxDecimals)
|
|
66
|
+
maxDecimals = decimals;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const scale = Math.pow(10, maxDecimals);
|
|
70
|
+
let scaledSum = 0;
|
|
71
|
+
for (const value of values) {
|
|
72
|
+
if (value != null && Number.isFinite(value)) {
|
|
73
|
+
scaledSum += Math.round(value * scale);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return scaledSum / scale;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Adds two numbers without IEEE 754 accumulation error.
|
|
80
|
+
*
|
|
81
|
+
* `null`, `undefined` and non-finite operands are treated as `0`.
|
|
82
|
+
*
|
|
83
|
+
* @param a - First operand.
|
|
84
|
+
* @param b - Second operand.
|
|
85
|
+
* @returns The precise sum of `a` and `b`.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* preciseAdd(0.1, 0.2); // 0.3 (not 0.30000000000000004)
|
|
89
|
+
*/
|
|
90
|
+
export function preciseAdd(a, b) {
|
|
91
|
+
return preciseSum([a, b]);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9mdW5jdGlvbnMvbnVtYmVyLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFeEMsa0RBQWtEO0lBQ2xELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFtRTtJQUM1RixJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFFcEQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxRQUFRLEdBQUcsV0FBVztnQkFBRSxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxDQUE0QixFQUFFLENBQTRCO0lBQ25GLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBOdW1lcmljIGhlbHBlcnMgdGhhdCBhdm9pZCBJRUVFIDc1NCBmbG9hdGluZy1wb2ludCBhY2N1bXVsYXRpb24gZXJyb3JzLlxyXG4gKlxyXG4gKiBKYXZhU2NyaXB0J3MgYG51bWJlcmAgaXMgYW4gSUVFRSA3NTQgZG91YmxlLCBzbyBkZWNpbWFsIGZyYWN0aW9ucyBzdWNoIGFzXHJcbiAqIGAwLjFgIG9yIGAwLjJgIGhhdmUgbm8gZXhhY3QgYmluYXJ5IHJlcHJlc2VudGF0aW9uLiBTdW1taW5nIHRoZW0gbmFpdmVseVxyXG4gKiAoYGEgKyBiICsgYyAuLi5gKSBsZXRzIGVhY2ggcm91bmRpbmcgZXJyb3IgY29tcG91bmQsIHByb2R1Y2luZyBhcnRpZmFjdHMgbGlrZVxyXG4gKiBgMC4xICsgMC4yID09PSAwLjMwMDAwMDAwMDAwMDAwMDA0YC5cclxuICpcclxuICogVGhlc2UgaGVscGVycyB1c2UgaW50ZWdlciBzY2FsaW5nOiBldmVyeSB2YWx1ZSBpcyBzY2FsZWQgdXAgdG8gYW4gaW50ZWdlciBieVxyXG4gKiB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgcHJlc2VudCwgdGhlIGFkZGl0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGVcclxuICogKGV4YWN0KSBpbnRlZ2VyIGRvbWFpbiwgdGhlbiB0aGUgcmVzdWx0IGlzIHNjYWxlZCBiYWNrIGRvd24uIE5vIHRoaXJkLXBhcnR5XHJcbiAqIGRlcGVuZGVuY3kgaXMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIEJvdW5kYXJ5OiBpbnRlZ2VyIHNjYWxpbmcgY2FuIGV4Y2VlZCBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgIHdoZW4gc3VtbWluZ1xyXG4gKiB2ZXJ5IGxhcmdlIG51bWJlcnMgYXQgaGlnaCBkZWNpbWFsIHByZWNpc2lvbiAoZS5nLiA2LWRlY2ltYWwgdmFsdWVzIHRvdGFsbGluZ1xyXG4gKiBpbnRvIHRoZSBiaWxsaW9ucykuIEZvciBjdXJyZW5jeSAoMiBkZWNpbWFscykgdGhlIHNhZmUgaGVhZHJvb20gaXMgfjllMTMsIHNvXHJcbiAqIHRoaXMgaXMgYSBub24taXNzdWUgaW4gcHJhY3RpY2UuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvdW50cyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRlY2ltYWwgcGxhY2VzIGluIGEgZmluaXRlIG51bWJlcixcclxuICogY29ycmVjdGx5IGhhbmRsaW5nIHZhbHVlcyBzZXJpYWxpemVkIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIChlLmcuIGAxZS03YCkuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgVGhlIGNvdW50IG9mIGRlY2ltYWwgcGxhY2VzICgwIGZvciBpbnRlZ2VycyBhbmQgbm9uLWZpbml0ZSBpbnB1dCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWNpbWFsUGxhY2VzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIDA7XHJcblxyXG4gIGNvbnN0IHRleHQgPSBNYXRoLmFicyh2YWx1ZSkudG9TdHJpbmcoKTtcclxuXHJcbiAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24sIGUuZy4gXCIxZS03XCIgb3IgXCIxLjIzZS00XCIuXHJcbiAgY29uc3QgZXhwb25lbnRJbmRleCA9IHRleHQuaW5kZXhPZignZS0nKTtcclxuICBpZiAoZXhwb25lbnRJbmRleCA+PSAwKSB7XHJcbiAgICBjb25zdCBtYW50aXNzYSA9IHRleHQuc2xpY2UoMCwgZXhwb25lbnRJbmRleCk7XHJcbiAgICBjb25zdCBleHBvbmVudCA9IE51bWJlcih0ZXh0LnNsaWNlKGV4cG9uZW50SW5kZXggKyAyKSk7XHJcbiAgICBjb25zdCBtYW50aXNzYURlY2ltYWxzID0gbWFudGlzc2EuaW5jbHVkZXMoJy4nKSA/IG1hbnRpc3NhLnNwbGl0KCcuJylbMV0ubGVuZ3RoIDogMDtcclxuICAgIHJldHVybiBtYW50aXNzYURlY2ltYWxzICsgZXhwb25lbnQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkb3RJbmRleCA9IHRleHQuaW5kZXhPZignLicpO1xyXG4gIHJldHVybiBkb3RJbmRleCA+PSAwID8gdGV4dC5sZW5ndGggLSBkb3RJbmRleCAtIDEgOiAwO1xyXG59XHJcblxyXG4vKipcclxuICogU3VtcyBhbiBhcnJheSBvZiBudW1iZXJzIHdpdGhvdXQgSUVFRSA3NTQgYWNjdW11bGF0aW9uIGVycm9yLlxyXG4gKlxyXG4gKiBVc2VzIGludGVnZXIgc2NhbGluZyBmb3IgYW4gZXhhY3QgZGVjaW1hbCByZXN1bHQuIGBudWxsYCwgYHVuZGVmaW5lZGAgYW5kXHJcbiAqIG5vbi1maW5pdGUgZW50cmllcyAoYE5hTmAsIGBJbmZpbml0eWApIGFyZSBpZ25vcmVkIChjb250cmlidXRlIGAwYCkgc28gYVxyXG4gKiBzaW5nbGUgbWlzc2luZy9pbnZhbGlkIGNlbGwgY2Fubm90IHBvaXNvbiB0aGUgd2hvbGUgdG90YWwuIEFuIGVtcHR5LFxyXG4gKiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaW5wdXQgcmV0dXJucyBgMGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBUaGUgdmFsdWVzIHRvIHN1bSAobWF5IGNvbnRhaW4gZ2FwcykuXHJcbiAqIEByZXR1cm5zIFRoZSBwcmVjaXNlIHN1bSwgb3IgYDBgIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBhZGQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHByZWNpc2VTdW0oWzAuMSwgMC4yXSk7ICAgICAgICAgICAgLy8gMC4zICAgKG5vdCAwLjMwMDAwMDAwMDAwMDAwMDA0KVxyXG4gKiBwcmVjaXNlU3VtKFsxLjAwNSwgMi41LCAzXSk7ICAgICAgIC8vIDYuNTA1XHJcbiAqIHByZWNpc2VTdW0oWzEwLCBudWxsLCB1bmRlZmluZWRdKTsgLy8gMTBcclxuICogcHJlY2lzZVN1bShbXSk7ICAgICAgICAgICAgICAgICAgICAvLyAwXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJlY2lzZVN1bSh2YWx1ZXM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XHJcblxyXG4gIGxldCBtYXhEZWNpbWFscyA9IDA7XHJcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcclxuICAgICAgY29uc3QgZGVjaW1hbHMgPSBkZWNpbWFsUGxhY2VzKHZhbHVlKTtcclxuICAgICAgaWYgKGRlY2ltYWxzID4gbWF4RGVjaW1hbHMpIG1heERlY2ltYWxzID0gZGVjaW1hbHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDEwLCBtYXhEZWNpbWFscyk7XHJcblxyXG4gIGxldCBzY2FsZWRTdW0gPSAwO1xyXG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XHJcbiAgICAgIHNjYWxlZFN1bSArPSBNYXRoLnJvdW5kKHZhbHVlICogc2NhbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNjYWxlZFN1bSAvIHNjYWxlO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gbnVtYmVycyB3aXRob3V0IElFRUUgNzU0IGFjY3VtdWxhdGlvbiBlcnJvci5cclxuICpcclxuICogYG51bGxgLCBgdW5kZWZpbmVkYCBhbmQgbm9uLWZpbml0ZSBvcGVyYW5kcyBhcmUgdHJlYXRlZCBhcyBgMGAuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gRmlyc3Qgb3BlcmFuZC5cclxuICogQHBhcmFtIGIgLSBTZWNvbmQgb3BlcmFuZC5cclxuICogQHJldHVybnMgVGhlIHByZWNpc2Ugc3VtIG9mIGBhYCBhbmQgYGJgLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBwcmVjaXNlQWRkKDAuMSwgMC4yKTsgLy8gMC4zIChub3QgMC4zMDAwMDAwMDAwMDAwMDAwNClcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVjaXNlQWRkKGE6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIGI6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gIHJldHVybiBwcmVjaXNlU3VtKFthLCBiXSk7XHJcbn1cclxuIl19
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export * from './admin.guard';
|
|
2
1
|
export * from './auth.guard';
|
|
3
2
|
export * from './permission.guard';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvZ3VhcmRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsb0JBQW9CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1dGguZ3VhcmQnXHJcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbi5ndWFyZCciXX0=
|
|
@@ -201,10 +201,10 @@ export class CreateOrEditModeleImportComponent extends TsiFormComponentBaseCompo
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditModeleImportComponent, deps: [{ token: i1.ModeleImportService }, { token: i1.TsiNotificationService }, { token: i2.DynamicDialogConfig }, { token: i2.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
204
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditModeleImportComponent, selector: "app-create-or-edit-modele-import", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Mode mise \u00E0 jour'\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.modeMiseAJour\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'modeMiseAJour'\" [isBinary]=\"true\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\"
|
|
204
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditModeleImportComponent, selector: "app-create-or-edit-modele-import", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Mode mise \u00E0 jour'\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.modeMiseAJour\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'modeMiseAJour'\" [isBinary]=\"true\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n\r\n\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"\r\n (onSaveClick)=\"save()\" [showSaveAndCloseButton]=\"mode == modeRef.delete\"></Tsi-Modal-Footer>\r\n\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "saveEvent", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "sizingMode", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i5.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i6.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i7.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i8.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i9.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i10.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i11.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i12.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i13.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
205
205
|
}
|
|
206
206
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditModeleImportComponent, decorators: [{
|
|
207
207
|
type: Component,
|
|
208
|
-
args: [{ selector: 'app-create-or-edit-modele-import', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Mode mise \u00E0 jour'\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.modeMiseAJour\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'modeMiseAJour'\" [isBinary]=\"true\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\"
|
|
208
|
+
args: [{ selector: 'app-create-or-edit-modele-import', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Mode mise \u00E0 jour'\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.modeMiseAJour\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'modeMiseAJour'\" [isBinary]=\"true\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n\r\n\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"\r\n (onSaveClick)=\"save()\" [showSaveAndCloseButton]=\"mode == modeRef.delete\"></Tsi-Modal-Footer>\r\n\r\n</tsi-form>" }]
|
|
209
209
|
}], ctorParameters: () => [{ type: i1.ModeleImportService }, { type: i1.TsiNotificationService }, { type: i2.DynamicDialogConfig }, { type: i2.DynamicDialogRef }] });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0L2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRSxPQUFPLEVBQUUseUJBQXlCLEVBQXNCLE1BQU0sY0FBYyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSw2QkFBNkI7SUFjbEYsWUFBb0Isb0JBQXlDLEVBQ25ELG9CQUE0QyxFQUNwQyxNQUEyQixFQUFrQixH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LG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7YUFDRixDQUNGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FsTVUsaUNBQWlDO21HQUFqQyxpQ0FBaUMsMkRBRmpDLENBQUMsR0FBRyxZQUFZLENBQUMsaURDakI5Qix5NElBK0VXOzs0RkQ1REUsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLGtDQUFrQyxhQUdqQyxDQUFDLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IE1vZGVzLCBUeXBlSW1wb3J0RW51bSwgSW5wdXRUeXBlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0LCBNb2RlbGVJbXBvcnREZXRhaWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBNb2RlbGVJbXBvcnRTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJbXBvcnRFeHBvcnRFbmRQb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL2ltcG9ydC1leHBvcnQtZW5kcG9pbnQnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBGaWxlVHlwZUltcG9ydEVudW0gfSBmcm9tICcuLi8uLi9lbnVtcy9maWxlLXR5cGUtaW1wb3J0LWVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRNb2RlbGVJbXBvcnRDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIG1vZGVsZUltcG9ydERldGFpbENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgbW9kZWxlSW1wb3J0OiBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0ID0gbmV3IE1vZGVsZUltcG9ydENyZWF0ZVJlcXVlc3QoKVxyXG4gIGdldENvbG9ubmVCeUNsYXNzTmFtZUVuZFBvaW50OiBzdHJpbmcgPSBcIlwiXHJcbiAgZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50OiBzdHJpbmcgPSBcIlwiXHJcbiAgbW9kZWxlSW1wb3J0RW5kUG9pbnRzID0gSW1wb3J0RXhwb3J0RW5kUG9pbnRzXHJcbiAgX2J1c2lubmVzc0NsYXNzTmFtZTogc3RyaW5nID0gXCJcIlxyXG4gIGV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWw6IFN1YmplY3Q8dm9pZD47XHJcbiAgb3BlbmVkTW9kZTogYW55XHJcbiAgc2hvd01vZGVsZUltcG9ydERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGZpbGVUeXBlSW1wb3J0RW51bVJlZiA9IEZpbGVUeXBlSW1wb3J0RW51bVxyXG4gIG1vZGVSZWYgPSBNb2RlcztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kZWxlSW1wb3J0U2VydmljZTogTW9kZWxlSW1wb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLCBwdWJsaWMgb3ZlcnJpZGUgcmVmPzogRHluYW1pY0RpYWxvZ1JlZiwpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICAgIHRoaXMuZXZlbnRzU3ViamVjdE1vZGVsZUltcG9ydERldGFpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICB0aGlzLl9idXNpbm5lc3NDbGFzc05hbWUgPSBjb25maWc/LmRhdGE/LmVudGl0eUJ1c2luZXNzQ2xhc3NcclxuICAgIHRoaXMuZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50ID0gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENsYXNzQ2hpbGRzQXNLZXlWYWx1ZVBhaXIodGhpcy5fYnVzaW5uZXNzQ2xhc3NOYW1lKVxyXG4gICAgdGhpcy5pbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpXHJcbiAgICB0aGlzLm9wZW5lZE1vZGUgPSB0aGlzLmNvbmZpZy5kYXRhPy5tb2RlIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTW9kZWxlSW1wb3J0RnJvbUdyaWQoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlTW9kZWxlSW1wb3J0RGV0YWlscyhncmlkRGF0YTogQXJyYXk8TW9kZWxlSW1wb3J0RGV0YWlsPikge1xyXG4gICAgdGhpcy5tb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlscyA9IGdyaWREYXRhXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KClcclxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm1vZGVsZUltcG9ydC5jbGFzc2UgPSB0aGlzLmNvbmZpZz8uZGF0YT8uZW50aXR5QnVzaW5lc3NDbGFzc1xyXG4gICAgICB0aGlzLm1vZGVsZUltcG9ydC5mb3JtID0gdGhpcy5mb3JtTmFtZVxyXG5cclxuICAgICAgaWYgKHRoaXMub3BlbmVkTW9kZSA9PSBNb2Rlcy5lZGl0ICYmIHRoaXMuY29uZmlnLmRhdGE/LmlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuZ2V0QnlJZCh0aGlzLmNvbmZpZy5kYXRhPy5pZClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZWxlSW1wb3J0ID0gZGF0YVxyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVzV2l0aFBhcmVudENvbHVtTmFtZSgpXHJcbiAgICAgICAgICAgICAgdGhpcy50eXBlSW1wb3J0Q2hhbmdlKHRoaXMubW9kZWxlSW1wb3J0Lm9yZHJlT3VUaXRyZUNvbG9ubmUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlc1dpdGhQYXJlbnRDb2x1bU5hbWUoKSB7XHJcbiAgICBsZXQgZmlsdHJlZERhdGEgPSB0aGlzLm1vZGVsZUltcG9ydC5tb2RlbGVJbXBvcnREZXRhaWxzXHJcbiAgICAgIC5maWx0ZXIoeCA9PiB4Lm5vbUNsYXNzZURldGFpbCA9PSB1bmRlZmluZWQgfHwgeC5ub21DbGFzc2VEZXRhaWwgPT0gJycpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHRoaXMuX2J1c2lubmVzc0NsYXNzTmFtZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHR5cGVJbXBvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpXHJcbiAgICBpZiAoZXZlbnQgPT0gVHlwZUltcG9ydEVudW0uVGl0cmVDb2xvbm5lKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IFwibnVtZXJvXCIpXHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gVHlwZUltcG9ydEVudW0uT3JkcmVDb2xvbm5lKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IFwibm9tQ29sb25uZUZpY2hpZXJcIilcclxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNob3dNb2RlbGVJbXBvcnREZXRhaWxzID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93TW9kZWxlSW1wb3J0RGV0YWlscyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRNb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5tb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibm9tQ2xhc3NlRGV0YWlsXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk5vbSBDbGFzc2UgRGV0YWlsXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5TRUFSQ0hfQ09NQk8sXHJcbiAgICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5nZXRDbGFzc0NoaWxkc0J5Q2xhc3NOYW1lRW5kUG9pbnQsXHJcbiAgICAgICAgaWRGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGxhYmVsRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgICB3YXRjaEZvckNoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6ICcyMHZ3J1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwiY29sb25uZUNsYXNzZVwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJDb2xvbm5lIENsYXNzZVwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuYnVpbGRHZXRDaGlsZENsYXNzQ29sdW1ucyxcclxuICAgICAgICBpZEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgbGFiZWxGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGlzRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibnVtZXJvXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk9yZHJlXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5JTlRFR0VSLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibm9tQ29sb25uZUZpY2hpZXJcIixcclxuICAgICAgICBoZWFkZXI6IFwiTm9tIENvbG9ubmUgRmljaGllclwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuVEVYVF9CT1gsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJub21Db2xvbm5lQ2xlZkV0cmFuZ2VyZVwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ29sb25uZSBDbGUgRXRyYW5nw6hyZVwiLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgICBsaXN0U291cmNlVXJsOiB0aGlzLmJ1aWxkR2V0Q29sdW1tbkZvckZvcmVpZ25LZXlDbGFzcyxcclxuICAgICAgICBpZEZpZWxkOiBcImtleVwiLFxyXG4gICAgICAgIGxhYmVsRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcImNsZWZNaXNlQUpvdXJcIixcclxuICAgICAgICBoZWFkZXI6IFwiQ2zDqSBkZSBtaXNlIMOgIGpvdXJcIixcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICBpc0JpbmFyeTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBjb2x1bW5OYW1lID0gY3VycmVudFJvd0l0ZW0/LmNvbG9ubmVDbGFzc2UgPz8gXCJcIlxyXG4gICAgbGV0IHBhcmVudEVudGl0eU5hbWUgPSBjdXJyZW50Um93SXRlbT8ubm9tQ2xhc3NlRGV0YWlsID8/IFwiXCJcclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q29sb25uZXNCeUNsYXNzTmFtZUFzS2V5VmFsdWVQYWlyKHBhcmVudEVudGl0eU5hbWUsIGNvbHVtbk5hbWUpXHJcbiAgfVxyXG5cclxuICBidWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBwYXJlbnRFbnRpdHlOYW1lID0gY3VycmVudFJvd0l0ZW0/Lm5vbUNsYXNzZURldGFpbCA/PyBcIlwiXHJcbiAgICAvLyBpZiAocGFyZW50RW50aXR5TmFtZT8uZW5kc1dpdGgoJ3MnKSkge1xyXG4gICAgLy8gICBwYXJlbnRFbnRpdHlOYW1lID0gcGFyZW50RW50aXR5TmFtZS5zbGljZSgwLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihwYXJlbnRFbnRpdHlOYW1lLCBcIlwiKVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDaGlsZENoaWxkQ2xhc3MoY3VycmVudFJvd0l0ZW06IE1vZGVsZUltcG9ydERldGFpbCkge1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRSb3dJdGVtPy5ub21DbGFzc2VEZXRhaWxcclxuICAgIGlmIChjbGFzc05hbWU/LmVuZHNXaXRoKCdzJykpIHtcclxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q2xhc3NDaGlsZHNBc0tleVZhbHVlUGFpcihjbGFzc05hbWUpXHJcbiAgfVxyXG5cclxuICBkZWxldGVWYWx1ZUZyb21QYXJlbnRNb2RlbCgpIHtcclxuICAgIGxldCBmaWx0cmVkRGF0YSA9IHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHNcclxuICAgICAgLmZpbHRlcih4ID0+IHgubm9tQ2xhc3NlRGV0YWlsID09IHRoaXMuX2J1c2luZXNzQ2xhc3MpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHVuZGVmaW5lZFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLl91cGRhdGVNb2RlbGVJbXBvcnRGcm9tR3JpZCgpXHJcbiAgICB0aGlzLmRlbGV0ZVZhbHVlRnJvbVBhcmVudE1vZGVsKClcclxuICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuY3JlYXRlKHRoaXMubW9kZWxlSW1wb3J0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLm1vZGVsZUltcG9ydC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UudXBkYXRlKHRoaXMubW9kZWxlSW1wb3J0LCB0aGlzLm1vZGVsZUltcG9ydC51aWQpLnN1YnNjcmliZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMudXBkYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6IG1vZGUgOiAnTW9kw6hsZSBpbXBvcnQnXCJcclxuICAgIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gTW9kZWxlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IFsoaW5wdXRGaWVsZCldPVwibW9kZWxlSW1wb3J0Lm5vbVwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ25vbU1vZGVsZSdcIj48L1RzaS1UZXh0LUJveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gRm9ybSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5mb3JtXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21Gb3JtJ1wiPjwvVHNpLVRleHQtQm94PlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ05vbSBDbGFzc2UnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuY2xhc3NlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21DbGFzc2UnXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInUHJlbWllcmUgTGlnbmUgSW1wb3J0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXIgWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQucHJlbWllcmVMaWduZUltcG9ydFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ3ByZW1pZXJlTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidEZXJuaWVyZSBMaWduZSBJbXBvcnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5kZXJuaWVyTGlnbmVJbXBvcnRcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidkZXJuaWVyTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidBcnJldGUgbG9ycyBkZSBwcmVtaWVyIGVycmV1ciAnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuYXJyZXRlUHJlbWllckVycmV1clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2FycmV0ZVByZW1pZXJFcnJldXInXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInTW9kZSBtaXNlIMOgIGpvdXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQubW9kZU1pc2VBSm91clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ21vZGVNaXNlQUpvdXInXCIgW2lzQmluYXJ5XT1cInRydWVcIj48L1RzaS1DaGVja0JveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidPcmRyZSBPdSBUaXRyZSBDb2xvbm5lJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyAoYmluZENoYW5nZSk9XCJ0eXBlSW1wb3J0Q2hhbmdlKCRldmVudClcIiBjbGFzcz1cImNvbC05XCIgW2xpc3RTb3VyY2VVcmxdPVwiXHJcbiAgICAgICAgICAgICAgICAgIG1vZGVsZUltcG9ydEVuZFBvaW50cy5nZXRUeXBlTmF0dXJlRG9jdW1lbnRFbnVtKClcclxuICAgICAgICAgICAgICAgIFwiIFsoYmluZCldPVwibW9kZWxlSW1wb3J0Lm9yZHJlT3VUaXRyZUNvbG9ubmVcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ1R5cGUgZGUgZmljaGllcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtOVwiIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0SW1wb3J0RmlsZVR5cGVFbnVtKClcclxuICAgICAgICAgICAgICAgIFwiIFsoYmluZCldPVwibW9kZWxlSW1wb3J0LmZpbGVUeXBlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgPFRzaS1MYWJlbCAqbmdJZj1cIm1vZGVsZUltcG9ydC5maWxlVHlwZSA9PSBmaWxlVHlwZUltcG9ydEVudW1SZWYuQ1NWXCIgY2xhc3M9XCJjb2wtM1wiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInU8OpcGFyYXRldXIgZGUgZmljaGllciBDU1YnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gKm5nSWY9XCJtb2RlbGVJbXBvcnQuZmlsZVR5cGUgPT0gZmlsZVR5cGVJbXBvcnRFbnVtUmVmLkNTVlwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiXHJcbiAgICAgICAgICAgICAgICAgIG1vZGVsZUltcG9ydEVuZFBvaW50cy5nZXRDc3ZGaWxlU2VwYXJhdG9yRW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5jc3ZGaWxlU2VwYXJhdG9yXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd01vZGVsZUltcG9ydERldGFpbHNcIj5cclxuICAgICAgPFRzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQgW2dyaWREYXRhXT1cIm1vZGVsZUltcG9ydC5tb2RlbGVJbXBvcnREZXRhaWxzXCJcclxuICAgICAgICBbc2F2ZUV2ZW50XT1cImV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwuYXNPYnNlcnZhYmxlKClcIlxyXG4gICAgICAgIChyb3dEZWxldGVkRXZlbnRFbWl0dGVyKT1cIm9uU2F2ZU1vZGVsZUltcG9ydERldGFpbHMoJGV2ZW50KVwiIFtjb2x1bW5zXT1cIm1vZGVsZUltcG9ydERldGFpbENvbHVtbnNcIlxyXG4gICAgICAgIFtwYXJlbnRdPVwidGhpc1wiIFtzaG93U2F2ZUJ1dHRvbl09XCJmYWxzZVwiIFtrZXldPVwiJ251bUxpZ25lJ1wiPlxyXG4gICAgICA8L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvZmllbGRzZXQ+XHJcblxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIiBbc2F2ZURpc2FibGVkXT1cImlzU3VibWl0RGlzYWJsZWQoKVwiIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiXHJcbiAgICAob25TYXZlQ2xpY2spPVwic2F2ZSgpXCIgW3Nob3dTYXZlQW5kQ2xvc2VCdXR0b25dPVwibW9kZSA9PSBtb2RlUmVmLmRlbGV0ZVwiPjwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuXHJcbjwvdHNpLWZvcm0+Il19
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0L2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRSxPQUFPLEVBQUUseUJBQXlCLEVBQXNCLE1BQU0sY0FBYyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSw2QkFBNkI7SUFjbEYsWUFBb0Isb0JBQXlDLEVBQ25ELG9CQUE0QyxFQUNwQyxNQUEyQixFQUFrQixH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LG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7YUFDRixDQUNGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FsTVUsaUNBQWlDO21HQUFqQyxpQ0FBaUMsMkRBRmpDLENBQUMsR0FBRyxZQUFZLENBQUMsaURDakI5QixvM0lBK0VXOzs0RkQ1REUsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLGtDQUFrQyxhQUdqQyxDQUFDLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IE1vZGVzLCBUeXBlSW1wb3J0RW51bSwgSW5wdXRUeXBlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0LCBNb2RlbGVJbXBvcnREZXRhaWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBNb2RlbGVJbXBvcnRTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJbXBvcnRFeHBvcnRFbmRQb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL2ltcG9ydC1leHBvcnQtZW5kcG9pbnQnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBGaWxlVHlwZUltcG9ydEVudW0gfSBmcm9tICcuLi8uLi9lbnVtcy9maWxlLXR5cGUtaW1wb3J0LWVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRNb2RlbGVJbXBvcnRDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIG1vZGVsZUltcG9ydERldGFpbENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgbW9kZWxlSW1wb3J0OiBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0ID0gbmV3IE1vZGVsZUltcG9ydENyZWF0ZVJlcXVlc3QoKVxyXG4gIGdldENvbG9ubmVCeUNsYXNzTmFtZUVuZFBvaW50OiBzdHJpbmcgPSBcIlwiXHJcbiAgZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50OiBzdHJpbmcgPSBcIlwiXHJcbiAgbW9kZWxlSW1wb3J0RW5kUG9pbnRzID0gSW1wb3J0RXhwb3J0RW5kUG9pbnRzXHJcbiAgX2J1c2lubmVzc0NsYXNzTmFtZTogc3RyaW5nID0gXCJcIlxyXG4gIGV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWw6IFN1YmplY3Q8dm9pZD47XHJcbiAgb3BlbmVkTW9kZTogYW55XHJcbiAgc2hvd01vZGVsZUltcG9ydERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGZpbGVUeXBlSW1wb3J0RW51bVJlZiA9IEZpbGVUeXBlSW1wb3J0RW51bVxyXG4gIG1vZGVSZWYgPSBNb2RlcztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kZWxlSW1wb3J0U2VydmljZTogTW9kZWxlSW1wb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLCBwdWJsaWMgb3ZlcnJpZGUgcmVmPzogRHluYW1pY0RpYWxvZ1JlZiwpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICAgIHRoaXMuZXZlbnRzU3ViamVjdE1vZGVsZUltcG9ydERldGFpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICB0aGlzLl9idXNpbm5lc3NDbGFzc05hbWUgPSBjb25maWc/LmRhdGE/LmVudGl0eUJ1c2luZXNzQ2xhc3NcclxuICAgIHRoaXMuZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50ID0gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENsYXNzQ2hpbGRzQXNLZXlWYWx1ZVBhaXIodGhpcy5fYnVzaW5uZXNzQ2xhc3NOYW1lKVxyXG4gICAgdGhpcy5pbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpXHJcbiAgICB0aGlzLm9wZW5lZE1vZGUgPSB0aGlzLmNvbmZpZy5kYXRhPy5tb2RlIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTW9kZWxlSW1wb3J0RnJvbUdyaWQoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlTW9kZWxlSW1wb3J0RGV0YWlscyhncmlkRGF0YTogQXJyYXk8TW9kZWxlSW1wb3J0RGV0YWlsPikge1xyXG4gICAgdGhpcy5tb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlscyA9IGdyaWREYXRhXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KClcclxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm1vZGVsZUltcG9ydC5jbGFzc2UgPSB0aGlzLmNvbmZpZz8uZGF0YT8uZW50aXR5QnVzaW5lc3NDbGFzc1xyXG4gICAgICB0aGlzLm1vZGVsZUltcG9ydC5mb3JtID0gdGhpcy5mb3JtTmFtZVxyXG5cclxuICAgICAgaWYgKHRoaXMub3BlbmVkTW9kZSA9PSBNb2Rlcy5lZGl0ICYmIHRoaXMuY29uZmlnLmRhdGE/LmlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuZ2V0QnlJZCh0aGlzLmNvbmZpZy5kYXRhPy5pZClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZWxlSW1wb3J0ID0gZGF0YVxyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVzV2l0aFBhcmVudENvbHVtTmFtZSgpXHJcbiAgICAgICAgICAgICAgdGhpcy50eXBlSW1wb3J0Q2hhbmdlKHRoaXMubW9kZWxlSW1wb3J0Lm9yZHJlT3VUaXRyZUNvbG9ubmUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlc1dpdGhQYXJlbnRDb2x1bU5hbWUoKSB7XHJcbiAgICBsZXQgZmlsdHJlZERhdGEgPSB0aGlzLm1vZGVsZUltcG9ydC5tb2RlbGVJbXBvcnREZXRhaWxzXHJcbiAgICAgIC5maWx0ZXIoeCA9PiB4Lm5vbUNsYXNzZURldGFpbCA9PSB1bmRlZmluZWQgfHwgeC5ub21DbGFzc2VEZXRhaWwgPT0gJycpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHRoaXMuX2J1c2lubmVzc0NsYXNzTmFtZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHR5cGVJbXBvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpXHJcbiAgICBpZiAoZXZlbnQgPT0gVHlwZUltcG9ydEVudW0uVGl0cmVDb2xvbm5lKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IFwibnVtZXJvXCIpXHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gVHlwZUltcG9ydEVudW0uT3JkcmVDb2xvbm5lKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IFwibm9tQ29sb25uZUZpY2hpZXJcIilcclxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNob3dNb2RlbGVJbXBvcnREZXRhaWxzID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93TW9kZWxlSW1wb3J0RGV0YWlscyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRNb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5tb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibm9tQ2xhc3NlRGV0YWlsXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk5vbSBDbGFzc2UgRGV0YWlsXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5TRUFSQ0hfQ09NQk8sXHJcbiAgICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5nZXRDbGFzc0NoaWxkc0J5Q2xhc3NOYW1lRW5kUG9pbnQsXHJcbiAgICAgICAgaWRGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGxhYmVsRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgICB3YXRjaEZvckNoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6ICcyMHZ3J1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwiY29sb25uZUNsYXNzZVwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJDb2xvbm5lIENsYXNzZVwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuYnVpbGRHZXRDaGlsZENsYXNzQ29sdW1ucyxcclxuICAgICAgICBpZEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgbGFiZWxGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGlzRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibnVtZXJvXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk9yZHJlXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5JTlRFR0VSLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6IFwibm9tQ29sb25uZUZpY2hpZXJcIixcclxuICAgICAgICBoZWFkZXI6IFwiTm9tIENvbG9ubmUgRmljaGllclwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuVEVYVF9CT1gsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJub21Db2xvbm5lQ2xlZkV0cmFuZ2VyZVwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ29sb25uZSBDbGUgRXRyYW5nw6hyZVwiLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgICBsaXN0U291cmNlVXJsOiB0aGlzLmJ1aWxkR2V0Q29sdW1tbkZvckZvcmVpZ25LZXlDbGFzcyxcclxuICAgICAgICBpZEZpZWxkOiBcImtleVwiLFxyXG4gICAgICAgIGxhYmVsRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcImNsZWZNaXNlQUpvdXJcIixcclxuICAgICAgICBoZWFkZXI6IFwiQ2zDqSBkZSBtaXNlIMOgIGpvdXJcIixcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YLFxyXG4gICAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICBpc0JpbmFyeTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBjb2x1bW5OYW1lID0gY3VycmVudFJvd0l0ZW0/LmNvbG9ubmVDbGFzc2UgPz8gXCJcIlxyXG4gICAgbGV0IHBhcmVudEVudGl0eU5hbWUgPSBjdXJyZW50Um93SXRlbT8ubm9tQ2xhc3NlRGV0YWlsID8/IFwiXCJcclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q29sb25uZXNCeUNsYXNzTmFtZUFzS2V5VmFsdWVQYWlyKHBhcmVudEVudGl0eU5hbWUsIGNvbHVtbk5hbWUpXHJcbiAgfVxyXG5cclxuICBidWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBwYXJlbnRFbnRpdHlOYW1lID0gY3VycmVudFJvd0l0ZW0/Lm5vbUNsYXNzZURldGFpbCA/PyBcIlwiXHJcbiAgICAvLyBpZiAocGFyZW50RW50aXR5TmFtZT8uZW5kc1dpdGgoJ3MnKSkge1xyXG4gICAgLy8gICBwYXJlbnRFbnRpdHlOYW1lID0gcGFyZW50RW50aXR5TmFtZS5zbGljZSgwLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihwYXJlbnRFbnRpdHlOYW1lLCBcIlwiKVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDaGlsZENoaWxkQ2xhc3MoY3VycmVudFJvd0l0ZW06IE1vZGVsZUltcG9ydERldGFpbCkge1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRSb3dJdGVtPy5ub21DbGFzc2VEZXRhaWxcclxuICAgIGlmIChjbGFzc05hbWU/LmVuZHNXaXRoKCdzJykpIHtcclxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q2xhc3NDaGlsZHNBc0tleVZhbHVlUGFpcihjbGFzc05hbWUpXHJcbiAgfVxyXG5cclxuICBkZWxldGVWYWx1ZUZyb21QYXJlbnRNb2RlbCgpIHtcclxuICAgIGxldCBmaWx0cmVkRGF0YSA9IHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHNcclxuICAgICAgLmZpbHRlcih4ID0+IHgubm9tQ2xhc3NlRGV0YWlsID09IHRoaXMuX2J1c2luZXNzQ2xhc3MpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHVuZGVmaW5lZFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLl91cGRhdGVNb2RlbGVJbXBvcnRGcm9tR3JpZCgpXHJcbiAgICB0aGlzLmRlbGV0ZVZhbHVlRnJvbVBhcmVudE1vZGVsKClcclxuICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuY3JlYXRlKHRoaXMubW9kZWxlSW1wb3J0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLm1vZGVsZUltcG9ydC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UudXBkYXRlKHRoaXMubW9kZWxlSW1wb3J0LCB0aGlzLm1vZGVsZUltcG9ydC51aWQpLnN1YnNjcmliZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMudXBkYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6IG1vZGUgOiAnTW9kw6hsZSBpbXBvcnQnXCJcclxuICAgIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gTW9kZWxlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IFsoaW5wdXRGaWVsZCldPVwibW9kZWxlSW1wb3J0Lm5vbVwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ25vbU1vZGVsZSdcIj48L1RzaS1UZXh0LUJveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gRm9ybSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5mb3JtXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21Gb3JtJ1wiPjwvVHNpLVRleHQtQm94PlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ05vbSBDbGFzc2UnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuY2xhc3NlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21DbGFzc2UnXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInUHJlbWllcmUgTGlnbmUgSW1wb3J0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXIgWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQucHJlbWllcmVMaWduZUltcG9ydFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ3ByZW1pZXJlTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidEZXJuaWVyZSBMaWduZSBJbXBvcnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5kZXJuaWVyTGlnbmVJbXBvcnRcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidkZXJuaWVyTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidBcnJldGUgbG9ycyBkZSBwcmVtaWVyIGVycmV1ciAnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuYXJyZXRlUHJlbWllckVycmV1clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2FycmV0ZVByZW1pZXJFcnJldXInXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInTW9kZSBtaXNlIMOgIGpvdXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQubW9kZU1pc2VBSm91clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ21vZGVNaXNlQUpvdXInXCIgW2lzQmluYXJ5XT1cInRydWVcIj48L1RzaS1DaGVja0JveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidPcmRyZSBPdSBUaXRyZSBDb2xvbm5lJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyAoYmluZENoYW5nZSk9XCJ0eXBlSW1wb3J0Q2hhbmdlKCRldmVudClcIiBjbGFzcz1cImNvbC05XCIgW2xpc3RTb3VyY2VVcmxdPVwiXHJcbiAgICAgICAgICAgICAgICAgIG1vZGVsZUltcG9ydEVuZFBvaW50cy5nZXRUeXBlTmF0dXJlRG9jdW1lbnRFbnVtKClcclxuICAgICAgICAgICAgICAgIFwiIFsoYmluZCldPVwibW9kZWxlSW1wb3J0Lm9yZHJlT3VUaXRyZUNvbG9ubmVcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ1R5cGUgZGUgZmljaGllcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtOVwiIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0SW1wb3J0RmlsZVR5cGVFbnVtKClcclxuICAgICAgICAgICAgICAgIFwiIFsoYmluZCldPVwibW9kZWxlSW1wb3J0LmZpbGVUeXBlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgPFRzaS1MYWJlbCAqbmdJZj1cIm1vZGVsZUltcG9ydC5maWxlVHlwZSA9PSBmaWxlVHlwZUltcG9ydEVudW1SZWYuQ1NWXCIgY2xhc3M9XCJjb2wtM1wiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInU8OpcGFyYXRldXIgZGUgZmljaGllciBDU1YnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gKm5nSWY9XCJtb2RlbGVJbXBvcnQuZmlsZVR5cGUgPT0gZmlsZVR5cGVJbXBvcnRFbnVtUmVmLkNTVlwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiXHJcbiAgICAgICAgICAgICAgICAgIG1vZGVsZUltcG9ydEVuZFBvaW50cy5nZXRDc3ZGaWxlU2VwYXJhdG9yRW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5jc3ZGaWxlU2VwYXJhdG9yXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd01vZGVsZUltcG9ydERldGFpbHNcIj5cclxuICAgICAgPFRzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQgW2dyaWREYXRhXT1cIm1vZGVsZUltcG9ydC5tb2RlbGVJbXBvcnREZXRhaWxzXCJcclxuICAgICAgICBbc2F2ZUV2ZW50XT1cImV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwuYXNPYnNlcnZhYmxlKClcIlxyXG4gICAgICAgIChyb3dEZWxldGVkRXZlbnRFbWl0dGVyKT1cIm9uU2F2ZU1vZGVsZUltcG9ydERldGFpbHMoJGV2ZW50KVwiIFtjb2x1bW5zXT1cIm1vZGVsZUltcG9ydERldGFpbENvbHVtbnNcIlxyXG4gICAgICAgIFtwYXJlbnRdPVwidGhpc1wiIFtzaG93U2F2ZUJ1dHRvbl09XCJmYWxzZVwiPlxyXG4gICAgICA8L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvZmllbGRzZXQ+XHJcblxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIiBbc2F2ZURpc2FibGVkXT1cImlzU3VibWl0RGlzYWJsZWQoKVwiIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiXHJcbiAgICAob25TYXZlQ2xpY2spPVwic2F2ZSgpXCIgW3Nob3dTYXZlQW5kQ2xvc2VCdXR0b25dPVwibW9kZSA9PSBtb2RlUmVmLmRlbGV0ZVwiPjwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuXHJcbjwvdHNpLWZvcm0+Il19
|