@rosen-bridge/config 2.0.0-bf468b21 → 2.0.0-c4b3d3ef
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/CHANGELOG.md
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAQhD,OAAO,EACL,WAAW,EACX,YAAY,EAEZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAYlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAKP;;;;;OAKG;IACH,YAAY,GAAI,CAAC,OAAK,CAAC,CAIrB;IAEF;;OAEG;IACH,MAAM,CAAC,QAAQ,GAAI,YAAY,MAAM,KAAG,eAAe,CAUrD;IAEF;;;;OAIG;IACH,MAAM,CAAC,UAAU,GAAI,QAAQ,YAAY,KAAG,eAAe,CAEzD;IAEF;;;;OAIG;IAEI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWjD;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAQhD,OAAO,EACL,WAAW,EACX,YAAY,EAEZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAYlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAKP;;;;;OAKG;IACH,YAAY,GAAI,CAAC,OAAK,CAAC,CAIrB;IAEF;;OAEG;IACH,MAAM,CAAC,QAAQ,GAAI,YAAY,MAAM,KAAG,eAAe,CAUrD;IAEF;;;;OAIG;IACH,MAAM,CAAC,UAAU,GAAI,QAAQ,YAAY,KAAG,eAAe,CAEzD;IAEF;;;;OAIG;IAEI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWjD;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAgFzB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAoH1B;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAEjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,MAAM,EAAE;IAgBhB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CAsFnB;IAEF;;;;;;;OAOG;IACI,UAAU,GACf,MAAM,IAAI,EAEV,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE3B,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC5B,OAAO,CAUR;IAEF;;;;;;;OAOG;IAEH,MAAM,CAAC,OAAO,GAAI,QAAQ,GAAG,EAAE,MAAM,MAAM,EAAE,SAc3C;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAgEpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA4BzB;IAEF;;;;;OAKG;IACH,cAAc,GAAI,MAAM,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CA0FxD;IAEF;;;;OAIG;IAEH,eAAe,GAAI,UAAU;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMvE;IAGF,OAAO,CAAC,sBAAsB,CAsC5B;IAEF;;;;;OAKG;IACH,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,CA4MtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IAEH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA8CxC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAkDhC;IAEF;;;;;;;;OAQG;IACH,sBAAsB,GAEpB,WAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,QAAQ,OAAO,EACf,OAAO,MAAM,EACb,QAAQ,MAAM,UAqDd;CACH"}
|
package/dist/config.js
CHANGED
|
@@ -107,6 +107,7 @@ export class ConfigValidator {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
else if (field.type === 'union') {
|
|
110
|
+
value = subConfig[name];
|
|
110
111
|
this.validateUnionValue(value, field, config, childPath, name);
|
|
111
112
|
}
|
|
112
113
|
}
|
|
@@ -177,6 +178,23 @@ export class ConfigValidator {
|
|
|
177
178
|
isMatched = isMatched === true;
|
|
178
179
|
}
|
|
179
180
|
}
|
|
181
|
+
if (field.validations) {
|
|
182
|
+
value = config[name];
|
|
183
|
+
for (const validation of field.validations) {
|
|
184
|
+
const name = Object.keys(validation).filter((key) => key !== 'when' && key !== 'error')[0];
|
|
185
|
+
if (Object.hasOwn(valueValidations[field.type], name)) {
|
|
186
|
+
try {
|
|
187
|
+
valueValidations[field.type][name](value, validation, config, this, context);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
if (validation.error != undefined) {
|
|
191
|
+
throw new Error(validation.error);
|
|
192
|
+
}
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
180
198
|
if (!isMatched) {
|
|
181
199
|
throw new Error(`Value for "${childPath.join('.')}" does not match any of the union types for this error: ${errorMessage}. Please provide a valid value.`);
|
|
182
200
|
}
|
|
@@ -260,6 +278,7 @@ export class ConfigValidator {
|
|
|
260
278
|
}
|
|
261
279
|
if (field.type !== 'object' &&
|
|
262
280
|
field.type !== 'array' &&
|
|
281
|
+
field.type !== 'union' &&
|
|
263
282
|
field.validations) {
|
|
264
283
|
for (const validation of field.validations) {
|
|
265
284
|
const name = Object.keys(validation).filter((key) => key !== 'when' && key !== 'error')[0];
|
|
@@ -920,4 +939,4 @@ export class ConfigValidator {
|
|
|
920
939
|
}
|
|
921
940
|
};
|
|
922
941
|
}
|
|
923
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sVUFBVSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVMxRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLFlBQVksR0FDYixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsTUFBTSxDQUFlO0lBRTdCLFlBQW9CLE1BQW9CO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsR0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQW1CLEVBQUU7UUFDeEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFvQixFQUFtQixFQUFFO1FBQzVELE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILDhEQUE4RDtJQUN2RCxjQUFjLENBQUMsTUFBMkI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FDaEIsTUFBTSxFQUNOLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUN6QyxNQUFNLEVBQ04sRUFBRSxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxpQkFBaUI7SUFDdkIsOERBQThEO0lBQzlELE1BQTJCO0lBQzNCLDhEQUE4RDtJQUM5RCxTQUE4QixFQUM5QixTQUF1QixFQUN2QixJQUFjO0lBQ2QsOERBQThEO0lBQzlELE9BQTZCO1FBRTdCLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFFM0QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsdUVBQXVFO2dCQUN2RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLENBQUMsUUFBUSxFQUNkLFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBRS9DLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0NBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsTUFBTSxFQUNOLElBQUksRUFDSixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDcEIsUUFBUSxFQUNSLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FDakIsQ0FBQzs0QkFDSixDQUFDO2lDQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0NBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsTUFBTSxFQUNOLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFDaEIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFDdkIsU0FBUyxDQUNWLENBQUM7NEJBQ0osQ0FBQztpQ0FBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dDQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLElBQUksRUFDSixLQUFLLENBQUMsS0FBSyxFQUNYLE1BQU0sRUFDTixRQUFRLEVBQ1IsSUFBSSxFQUNKLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FDakIsQ0FBQzs0QkFDSixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sdUJBQXVCO2dDQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDMUQsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDekQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQ2pGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ssa0JBQWtCO0lBQ3hCLDhEQUE4RDtJQUM5RCxLQUFVLEVBQ1YsS0FBaUI7SUFDakIsOERBQThEO0lBQzlELE1BQTJCLEVBQzNCLFNBQW1CLEVBQ25CLElBQVk7SUFDWiw4REFBOEQ7SUFDOUQsT0FBNkI7UUFFN0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV0QixLQUFLLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUM7Z0JBQ0gsSUFDRSxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVE7b0JBQzdCLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQ3pCLEtBQUssSUFBSSxJQUFJLEVBQ2IsQ0FBQztvQkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQ3BCLE1BQU0sRUFDTixLQUFLLEVBQ0wsV0FBVyxDQUFDLFFBQVEsRUFDcEIsU0FBUyxFQUNULE9BQU8sQ0FDUixDQUFDO29CQUNGLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRS9DLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsTUFBTSxFQUNOLElBQUksRUFDSixXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDMUIsUUFBUSxFQUNSLElBQUksQ0FDTCxDQUFDO3dCQUNKLENBQUM7NkJBQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzs0QkFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUNyQixJQUFJLEVBQ0osV0FBVyxDQUFDLEtBQUssRUFDakIsTUFBTSxFQUNOLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7d0JBQ0osQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksRUFDSixXQUFXLENBQUMsS0FBSyxFQUNqQixNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksQ0FDTCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ3ZELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLEtBQUssRUFDTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osT0FBTyxDQUNSLENBQUM7b0JBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRSxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO2dCQUVELElBQUksU0FBUztvQkFBRSxNQUFNO1lBQ3ZCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxPQUFPLENBQUMsS0FBSyxDQUNYLGNBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLFlBQVksR0FBRyxDQUN0RSxDQUFDO2dCQUNGLFNBQVMsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDYixjQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxZQUFZLGlDQUFpQyxDQUMxSSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsWUFBWTtJQUNqQiw4REFBOEQ7SUFDOUQsR0FBd0IsRUFDeEIsUUFBbUIsRUFDbkIsSUFBYztRQUVkLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssYUFBYSxHQUFHO0lBQ3RCLDhEQUE4RDtJQUM5RCxLQUFVLEVBQ1YsS0FBa0I7SUFDbEIsOERBQThEO0lBQzlELE1BQTJCLEVBQzNCLElBQWM7SUFDZCw4REFBOEQ7SUFDOUQsT0FBNkIsRUFDN0IsRUFBRTtRQUNGLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsSUFDRSxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUN6QixDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwRSxDQUFDO29CQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzS0FBc0ssQ0FDL0wsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksQ0FBQztvQkFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QixlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0JBQWtCLEtBQUssMkJBQTJCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDcEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUN0RixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsSUFDRSxLQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQjtvQkFDL0IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDL0IsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQ3hGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUNFLEtBQUssSUFBSSxTQUFTO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDdEIsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3RCLEtBQUssQ0FBQyxPQUFPLEVBQ2IsQ0FBQztZQUNELEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3RCLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQ0UsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTztZQUN0QixLQUFLLENBQUMsV0FBVyxFQUNqQixDQUFDO1lBQ0QsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUN6QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxDQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDO3dCQUNILGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDaEMsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sQ0FDUixDQUFDO29CQUNKLENBQUM7b0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7NEJBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO3dCQUNELE1BQU0sS0FBSyxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsR0FBRyxDQUNsQixJQUFVO0lBQ1YsOERBQThEO0lBQzlELE1BQTJCO0lBQzNCLDhEQUE4RDtJQUM5RCxPQUE2QixFQUNwQixFQUFFO1FBQ1gsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxPQUFPLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7T0FPRztJQUNILDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBVyxFQUFFLElBQWMsRUFBRSxFQUFFO1FBQy9DLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUVuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUN4RSxDQUFDO2lCQUFNLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSyxjQUFjLEdBQUcsR0FBRyxFQUFFO1FBQzVCLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFFM0QsTUFBTSxLQUFLLEdBR047WUFDSDtnQkFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3RCLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFDO1FBRUYsbUVBQW1FO1FBQ25FLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUcsQ0FBQztZQUUvQywyQ0FBMkM7WUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUM7b0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRTlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ3BFLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQzVELENBQUM7b0JBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUVoQyw2REFBNkQ7b0JBQzdELGFBQWE7b0JBQ2IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNULFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUTs0QkFDekIsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDVCxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7NEJBQ2xDLFVBQVUsRUFBRSxJQUFJO3lCQUNqQixDQUFDLENBQUM7b0JBQ0wsQ0FBQzt5QkFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7d0JBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFOzRCQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNULFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFVBQVUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUU7Z0NBQ3JELFVBQVUsRUFBRSxJQUFJOzZCQUNqQixDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FDNUUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0ssa0JBQWtCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM1QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSyxtQkFBbUIsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtRQUNuRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUNFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO2dCQUMzQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztnQkFDakQsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFDbkQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDdkIsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3RCLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUN0QixDQUFDO1lBQ0QsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILGNBQWMsR0FBRyxDQUFDLElBQWMsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLE9BQU8sR0FBNkIsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRCxJQUFJLEtBQUssR0FBNEIsU0FBUyxDQUFDO1FBRS9DLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxLQUE4QixDQUFDO29CQUVuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7NEJBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFDbkMsQ0FBQzs0QkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDN0IsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLEtBQUs7d0JBQUUsT0FBTyxTQUFTLENBQUM7b0JBRTdCLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBRWQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM1QixPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztvQkFDM0IsQ0FBQzt5QkFBTSxJQUNMLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTzt3QkFDdEIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQy9ELENBQUM7d0JBQ0QsT0FBTzs0QkFDTCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3JFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLEdBQUcsU0FBUyxDQUFDO29CQUN0QixDQUFDO29CQUVELFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV0QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO2dCQUMzQixDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDbEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUNqQyxDQUFDO3lCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7d0JBQ3hDLE9BQU8sR0FBRyxTQUFTLENBQUM7d0JBQ3BCLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUN0QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxHQUFHLFNBQVMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDdEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sR0FBRyxTQUFTLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM1QixJQUFJLEtBQThCLENBQUM7b0JBRW5DLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTs0QkFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUNuQyxDQUFDOzRCQUNELEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUM3QixNQUFNO3dCQUNSLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLFNBQVMsQ0FBQztvQkFFN0IsS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFFZCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUMzQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxHQUFHLFNBQVMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxTQUFTLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILDhEQUE4RDtJQUM5RCxlQUFlLEdBQUcsQ0FBQyxPQUFnQyxFQUF1QixFQUFFO1FBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsK0VBQStFO0lBQ3ZFLHNCQUFzQixHQUFHLENBQy9CLE1BQW9CLEVBRUMsRUFBRTtRQUN2Qiw4REFBOEQ7UUFDOUQsTUFBTSxRQUFRLEdBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQy9CLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDOUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ3JCLENBQUM7d0JBQ0YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7NEJBQ3BELElBQ0UsSUFBSSxJQUFJLElBQUk7Z0NBQ1osT0FBTyxJQUFJLEtBQUssUUFBUTtnQ0FDeEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNwQixDQUFDO2dDQUNELE9BQU8sRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDOzRCQUN0QyxDQUFDOzRCQUNELE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztvQkFDaEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVoRCxNQUFNLEtBQUssR0FNTjtZQUNIO2dCQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLEVBQUU7YUFDZjtTQUNGLENBQUM7UUFDRiwrQ0FBK0M7UUFDL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1lBRTFFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1osU0FBUztZQUNYLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUM7WUFDbEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUMscUVBQXFFO1lBQ3JFLHNFQUFzRTtZQUN0RSxhQUFhO1lBQ2IsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRztnQkFDbEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNkLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO2dCQUVoQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFOzRCQUNyQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQyxDQUFDLENBQUM7d0JBRUgsT0FBTztvQkFDVCxDQUFDO29CQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFdkQsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDVCxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVE7NEJBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUU7NEJBQy9DLFVBQVUsRUFBRSxVQUFVOzRCQUN0QixRQUFROzRCQUNSLFVBQVUsRUFBRSxFQUFFO3lCQUNmLENBQUMsQ0FBQzt3QkFFSCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMxQixPQUFPO29CQUNULENBQUM7b0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUMzQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQy9DLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUVyRCxLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNULFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0NBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO2dDQUNyRCxVQUFVLEVBQUUsUUFBUTtnQ0FDcEIsUUFBUTtnQ0FDUixVQUFVLEVBQUUsRUFBRTs2QkFDZixDQUFDLENBQUM7NEJBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUM7d0JBQ25DLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO3dCQUMzQyxDQUFDO3dCQUVELE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVqRCxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNULFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUTtvQkFDekIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVE7b0JBQ1IsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUVqRCxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUNULFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO3dCQUNyRCxVQUFVLEVBQUUsSUFBSTt3QkFDaEIsUUFBUTt3QkFDUixVQUFVLEVBQUUsRUFBRTtxQkFDZixDQUFDLENBQUM7b0JBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUN4QyxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7b0JBRWhDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDNUMsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7NEJBQ3ZCLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTs0QkFDdkIsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQ3hCLENBQUM7NEJBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVCLE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDbkQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBRXZELEtBQUssQ0FBQyxJQUFJLENBQUM7Z0NBQ1QsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRO2dDQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO2dDQUMvQyxVQUFVLEVBQUUsVUFBVTtnQ0FDdEIsUUFBUTtnQ0FDUixVQUFVLEVBQUUsRUFBRTs2QkFDZixDQUFDLENBQUM7NEJBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDMUIsT0FBTzt3QkFDVCxDQUFDO3dCQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzs0QkFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQ0FDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUNyRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FFckQsS0FBSyxDQUFDLElBQUksQ0FBQztvQ0FDVCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO29DQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQ0FDckQsVUFBVSxFQUFFLFFBQVE7b0NBQ3BCLFFBQVE7b0NBQ1IsVUFBVSxFQUFFLEVBQUU7aUNBQ2YsQ0FBQyxDQUFDO2dDQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDOzRCQUNuQyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzs0QkFDM0MsQ0FBQzs0QkFFRCxPQUFPO3dCQUNULENBQUM7d0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxDQUFDO29CQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO2dCQUVELFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxTQUFTLEdBQVcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNuQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUMzQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDdkQsU0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsRSxDQUFDO29CQUVELElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ3hELFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3JCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNkLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZTtnQkFDcEQsU0FBUzthQUNWLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUMsQ0FBQztJQUVGOzs7Ozs7T0FNRztJQUNLLGNBQWMsR0FBRyxDQUN2QixJQUFZLEVBQ1osVUFBbUMsRUFDM0IsRUFBRTtRQUNWLE9BQU8sb0JBQW9CLElBQUk7SUFDL0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ2xFLENBQUM7SUFDRCxDQUFDLENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDSCw4REFBOEQ7SUFDOUQsaUJBQWlCLENBQUMsTUFBZSxFQUFFLEtBQWE7UUFDOUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUNiLFFBQVEsS0FBSyw4REFBOEQsQ0FDNUUsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2FBQ25DLGdCQUFnQixFQUFFO2FBQ2xCLE1BQU0sQ0FDTCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQ25FLENBQUM7UUFDSixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2FBQ25DLGdCQUFnQixFQUFFO2FBQ2xCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQzthQUNuRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2FBQ2xDLGdCQUFnQixFQUFFO2FBQ2xCLE1BQU0sQ0FDTCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQ25FLENBQUM7UUFFSiwrQ0FBK0M7UUFDL0MsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUN6RCxJQUFJLENBQUMsTUFBTSxFQUNYLEVBQUUsRUFDRixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixDQUNsQixDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNLLE1BQU0sQ0FBQyx5QkFBeUIsQ0FDdEMsTUFBb0IsRUFDcEIsSUFBYyxFQUNkLGtCQUFtQyxFQUNuQyxrQkFBNkMsRUFDN0MsaUJBQWtDO1FBR2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLHFFQUFxRTtZQUNyRSxnREFBZ0Q7WUFDaEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUMxRCxLQUFLLENBQUMsUUFBUSxFQUNkLFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixDQUNsQixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzVELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyx5QkFBeUIsQ0FDckQsaUJBQWlCLEVBQ2pCLFNBQVMsQ0FDVixDQUFDO2dCQUNGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyx5QkFBeUIsQ0FDbkQsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2xFLFNBQVMsQ0FDVixDQUFDO2dCQUNGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyx5QkFBeUIsQ0FDdEQsa0JBQWtCLEVBQ2xCLFNBQVMsQ0FDVixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFDLG1CQUFtQixHQUFHLENBQUMsTUFBZSxFQUFZLEVBQUU7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FDakIsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRXJFLE1BQU0sWUFBWSxHQUFHO1lBQ25CLFNBQVM7WUFDVCxHQUFHLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxHQUFHLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxVQUFVLElBQUksU0FBUztnQkFDbEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxHQUFHLENBQUMsYUFBYSxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUztnQkFDckQsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsYUFBYSxJQUFJLFNBQVMsSUFBSSxVQUFVLElBQUksU0FBUztnQkFDdkQsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsYUFBYSxJQUFJLFNBQVM7Z0JBQzlCLFVBQVUsSUFBSSxTQUFTO2dCQUN2QixRQUFRLElBQUksU0FBUztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNoRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsR0FBRyxDQUFDLFlBQVksSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFNBQVM7Z0JBQ3BELENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFlBQVksSUFBSSxTQUFTLElBQUksVUFBVSxJQUFJLFNBQVM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFlBQVksSUFBSSxTQUFTO2dCQUM3QixVQUFVLElBQUksU0FBUztnQkFDdkIsUUFBUSxJQUFJLFNBQVM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE9BQU87WUFDUCxHQUFHLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxHQUFHLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxHQUFHLENBQUMsVUFBVSxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUztnQkFDbEQsQ0FBQyxDQUFDLENBQUMsU0FBUyxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxjQUFjO1lBQ2QsOEJBQThCO1NBQy9CLENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILHNCQUFzQixHQUFHO0lBQ3ZCLDhEQUE4RDtJQUM5RCxTQUE4QixFQUM5QixNQUFlLEVBQ2YsS0FBYSxFQUNiLE1BQWMsRUFDZCxFQUFFO1FBQ0YsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbkUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyw4QkFBOEIsQ0FDNUMsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUNiLFFBQVEsS0FBSyxnRUFBZ0UsQ0FDOUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksU0FBUztZQUN6QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztZQUNoQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2pCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxHQUFHLEdBQUcsTUFBTSxDQUFDO2dCQUNiLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QixHQUFHLEdBQUcsTUFBTSxDQUFDO2dCQUNiLE1BQU07WUFDUixDQUFDO1lBQ0Q7Z0JBQ0UsTUFBTSxLQUFLLENBQUMsbUJBQW1CLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbmZpZywgSUNvbmZpZ1NvdXJjZSB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgY29uZmlnIGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCBKc29uQmlnSW50LCB7IEpzb25CaWdJbnRGYWN0b3J5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmltcG9ydCB7XG4gIENvbmZpZ0ZpZWxkLFxuICBDb25maWdTY2hlbWEsXG4gIFVuaW9uRmllbGQsXG4gIFZhbHVlVHlwZSxcbn0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvZmllbGRzJztcbmltcG9ydCB7IFdoZW4gfSBmcm9tICcuL3NjaGVtYS90eXBlcy92YWxpZGF0aW9ucyc7XG5pbXBvcnQge1xuICBwcm9wZXJ0eVZhbGlkYXRvcnMsXG4gIHN1cHBvcnRlZFR5cGVzLFxufSBmcm9tICcuL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcyc7XG5pbXBvcnQge1xuICBnZXRTb3VyY2VOYW1lLFxuICBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzLFxuICB0b1Bhc2NhbENhc2UsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsdWVWYWxpZGF0aW9ucywgdmFsdWVWYWxpZGF0b3JzIH0gZnJvbSAnLi92YWx1ZS92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRvciB7XG4gIHByaXZhdGUgc2NoZW1hOiBDb25maWdTY2hlbWE7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzY2hlbWE6IENvbmZpZ1NjaGVtYSkge1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGJ5IHRyYW5zZm9ybWluZyBhbmQgdmFsaWRhdGluZ1xuICAgKlxuICAgKiAgVCAtIFRoZSB0eXBlIG9mIHRoZSBmaW5hbCBub3JtYWxpemVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7VH0gVGhlIG5vcm1hbGl6ZWQgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGJ1aWxkQ29uZmlncyA9IDxUPigpOiBUID0+IHtcbiAgICBjb25zdCByYXcgPSBjb25maWcudXRpbC50b09iamVjdCgpO1xuICAgIHRoaXMudmFsaWRhdGVDb25maWcocmF3KTtcbiAgICByZXR1cm4gcmF3O1xuICB9O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgQ29uZmlnVmFsaWRhdG9yIGZyb20gc2NoZW1hIGZpbGUgcGF0aFxuICAgKi9cbiAgc3RhdGljIGZyb21GaWxlID0gKHNjaGVtYVBhdGg6IHN0cmluZyk6IENvbmZpZ1ZhbGlkYXRvciA9PiB7XG4gICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhzY2hlbWFQYXRoLCAndXRmLTgnKTtcblxuICAgIGNvbnN0IGpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gICAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAgICAgIHVzZU5hdGl2ZUJpZ0ludDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IGpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBDb25maWdWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfTtcblxuICAvKipcbiAgICogY3JlYXRlIENvbmZpZ1ZhbGlkYXRvciBmcm9tIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqL1xuICBzdGF0aWMgZnJvbVNjaGVtYSA9IChzY2hlbWE6IENvbmZpZ1NjaGVtYSk6IENvbmZpZ1ZhbGlkYXRvciA9PiB7XG4gICAgcmV0dXJuIG5ldyBDb25maWdWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoZSBwYXNzZWQgY29uZmlnIGFnYWluc3QgdGhlIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgdmFsaWRhdGVDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgY29uZmlnLFxuICAgICAgeyB0eXBlOiAnb2JqZWN0JywgY2hpbGRyZW46IHRoaXMuc2NoZW1hIH0sXG4gICAgICBjb25maWcsXG4gICAgICBbXSxcbiAgICApO1xuXG4gICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhjb25maWcsIGNvbmZpZywgdGhpcy5zY2hlbWEsIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmF2ZXJzZXMgYW5kIHZhbGlkYXRlcyBhIHN1YmNvbmZpZyB1c2luZyB0aGUgc3Vic2NoZW1hXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3ViQ29uZmlnXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzdWJTY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3ViQ29uZmlnKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBjb25maWcgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdWJDb25maWcgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViQ29uZmlnLCBuYW1lKSkge1xuICAgICAgICAgIHZhbHVlID0gc3ViQ29uZmlnW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh2YWx1ZSwgZmllbGQsIGNvbmZpZywgY2hpbGRQYXRoLCBjb250ZXh0KTtcbiAgICAgICAgLy8gaWYgYSBub2RlL2ZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgdHJhdmVyc2UgaXRcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gY2hpbGRQYXRoLmNvbmNhdChbU3RyaW5nKGkpXSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBmaWVsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICAgIHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVbmlvblZhbHVlKFxuICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgIGZpZWxkLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgaXRlbVBhdGgsXG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBwcmltaXRpdmUgZmllbGRzXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKGl0ZW0sIGZpZWxkLml0ZW1zLCBjb25maWcsIGl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVVuaW9uVmFsdWUodmFsdWUsIGZpZWxkLCBjb25maWcsIGNoaWxkUGF0aCwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtlcnJvclByZWFtYmxlKGNoaWxkUGF0aCl9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2VzIGFuZCB2YWxpZGF0ZXMgYSB1bmlvbiBzdWJjb25maWcgdXNpbmcgdGhlIHN1YnNjaGVtYVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHBhcmFtIHtVbmlvbkZpZWxkfSBmaWVsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc3ViU2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkUGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVuaW9uVmFsdWUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpZWxkOiBVbmlvbkZpZWxkLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNoaWxkUGF0aDogc3RyaW5nW10sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGxldCBpc01hdGNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGFjdGl2ZUZpZWxkIG9mIGZpZWxkLmNoaWxkcmVuKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWN0aXZlRmllbGQudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgdmFsdWUgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBhY3RpdmVGaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZUZpZWxkLnR5cGUgPT09ICdhcnJheScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICAgICAgICBjb25zdCBpdGVtUGF0aCA9IGNoaWxkUGF0aC5jb25jYXQoW1N0cmluZyhpKV0pO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBhY3RpdmVGaWVsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3RpdmVGaWVsZC5pdGVtcy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVbmlvblZhbHVlKFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aXZlRmllbGQuaXRlbXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZShcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUZpZWxkLml0ZW1zLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgdmFsdWUsIGNoaWxkUGF0aCk7XG4gICAgICAgICAgaXNNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3RpdmVGaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVVuaW9uVmFsdWUoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGFjdGl2ZUZpZWxkLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh2YWx1ZSwgYWN0aXZlRmllbGQsIGNvbmZpZywgY2hpbGRQYXRoLCBjb250ZXh0KTtcbiAgICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWF0Y2hlZCkgYnJlYWs7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IGV9YDtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICBgVmFsdWUgZm9yIFwiJHtjaGlsZFBhdGguam9pbignLicpfVwiIGhhcyB0aGlzIGVycm9yOiAke2Vycm9yTWVzc2FnZX0uYCxcbiAgICAgICAgKTtcbiAgICAgICAgaXNNYXRjaGVkID0gaXNNYXRjaGVkID09PSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNYXRjaGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWYWx1ZSBmb3IgXCIke2NoaWxkUGF0aC5qb2luKCcuJyl9XCIgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSB1bmlvbiB0eXBlcyBmb3IgdGhpcyBlcnJvcjogJHtlcnJvck1lc3NhZ2V9LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHZhbHVlLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGFuIG9iamVjdCdzIHNwZWNpZmljIHN1YnRyZWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgbW9kaWZ5T2JqZWN0KFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIG5ld1ZhbHVlOiBWYWx1ZVR5cGUsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICkge1xuICAgIGxldCB2YWx1ZSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoLnNsaWNlKDAsIC0xKSkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbGFzdEtleSA9IHBhdGguYXQoLTEpO1xuICAgIGlmIChsYXN0S2V5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVbbGFzdEtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIGEgdmFsdWUgaW4gY29uZmlnIG9iamVjdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7Q29uZmlnRmllbGR9IGZpZWxkIHRoZSBmaWVsZCBzcGVjaWZpY2F0aW9uIGluIHNjaGVtYVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZyB0aGUgY29uZmlnIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlID0gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgKHZhbHVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZpZWxkIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyBkZWNsYXJlZCBhcyBhIEJpZ0ludCwgYnV0IGEgTnVtYmVyIHdhcyBwcm92aWRlZCB3aXRoIGluc3VmZmljaWVudCBwcmVjaXNpb24uIFZhbHVlcyBleGNlZWRpbmcgOTAwNzE5OTI1NDc0MDk5MSBtdXN0IGJlIHN1cHBsaWVkIGFzIGEgc3RyaW5nIHRvIGVuc3VyZSBhY2N1cmFjeS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0ICR7dmFsdWV9IHRvIGEgQmlnSW50IGZvciBmaWVsZCBcIiR7cGF0aC5qb2luKCcuJyl9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmllbGQgXCIke3BhdGguam9pbignLicpfVwiIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuIFBsZWFzZSBwcm92aWRlIGEgc3VpdGFibGUgZm9ybWF0LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4gICAgICAgICAgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVmFsdWUgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCB2YWx1ZSwgcGF0aCk7XG4gICAgICB9XG4gICAgICB2YWx1ZVZhbGlkYXRvcnNbZmllbGQudHlwZV0odmFsdWUsIGZpZWxkKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJlxuICAgICAgZmllbGQuZGVmYXVsdFxuICAgICkge1xuICAgICAgdmFsdWUgPSBmaWVsZC5kZWZhdWx0O1xuICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIGZpZWxkLmRlZmF1bHQsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbnNcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXModmFsaWRhdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJyxcbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXSwgbmFtZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVtuYW1lXShcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGRldGVybWluZXMgaWYgYSB3aGVuIGNsYXVzZSBpbiB2YWxpZGF0aW9ucyBzZWN0aW9uIG9mIGEgc2NoZW1hIGZpZWxkIGlzXG4gICAqIHNhdGlzZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge1doZW59IHdoZW5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1doZW5UcnVlID0gKFxuICAgIHdoZW46IFdoZW4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHBhdGhQYXJ0cyA9IHdoZW4ucGF0aC5zcGxpdCgnLicpO1xuICAgIGlmIChjb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbG9jYWxWYWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbnRleHQsIHBhdGhQYXJ0cyk7XG4gICAgICBpZiAobG9jYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFZhbHVlID09PSB3aGVuLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbmZpZywgcGF0aFBhcnRzKTtcbiAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB3aGVuLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgcGF0aCBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIHZhbHVlQXQgPSAoY29uZmlnOiBhbnksIHBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpdGVtKSA9PiBpdGVtPy5ba2V5XSkuZmluZCgodikgPT4gdiAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24odmFsdWUsIGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyB0aGlzLnNjaGVtYSBhbmQgdGhyb3dzIGV4Y2VwdGlvbiBpZiBhbnkgZXJyb3JzIGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2NoZW1hID0gKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBTY2hlbWEgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBwYXJlbnRQYXRoOiBBcnJheTxzdHJpbmc+O1xuICAgIH0+ID0gW1xuICAgICAge1xuICAgICAgICBzdWJTY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBwYXJlbnRQYXRoOiBbXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0IGFuZCB2YWxpZGF0ZSBmaWVsZHNcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBzdWJTY2hlbWEsIHBhcmVudFBhdGggfSA9IHN0YWNrLnBvcCgpITtcblxuICAgICAgLy8gcHJvY2VzcyBjaGlsZHJlbiBvZiBjdXJyZW50IG9iamVjdCBmaWVsZFxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHN1YlNjaGVtYSkucmV2ZXJzZSgpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChbbmFtZV0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25maWdOYW1lKG5hbWUpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuXG4gICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndHlwZScpIHx8IHR5cGVvZiBmaWVsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgZXZlcnkgc2NoZW1hIGZpZWxkIG11c3QgaGF2ZSBhIFwidHlwZVwiIHByb3BlcnR5IG9mIHR5cGUgXCJzdHJpbmdcImAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBcIiR7ZmllbGQudHlwZX1cImApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWFGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaXMgYW4gb2JqZWN0IGZpZWxkIGl0c2VsZiBhZGQgaXQgdG8gc3RhY2sgZm9yXG4gICAgICAgICAgLy8gcHJvY2Vzc2luZ1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICBmaWVsZC5jaGlsZHJlbi5mb3JFYWNoKCh1bmlvbkNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IHsgW2Ake25hbWV9X3VuaW9uXyR7aW5kZXh9YF06IHVuaW9uQ2hpbGQgfSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIGNvbmZpZyBrZXkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZ05hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25maWcga2V5IG5hbWUgY2FuIG5vdCBjb250YWluIHRoZSAnLicgY2hhcmFjdGVyYCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgcGFzc2VkIHNjaGVtYSBmaWVsZCBzdHJ1Y3R1cmVcbiAgICpcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTY2hlbWFGaWVsZCA9IChmaWVsZDogQ29uZmlnRmllbGQpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5oYXNPd24ocHJvcGVydHlWYWxpZGF0b3JzLmFsbCwga2V5KSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlLCBrZXkpICYmXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9yc1tmaWVsZC50eXBlXSwga2V5KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIGZpZWxkIGhhcyB1bmtub3duIHByb3BlcnR5IFwiJHtrZXl9XCJgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5hbGwpKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdvYmplY3QnICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnYXJyYXknICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAndW5pb24nXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUpKSB7XG4gICAgICAgIHZhbGlkYXRvcihmaWVsZCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0pKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXRoIGluIHNjaGVtYSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHJldHVybiB7KENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkKX0gcmV0dXJucyB1bmRlZmluZWQgaWYgZmllbGQgaXMgbm90IGZvdW5kXG4gICAqL1xuICBnZXRTY2hlbWFGaWVsZCA9IChwYXRoOiBzdHJpbmdbXSk6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgc3ViVHJlZTogQ29uZmlnU2NoZW1hIHwgdW5kZWZpbmVkID0gdGhpcy5zY2hlbWE7XG4gICAgbGV0IGZpZWxkOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoKSB7XG4gICAgICBpZiAoIXN1YlRyZWUpIHtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgbGV0IGZvdW5kOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZmllbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgT2JqZWN0Lmhhc093bihjaGlsZC5jaGlsZHJlbiwgcGFydClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3VuZCA9IGNoaWxkLmNoaWxkcmVuW3BhcnRdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZmllbGQgPSBmb3VuZDtcblxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLmNoaWxkcmVuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcgfHwgZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPVxuICAgICAgICAgICAgICBmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0JyA/IGZpZWxkLml0ZW1zLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5oYXNPd24oc3ViVHJlZSwgcGFydCkpIHtcbiAgICAgICAgZmllbGQgPSBzdWJUcmVlW3BhcnRdO1xuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHN1YlRyZWUgPSBmaWVsZC5jaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gZmllbGQuaXRlbXMuY2hpbGRyZW47XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZmllbGQgPSBmaWVsZC5pdGVtcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgbGV0IGZvdW5kOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZmllbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgT2JqZWN0Lmhhc093bihjaGlsZC5jaGlsZHJlbiwgcGFydClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3VuZCA9IGNoaWxkLmNoaWxkcmVuW3BhcnRdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZmllbGQgPSBmb3VuZDtcblxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLmNoaWxkcmVuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBkZWZhdWx0IHZhbHVlcyBmcm9tIGEgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iamVjdCBvZiBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZ2VuZXJhdGVEZWZhdWx0ID0gKG9wdGlvbnM/OiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgY29uc3QgdmFsdWVUcmVlID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKHRoaXMuc2NoZW1hKTtcbiAgICBpZiAob3B0aW9ucz8udmFsaWRhdGUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVDb25maWcodmFsdWVUcmVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfTtcblxuICAvLyBCdWlsZHMgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgc2NoZW1hIHN1YnRyZWUgKG9iamVjdHMgYW5kIGFycmF5cyksIHJlY3Vyc2l2ZWx5XG4gIHByaXZhdGUgYnVpbGREZWZhdWx0c0ZvclNjaGVtYSA9IChcbiAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoZmllbGQuY2hpbGRyZW4pO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGREZWZhdWx0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBjaGlsZERlZmF1bHRzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKGZpZWxkLmRlZmF1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoXG4gICAgICAgICAgICAgIGZpZWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBmaWVsZC5kZWZhdWx0Lm1hcCgoZWxlbTogVmFsdWVUeXBlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtRGVmYXVsdHMsIC4uLmVsZW0gfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0c1trZXldID0gZmllbGQuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJiBmaWVsZC5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWZhdWx0c1trZXldID0gZmllbGQuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSBmb3IgdGhpcyBpbnN0YW5jZSdzIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiByb290IHR5cGVcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGVUU1R5cGVzID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZW1pdHRlZFR5cGVOYW1lczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBjaGlsZHJlbjogc3RyaW5nW107XG4gICAgICBwYXJlbnRQYXRoOiBzdHJpbmdbXTtcbiAgICAgIHR5cGVOYW1lOiBzdHJpbmc7XG4gICAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICAgIHR5cGVOYW1lOiBuYW1lLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgY2hpbGRyZW4sIHBhcmVudFBhdGgsIHR5cGVOYW1lLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xuXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICghZW1pdHRlZFR5cGVOYW1lcy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgICAgdHlwZXMucHVzaCh0aGlzLmdlblRTSW50ZXJmYWNlKHR5cGVOYW1lLCBhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgZW1pdHRlZFR5cGVOYW1lcy5hZGQodHlwZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChjaGlsZE5hbWUpO1xuICAgICAgLy8gaWYgYSBub2RlL2ZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgYWRkIGl0IHRvXG4gICAgICAvLyB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vXG4gICAgICAvLyB0cmF2ZXJzYWwuXG4gICAgICBjb25zdCBjaGlsZE5hbWVRdW90ZWQgPSBjaGlsZE5hbWUuaW5jbHVkZXMoJy0nKVxuICAgICAgICA/IGBcIiR7Y2hpbGROYW1lfVwiYFxuICAgICAgICA6IGNoaWxkTmFtZTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgIGNvbnN0IHVuaW9uVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZmllbGQuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKG5lc3RlZENoaWxkKSA9PiB7XG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChuZXN0ZWRDaGlsZC50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25QYXRoID0gcGF0aC5jb25jYXQoW2BPcHRpb24ke2luZGV4fWBdKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gb3B0aW9uUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBvcHRpb25QYXRoLFxuICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgaWYgKGNoaWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gcGF0aC5jb25jYXQoW2BJdGVtJHtpbmRleH1gXSk7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gaXRlbVBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGQuaXRlbXMuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGAke3R5cGVOYW1lfVtdYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7Y2hpbGQuaXRlbXMudHlwZX1bXWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGNoaWxkLnR5cGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgdW5pb25UeXBlcy5qb2luKCcgfCAnKV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgc3ViU2NoZW1hOiBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoZmllbGQuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgdHlwZU5hbWVdKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuaXRlbXMuY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoZmllbGQuaXRlbXMuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIGAke3R5cGVOYW1lfVtdYF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZmllbGQuaXRlbXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uUGF0aCA9IHBhdGguY29uY2F0KFtgT3B0aW9uJHtpbmRleH1gXSk7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gb3B0aW9uUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6IG9wdGlvblBhdGgsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaCh0eXBlTmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmNvbmNhdChbYE9wdGlvbiR7aW5kZXh9SXRlbWBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGl0ZW1QYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkLml0ZW1zLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7dHlwZU5hbWV9W11gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7Y2hpbGQuaXRlbXMudHlwZX1bXWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goY2hpbGQudHlwZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgYCgke3VuaW9uVHlwZXMuam9pbignIHwgJyl9KVtdYF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCBgJHtmaWVsZC5pdGVtcy50eXBlfVtdYF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgPSBmaWVsZC50eXBlO1xuICAgICAgbGV0IGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJyAmJiAnY2hvaWNlcycgaW4gdmFsaWRhdGlvbikge1xuICAgICAgICAgICAgZmllbGRUeXBlID0gdmFsaWRhdGlvbi5jaG9pY2VzLm1hcCgoYykgPT4gYCcke2N9J2ApLmpvaW4oJyB8ICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgncmVxdWlyZWQnIGluIHZhbGlkYXRpb24gJiYgISgnd2hlbicgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgIGlzT3B0aW9uYWwgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMucHVzaChbXG4gICAgICAgIGlzT3B0aW9uYWwgPyBgJHtjaGlsZE5hbWVRdW90ZWR9P2AgOiBjaGlsZE5hbWVRdW90ZWQsXG4gICAgICAgIGZpZWxkVHlwZSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy5yZXZlcnNlKCkuam9pbignXFxuXFxuJykgKyAnXFxuJztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGEgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgcGFzc2VkIG5hbWUgYW5kIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBzdHJpbmddPn0gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBwcml2YXRlIGdlblRTSW50ZXJmYWNlID0gKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPixcbiAgKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYGV4cG9ydCBpbnRlcmZhY2UgJHtuYW1lfSB7XG4gICR7YXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGAke2F0dHJbMF19OiAke2F0dHJbMV19O2ApLmpvaW4oJ1xcbiAgJyl9XG59YDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGNoYXJhY3RlcmlzdGljIG9iamVjdCBmb3IgdmFsdWVzIGF0IGEgc3BlY2lmaWMgbm9kZSBjb25maWcgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZXRDb25maWdGb3JMZXZlbChjb25maWc6IElDb25maWcsIGxldmVsOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBcIiR7bGV2ZWx9XCIgbGV2ZWwgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHN5c3RlbSBjb25maWd1cmF0aW9uIGxldmVsc2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBoaWdoZXJMZXZlbFNvdXJjZXMgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHNvdXJjZSkgPT4gY29uZkxldmVscy5pbmRleE9mKGdldFNvdXJjZU5hbWUoc291cmNlKSkgPiBsZXZlbEluZGV4LFxuICAgICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWxTb3VyY2UgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcigoc291cmNlKSA9PiBnZXRTb3VyY2VOYW1lKHNvdXJjZSkgPT09IGxldmVsKVxuICAgICAgLmF0KDApO1xuICAgIGNvbnN0IGxvd2VyTGV2ZWxTb3VyY2VzID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IGNvbmZMZXZlbHMuaW5kZXhPZihnZXRTb3VyY2VOYW1lKHNvdXJjZSkpIDwgbGV2ZWxJbmRleCxcbiAgICAgICk7XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIGNvbnN0IHZhbHVlVHJlZSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICBbXSxcbiAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICk7XG5cbiAgICByZXR1cm4gdmFsdWVUcmVlO1xuICB9XG5cbiAgLyoqXG4gICAqdHJhdmVyc2VzIHRoZSBjb25maWcgc2NoZW1hIGRlcHRoIGZpcnN0IHRvIHByb2R1Y2UgY2hhcmFjdGVyaXN0aWMgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtDb25maWdTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBoaWdoZXJMZXZlbFNvdXJjZXNcbiAgICogQHBhcmFtIHsoSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCl9IGN1cnJlbnRMZXZlbFNvdXJjZVxuICAgKiBAcGFyYW0ge0lDb25maWdTb3VyY2VbXX0gbG93ZXJMZXZlbFNvdXJjZXNcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICogQG1lbWJlcm9mIENvbmZpZ1ZhbGlkYXRvclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc0NvbmZpZ0ZvckxldmVsTm9kZShcbiAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgICBoaWdoZXJMZXZlbFNvdXJjZXM6IElDb25maWdTb3VyY2VbXSxcbiAgICBjdXJyZW50TGV2ZWxTb3VyY2U6IElDb25maWdTb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgbG93ZXJMZXZlbFNvdXJjZXM6IElDb25maWdTb3VyY2VbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBjaGlsZE5hbWUgb2YgT2JqZWN0LmtleXMoc2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGguY29uY2F0KFtjaGlsZE5hbWVdKTtcbiAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hW2NoaWxkTmFtZV07XG4gICAgICAvLyBpZiBhIGZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgcmVjdXJzZSBvbiBpdC5cbiAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEgbGVhZiBhbmQgbmVlZHMgbm8gdHJhdmVyc2FsLlxuICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnbGFiZWwnXSA9XG4gICAgICAgICAgZmllbGQubGFiZWwgIT0gdW5kZWZpbmVkID8gZmllbGQubGFiZWwgOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZXNjcmlwdGlvbiddID1cbiAgICAgICAgICBmaWVsZC5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQgPyBmaWVsZC5kZXNjcmlwdGlvbiA6IG51bGw7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2RlZmF1bHQnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWyd2YWx1ZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBbLi4uKGN1cnJlbnRMZXZlbFNvdXJjZSAhPSB1bmRlZmluZWQgPyBbY3VycmVudExldmVsU291cmNlXSA6IFtdKV0sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydvdmVycmlkZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbGlzdCBvZiBjb25maWcgc291cmNlcyB1c2VkIGJ5IG5vZGUgY29uZmlnIHBhY2thZ2UsIG9yZGVyZWQgZnJvbVxuICAgKiB0aGUgbG93ZXN0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiAge3N0cmluZ1tdfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Tm9kZUNvbmZpZ0xldmVscyA9IChjb25maWc6IElDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQVBQX0lOU1RBTkNFJyk7XG4gICAgbGV0IGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfRU5WJyk7XG4gICAgZGVwbG95bWVudCA9IGNvbmZpZy51dGlsLmdldEVudignTk9ERV9DT05GSUdfRU5WJyk7XG4gICAgY29uc3QgZnVsbEhvc3RuYW1lID0gY29uZmlnLnV0aWwuZ2V0RW52KCdIT1NUTkFNRScpO1xuICAgIGNvbnN0IHNob3J0SG9zdG5hbWUgPVxuICAgICAgZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCA/IGZ1bGxIb3N0bmFtZS5zcGxpdCgnLicpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29uZmlnTGV2ZWxzID0gW1xuICAgICAgJ2RlZmF1bHQnLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgZGVmYXVsdC0ke2luc3RhbmNlfWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkID8gW2Ake2RlcGxveW1lbnR9YF0gOiBbXSksXG4gICAgICAuLi4oaW5zdGFuY2UgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7c2hvcnRIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtzaG9ydEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7ZnVsbEhvc3RuYW1lfWBdIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7ZnVsbEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBgbG9jYWxgLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgJyROT0RFX0NPTkZJRycsXG4gICAgICAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgXTtcblxuICAgIHJldHVybiBjb25maWdMZXZlbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvbmZpZyBvYmplY3QgYW5kIHdyaXRlcyBpdCB0byB0aGUgbm9kZS1jb25maWcgZmlsZVxuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdPYmpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsIG91dHB1dCBub2RlLWNvbmZpZyBmaWxlIGxldmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGVcbiAgICovXG4gIHZhbGlkYXRlQW5kV3JpdGVDb25maWcgPSAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY29uZmlnOiBJQ29uZmlnLFxuICAgIGxldmVsOiBzdHJpbmcsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpLmZpbHRlcihcbiAgICAgIChsKSA9PiBsICE9PSAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBbJHtsZXZlbH1dIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGxldmVsc2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgICBwcm9jZXNzLmVudlsnTk9ERV9DT05GSUdfRElSJ10gIT0gdW5kZWZpbmVkXG4gICAgICAgID8gcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddXG4gICAgICAgIDogJy4vY29uZmlnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgbGV0IGV4dCA9ICcnO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShjb25maWdPYmopO1xuICAgICAgICBleHQgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGNvbmZpZ09iaik7XG4gICAgICAgIGV4dCA9ICd5YW1sJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0uJHtleHR9YCk7XG4gICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIGAke2xldmVsfS1iYWNrdXAuJHtleHR9YCk7XG4gICAgY29uc3QgY29uZkZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpO1xuICAgIGlmIChjb25mRmlsZUV4aXN0cykge1xuICAgICAgZnMucmVuYW1lU3luYyhvdXRwdXRQYXRoLCBiYWNrdXBQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBvdXRwdXQpO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbmZPYmogPSBjb25maWcudXRpbC5sb2FkRmlsZUNvbmZpZ3MoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZWRDb25mT2JqKTtcbiAgICAgIGZzLnVubGlua1N5bmMoYmFja3VwUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZzLnVubGlua1N5bmMob3V0cHV0UGF0aCk7XG4gICAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgICAgZnMucmVuYW1lU3luYyhiYWNrdXBQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
942
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sVUFBVSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVMxRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLFlBQVksR0FDYixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsTUFBTSxDQUFlO0lBRTdCLFlBQW9CLE1BQW9CO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsR0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQW1CLEVBQUU7UUFDeEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0Qs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SUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbmZpZywgSUNvbmZpZ1NvdXJjZSB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgY29uZmlnIGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCBKc29uQmlnSW50LCB7IEpzb25CaWdJbnRGYWN0b3J5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmltcG9ydCB7XG4gIENvbmZpZ0ZpZWxkLFxuICBDb25maWdTY2hlbWEsXG4gIFVuaW9uRmllbGQsXG4gIFZhbHVlVHlwZSxcbn0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvZmllbGRzJztcbmltcG9ydCB7IFdoZW4gfSBmcm9tICcuL3NjaGVtYS90eXBlcy92YWxpZGF0aW9ucyc7XG5pbXBvcnQge1xuICBwcm9wZXJ0eVZhbGlkYXRvcnMsXG4gIHN1cHBvcnRlZFR5cGVzLFxufSBmcm9tICcuL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcyc7XG5pbXBvcnQge1xuICBnZXRTb3VyY2VOYW1lLFxuICBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzLFxuICB0b1Bhc2NhbENhc2UsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsdWVWYWxpZGF0aW9ucywgdmFsdWVWYWxpZGF0b3JzIH0gZnJvbSAnLi92YWx1ZS92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRvciB7XG4gIHByaXZhdGUgc2NoZW1hOiBDb25maWdTY2hlbWE7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzY2hlbWE6IENvbmZpZ1NjaGVtYSkge1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGJ5IHRyYW5zZm9ybWluZyBhbmQgdmFsaWRhdGluZ1xuICAgKlxuICAgKiAgVCAtIFRoZSB0eXBlIG9mIHRoZSBmaW5hbCBub3JtYWxpemVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7VH0gVGhlIG5vcm1hbGl6ZWQgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGJ1aWxkQ29uZmlncyA9IDxUPigpOiBUID0+IHtcbiAgICBjb25zdCByYXcgPSBjb25maWcudXRpbC50b09iamVjdCgpO1xuICAgIHRoaXMudmFsaWRhdGVDb25maWcocmF3KTtcbiAgICByZXR1cm4gcmF3O1xuICB9O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgQ29uZmlnVmFsaWRhdG9yIGZyb20gc2NoZW1hIGZpbGUgcGF0aFxuICAgKi9cbiAgc3RhdGljIGZyb21GaWxlID0gKHNjaGVtYVBhdGg6IHN0cmluZyk6IENvbmZpZ1ZhbGlkYXRvciA9PiB7XG4gICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhzY2hlbWFQYXRoLCAndXRmLTgnKTtcblxuICAgIGNvbnN0IGpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gICAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAgICAgIHVzZU5hdGl2ZUJpZ0ludDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IGpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBDb25maWdWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfTtcblxuICAvKipcbiAgICogY3JlYXRlIENvbmZpZ1ZhbGlkYXRvciBmcm9tIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqL1xuICBzdGF0aWMgZnJvbVNjaGVtYSA9IChzY2hlbWE6IENvbmZpZ1NjaGVtYSk6IENvbmZpZ1ZhbGlkYXRvciA9PiB7XG4gICAgcmV0dXJuIG5ldyBDb25maWdWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoZSBwYXNzZWQgY29uZmlnIGFnYWluc3QgdGhlIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgdmFsaWRhdGVDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgY29uZmlnLFxuICAgICAgeyB0eXBlOiAnb2JqZWN0JywgY2hpbGRyZW46IHRoaXMuc2NoZW1hIH0sXG4gICAgICBjb25maWcsXG4gICAgICBbXSxcbiAgICApO1xuXG4gICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhjb25maWcsIGNvbmZpZywgdGhpcy5zY2hlbWEsIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmF2ZXJzZXMgYW5kIHZhbGlkYXRlcyBhIHN1YmNvbmZpZyB1c2luZyB0aGUgc3Vic2NoZW1hXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3ViQ29uZmlnXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzdWJTY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3ViQ29uZmlnKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBjb25maWcgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdWJDb25maWcgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViQ29uZmlnLCBuYW1lKSkge1xuICAgICAgICAgIHZhbHVlID0gc3ViQ29uZmlnW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh2YWx1ZSwgZmllbGQsIGNvbmZpZywgY2hpbGRQYXRoLCBjb250ZXh0KTtcbiAgICAgICAgLy8gaWYgYSBub2RlL2ZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgdHJhdmVyc2UgaXRcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gY2hpbGRQYXRoLmNvbmNhdChbU3RyaW5nKGkpXSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBmaWVsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICAgIHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVVbmlvblZhbHVlKFxuICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgIGZpZWxkLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgaXRlbVBhdGgsXG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBwcmltaXRpdmUgZmllbGRzXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKGl0ZW0sIGZpZWxkLml0ZW1zLCBjb25maWcsIGl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgdmFsdWUgPSBzdWJDb25maWdbbmFtZV07XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVVuaW9uVmFsdWUodmFsdWUsIGZpZWxkLCBjb25maWcsIGNoaWxkUGF0aCwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtlcnJvclByZWFtYmxlKGNoaWxkUGF0aCl9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2VzIGFuZCB2YWxpZGF0ZXMgYSB1bmlvbiBzdWJjb25maWcgdXNpbmcgdGhlIHN1YnNjaGVtYVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHBhcmFtIHtVbmlvbkZpZWxkfSBmaWVsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc3ViU2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkUGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVuaW9uVmFsdWUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpZWxkOiBVbmlvbkZpZWxkLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNoaWxkUGF0aDogc3RyaW5nW10sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGxldCBpc01hdGNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgZm9yIChjb25zdCBhY3RpdmVGaWVsZCBvZiBmaWVsZC5jaGlsZHJlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFjdGl2ZUZpZWxkLnR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIHZhbHVlICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgYWN0aXZlRmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaXNNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3RpdmVGaWVsZC50eXBlID09PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgY29uc3QgaXRlbVBhdGggPSBjaGlsZFBhdGguY29uY2F0KFtTdHJpbmcoaSldKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVGaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUZpZWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZUZpZWxkLml0ZW1zLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVVuaW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBhY3RpdmVGaWVsZC5pdGVtcyxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgaXRlbVBhdGgsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aXZlRmllbGQuaXRlbXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCB2YWx1ZSwgY2hpbGRQYXRoKTtcbiAgICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZUZpZWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlVW5pb25WYWx1ZShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgYWN0aXZlRmllbGQsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlzTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHZhbHVlLCBhY3RpdmVGaWVsZCwgY29uZmlnLCBjaGlsZFBhdGgsIGNvbnRleHQpO1xuICAgICAgICAgIGlzTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXRjaGVkKSBicmVhaztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gO1xuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIGBWYWx1ZSBmb3IgXCIke2NoaWxkUGF0aC5qb2luKCcuJyl9XCIgaGFzIHRoaXMgZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfS5gLFxuICAgICAgICApO1xuICAgICAgICBpc01hdGNoZWQgPSBpc01hdGNoZWQgPT09IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgdmFsdWUgPSBjb25maWdbbmFtZV07XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbHRlcihcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICd3aGVuJyAmJiBrZXkgIT09ICdlcnJvcicsXG4gICAgICAgIClbMF07XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKHZhbHVlVmFsaWRhdGlvbnNbZmllbGQudHlwZV0sIG5hbWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlVmFsaWRhdGlvbnNbZmllbGQudHlwZV1bbmFtZV0oXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbi5lcnJvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHZhbGlkYXRpb24uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNNYXRjaGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWYWx1ZSBmb3IgXCIke2NoaWxkUGF0aC5qb2luKCcuJyl9XCIgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSB1bmlvbiB0eXBlcyBmb3IgdGhpcyBlcnJvcjogJHtlcnJvck1lc3NhZ2V9LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHZhbHVlLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGFuIG9iamVjdCdzIHNwZWNpZmljIHN1YnRyZWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgbW9kaWZ5T2JqZWN0KFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIG5ld1ZhbHVlOiBWYWx1ZVR5cGUsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICkge1xuICAgIGxldCB2YWx1ZSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoLnNsaWNlKDAsIC0xKSkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbGFzdEtleSA9IHBhdGguYXQoLTEpO1xuICAgIGlmIChsYXN0S2V5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVbbGFzdEtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIGEgdmFsdWUgaW4gY29uZmlnIG9iamVjdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7Q29uZmlnRmllbGR9IGZpZWxkIHRoZSBmaWVsZCBzcGVjaWZpY2F0aW9uIGluIHNjaGVtYVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZyB0aGUgY29uZmlnIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlID0gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgKHZhbHVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZpZWxkIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyBkZWNsYXJlZCBhcyBhIEJpZ0ludCwgYnV0IGEgTnVtYmVyIHdhcyBwcm92aWRlZCB3aXRoIGluc3VmZmljaWVudCBwcmVjaXNpb24uIFZhbHVlcyBleGNlZWRpbmcgOTAwNzE5OTI1NDc0MDk5MSBtdXN0IGJlIHN1cHBsaWVkIGFzIGEgc3RyaW5nIHRvIGVuc3VyZSBhY2N1cmFjeS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0ICR7dmFsdWV9IHRvIGEgQmlnSW50IGZvciBmaWVsZCBcIiR7cGF0aC5qb2luKCcuJyl9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmllbGQgXCIke3BhdGguam9pbignLicpfVwiIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuIFBsZWFzZSBwcm92aWRlIGEgc3VpdGFibGUgZm9ybWF0LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4gICAgICAgICAgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVmFsdWUgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCB2YWx1ZSwgcGF0aCk7XG4gICAgICB9XG4gICAgICB2YWx1ZVZhbGlkYXRvcnNbZmllbGQudHlwZV0odmFsdWUsIGZpZWxkKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJlxuICAgICAgZmllbGQuZGVmYXVsdFxuICAgICkge1xuICAgICAgdmFsdWUgPSBmaWVsZC5kZWZhdWx0O1xuICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIGZpZWxkLmRlZmF1bHQsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbnNcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXModmFsaWRhdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJyxcbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXSwgbmFtZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVtuYW1lXShcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGRldGVybWluZXMgaWYgYSB3aGVuIGNsYXVzZSBpbiB2YWxpZGF0aW9ucyBzZWN0aW9uIG9mIGEgc2NoZW1hIGZpZWxkIGlzXG4gICAqIHNhdGlzZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge1doZW59IHdoZW5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1doZW5UcnVlID0gKFxuICAgIHdoZW46IFdoZW4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHBhdGhQYXJ0cyA9IHdoZW4ucGF0aC5zcGxpdCgnLicpO1xuICAgIGlmIChjb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbG9jYWxWYWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbnRleHQsIHBhdGhQYXJ0cyk7XG4gICAgICBpZiAobG9jYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFZhbHVlID09PSB3aGVuLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbmZpZywgcGF0aFBhcnRzKTtcbiAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB3aGVuLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgcGF0aCBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIHZhbHVlQXQgPSAoY29uZmlnOiBhbnksIHBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpdGVtKSA9PiBpdGVtPy5ba2V5XSkuZmluZCgodikgPT4gdiAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24odmFsdWUsIGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyB0aGlzLnNjaGVtYSBhbmQgdGhyb3dzIGV4Y2VwdGlvbiBpZiBhbnkgZXJyb3JzIGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2NoZW1hID0gKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBTY2hlbWEgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBwYXJlbnRQYXRoOiBBcnJheTxzdHJpbmc+O1xuICAgIH0+ID0gW1xuICAgICAge1xuICAgICAgICBzdWJTY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBwYXJlbnRQYXRoOiBbXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0IGFuZCB2YWxpZGF0ZSBmaWVsZHNcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBzdWJTY2hlbWEsIHBhcmVudFBhdGggfSA9IHN0YWNrLnBvcCgpITtcblxuICAgICAgLy8gcHJvY2VzcyBjaGlsZHJlbiBvZiBjdXJyZW50IG9iamVjdCBmaWVsZFxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHN1YlNjaGVtYSkucmV2ZXJzZSgpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChbbmFtZV0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25maWdOYW1lKG5hbWUpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuXG4gICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndHlwZScpIHx8IHR5cGVvZiBmaWVsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgZXZlcnkgc2NoZW1hIGZpZWxkIG11c3QgaGF2ZSBhIFwidHlwZVwiIHByb3BlcnR5IG9mIHR5cGUgXCJzdHJpbmdcImAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBcIiR7ZmllbGQudHlwZX1cImApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWFGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaXMgYW4gb2JqZWN0IGZpZWxkIGl0c2VsZiBhZGQgaXQgdG8gc3RhY2sgZm9yXG4gICAgICAgICAgLy8gcHJvY2Vzc2luZ1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICBmaWVsZC5jaGlsZHJlbi5mb3JFYWNoKCh1bmlvbkNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IHsgW2Ake25hbWV9X3VuaW9uXyR7aW5kZXh9YF06IHVuaW9uQ2hpbGQgfSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIGNvbmZpZyBrZXkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZ05hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25maWcga2V5IG5hbWUgY2FuIG5vdCBjb250YWluIHRoZSAnLicgY2hhcmFjdGVyYCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgcGFzc2VkIHNjaGVtYSBmaWVsZCBzdHJ1Y3R1cmVcbiAgICpcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTY2hlbWFGaWVsZCA9IChmaWVsZDogQ29uZmlnRmllbGQpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5oYXNPd24ocHJvcGVydHlWYWxpZGF0b3JzLmFsbCwga2V5KSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlLCBrZXkpICYmXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9yc1tmaWVsZC50eXBlXSwga2V5KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIGZpZWxkIGhhcyB1bmtub3duIHByb3BlcnR5IFwiJHtrZXl9XCJgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5hbGwpKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdvYmplY3QnICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnYXJyYXknICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAndW5pb24nXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUpKSB7XG4gICAgICAgIHZhbGlkYXRvcihmaWVsZCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0pKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXRoIGluIHNjaGVtYSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHJldHVybiB7KENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkKX0gcmV0dXJucyB1bmRlZmluZWQgaWYgZmllbGQgaXMgbm90IGZvdW5kXG4gICAqL1xuICBnZXRTY2hlbWFGaWVsZCA9IChwYXRoOiBzdHJpbmdbXSk6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgc3ViVHJlZTogQ29uZmlnU2NoZW1hIHwgdW5kZWZpbmVkID0gdGhpcy5zY2hlbWE7XG4gICAgbGV0IGZpZWxkOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoKSB7XG4gICAgICBpZiAoIXN1YlRyZWUpIHtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgbGV0IGZvdW5kOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZmllbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgT2JqZWN0Lmhhc093bihjaGlsZC5jaGlsZHJlbiwgcGFydClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3VuZCA9IGNoaWxkLmNoaWxkcmVuW3BhcnRdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZmllbGQgPSBmb3VuZDtcblxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLmNoaWxkcmVuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcgfHwgZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPVxuICAgICAgICAgICAgICBmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0JyA/IGZpZWxkLml0ZW1zLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5oYXNPd24oc3ViVHJlZSwgcGFydCkpIHtcbiAgICAgICAgZmllbGQgPSBzdWJUcmVlW3BhcnRdO1xuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHN1YlRyZWUgPSBmaWVsZC5jaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gZmllbGQuaXRlbXMuY2hpbGRyZW47XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZmllbGQgPSBmaWVsZC5pdGVtcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgbGV0IGZvdW5kOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZmllbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgT2JqZWN0Lmhhc093bihjaGlsZC5jaGlsZHJlbiwgcGFydClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3VuZCA9IGNoaWxkLmNoaWxkcmVuW3BhcnRdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZmllbGQgPSBmb3VuZDtcblxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLmNoaWxkcmVuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBkZWZhdWx0IHZhbHVlcyBmcm9tIGEgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iamVjdCBvZiBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZ2VuZXJhdGVEZWZhdWx0ID0gKG9wdGlvbnM/OiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgY29uc3QgdmFsdWVUcmVlID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKHRoaXMuc2NoZW1hKTtcbiAgICBpZiAob3B0aW9ucz8udmFsaWRhdGUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVDb25maWcodmFsdWVUcmVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfTtcblxuICAvLyBCdWlsZHMgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgc2NoZW1hIHN1YnRyZWUgKG9iamVjdHMgYW5kIGFycmF5cyksIHJlY3Vyc2l2ZWx5XG4gIHByaXZhdGUgYnVpbGREZWZhdWx0c0ZvclNjaGVtYSA9IChcbiAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoZmllbGQuY2hpbGRyZW4pO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGREZWZhdWx0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBjaGlsZERlZmF1bHRzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKGZpZWxkLmRlZmF1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoXG4gICAgICAgICAgICAgIGZpZWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBmaWVsZC5kZWZhdWx0Lm1hcCgoZWxlbTogVmFsdWVUeXBlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtRGVmYXVsdHMsIC4uLmVsZW0gfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0c1trZXldID0gZmllbGQuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJiBmaWVsZC5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWZhdWx0c1trZXldID0gZmllbGQuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSBmb3IgdGhpcyBpbnN0YW5jZSdzIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiByb290IHR5cGVcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGVUU1R5cGVzID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZW1pdHRlZFR5cGVOYW1lczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBjaGlsZHJlbjogc3RyaW5nW107XG4gICAgICBwYXJlbnRQYXRoOiBzdHJpbmdbXTtcbiAgICAgIHR5cGVOYW1lOiBzdHJpbmc7XG4gICAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICAgIHR5cGVOYW1lOiBuYW1lLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgY2hpbGRyZW4sIHBhcmVudFBhdGgsIHR5cGVOYW1lLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xuXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICghZW1pdHRlZFR5cGVOYW1lcy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgICAgdHlwZXMucHVzaCh0aGlzLmdlblRTSW50ZXJmYWNlKHR5cGVOYW1lLCBhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgZW1pdHRlZFR5cGVOYW1lcy5hZGQodHlwZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoLmNvbmNhdChjaGlsZE5hbWUpO1xuICAgICAgLy8gaWYgYSBub2RlL2ZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgYWRkIGl0IHRvXG4gICAgICAvLyB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vXG4gICAgICAvLyB0cmF2ZXJzYWwuXG4gICAgICBjb25zdCBjaGlsZE5hbWVRdW90ZWQgPSBjaGlsZE5hbWUuaW5jbHVkZXMoJy0nKVxuICAgICAgICA/IGBcIiR7Y2hpbGROYW1lfVwiYFxuICAgICAgICA6IGNoaWxkTmFtZTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgIGNvbnN0IHVuaW9uVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZmllbGQuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKG5lc3RlZENoaWxkKSA9PiB7XG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChuZXN0ZWRDaGlsZC50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25QYXRoID0gcGF0aC5jb25jYXQoW2BPcHRpb24ke2luZGV4fWBdKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gb3B0aW9uUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBvcHRpb25QYXRoLFxuICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgaWYgKGNoaWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gcGF0aC5jb25jYXQoW2BJdGVtJHtpbmRleH1gXSk7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gaXRlbVBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGQuaXRlbXMuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGAke3R5cGVOYW1lfVtdYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7Y2hpbGQuaXRlbXMudHlwZX1bXWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGNoaWxkLnR5cGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgdW5pb25UeXBlcy5qb2luKCcgfCAnKV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgc3ViU2NoZW1hOiBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoZmllbGQuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgdHlwZU5hbWVdKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuaXRlbXMuY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoZmllbGQuaXRlbXMuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIGAke3R5cGVOYW1lfVtdYF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZmllbGQuaXRlbXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uUGF0aCA9IHBhdGguY29uY2F0KFtgT3B0aW9uJHtpbmRleH1gXSk7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gb3B0aW9uUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6IG9wdGlvblBhdGgsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaCh0eXBlTmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmNvbmNhdChbYE9wdGlvbiR7aW5kZXh9SXRlbWBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGl0ZW1QYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkLml0ZW1zLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7dHlwZU5hbWV9W11gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7Y2hpbGQuaXRlbXMudHlwZX1bXWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goY2hpbGQudHlwZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgYCgke3VuaW9uVHlwZXMuam9pbignIHwgJyl9KVtdYF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCBgJHtmaWVsZC5pdGVtcy50eXBlfVtdYF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgPSBmaWVsZC50eXBlO1xuICAgICAgbGV0IGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJyAmJiAnY2hvaWNlcycgaW4gdmFsaWRhdGlvbikge1xuICAgICAgICAgICAgZmllbGRUeXBlID0gdmFsaWRhdGlvbi5jaG9pY2VzLm1hcCgoYykgPT4gYCcke2N9J2ApLmpvaW4oJyB8ICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgncmVxdWlyZWQnIGluIHZhbGlkYXRpb24gJiYgISgnd2hlbicgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgIGlzT3B0aW9uYWwgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMucHVzaChbXG4gICAgICAgIGlzT3B0aW9uYWwgPyBgJHtjaGlsZE5hbWVRdW90ZWR9P2AgOiBjaGlsZE5hbWVRdW90ZWQsXG4gICAgICAgIGZpZWxkVHlwZSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy5yZXZlcnNlKCkuam9pbignXFxuXFxuJykgKyAnXFxuJztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGEgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgcGFzc2VkIG5hbWUgYW5kIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBzdHJpbmddPn0gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBwcml2YXRlIGdlblRTSW50ZXJmYWNlID0gKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPixcbiAgKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYGV4cG9ydCBpbnRlcmZhY2UgJHtuYW1lfSB7XG4gICR7YXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGAke2F0dHJbMF19OiAke2F0dHJbMV19O2ApLmpvaW4oJ1xcbiAgJyl9XG59YDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGNoYXJhY3RlcmlzdGljIG9iamVjdCBmb3IgdmFsdWVzIGF0IGEgc3BlY2lmaWMgbm9kZSBjb25maWcgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZXRDb25maWdGb3JMZXZlbChjb25maWc6IElDb25maWcsIGxldmVsOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBcIiR7bGV2ZWx9XCIgbGV2ZWwgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHN5c3RlbSBjb25maWd1cmF0aW9uIGxldmVsc2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBoaWdoZXJMZXZlbFNvdXJjZXMgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHNvdXJjZSkgPT4gY29uZkxldmVscy5pbmRleE9mKGdldFNvdXJjZU5hbWUoc291cmNlKSkgPiBsZXZlbEluZGV4LFxuICAgICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWxTb3VyY2UgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcigoc291cmNlKSA9PiBnZXRTb3VyY2VOYW1lKHNvdXJjZSkgPT09IGxldmVsKVxuICAgICAgLmF0KDApO1xuICAgIGNvbnN0IGxvd2VyTGV2ZWxTb3VyY2VzID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IGNvbmZMZXZlbHMuaW5kZXhPZihnZXRTb3VyY2VOYW1lKHNvdXJjZSkpIDwgbGV2ZWxJbmRleCxcbiAgICAgICk7XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIGNvbnN0IHZhbHVlVHJlZSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICBbXSxcbiAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICk7XG5cbiAgICByZXR1cm4gdmFsdWVUcmVlO1xuICB9XG5cbiAgLyoqXG4gICAqdHJhdmVyc2VzIHRoZSBjb25maWcgc2NoZW1hIGRlcHRoIGZpcnN0IHRvIHByb2R1Y2UgY2hhcmFjdGVyaXN0aWMgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtDb25maWdTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBoaWdoZXJMZXZlbFNvdXJjZXNcbiAgICogQHBhcmFtIHsoSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCl9IGN1cnJlbnRMZXZlbFNvdXJjZVxuICAgKiBAcGFyYW0ge0lDb25maWdTb3VyY2VbXX0gbG93ZXJMZXZlbFNvdXJjZXNcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICogQG1lbWJlcm9mIENvbmZpZ1ZhbGlkYXRvclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc0NvbmZpZ0ZvckxldmVsTm9kZShcbiAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgICBoaWdoZXJMZXZlbFNvdXJjZXM6IElDb25maWdTb3VyY2VbXSxcbiAgICBjdXJyZW50TGV2ZWxTb3VyY2U6IElDb25maWdTb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgbG93ZXJMZXZlbFNvdXJjZXM6IElDb25maWdTb3VyY2VbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBjaGlsZE5hbWUgb2YgT2JqZWN0LmtleXMoc2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGguY29uY2F0KFtjaGlsZE5hbWVdKTtcbiAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hW2NoaWxkTmFtZV07XG4gICAgICAvLyBpZiBhIGZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgcmVjdXJzZSBvbiBpdC5cbiAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEgbGVhZiBhbmQgbmVlZHMgbm8gdHJhdmVyc2FsLlxuICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnbGFiZWwnXSA9XG4gICAgICAgICAgZmllbGQubGFiZWwgIT0gdW5kZWZpbmVkID8gZmllbGQubGFiZWwgOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZXNjcmlwdGlvbiddID1cbiAgICAgICAgICBmaWVsZC5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQgPyBmaWVsZC5kZXNjcmlwdGlvbiA6IG51bGw7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2RlZmF1bHQnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWyd2YWx1ZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBbLi4uKGN1cnJlbnRMZXZlbFNvdXJjZSAhPSB1bmRlZmluZWQgPyBbY3VycmVudExldmVsU291cmNlXSA6IFtdKV0sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydvdmVycmlkZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbGlzdCBvZiBjb25maWcgc291cmNlcyB1c2VkIGJ5IG5vZGUgY29uZmlnIHBhY2thZ2UsIG9yZGVyZWQgZnJvbVxuICAgKiB0aGUgbG93ZXN0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiAge3N0cmluZ1tdfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Tm9kZUNvbmZpZ0xldmVscyA9IChjb25maWc6IElDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQVBQX0lOU1RBTkNFJyk7XG4gICAgbGV0IGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfRU5WJyk7XG4gICAgZGVwbG95bWVudCA9IGNvbmZpZy51dGlsLmdldEVudignTk9ERV9DT05GSUdfRU5WJyk7XG4gICAgY29uc3QgZnVsbEhvc3RuYW1lID0gY29uZmlnLnV0aWwuZ2V0RW52KCdIT1NUTkFNRScpO1xuICAgIGNvbnN0IHNob3J0SG9zdG5hbWUgPVxuICAgICAgZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCA/IGZ1bGxIb3N0bmFtZS5zcGxpdCgnLicpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29uZmlnTGV2ZWxzID0gW1xuICAgICAgJ2RlZmF1bHQnLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgZGVmYXVsdC0ke2luc3RhbmNlfWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkID8gW2Ake2RlcGxveW1lbnR9YF0gOiBbXSksXG4gICAgICAuLi4oaW5zdGFuY2UgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7c2hvcnRIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtzaG9ydEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7ZnVsbEhvc3RuYW1lfWBdIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7ZnVsbEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBgbG9jYWxgLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgJyROT0RFX0NPTkZJRycsXG4gICAgICAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgXTtcblxuICAgIHJldHVybiBjb25maWdMZXZlbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvbmZpZyBvYmplY3QgYW5kIHdyaXRlcyBpdCB0byB0aGUgbm9kZS1jb25maWcgZmlsZVxuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdPYmpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsIG91dHB1dCBub2RlLWNvbmZpZyBmaWxlIGxldmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGVcbiAgICovXG4gIHZhbGlkYXRlQW5kV3JpdGVDb25maWcgPSAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY29uZmlnOiBJQ29uZmlnLFxuICAgIGxldmVsOiBzdHJpbmcsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpLmZpbHRlcihcbiAgICAgIChsKSA9PiBsICE9PSAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBbJHtsZXZlbH1dIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGxldmVsc2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgICBwcm9jZXNzLmVudlsnTk9ERV9DT05GSUdfRElSJ10gIT0gdW5kZWZpbmVkXG4gICAgICAgID8gcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddXG4gICAgICAgIDogJy4vY29uZmlnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgbGV0IGV4dCA9ICcnO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShjb25maWdPYmopO1xuICAgICAgICBleHQgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGNvbmZpZ09iaik7XG4gICAgICAgIGV4dCA9ICd5YW1sJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0uJHtleHR9YCk7XG4gICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIGAke2xldmVsfS1iYWNrdXAuJHtleHR9YCk7XG4gICAgY29uc3QgY29uZkZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpO1xuICAgIGlmIChjb25mRmlsZUV4aXN0cykge1xuICAgICAgZnMucmVuYW1lU3luYyhvdXRwdXRQYXRoLCBiYWNrdXBQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBvdXRwdXQpO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbmZPYmogPSBjb25maWcudXRpbC5sb2FkRmlsZUNvbmZpZ3MoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZWRDb25mT2JqKTtcbiAgICAgIGZzLnVubGlua1N5bmMoYmFja3VwUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZzLnVubGlua1N5bmMob3V0cHV0UGF0aCk7XG4gICAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgICAgZnMucmVuYW1lU3luYyhiYWNrdXBQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VBoolean, VNumeric, VString } from './validations';
|
|
1
|
+
import { VBoolean, VNumeric, VRequired, VString } from './validations';
|
|
2
2
|
export type PrimitiveValue = string | boolean | number | bigint;
|
|
3
3
|
export type ConfigSchema = Record<string, ConfigField>;
|
|
4
4
|
export type ConfigField = ObjectField | ArrayField | PrimitiveField | UnionField;
|
|
@@ -24,7 +24,7 @@ export interface UnionField {
|
|
|
24
24
|
description?: string;
|
|
25
25
|
label?: string;
|
|
26
26
|
children: ConfigField[];
|
|
27
|
-
validations?:
|
|
27
|
+
validations?: VRequired[];
|
|
28
28
|
}
|
|
29
29
|
export interface GenericField<T> {
|
|
30
30
|
default?: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../lib/schema/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../lib/schema/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,UAAU,GACV,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GACjB,cAAc,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,CAAC;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC1B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS90eXBlcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZCb29sZWFuLCBWTnVtZXJpYywgVlJlcXVpcmVkLCBWU3RyaW5nIH0gZnJvbSAnLi92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IGJpZ2ludDtcblxuZXhwb3J0IHR5cGUgQ29uZmlnU2NoZW1hID0gUmVjb3JkPHN0cmluZywgQ29uZmlnRmllbGQ+O1xuXG5leHBvcnQgdHlwZSBDb25maWdGaWVsZCA9XG4gIHwgT2JqZWN0RmllbGRcbiAgfCBBcnJheUZpZWxkXG4gIHwgUHJpbWl0aXZlRmllbGRcbiAgfCBVbmlvbkZpZWxkO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVGaWVsZCA9XG4gIHwgU3RyaW5nRmllbGRcbiAgfCBOdW1iZXJGaWVsZFxuICB8IEJpZ0ludEZpZWxkXG4gIHwgQm9vbGVhbkZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdEZpZWxkIHtcbiAgdHlwZTogJ29iamVjdCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2hpbGRyZW46IENvbmZpZ1NjaGVtYTtcbn1cblxuZXhwb3J0IHR5cGUgVmFsdWVUeXBlID1cbiAgfCBQcmltaXRpdmVWYWx1ZVxuICB8IHsgW2tleTogc3RyaW5nXTogVmFsdWVUeXBlIH1cbiAgfCBWYWx1ZVR5cGVbXTtcblxuZXhwb3J0IGludGVyZmFjZSBBcnJheUZpZWxkIHtcbiAgdHlwZTogJ2FycmF5JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBkZWZhdWx0PzogVmFsdWVUeXBlW107XG4gIGl0ZW1zOiBDb25maWdGaWVsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlvbkZpZWxkIHtcbiAgdHlwZTogJ3VuaW9uJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjaGlsZHJlbjogQ29uZmlnRmllbGRbXTtcbiAgdmFsaWRhdGlvbnM/OiBWUmVxdWlyZWRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljRmllbGQ8VD4ge1xuICBkZWZhdWx0PzogVDtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0ZpZWxkIGV4dGVuZHMgR2VuZXJpY0ZpZWxkPHN0cmluZz4ge1xuICB0eXBlOiAnc3RyaW5nJztcbiAgdmFsaWRhdGlvbnM/OiBWU3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRmllbGQgZXh0ZW5kcyBHZW5lcmljRmllbGQ8bnVtYmVyPiB7XG4gIHR5cGU6ICdudW1iZXInO1xuICB2YWxpZGF0aW9ucz86IFZOdW1lcmljPG51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaWdJbnRGaWVsZCBleHRlbmRzIEdlbmVyaWNGaWVsZDxiaWdpbnQ+IHtcbiAgdHlwZTogJ2JpZ2ludCc7XG4gIHZhbGlkYXRpb25zPzogVk51bWVyaWM8YmlnaW50PltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5GaWVsZCBleHRlbmRzIEdlbmVyaWNGaWVsZDxib29sZWFuPiB7XG4gIHR5cGU6ICdib29sZWFuJztcbiAgdmFsaWRhdGlvbnM/OiBWQm9vbGVhbltdO1xufVxuIl19
|