sf-reglanegociom3 1.0.12-beta9 → 1.0.12-beta91
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/bundles/sf-reglanegociom3.umd.js +491 -54
- package/bundles/sf-reglanegociom3.umd.js.map +1 -1
- package/bundles/sf-reglanegociom3.umd.min.js +1 -1
- package/bundles/sf-reglanegociom3.umd.min.js.map +1 -1
- package/esm2015/lib/ConexionSQL/posts.service.js +4 -1
- package/esm2015/lib/rnm3/Miscelanea/MathTF.class.js +19 -1
- package/esm2015/lib/rnm3/Offline/service-m3-proceso-offline.js +9 -4
- package/esm2015/lib/rnm3/Promociones/promociones.service.js +96 -20
- package/esm2015/lib/rnm3/Registro/m3-procesos.js +5 -1
- package/esm2015/lib/rnm3/Services/M3Maestro.service.js +117 -2
- package/esm2015/lib/rnm3/Services/m3-fe.service.js +37 -1
- package/esm2015/lib/rnm3/Services/m3-load-l-precio.service.js +3 -4
- package/esm2015/lib/rnm3/Services/m3-reg-masivo.service.js +58 -10
- package/esm2015/lib/rnm3/Services/m3-reg-service.js +39 -16
- package/esm5/lib/ConexionSQL/posts.service.js +4 -1
- package/esm5/lib/rnm3/Miscelanea/MathTF.class.js +29 -1
- package/esm5/lib/rnm3/Offline/service-m3-proceso-offline.js +9 -4
- package/esm5/lib/rnm3/Promociones/promociones.service.js +110 -21
- package/esm5/lib/rnm3/Registro/m3-procesos.js +5 -1
- package/esm5/lib/rnm3/Services/M3Maestro.service.js +165 -2
- package/esm5/lib/rnm3/Services/m3-fe.service.js +53 -1
- package/esm5/lib/rnm3/Services/m3-load-l-precio.service.js +3 -4
- package/esm5/lib/rnm3/Services/m3-reg-masivo.service.js +75 -11
- package/esm5/lib/rnm3/Services/m3-reg-service.js +40 -17
- package/fesm2015/sf-reglanegociom3.js +369 -51
- package/fesm2015/sf-reglanegociom3.js.map +1 -1
- package/fesm5/sf-reglanegociom3.js +478 -55
- package/fesm5/sf-reglanegociom3.js.map +1 -1
- package/lib/rnm3/Miscelanea/MathTF.class.d.ts +2 -0
- package/lib/rnm3/Offline/service-m3-proceso-offline.d.ts +1 -1
- package/lib/rnm3/Promociones/promociones.service.d.ts +5 -4
- package/lib/rnm3/Registro/m3-procesos.d.ts +2 -0
- package/lib/rnm3/Services/M3Maestro.service.d.ts +6 -0
- package/lib/rnm3/Services/m3-fe.service.d.ts +2 -0
- package/lib/rnm3/Services/m3-reg-masivo.service.d.ts +5 -3
- package/lib/rnm3/Services/m3-reg-service.d.ts +2 -2
- package/package.json +1 -1
- package/sf-reglanegociom3.metadata.json +1 -1
|
@@ -35,6 +35,9 @@ var PostServiceM3 = /** @class */ (function () {
|
|
|
35
35
|
json = jConfigJSON;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
else {
|
|
39
|
+
json = require('G:/Desarrollo/BD/WE8/config.json');
|
|
40
|
+
}
|
|
38
41
|
this.servidorPersonas = json.ServidorPersonas;
|
|
39
42
|
this.servidor = json.Servidor;
|
|
40
43
|
this.servidorGenerales = json.ServidorGenerales;
|
|
@@ -774,4 +777,4 @@ function PostServiceM3_tsickle_Closure_declarations() {
|
|
|
774
777
|
PostServiceM3.prototype.httpClient;
|
|
775
778
|
}
|
|
776
779
|
|
|
777
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NmLXJlZ2xhbmVnb2Npb20zLyIsInNvdXJjZXMiOlsibGliL0NvbmV4aW9uU1FML3Bvc3RzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0lBZ0IxQyx1QkFDWSxNQUNBO1FBREEsU0FBSSxHQUFKLElBQUk7UUFDSixlQUFVLEdBQVYsVUFBVTtRQUVsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdkI7Ozs7SUFFTSxvQ0FBWTs7Ozs7UUFFZixJQUFJLElBQUksQ0FBTTs7UUFDZCxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksV0FBVyxFQUFFOztZQUNiLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzlCLElBQUksR0FBRyxXQUFXLENBQUM7YUFDdEI7U0FDSjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xD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RCw2QkFBNkI7Ozs7Ozs7SUFDN0IseUNBQWlCOzs7Ozs7SUFBakIsVUFBa0IsTUFBYyxFQUFFLE1BQU0sRUFBRSxTQUFTOztRQUMvQyxJQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7O1FBQ25ELElBQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQzFELFVBQUEsR0FBRztZQUVDLE9BQU8sR0FBRyxDQUFDO1NBQ2QsQ0FDSixDQUFDO0tBQ0w7O2dCQTNXSixVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7O2dCQVZRLElBQUk7Z0JBQ0osVUFBVTs7O3dCQURuQjs7U0FXYSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cCwgUmVxdWVzdE9wdGlvbnMsIEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9odHRwJ1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXHJcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJ1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9odHRwL3NyYy9zdGF0aWNfcmVzcG9uc2UnXHJcbmltcG9ydCB7IHRpbWVvdXQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zdFNlcnZpY2VNMyB7XHJcbiAgICBpZGthdGlvczogc3RyaW5nXHJcbiAgICBzZXJ2aWRvcjogc3RyaW5nO1xyXG4gICAgc2Vydmlkb3JQZXJzb25hczogc3RyaW5nO1xyXG4gICAgc2Vydmlkb3JHZW5lcmFsZXM6IHN0cmluZztcclxuICAgIHNlcnZpZG9yTTM6IHN0cmluZztcclxuICAgIHNlcnZpZG9yRkVNWDogc3RyaW5nO1xyXG4gICAgc2Vydmlkb3JEb2N1bWVudG9zOiBzdHJpbmc7XHJcbiAgICBzZXJ2aWRvckNvbnRhYmxlOiBzdHJpbmc7XHJcbiAgICBzZXJ2aWRvclByZXN0YW1vOiBzdHJpbmc7XHJcbiAgICBXZWJCYXNlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHAsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmNhcmdhSW5pY2lhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXJnYUluaWNpYWwoKSB7XHJcblxyXG4gICAgICAgIHZhciBqc29uOiBhbnk7XHJcbiAgICAgICAgbGV0IHNDb25maWdKU09OID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIkNvbmZpZ0pTT05cIik7XHJcbiAgICAgICAgaWYgKHNDb25maWdKU09OKSB7XHJcbiAgICAgICAgICAgIGxldCBqQ29uZmlnSlNPTiA9IEpTT04ucGFyc2Uoc0NvbmZpZ0pTT04pO1xyXG4gICAgICAgICAgICBpZiAoakNvbmZpZ0pTT04uU2Vydmlkb3JQZXJzb25hcykge1xyXG4gICAgICAgICAgICAgICAganNvbiA9IGpDb25maWdKU09OO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JQZXJzb25hcyA9IGpzb24uU2Vydmlkb3JQZXJzb25hcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yID0ganNvbi5TZXJ2aWRvcjtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yR2VuZXJhbGVzID0ganNvbi5TZXJ2aWRvckdlbmVyYWxlcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yTTMgPSBqc29uLlNlcnZpZG9yTTM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckZFTVggPSBqc29uLlNlcnZpZG9yRkVNWDtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcyA9IGpzb24uU2Vydmlkb3JEb2N1bWVudG9zO1xyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JDb250YWJsZSA9IGpzb24uU2Vydmlkb3JDb250YWJsZTtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yUHJlc3RhbW8gPSBqc29uLlNlcnZpZG9yUHJlc3RhbW87XHJcbiAgICAgICAgdGhpcy5XZWJCYXNlID0ganNvbi5XZWJCYXNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgR2V0SWRLYXRpb3NMVkwxRnJvbVNlc3Npb24oKSB7XHJcbiAgICAgICAgdmFyIHNTZXNzaW9uTFZMMU0zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIlNlc3Npb25MVkwxTTNcIik7XHJcbiAgICAgICAgdmFyIG9TZXNzaW9uTFZMMU0zO1xyXG4gICAgICAgIGlmIChzU2Vzc2lvbkxWTDFNMyAhPT0gdW5kZWZpbmVkICYmIHNTZXNzaW9uTFZMMU0zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb1Nlc3Npb25MVkwxTTMgPSBKU09OLnBhcnNlKHNTZXNzaW9uTFZMMU0zKTtcclxuICAgICAgICAgICAgaWYgKG9TZXNzaW9uTFZMMU0zLlVzdWFyaW9TaXN0ZW1hLklES0FUSU9TICE9PSB1bmRlZmluZWQgJiYgb1Nlc3Npb25MVkwxTTMuVXN1YXJpb1Npc3RlbWEuSURLQVRJT1MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9TZXNzaW9uTFZMMU0zLlVzdWFyaW9TaXN0ZW1hLklES0FUSU9TO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENvbmZpZ0pzb24oaWRLYXRpb3M6IHN0cmluZykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwID0gYXdhaXQgdGhpcy5nZXRXaXRoQm9keUdlbmVyYWxlcygnR2VuZXJhbGVzL2dldENvbmZpZ0pzb24vJyArIGlkS2F0aW9zLCBudWxsKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YTogYW55ID0gSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BPa19nZXRDb25maWdKc29uKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcE9rX2dldENvbmZpZ0pzb24oanNvbikge1xyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JQZXJzb25hcyA9IGpzb24uU2Vydmlkb3JQZXJzb25hcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yID0ganNvbi5TZXJ2aWRvcjtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yR2VuZXJhbGVzID0ganNvbi5TZXJ2aWRvckdlbmVyYWxlcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yTTMgPSBqc29uLlNlcnZpZG9yTTM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckZFTVggPSBqc29uLlNlcnZpZG9yRkVNWDtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcyA9IGpzb24uU2Vydmlkb3JEb2N1bWVudG9zO1xyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JDb250YWJsZSA9IGpzb24uU2Vydmlkb3JDb250YWJsZTtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yUHJlc3RhbW8gPSBqc29uLlNlcnZpZG9yUHJlc3RhbW87XHJcbiAgICAgICAgdGhpcy5XZWJCYXNlID0ganNvbi5XZWJCYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVSTFNlcnZlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVUkxTZXJ2ZXJEb2NzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcztcclxuICAgIH1cclxuXHJcbiAgICAvLy9odHRwR2V0XHJcbiAgICBodHRwR2V0KHVybEdldDogc3RyaW5nLCBpU2Vydmlkb3I6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGlTZXJ2aWRvciArIHVybEdldCkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9odHRwR2V0XHJcbiAgICBodHRwR2V0V2l0aFRpbWVPdXQodXJsR2V0OiBzdHJpbmcsIGlTZXJ2aWRvcjogc3RyaW5nLCB0aW1lb3V0VGltZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoaVNlcnZpZG9yICsgdXJsR2V0KS5waXBlKFxyXG4gICAgICAgICAgICB0aW1lb3V0KHRpbWVvdXRUaW1lKVxyXG4gICAgICAgICkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGh0dHBHZXRXaXRoQm9keSh1cmxHZXQ6IHN0cmluZywgaVNlcnZpZG9yOiBzdHJpbmcsIHBhcmFtZXRyb3M6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xyXG5cclxuICAgICAgICBoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc3Qgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7aGVhZGVyczogaGVhZGVycywgYm9keToge1wiY29ycmVvXCI6IFwicGFyYW1zXCJ9LCBwYXJhbXM6bXlQYXJhbXN9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoaVNlcnZpZG9yICsgdXJsR2V0LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRyb3NcclxuICAgICAgICAgICAgfSkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBodHRwR2V0V2l0aEJvZHlUaW1lT3V0KHVybEdldDogc3RyaW5nLCBpU2Vydmlkb3I6IHN0cmluZywgcGFyYW1ldHJvczogYW55LCB0aW1lb3V0VGltZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XHJcblxyXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zdCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHtoZWFkZXJzOiBoZWFkZXJzLCBib2R5OiB7XCJjb3JyZW9cIjogXCJwYXJhbXNcIn0sIHBhcmFtczpteVBhcmFtc30pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChpU2Vydmlkb3IgKyB1cmxHZXQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQodGltZW91dFRpbWUpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaHR0cF9nZXRfYmxvYih1cmxHZXQ6IHN0cmluZywgaVNlcnZpZG9yOiBzdHJpbmcsIHBhcmFtZXRyb3M6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xyXG5cclxuICAgICAgICAvL2hlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOyAgICAgICAgXHJcbiAgICAgICAgLy9oZWFkZXJzLmFwcGVuZCgnUmVzcG9uc2UgVHlvZScsICdibG9iJyk7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnN0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe2hlYWRlcnM6IGhlYWRlcnMsIGJvZHk6IHtcImNvcnJlb1wiOiBcInBhcmFtc1wifSwgcGFyYW1zOm15UGFyYW1zfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGlTZXJ2aWRvciArIHVybEdldCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB9KS5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGh0dHBfZ2V0X2FycmF5YnVmZmVyKHVybEdldDogc3RyaW5nLCBpU2Vydmlkb3I6IHN0cmluZywgcGFyYW1ldHJvczogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XHJcblxyXG4gICAgICAgIC8vaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7ICAgICAgICBcclxuICAgICAgICAvL2hlYWRlcnMuYXBwZW5kKCdSZXNwb25zZSBUeW9lJywgJ2Jsb2InKTtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc3Qgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7aGVhZGVyczogaGVhZGVycywgYm9keToge1wiY29ycmVvXCI6IFwicGFyYW1zXCJ9LCBwYXJhbXM6bXlQYXJhbXN9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoaVNlcnZpZG9yICsgdXJsR2V0LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB9KS5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZ2V0UHJlc3RhbW8odXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvclByZXN0YW1vKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0V2l0aEJvZHlNM1RpbWVPdXQodXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55LCB0aW1lb3V0VGltZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldFdpdGhCb2R5VGltZU91dCh1cmxHZXQsIHRoaXMuc2Vydmlkb3JNMywgcGFyYW1zLCB0aW1lb3V0VGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2l0aEJvZHlQcmVzdGFtbyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0V2l0aEJvZHkodXJsR2V0LCB0aGlzLnNlcnZpZG9yUHJlc3RhbW8sIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFdpdGhCb2R5TTModXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldFdpdGhCb2R5KHVybEdldCwgdGhpcy5zZXJ2aWRvck0zLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdpdGhCb2R5UGVyc29uYXModXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldFdpdGhCb2R5KHVybEdldCwgdGhpcy5zZXJ2aWRvclBlcnNvbmFzLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdpdGhCb2R5R2VuZXJhbGVzKHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXRXaXRoQm9keSh1cmxHZXQsIHRoaXMuc2Vydmlkb3JHZW5lcmFsZXMsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2l0aEJvZHlEb2N1bWVudG8odXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XHJcblxyXG4gICAgICAgIC8vaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoJ3Jlc3BvbnNlVHlwZScsICdSZXNwb25zZUNvbnRlbnRUeXBlLkJsb2InKTtcclxuXHJcbiAgICAgICAgLy9jb25zdCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHtoZWFkZXJzOiBoZWFkZXJzLCBib2R5OiB7XCJjb3JyZW9cIjogXCJwYXJhbXNcIn0sIHBhcmFtczpteVBhcmFtc30pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcyArIHVybEdldCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgICAgICAgfSkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0X2Jsb2JfRG9jdW1lbnRvcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwX2dldF9ibG9iKHVybEdldCwgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0X2FycmF5YnVmZmVyX0RvY3VtZW50b3ModXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cF9nZXRfYXJyYXlidWZmZXIodXJsR2V0LCB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcywgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3N0cyh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJzb25hcyh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yUGVyc29uYXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEdlbmVyYWxlcyh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yR2VuZXJhbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNMyh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yTTMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE0zV2l0aFRpbWVPdXQodXJsR2V0OiBzdHJpbmcsIHRpbWVPdXQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXRXaXRoVGltZU91dCh1cmxHZXQsIHRoaXMuc2Vydmlkb3JNMywgdGltZU91dCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgZ2V0RG9jdW1lbnRvcyh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldENvbnRhYmxlKHVybEdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldCh1cmxHZXQsIHRoaXMuc2Vydmlkb3JDb250YWJsZSk7XHJcbiAgICB9XHJcbiAgICAvLy9FbmQgaHR0cEdldFxyXG5cclxuICAgIGdldFBvc3RzV2l0aE91dEpzb24odXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnNlcnZpZG9yICsgdXJsR2V0KS5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5zZXJ2aWRvciArIHVybEdldCwgcGFyYW1zKS5tYXAoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1c1RleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8vcG9zdFNlcnZpY2VSZXNwb25zZUh0dHBcclxuICAgIHBvc3RTZXJ2aWNlUmVzcG9uc2VIdHRwKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5zZXJ2aWRvciArIHVybEdldCwgcGFyYW1zKS5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VSZXNwb25zZUh0dHBDYWxsU2VydmljZSh1cmxHZXQ6IHN0cmluZywgcGFyYW1zLCBpU2Vydmlkb3IpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoaVNlcnZpZG9yICsgdXJsR2V0LCBwYXJhbXMpLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHBvc3RTZXJ2aWNlUmVzcG9uc2VIdHRwUHJlc3RhbW9zKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0U2VydmljZVJlc3BvbnNlSHR0cENhbGxTZXJ2aWNlKHVybEdldCwgcGFyYW1zLCB0aGlzLnNlcnZpZG9yUHJlc3RhbW8pO1xyXG4gICAgfVxyXG4gICAgLy8vRW5kIHBvc3RTZXJ2aWNlUmVzcG9uc2VIdHRwXHJcblxyXG5cclxuICAgIC8vL3Bvc3RTZXJ2aWNlSHR0cE9wdGlvbnNcclxuICAgIHBvc3RTZXJ2aWNlSHR0cE9wdGlvbnNDYWxsU2VydmljZSh1cmxHZXQ6IHN0cmluZywgcGFyYW1zLCBoZWFkZXJzLCBpU2Vydmlkb3IpIHtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7IGhlYWRlcnM6IGhlYWRlcnMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChpU2Vydmlkb3IgKyB1cmxHZXQsIHBhcmFtcywgb3B0aW9ucykubWFwKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwT3B0aW9ucyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VIdHRwT3B0aW9uc0NhbGxTZXJ2aWNlKHVybEdldCwgcGFyYW1zLCBoZWFkZXJzLCB0aGlzLnNlcnZpZG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBPcHRpb25zTTModXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaGVhZGVycykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlSHR0cE9wdGlvbnNDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgaGVhZGVycywgdGhpcy5zZXJ2aWRvck0zKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBPcHRpb25zRG9jcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VIdHRwT3B0aW9uc0NhbGxTZXJ2aWNlKHVybEdldCwgcGFyYW1zLCBoZWFkZXJzLCB0aGlzLnNlcnZpZG9yRG9jdW1lbnRvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vRW5kIHBvc3RTZXJ2aWNlSHR0cE9wdGlvbnNcclxuXHJcbiAgICAvLy9wb3N0U2VydmljZUh0dHBSZXNGdWxsXHJcbiAgICBwb3N0U2VydmljZUh0dHBSZXNGdWxsQ2FsbFNlcnZpY2UodXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaVNlcnZpZG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGlTZXJ2aWRvciArIHVybEdldCwgcGFyYW1zKS5tYXAoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbCh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbENhbGxTZXJ2aWNlKHVybEdldCwgcGFyYW1zLCB0aGlzLnNlcnZpZG9yKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxQZXJzb25hcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VXZWJBcGkodXJsR2V0LCBwYXJhbXMsIHRoaXMuc2Vydmlkb3JQZXJzb25hcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0U2VydmljZVdlYkFwaSh1cmxHZXQsIHBhcmFtcywgdGhpcy5zZXJ2aWRvck0zKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBSZXNGdWxsRkVNWCh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VXZWJBcGkodXJsR2V0LCBwYXJhbXMsIHRoaXMuc2Vydmlkb3JGRU1YKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBSZXNGdWxsR2VuZXJhbGVzKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0U2VydmljZUh0dHBSZXNGdWxsQ2FsbFNlcnZpY2UodXJsR2V0LCBwYXJhbXMsIHRoaXMuc2Vydmlkb3JHZW5lcmFsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxQcmVzdGFtb3ModXJsR2V0OiBzdHJpbmcsIHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgdGhpcy5zZXJ2aWRvclByZXN0YW1vKTtcclxuICAgIH1cclxuICAgIC8vL0VuZCBwb3N0U2VydmljZUh0dHBSZXNGdWxsXHJcbiAgICBwb3N0U2VydmljZVdlYkFwaSh1cmxHZXQ6IHN0cmluZywgcGFyYW1zLCBpU2Vydmlkb3IpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcclxuICAgICAgICBoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHsgaGVhZGVyczogaGVhZGVycyB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGlTZXJ2aWRvciArIHVybEdldCwgcGFyYW1zLCBvcHRpb25zKS5tYXAoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NmLXJlZ2xhbmVnb2Npb20zLyIsInNvdXJjZXMiOlsibGliL0NvbmV4aW9uU1FML3Bvc3RzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0lBZ0IxQyx1QkFDWSxNQUNBO1FBREEsU0FBSSxHQUFKLElBQUk7UUFDSixlQUFVLEdBQVYsVUFBVTtRQUVsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdkI7Ozs7SUFFTSxvQ0FBWTs7Ozs7UUFFZixJQUFJLElBQUksQ0FBTTs7UUFDZCxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksV0FBVyxFQUFFOztZQUNiLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzlCLElBQUksR0FBRyxXQUFXLENBQUM7YUFDdEI7U0FDSjthQUNJO1lBQ0QsSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FB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TSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN4RjtJQUNELDZCQUE2Qjs7Ozs7OztJQUM3Qix5Q0FBaUI7Ozs7OztJQUFqQixVQUFrQixNQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVM7O1FBQy9DLElBQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzs7UUFDbkQsSUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FDMUQsVUFBQSxHQUFHO1lBRUMsT0FBTyxHQUFHLENBQUM7U0FDZCxDQUNKLENBQUM7S0FDTDs7Z0JBOVdKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7Z0JBVlEsSUFBSTtnQkFDSixVQUFVOzs7d0JBRG5COztTQVdhLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwLCBSZXF1ZXN0T3B0aW9ucywgSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9tYXAnXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAvc3JjL3N0YXRpY19yZXNwb25zZSdcclxuaW1wb3J0IHsgdGltZW91dCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3N0U2VydmljZU0zIHtcclxuICAgIGlka2F0aW9zOiBzdHJpbmdcclxuICAgIHNlcnZpZG9yOiBzdHJpbmc7XHJcbiAgICBzZXJ2aWRvclBlcnNvbmFzOiBzdHJpbmc7XHJcbiAgICBzZXJ2aWRvckdlbmVyYWxlczogc3RyaW5nO1xyXG4gICAgc2Vydmlkb3JNMzogc3RyaW5nO1xyXG4gICAgc2Vydmlkb3JGRU1YOiBzdHJpbmc7XHJcbiAgICBzZXJ2aWRvckRvY3VtZW50b3M6IHN0cmluZztcclxuICAgIHNlcnZpZG9yQ29udGFibGU6IHN0cmluZztcclxuICAgIHNlcnZpZG9yUHJlc3RhbW86IHN0cmluZztcclxuICAgIFdlYkJhc2U6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cCxcclxuICAgICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuY2FyZ2FJbmljaWFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhcmdhSW5pY2lhbCgpIHtcclxuXHJcbiAgICAgICAgdmFyIGpzb246IGFueTtcclxuICAgICAgICBsZXQgc0NvbmZpZ0pTT04gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiQ29uZmlnSlNPTlwiKTtcclxuICAgICAgICBpZiAoc0NvbmZpZ0pTT04pIHtcclxuICAgICAgICAgICAgbGV0IGpDb25maWdKU09OID0gSlNPTi5wYXJzZShzQ29uZmlnSlNPTik7XHJcbiAgICAgICAgICAgIGlmIChqQ29uZmlnSlNPTi5TZXJ2aWRvclBlcnNvbmFzKSB7XHJcbiAgICAgICAgICAgICAgICBqc29uID0gakNvbmZpZ0pTT047XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGpzb24gPSByZXF1aXJlKCdHOi9EZXNhcnJvbGxvL0JEL1dFOC9jb25maWcuanNvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlcnZpZG9yUGVyc29uYXMgPSBqc29uLlNlcnZpZG9yUGVyc29uYXM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvciA9IGpzb24uU2Vydmlkb3I7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckdlbmVyYWxlcyA9IGpzb24uU2Vydmlkb3JHZW5lcmFsZXM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvck0zID0ganNvbi5TZXJ2aWRvck0zO1xyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JGRU1YID0ganNvbi5TZXJ2aWRvckZFTVg7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MgPSBqc29uLlNlcnZpZG9yRG9jdW1lbnRvcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yQ29udGFibGUgPSBqc29uLlNlcnZpZG9yQ29udGFibGU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvclByZXN0YW1vID0ganNvbi5TZXJ2aWRvclByZXN0YW1vO1xyXG4gICAgICAgIHRoaXMuV2ViQmFzZSA9IGpzb24uV2ViQmFzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIEdldElkS2F0aW9zTFZMMUZyb21TZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBzU2Vzc2lvbkxWTDFNMyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJTZXNzaW9uTFZMMU0zXCIpO1xyXG4gICAgICAgIHZhciBvU2Vzc2lvbkxWTDFNMztcclxuICAgICAgICBpZiAoc1Nlc3Npb25MVkwxTTMgIT09IHVuZGVmaW5lZCAmJiBzU2Vzc2lvbkxWTDFNMyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9TZXNzaW9uTFZMMU0zID0gSlNPTi5wYXJzZShzU2Vzc2lvbkxWTDFNMyk7XHJcbiAgICAgICAgICAgIGlmIChvU2Vzc2lvbkxWTDFNMy5Vc3VhcmlvU2lzdGVtYS5JREtBVElPUyAhPT0gdW5kZWZpbmVkICYmIG9TZXNzaW9uTFZMMU0zLlVzdWFyaW9TaXN0ZW1hLklES0FUSU9TICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvU2Vzc2lvbkxWTDFNMy5Vc3VhcmlvU2lzdGVtYS5JREtBVElPUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDb25maWdKc29uKGlkS2F0aW9zOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcCA9IGF3YWl0IHRoaXMuZ2V0V2l0aEJvZHlHZW5lcmFsZXMoJ0dlbmVyYWxlcy9nZXRDb25maWdKc29uLycgKyBpZEthdGlvcywgbnVsbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGE6IGFueSA9IEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNwT2tfZ2V0Q29uZmlnSnNvbihyZXNwdWVzdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc3BPa19nZXRDb25maWdKc29uKGpzb24pIHtcclxuICAgICAgICB0aGlzLnNlcnZpZG9yUGVyc29uYXMgPSBqc29uLlNlcnZpZG9yUGVyc29uYXM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvciA9IGpzb24uU2Vydmlkb3I7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckdlbmVyYWxlcyA9IGpzb24uU2Vydmlkb3JHZW5lcmFsZXM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvck0zID0ganNvbi5TZXJ2aWRvck0zO1xyXG4gICAgICAgIHRoaXMuc2Vydmlkb3JGRU1YID0ganNvbi5TZXJ2aWRvckZFTVg7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MgPSBqc29uLlNlcnZpZG9yRG9jdW1lbnRvcztcclxuICAgICAgICB0aGlzLnNlcnZpZG9yQ29udGFibGUgPSBqc29uLlNlcnZpZG9yQ29udGFibGU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWRvclByZXN0YW1vID0ganNvbi5TZXJ2aWRvclByZXN0YW1vO1xyXG4gICAgICAgIHRoaXMuV2ViQmFzZSA9IGpzb24uV2ViQmFzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVUkxTZXJ2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vydmlkb3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VVJMU2VydmVyRG9jcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWRvckRvY3VtZW50b3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vaHR0cEdldFxyXG4gICAgaHR0cEdldCh1cmxHZXQ6IHN0cmluZywgaVNlcnZpZG9yOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChpU2Vydmlkb3IgKyB1cmxHZXQpLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vaHR0cEdldFxyXG4gICAgaHR0cEdldFdpdGhUaW1lT3V0KHVybEdldDogc3RyaW5nLCBpU2Vydmlkb3I6IHN0cmluZywgdGltZW91dFRpbWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGlTZXJ2aWRvciArIHVybEdldCkucGlwZShcclxuICAgICAgICAgICAgdGltZW91dCh0aW1lb3V0VGltZSlcclxuICAgICAgICApLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBodHRwR2V0V2l0aEJvZHkodXJsR2V0OiBzdHJpbmcsIGlTZXJ2aWRvcjogc3RyaW5nLCBwYXJhbWV0cm9zOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcclxuXHJcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnN0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe2hlYWRlcnM6IGhlYWRlcnMsIGJvZHk6IHtcImNvcnJlb1wiOiBcInBhcmFtc1wifSwgcGFyYW1zOm15UGFyYW1zfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGlTZXJ2aWRvciArIHVybEdldCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbWV0cm9zXHJcbiAgICAgICAgICAgIH0pLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaHR0cEdldFdpdGhCb2R5VGltZU91dCh1cmxHZXQ6IHN0cmluZywgaVNlcnZpZG9yOiBzdHJpbmcsIHBhcmFtZXRyb3M6IGFueSwgdGltZW91dFRpbWU6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xyXG5cclxuICAgICAgICBoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc3Qgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7aGVhZGVyczogaGVhZGVycywgYm9keToge1wiY29ycmVvXCI6IFwicGFyYW1zXCJ9LCBwYXJhbXM6bXlQYXJhbXN9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoaVNlcnZpZG9yICsgdXJsR2V0LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRyb3NcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0KHRpbWVvdXRUaW1lKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGh0dHBfZ2V0X2Jsb2IodXJsR2V0OiBzdHJpbmcsIGlTZXJ2aWRvcjogc3RyaW5nLCBwYXJhbWV0cm9zOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcclxuXHJcbiAgICAgICAgLy9oZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsgICAgICAgIFxyXG4gICAgICAgIC8vaGVhZGVycy5hcHBlbmQoJ1Jlc3BvbnNlIFR5b2UnLCAnYmxvYicpO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zdCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHtoZWFkZXJzOiBoZWFkZXJzLCBib2R5OiB7XCJjb3JyZW9cIjogXCJwYXJhbXNcIn0sIHBhcmFtczpteVBhcmFtc30pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChpU2Vydmlkb3IgKyB1cmxHZXQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRyb3NcclxuICAgICAgICAgICAgfSkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBodHRwX2dldF9hcnJheWJ1ZmZlcih1cmxHZXQ6IHN0cmluZywgaVNlcnZpZG9yOiBzdHJpbmcsIHBhcmFtZXRyb3M6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xyXG5cclxuICAgICAgICAvL2hlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOyAgICAgICAgXHJcbiAgICAgICAgLy9oZWFkZXJzLmFwcGVuZCgnUmVzcG9uc2UgVHlvZScsICdibG9iJyk7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnN0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe2hlYWRlcnM6IGhlYWRlcnMsIGJvZHk6IHtcImNvcnJlb1wiOiBcInBhcmFtc1wifSwgcGFyYW1zOm15UGFyYW1zfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGlTZXJ2aWRvciArIHVybEdldCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRyb3NcclxuICAgICAgICAgICAgfSkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGdldFByZXN0YW1vKHVybEdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldCh1cmxHZXQsIHRoaXMuc2Vydmlkb3JQcmVzdGFtbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFdpdGhCb2R5TTNUaW1lT3V0KHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSwgdGltZW91dFRpbWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXRXaXRoQm9keVRpbWVPdXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yTTMsIHBhcmFtcywgdGltZW91dFRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdpdGhCb2R5UHJlc3RhbW8odXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cEdldFdpdGhCb2R5KHVybEdldCwgdGhpcy5zZXJ2aWRvclByZXN0YW1vLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXaXRoQm9keU0zKHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXRXaXRoQm9keSh1cmxHZXQsIHRoaXMuc2Vydmlkb3JNMywgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRXaXRoQm9keVBlcnNvbmFzKHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXRXaXRoQm9keSh1cmxHZXQsIHRoaXMuc2Vydmlkb3JQZXJzb25hcywgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRXaXRoQm9keUdlbmVyYWxlcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0V2l0aEJvZHkodXJsR2V0LCB0aGlzLnNlcnZpZG9yR2VuZXJhbGVzLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdpdGhCb2R5RG9jdW1lbnRvKHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xyXG5cclxuICAgICAgICAvL2hlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdyZXNwb25zZVR5cGUnLCAnUmVzcG9uc2VDb250ZW50VHlwZS5CbG9iJyk7XHJcblxyXG4gICAgICAgIC8vY29uc3Qgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7aGVhZGVyczogaGVhZGVycywgYm9keToge1wiY29ycmVvXCI6IFwicGFyYW1zXCJ9LCBwYXJhbXM6bXlQYXJhbXN9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5zZXJ2aWRvckRvY3VtZW50b3MgKyB1cmxHZXQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXHJcbiAgICAgICAgICAgIH0pLm1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldF9ibG9iX0RvY3VtZW50b3ModXJsR2V0OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cF9nZXRfYmxvYih1cmxHZXQsIHRoaXMuc2Vydmlkb3JEb2N1bWVudG9zLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldF9hcnJheWJ1ZmZlcl9Eb2N1bWVudG9zKHVybEdldDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBfZ2V0X2FycmF5YnVmZmVyKHVybEdldCwgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UG9zdHModXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGVyc29uYXModXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvclBlcnNvbmFzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRHZW5lcmFsZXModXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvckdlbmVyYWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TTModXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvck0zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNM1dpdGhUaW1lT3V0KHVybEdldDogc3RyaW5nLCB0aW1lT3V0OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0V2l0aFRpbWVPdXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yTTMsIHRpbWVPdXQpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIGdldERvY3VtZW50b3ModXJsR2V0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwR2V0KHVybEdldCwgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRDb250YWJsZSh1cmxHZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBHZXQodXJsR2V0LCB0aGlzLnNlcnZpZG9yQ29udGFibGUpO1xyXG4gICAgfVxyXG4gICAgLy8vRW5kIGh0dHBHZXRcclxuXHJcbiAgICBnZXRQb3N0c1dpdGhPdXRKc29uKHVybEdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5zZXJ2aWRvciArIHVybEdldCkubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cCh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuc2Vydmlkb3IgKyB1cmxHZXQsIHBhcmFtcykubWFwKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXNUZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vL3Bvc3RTZXJ2aWNlUmVzcG9uc2VIdHRwXHJcbiAgICBwb3N0U2VydmljZVJlc3BvbnNlSHR0cCh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuc2Vydmlkb3IgKyB1cmxHZXQsIHBhcmFtcykubWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RTZXJ2aWNlUmVzcG9uc2VIdHRwQ2FsbFNlcnZpY2UodXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaVNlcnZpZG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGlTZXJ2aWRvciArIHVybEdldCwgcGFyYW1zKS5tYXAocmVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwb3N0U2VydmljZVJlc3BvbnNlSHR0cFByZXN0YW1vcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VSZXNwb25zZUh0dHBDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgdGhpcy5zZXJ2aWRvclByZXN0YW1vKTtcclxuICAgIH1cclxuICAgIC8vL0VuZCBwb3N0U2VydmljZVJlc3BvbnNlSHR0cFxyXG5cclxuXHJcbiAgICAvLy9wb3N0U2VydmljZUh0dHBPcHRpb25zXHJcbiAgICBwb3N0U2VydmljZUh0dHBPcHRpb25zQ2FsbFNlcnZpY2UodXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaGVhZGVycywgaVNlcnZpZG9yKSB7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoeyBoZWFkZXJzOiBoZWFkZXJzIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoaVNlcnZpZG9yICsgdXJsR2V0LCBwYXJhbXMsIG9wdGlvbnMpLm1hcChcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cE9wdGlvbnModXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaGVhZGVycykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlSHR0cE9wdGlvbnNDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgaGVhZGVycywgdGhpcy5zZXJ2aWRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwT3B0aW9uc00zKHVybEdldDogc3RyaW5nLCBwYXJhbXMsIGhlYWRlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0U2VydmljZUh0dHBPcHRpb25zQ2FsbFNlcnZpY2UodXJsR2V0LCBwYXJhbXMsIGhlYWRlcnMsIHRoaXMuc2Vydmlkb3JNMyk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwT3B0aW9uc0RvY3ModXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaGVhZGVycykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlSHR0cE9wdGlvbnNDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgaGVhZGVycywgdGhpcy5zZXJ2aWRvckRvY3VtZW50b3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL0VuZCBwb3N0U2VydmljZUh0dHBPcHRpb25zXHJcblxyXG4gICAgLy8vcG9zdFNlcnZpY2VIdHRwUmVzRnVsbFxyXG4gICAgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbENhbGxTZXJ2aWNlKHVybEdldDogc3RyaW5nLCBwYXJhbXMsIGlTZXJ2aWRvcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChpU2Vydmlkb3IgKyB1cmxHZXQsIHBhcmFtcykubWFwKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGwodXJsR2V0OiBzdHJpbmcsIHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxDYWxsU2VydmljZSh1cmxHZXQsIHBhcmFtcywgdGhpcy5zZXJ2aWRvcik7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBSZXNGdWxsUGVyc29uYXModXJsR2V0OiBzdHJpbmcsIHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlV2ViQXBpKHVybEdldCwgcGFyYW1zLCB0aGlzLnNlcnZpZG9yUGVyc29uYXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VXZWJBcGkodXJsR2V0LCBwYXJhbXMsIHRoaXMuc2Vydmlkb3JNMyk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbEZFTVgodXJsR2V0OiBzdHJpbmcsIHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RTZXJ2aWNlV2ViQXBpKHVybEdldCwgcGFyYW1zLCB0aGlzLnNlcnZpZG9yRkVNWCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbEdlbmVyYWxlcyh1cmxHZXQ6IHN0cmluZywgcGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbENhbGxTZXJ2aWNlKHVybEdldCwgcGFyYW1zLCB0aGlzLnNlcnZpZG9yR2VuZXJhbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0U2VydmljZUh0dHBSZXNGdWxsUHJlc3RhbW9zKHVybEdldDogc3RyaW5nLCBwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0U2VydmljZUh0dHBSZXNGdWxsQ2FsbFNlcnZpY2UodXJsR2V0LCBwYXJhbXMsIHRoaXMuc2Vydmlkb3JQcmVzdGFtbyk7XHJcbiAgICB9XHJcbiAgICAvLy9FbmQgcG9zdFNlcnZpY2VIdHRwUmVzRnVsbFxyXG4gICAgcG9zdFNlcnZpY2VXZWJBcGkodXJsR2V0OiBzdHJpbmcsIHBhcmFtcywgaVNlcnZpZG9yKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XHJcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7IGhlYWRlcnM6IGhlYWRlcnMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChpU2Vydmlkb3IgKyB1cmxHZXQsIHBhcmFtcywgb3B0aW9ucykubWFwKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -20,8 +20,36 @@ var MathTF = /** @class */ (function () {
|
|
|
20
20
|
var multiploDe10 = Math.pow(10, decimals);
|
|
21
21
|
return Math.round(+a * multiploDe10) / multiploDe10;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* @param {?} a
|
|
25
|
+
* @param {?} decimals
|
|
26
|
+
* @return {?}
|
|
27
|
+
*/
|
|
28
|
+
MathTF.prototype.roundV2 = /**
|
|
29
|
+
* @param {?} a
|
|
30
|
+
* @param {?} decimals
|
|
31
|
+
* @return {?}
|
|
32
|
+
*/
|
|
33
|
+
function (a, decimals) {
|
|
34
|
+
return parseFloat((+(Math.round(+(a + 'e' + decimals)) + 'e' + -decimals)).toFixed(decimals));
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* @param {?} number
|
|
38
|
+
* @param {?} decimals
|
|
39
|
+
* @return {?}
|
|
40
|
+
*/
|
|
41
|
+
MathTF.prototype.toFixed = /**
|
|
42
|
+
* @param {?} number
|
|
43
|
+
* @param {?} decimals
|
|
44
|
+
* @return {?}
|
|
45
|
+
*/
|
|
46
|
+
function (number, decimals) {
|
|
47
|
+
/** @type {?} */
|
|
48
|
+
var x = Math.pow(10, Number(decimals) + 1);
|
|
49
|
+
return (Number(number) + (1 / x)).toFixed(decimals);
|
|
50
|
+
};
|
|
23
51
|
return MathTF;
|
|
24
52
|
}());
|
|
25
53
|
export { MathTF };
|
|
26
54
|
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0aFRGLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2YtcmVnbGFuZWdvY2lvbTMvIiwic291cmNlcyI6WyJsaWIvcm5tMy9NaXNjZWxhbmVhL01hdGhURi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQTtJQUNJO0tBRUM7Ozs7OztJQUVNLHNCQUFLOzs7OztjQUFDLENBQU0sRUFBRSxRQUFnQjs7UUFDakMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQzs7Ozs7OztJQUdqRCx3QkFBTzs7Ozs7Y0FBQyxDQUFNLEVBQUUsUUFBZ0I7UUFDbkMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7SUFHM0Ysd0JBQU87Ozs7O2NBQUMsTUFBTSxFQUFFLFFBQVE7O1FBQzNCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBOztpQkFoQjNEO0lBa0JDLENBQUE7QUFsQkQsa0JBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIE1hdGhURiB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJvdW5kKGE6IGFueSwgZGVjaW1hbHM6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBtdWx0aXBsb0RlMTAgPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKCthICogbXVsdGlwbG9EZTEwKSAvIG11bHRpcGxvRGUxMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcm91bmRWMihhOiBhbnksIGRlY2ltYWxzOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoKyhNYXRoLnJvdW5kKCsoYSArICdlJyArIGRlY2ltYWxzKSkgKyAnZScgKyAtZGVjaW1hbHMpKS50b0ZpeGVkKGRlY2ltYWxzKSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyB0b0ZpeGVkKG51bWJlciwgZGVjaW1hbHMpIHtcclxuICAgICAgICB2YXIgeCA9IE1hdGgucG93KDEwLCBOdW1iZXIoZGVjaW1hbHMpICsgMSk7XHJcbiAgICAgICAgcmV0dXJuIChOdW1iZXIobnVtYmVyKSArICgxIC8geCkpLnRvRml4ZWQoZGVjaW1hbHMpXHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -400,7 +400,7 @@ var M3ProcesosOffline = /** @class */ (function () {
|
|
|
400
400
|
this.oServiceOffLine.GetAllDocs().then(function (result) {
|
|
401
401
|
// handle result
|
|
402
402
|
for (var i = 0; i < result.rows.length; i++) {
|
|
403
|
-
if (!result.rows[i].id.startsWith("CTIVOS")) {
|
|
403
|
+
if (result.rows[i].id && !result.rows[i].id.startsWith("CTIVOS")) {
|
|
404
404
|
/** @type {?} */
|
|
405
405
|
var m3Proceso = result.rows[i].doc;
|
|
406
406
|
if (_this.ValidarTicketCerrado(m3Proceso)) {
|
|
@@ -445,8 +445,13 @@ var M3ProcesosOffline = /** @class */ (function () {
|
|
|
445
445
|
function (m3Proceso) {
|
|
446
446
|
/** @type {?} */
|
|
447
447
|
var bCerrado = true;
|
|
448
|
-
if (m3Proceso
|
|
449
|
-
|
|
448
|
+
if (m3Proceso.M3ENC != null && m3Proceso.lM3PEncFP != null) {
|
|
449
|
+
if (m3Proceso && m3Proceso.SubEstadoAnt != "Declinado" && m3Proceso.M3ENC.length > 0 && m3Proceso.lM3PEncFP.length == 0 &&
|
|
450
|
+
this.getCantidadTotalByM3Proceso(m3Proceso) > 0) {
|
|
451
|
+
bCerrado = false;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
450
455
|
bCerrado = false;
|
|
451
456
|
}
|
|
452
457
|
return bCerrado;
|
|
@@ -850,4 +855,4 @@ function M3ProcesosOffline_tsickle_Closure_declarations() {
|
|
|
850
855
|
M3ProcesosOffline.prototype.obdOffLineLog;
|
|
851
856
|
}
|
|
852
857
|
|
|
853
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1tMy1wcm9jZXNvLW9mZmxpbmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL09mZmxpbmUvc2VydmljZS1tMy1wcm9jZXNvLW9mZmxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7Ozs7O0FBQ2xDLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQzs7SUFPbkIsd0NBQXdDO0lBQ3hDLDJCQUFvQixlQUErQixFQUFVLGNBQTZCLEVBQzlFO1FBRFEsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDOUUsa0JBQWEsR0FBYixhQUFhOzhCQXNHRDtTQUV2QjtLQXRHQTs7Ozs7Ozs7SUFRTSwwQ0FBYzs7Ozs7OztjQUFDLEVBQUUsRUFBRSx3QkFBa0MsRUFBRSwyQkFBcUM7OztRQUUvRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxPQUFPOztZQUVyQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQyxFQUFFLFVBQUEsS0FBSzs7WUFFSixBQURBLHFDQUFxQztZQUNyQyxLQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLHdCQUF3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ZCxhQUFhO2dCQUViLFlBQVk7Ozs0QkFOckI7O1NBYWEsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VPZmZMaW5lIH0gZnJvbSBcIi4vU2VydmljZS9iZC1vZmZsaW5lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTTNQcm9jZXNvcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wcm9jZXNvc1wiO1xyXG5pbXBvcnQgeyBNM1JlZ1NlcnZpY2UgfSBmcm9tIFwiLi4vU2VydmljZXMvbTMtcmVnLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9zdFNlcnZpY2VNMyB9IGZyb20gXCIuLi8uLi9Db25leGlvblNRTC9wb3N0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VNM01hZXN0cm8gfSBmcm9tIFwiLi4vU2VydmljZXMvTTNNYWVzdHJvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgYmRPZmZMaW5lTG9nIH0gZnJvbSBcIi4vU2VydmljZS9iZC1vZmZsaW5lLWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTTNQcm9jZXNvc09mZmxpbmUge1xyXG5cclxuICAgIC8vcHJpdmF0ZSBzS2V5Q3Rpdm9zOiBzdHJpbmcgPSBcIkNUSVZPU1wiO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvU2VydmljZU9mZkxpbmU6IFNlcnZpY2VPZmZMaW5lLCBwcml2YXRlIG9Qb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLFxyXG4gICAgICAgIHByaXZhdGUgb2JkT2ZmTGluZUxvZzogYmRPZmZMaW5lTG9nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBNM1Byb2Nlc29zLCBzZWd1biBlbCBJRCBNM1xyXG4gICAgICogQHBhcmFtIGlkIElkIGRlbCBNb3RvciAzXHJcbiAgICAgKiBAcGFyYW0gUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zIFJlc3B1ZXN0YSBPSyBkZSBnZXQgZGUgTTMgcHJvY2Vzb3NcclxuICAgICAqIEBwYXJhbSBSZXNwb25zZUVycm9yTG9hZE0zUHJvY2Vzb3MgUmVzcHVlc3RhIEVycm9yIGRlIGdldCBkZSBNMyBwcm9jZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgR2V0UHJvY2Vzb0J5SWQoaWQsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24sIFJlc3BvbnNlRXJyb3JMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24pIHtcclxuICAgICAgICAvL0pBR00gMjAxOTExMDggY2FtYmlvIGRlIGRvbmRlIHRyYWVyIGVsIHByb2Nlc28gbG8gdHJhZSBkZXNkZSBvZmZsaW5lXHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuZ2V0KGlkKS50aGVuKHByb2Nlc28gPT4ge1xyXG4gICAgICAgICAgICAvL3RoaXMub2JkT2ZmTGluZUxvZy5nZXQoaWQpLnRoZW4ocHJvY2VzbyA9PiB7XHJcbiAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyhwcm9jZXNvKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5HZXRQcm9jZXNvQnlJZEZyb21Mb2coaWQsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcywgUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIEdldFByb2Nlc29CeUlkRnJvbUxvZyhpZCwgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zOiBGdW5jdGlvbiwgUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zOiBGdW5jdGlvbikge1xyXG4gICAgICAgIC8vSkFHTSAyMDE5MTEwOCBjYW1iaW8gZGUgZG9uZGUgdHJhZXIgZWwgcHJvY2VzbyBsbyB0cmFlIGRlc2RlIG9mZmxpbmVcclxuICAgICAgICAvL3RoaXMub1NlcnZpY2VPZmZMaW5lLmdldChpZCkudGhlbihwcm9jZXNvID0+IHtcclxuICAgICAgICB0aGlzLm9iZE9mZkxpbmVMb2cuZ2V0KGlkKS50aGVuKHByb2Nlc28gPT4ge1xyXG4gICAgICAgICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MocHJvY2Vzbyk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBSZXNwb25zZUVycm9yTG9hZE0zUHJvY2Vzb3MoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIE0zIFByb2Nlc29zXHJcbiAgICAgKiBAcGFyYW0gaWQgSWQgZGVsIE0zIFByb2Nlc29cclxuICAgICAqIEBwYXJhbSBvbE0zUHJvY2Vzb3MgT2JqZXRvIE0zIFByb2Nlc29zIGEgYWdyZWdhclxyXG4gICAgICogQHBhcmFtIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyBGdW5jaW9uIE9LIHJlc3B1ZXN0YSBxdWUgYXRyYXBhcsOhLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQWRkUHJvY2VzbyhpZGthdGlvczogc3RyaW5nLCBvbE0zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgaWYgKG9sTTNQcm9jZXNvcy5JZE0zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQWRkVG9Eb2NPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkdldElkTTNPZmZsaW5lKGlka2F0aW9zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSkudGhlbihpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbE0zUHJvY2Vzb3MuSWRNMyA9IGlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5BZGRUb0RvY09mZmxpbmUob2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEFkZFRvRG9jT2ZmbGluZShvbE0zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24sIGludGVudG8gPSAwKSB7XHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuQWRkRG9jdW1lbnQob2xNM1Byb2Nlc29zLklkTTMudG9TdHJpbmcoKSwgb2xNM1Byb2Nlc29zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlNhdmVJZE0zKG9sTTNQcm9jZXNvcy5JZE0zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuQWRkTG9nT2ZmbGluZShvbE0zUHJvY2Vzb3MpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLlNhdmVJZE0zKG9sTTNQcm9jZXNvcy5JZE0zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIC8vICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3Mob2xNM1Byb2Nlc29zLklkTTMpO1xyXG4gICAgICAgICAgICAvLyB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICB0aGlzLkFkZExvZ09mZmxpbmUob2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MpO1xyXG5cclxuICAgICAgICAgICAgLy9SZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3Mob2xNM1Byb2Nlc29zLklkTTMpO1xyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB2YXIgc0ZlY2hhTm93OiBzdHJpbmcgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKVxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVycm9yTG9nXCIgKyBzRmVjaGFOb3csIEpTT04uc3RyaW5naWZ5KHsgXCJlcnJvclwiOiBlcnJvciwgXCJvbE0zUHJvY2Vzb3NcIjogb2xNM1Byb2Nlc29zLCBcIkludGVudG9cIjogaW50ZW50bywgXCJmdW5jdGlvblwiOiBcIkFkZFRvRG9jT2ZmbGluZVwiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQWRkVG9Eb2NPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zLCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyh7IFwiRXJyb3JcIjogXCJFcnJvciBlbiBndWFyZGFyIGVuIGJhc2UgZGUgZGF0b3MgcGNwYWwuXCIgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIGxvZyBvZmZsaW5lIGRlIHByb2Nlc29zLlxyXG4gICAgICogQHBhcmFtIG9sTTNQcm9jZXNvcyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkZExvZ09mZmxpbmUob2xNM1Byb2Nlc29zOiBNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3M6IEZ1bmN0aW9uLCBpbnRlbnRvOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgLy9BZ3JlZ2FyIGEgTG9nIFNvY2tldFxyXG4gICAgICAgIC8vdGhpcy5BZGRMb2dTb2NrZXQob2xNM1Byb2Nlc29zKVxyXG4gICAgICAgIC8vcmV0dXJuIHRoaXMub2JkT2ZmTGluZUxvZy5BZGREb2N1bWVudChvbE0zUHJvY2Vzb3MuSWRNMy50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MpXHJcbiAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkFkZERvY3VtZW50KG9sTTNQcm9jZXNvcy5JZE0zLnRvU3RyaW5nKCksIG9sTTNQcm9jZXNvcykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XHJcbiAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyhvbE0zUHJvY2Vzb3MuSWRNMyk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImVycm9yXCI6IGVycm9yLCBcIm9sTTNQcm9jZXNvc1wiOiBvbE0zUHJvY2Vzb3MsIFwiSW50ZW50b1wiOiBpbnRlbnRvLCBcImZ1bmN0aW9uXCI6IFwiQWRkTG9nT2ZmbGluZVwiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQWRkTG9nT2ZmbGluZShvbE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcywgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MoeyBcIkVycm9yXCI6IFwiRXJyb3IgZW4gZ3VhcmRhciBlbiBiYXNlIGRlIGRhdG9zIGxvY2FsLlwiIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgQWRkTG9nU29ja2V0T0sgPSAoKSA9PiB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZUluc3RhbmNlTG9nT2ZmKCkge1xyXG4gICAgICAgIHRoaXMub2JkT2ZmTGluZUxvZy5jbG9zZUluc3RhbmNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBHZXRPZmZMaW5lTG9nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iZE9mZkxpbmVMb2cuR2V0QWxsRG9jcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgR2V0MURvY09mZkxpbmVMb2coaWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmRPZmZMaW5lTG9nLmdldChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNhciBtMyBwcm9jZXNvLCBlbiBlbCBsb2cgbG9jYWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSZXZlcnNhckVuTG9nKGlkKSB7XHJcbiAgICAgICAgdGhpcy5HZXQxRG9jT2ZmTGluZUxvZyhpZCkudGhlbihvTTNQID0+IHtcclxuICAgICAgICAgICAgdmFyIG9SZXN1bHQ6IE0zUHJvY2Vzb3MgPSBvTTNQO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9SZXN1bHQubE0zUEVuY0ZQLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBvUmVzdWx0LmxNM1BFbmNGUFtpXS5WYWxDYW1iaW8gPSAwO1xyXG4gICAgICAgICAgICAgICAgb1Jlc3VsdC5sTTNQRW5jRlBbaV0uVmFsb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgb1Jlc3VsdC5sTTNQRW5jRlBbaV0uVmFsT3RyYUNsYXNpID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvUmVzdWx0LklkRXN0YWRvID0gXCJSVlwiO1xyXG4gICAgICAgICAgICB0aGlzLkFkZExvZ09mZmxpbmUob1Jlc3VsdCwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RydWlyQkRMb2coZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JkT2ZmTGluZUxvZy5EZXN0cm95KGZ1bmNpb25SZXNwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgRGVzdHJ1aXJCRE9mZihmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vU2VydmljZU9mZkxpbmUuRGVzdHJveShmdW5jaW9uUmVzcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFN1bWFyQ3Rpdm8oaWRtMzogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gdmFyIHNQYXJ0MTtcclxuICAgICAgICAvLyB2YXIgc1BhcnQyO1xyXG5cclxuICAgICAgICAvLyBzUGFydDEgPSBpZG0zLnN1YnN0cmluZygwLCA4KTtcclxuICAgICAgICAvLyBzUGFydDIgPSBpZG0zLnN1YnN0cmluZyg4LCBpZG0zLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gc1BhcnQyID0gK3NQYXJ0MiArIDE7XHJcbiAgICAgICAgLy8gaWRtMyA9IHNQYXJ0MSArIHNQYXJ0MjtcclxuICAgICAgICAvLyByZXR1cm4gaWRtMztcclxuICAgICAgICB2YXIgc1BhcnQxO1xyXG4gICAgICAgIHZhciBzUGFydDI7XHJcbiAgICAgICAgc1BhcnQxID0gaWRtMy5zdWJzdHJpbmcoMCwgOSk7XHJcbiAgICAgICAgc1BhcnQyID0gaWRtMy5zdWJzdHJpbmcoOSk7XHJcbiAgICAgICAgc1BhcnQyID0gK3NQYXJ0MiArIDE7XHJcbiAgICAgICAgaWRtMyA9IHNQYXJ0MSArIFwiXCIgKyBzUGFydDI7XHJcbiAgICAgICAgcmV0dXJuIGlkbTM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3R1YWxpemFyIGVsIE0zIFByb2Nlc29zLCB0ZW5pZW5kbyBlbCBJZCBkZWwgZG9jdW1lbnRvIGd1YXJkYWRvIGVuIGxhIEJEIE5vU1FMXHJcbiAgICAgKiBAcGFyYW0gaWQgSWQgZGVsIGRvY3VtZW50byBCZCBOb1NRTFxyXG4gICAgICogQHBhcmFtIG9sTTNQcm9jZXNvcyBNMyBQcm9jZXNvcyBhIGFsbWFjZW5hciAvIEFjdHVhbGl6YXJcclxuICAgICAqIEBwYXJhbSBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MgUmVzcHVlc3RhIGRlIE9LLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkUHJvY2VzbyhpZCwgb2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3M6IEZ1bmN0aW9uLCBpbnRlbnRvID0gMCkge1xyXG5cclxuICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5BZGREb2N1bWVudChpZC50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKGlkKTtcclxuICAgICAgICAgICAgdGhpcy5BZGRMb2dPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImVycm9yXCI6IGVycm9yLCBcIm9sTTNQcm9jZXNvc1wiOiBvbE0zUHJvY2Vzb3MsIFwiSW50ZW50b1wiOiBpbnRlbnRvLCBcImZ1bmN0aW9uXCI6IFwidXBkUHJvY2Vzb1wiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkUHJvY2VzbyhpZCwgb2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKHsgXCJFcnJvclwiOiBcIkVycm9yIGVuIGd1YXJkYXIgZW4gYmFzZSBkZSBkYXRvcyBwY3BhbC5cIiB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWN0dWFsaXphciBlbCBNMyBQcm9jZXNvcywgdGVuaWVuZG8gZWwgSWQgZGVsIGRvY3VtZW50byBndWFyZGFkbyBlbiBsYSBCRCBOb1NRTFxyXG4gICAgICogQHBhcmFtIGlkIElkIGRlbCBkb2N1bWVudG8gQmQgTm9TUUxcclxuICAgICAqIEBwYXJhbSBvbE0zUHJvY2Vzb3MgTTMgUHJvY2Vzb3MgYSBhbG1hY2VuYXIgLyBBY3R1YWxpemFyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyB1cGRQcm9jZXNvQXN5bmMoaWQsIG9sTTNQcm9jZXNvcykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMub1NlcnZpY2VPZmZMaW5lLkFkZERvY3VtZW50KGlkLnRvU3RyaW5nKCksIG9sTTNQcm9jZXNvcyk7XHJcbiAgICAgICAgdGhpcy5BZGRMb2dPZmZsaW5lKG9sTTNQcm9jZXNvcywgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEFsbERvY3NPZmZMaW5lU2luRG9jcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jc09mZkxpbmVTaW5Eb2NzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2VzYXJUaWNrZXRPZmZsaW5lKGlka2F0aW9zLCBwcm9jZXNvLCBvRGF0YVVzZXI6IGFueSwgZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGxNM1Byb2Nlc29zID0gbmV3IEFycmF5PE0zUHJvY2Vzb3M+KCk7XHJcbiAgICAgICAgdmFyIG9NM1JlZ1NlcnZpY2UgPSBuZXcgTTNSZWdTZXJ2aWNlKG51bGwsIG51bGwsIGlka2F0aW9zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmFsaWRhclRpY2tldENlcnJhZG8ocHJvY2VzbykpIHtcclxuICAgICAgICAgICAgbE0zUHJvY2Vzb3MucHVzaChwcm9jZXNvKTtcclxuXHJcbiAgICAgICAgICAgIG9NM1JlZ1NlcnZpY2UuUmVnaXN0cm9FdmVudG9NM09mZkxpbmUoaWRrYXRpb3MsIHRoaXMub1Bvc3RTZXJ2aWNlTTMsIGxNM1Byb2Nlc29zLCBvRGF0YVVzZXIpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKHRydWUsIFwiT0tcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKGZhbHNlLCBcIk9LXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBwcm9jZXNvcyBxdWUgc2UgcHJvY2VzYXJvbiBtaWVudHJhcyBzZSBlc3RhYmEgZnVlcmEgZGUgbGluZWFcclxuICAgICAqL1xyXG4gICAgcHVibGljIFZhbGlkYXJQcm9jZXNvc0FncmVnYWRvc09mZkxpbmUoaWRrYXRpb3MsIG9EYXRhVXNlcjogYW55LCBmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiRW50cm8gVmFsaWRhclByb2Nlc29zQWdyZWdhZG9zT2ZmTGluZVwiKVxyXG4gICAgICAgIHZhciBsTTNQcm9jZXNvcyA9IG5ldyBBcnJheTxNM1Byb2Nlc29zPigpO1xyXG4gICAgICAgIHZhciBvTTNSZWdTZXJ2aWNlID0gbmV3IE0zUmVnU2VydmljZShudWxsLCBudWxsLCBpZGthdGlvcyk7XHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jcygpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIHJlc3VsdFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5yb3dzW2ldLmlkLnN0YXJ0c1dpdGgoXCJDVElWT1NcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbTNQcm9jZXNvOiBNM1Byb2Nlc29zID0gcmVzdWx0LnJvd3NbaV0uZG9jO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZhbGlkYXJUaWNrZXRDZXJyYWRvKG0zUHJvY2VzbykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbE0zUHJvY2Vzb3MucHVzaChyZXN1bHQucm93c1tpXS5kb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQW50ZXMgUmVnaXN0cm9FdmVudG9NM09mZkxpbmVcIilcclxuICAgICAgICAgICAgb00zUmVnU2VydmljZS5SZWdpc3Ryb0V2ZW50b00zT2ZmTGluZShpZGthdGlvcywgdGhpcy5vUG9zdFNlcnZpY2VNMywgbE0zUHJvY2Vzb3MsIG9EYXRhVXNlcikudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRGlvIFJlc3B1ZXN0YSBSZWdpc3Ryb0V2ZW50b00zT2ZmTGluZVwiKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeClcclxuICAgICAgICAgICAgICAgIGlmICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImlmIDFcIilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5EZWxldGVBbGxEb2NzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY2lvblJlc3AodHJ1ZSwgXCJPS1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImlmIDJcIilcclxuICAgICAgICAgICAgICAgICAgICAvL1Jlc3B1ZXN0YSBjb24gZXJyb3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5vU2VydmljZU9mZkxpbmUuRGVsZXRlQWxsRG9jcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKGZhbHNlLCBcIk9LXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYWNpb24gZGUgcXVlIGVsIHRpY2tldCBlc3RhIGNlcnJhZG8uXHJcbiAgICAgKiBAcGFyYW0gbTNQcm9jZXNvIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVmFsaWRhclRpY2tldENlcnJhZG8obTNQcm9jZXNvOiBNM1Byb2Nlc29zKSB7XHJcbiAgICAgICAgdmFyIGJDZXJyYWRvOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBpZiAobTNQcm9jZXNvICYmIG0zUHJvY2Vzby5TdWJFc3RhZG9BbnQgIT0gXCJEZWNsaW5hZG9cIiAmJiBtM1Byb2Nlc28uTTNFTkMubGVuZ3RoID4gMCAmJiBtM1Byb2Nlc28ubE0zUEVuY0ZQLmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2FudGlkYWRUb3RhbEJ5TTNQcm9jZXNvKG0zUHJvY2VzbykgPiAwKSB7XHJcbiAgICAgICAgICAgIGJDZXJyYWRvID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiQ2VycmFkbztcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldENhbnRpZGFkVG90YWxCeU0zUHJvY2VzbyhvTTNQcm9jZXNvczogTTNQcm9jZXNvcykge1xyXG4gICAgICAgIGlmIChvTTNQcm9jZXNvcyAmJiBvTTNQcm9jZXNvcy5NM0VOQykge1xyXG4gICAgICAgICAgICB2YXIgZENhbnRpZGFkID0gb00zUHJvY2Vzb3MuTTNFTkMuZmlsdGVyKGVuYyA9PiAoK2VuYy5NM0RFVC5maW5kKGRldCA9PiBkZXQuTm9tYnJlQ29uY2VwdG8gPT0gXCJDQU5USURBRFwiKS5WYWxvcikgPiAwKS5cclxuICAgICAgICAgICAgICAgIHJlZHVjZSgoYWNjLCBjdXIpID0+IChhY2MpICsgKCtjdXIuTTNERVQuZmluZChkZXQgPT4gZGV0Lk5vbWJyZUNvbmNlcHRvID09IFwiQ0FOVElEQURcIikuVmFsb3IpLCAwKTtcclxuICAgICAgICAgICAgaWYgKGRDYW50aWRhZCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkQ2FudGlkYWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGVuZXIgdG9kb3MgbG9zIGRvY3VtZW50b3MgT2ZmIGxpbmUgcXVlIHNlIGhhbiBndWFyZGFkbyBjb21vIG9mZmxpbmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBHZXRBbGxEb2NzT2ZmbGluZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgbE0zUHJvY2Vzb3MgPSBuZXcgQXJyYXk8TTNQcm9jZXNvcz4oKTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IHRoaXMub1NlcnZpY2VPZmZMaW5lLkdldEFsbERvY3MoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yb3dzW2ldLmlkICE9IFwiQ1RJVk9TXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsTTNQcm9jZXNvcy5wdXNoKHJlc3VsdC5yb3dzW2ldLmRvYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGxNM1Byb2Nlc29zO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciB0b2RvcyBsb3MgZG9jdW1lbnRvcyBPZmYgbGluZSBxdWUgc2UgaGFuIGd1YXJkYWRvIGNvbW8gb2ZmbGluZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIEdldEFsbERvY3NPZmZsaW5lRGVsZXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jc0RlbGV0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlQ3Rpdm9zKHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5vU2VydmljZU9mZkxpbmUuRGVsZXRlKHRoaXMuR2V0S2V5KHViaWNhY2lvbiwgaHViKSlcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsQ3Rpdm9zKHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5nZXQodGhpcy5HZXRLZXkodWJpY2FjaW9uLCBodWIpKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBsb3MgY29uc2VjdXRpdm9zIHF1ZSBlc3RhbiBsb2NhbG1lbnRlIHZzIGxvcyBxdWUgZXN0YW4gZW4gZWwgc2Vydmlkb3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBWYWxpZGFjaW9uQ3Rpdm9zVlNTZXJ2ZXIoaWthdGlvczogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaWRIdWI6IHN0cmluZywgZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbGxDdGl2b3ModWJpY2FjaW9uLCBpZEh1YikudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvU2VydmljZU0zTWFlc3RybyA9IG5ldyBTZXJ2aWNlTTNNYWVzdHJvKCk7XHJcbiAgICAgICAgICAgICAgICBvU2VydmljZU0zTWFlc3Ryby5WYWxpZGFyQ3Rpdm9zVlNMb2NhbCh0aGlzLm9Qb3N0U2VydmljZU0zLCBpa2F0aW9zLCBKU09OLnN0cmluZ2lmeSh4KSwgdWJpY2FjaW9uLCBpZEh1YiwgZnVuY2lvblJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGVuZXIgZWwgY29uc2VjdXRpdm8gZW4gZWwgcXVlIHZhLCBlbCBwcm9jZXNvIG9mZmxpbmUgcXVlIHJlY2liZSBjb21vIHBhcmFtZXRyb1xyXG4gICAgICogQHBhcmFtIHViaWNhY2lvbiBcclxuICAgICAqIEBwYXJhbSBodWIgXHJcbiAgICAgKiBAcGFyYW0gc0lkUHJvY2VzbyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIEdldEN0aXZvT2ZmTGluZSh1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcsIHNJZFByb2Nlc286IHN0cmluZykge1xyXG4gICAgICAgIHZhciBjdGl2bzogc3RyaW5nID0gXCIwXCI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIG9EYXRhID0gYXdhaXQgdGhpcy5vU2VydmljZU9mZkxpbmUuZ2V0KHRoaXMuR2V0S2V5KHViaWNhY2lvbiwgaHViKSk7XHJcbiAgICAgICAgICAgIGlmIChvRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9EYXRhRmluZGVkOiBhbnkgPSBvRGF0YS5DdGl2b3MuZmluZCh4ID0+IHguSWRQcm9jZXNvID09IHNJZFByb2Nlc28pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9EYXRhRmluZGVkLkN0aXZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3Rpdm8gPSBvRGF0YUZpbmRlZC5DdGl2by5zdWJzdHJpbmcoOSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICAgIHJldHVybiBjdGl2bztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEd1YXJkYXIgaWQgbTMgXHJcbiAgICAgKiBAcGFyYW0gc0lkTTMgXHJcbiAgICAgKiBAcGFyYW0gc0lkUHJvY2VzbyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIFNhdmVJZE0zKHNJZE0zOiBzdHJpbmcsIHNJZFByb2Nlc286IHN0cmluZywgdWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuZ2V0KHRoaXMuR2V0S2V5KHViaWNhY2lvbiwgaHViKSkudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgdmFyIG9EYXRhOiBBcnJheTxhbnk+ID0gZGF0YS5DdGl2b3M7XHJcbiAgICAgICAgICAgIHZhciBvRGF0YUZpbmRlZDogYW55ID0gb0RhdGEuZmluZCh4ID0+IHguSWRQcm9jZXNvID09IHNJZFByb2Nlc28pO1xyXG4gICAgICAgICAgICBpZiAob0RhdGFGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdGl2b0FudCA9ICtvRGF0YUZpbmRlZC5DdGl2by5zdWJzdHJpbmcoOSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3Rpdm9BY3QgPSArc0lkTTMuc3Vic3RyaW5nKDkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN0aXZvQWN0ID4gY3Rpdm9BbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvRGF0YUZpbmRlZC5DdGl2byA9IHNJZE0zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb0RhdGEucHVzaCh7IFwiSWRQcm9jZXNvXCI6IHNJZFByb2Nlc28sIFwiQ3Rpdm9cIjogc0lkTTMgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLlNhdmVDdGl2b3Mob0RhdGEsIHViaWNhY2lvbiwgaHViKTtcclxuICAgICAgICAgICAgaWYgKHNJZFByb2Nlc28udG9VcHBlckNhc2UoKSA9PSBcIlRJQ0tFVFZFTlRBXCIpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiQ3Rpdm9UaWNrZXRWZW50YVwiLCBzSWRNMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHZhciBvRGF0YSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgICAgICAgIG9EYXRhLnB1c2goeyBcIklkUHJvY2Vzb1wiOiBzSWRQcm9jZXNvLCBcIkN0aXZvXCI6IHNJZE0zIH0pXHJcbiAgICAgICAgICAgIHRoaXMuU2F2ZUN0aXZvcyhvRGF0YSwgdWJpY2FjaW9uLCBodWIpO1xyXG4gICAgICAgICAgICBpZiAoc0lkUHJvY2Vzby50b1VwcGVyQ2FzZSgpID09IFwiVElDS0VUVkVOVEFcIikge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJDdGl2b1RpY2tldFZlbnRhXCIsIHNJZE0zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR3VhcmRhciBjdGl2b3MsIElkbTMuXHJcbiAgICAgKiBAcGFyYW0gb0RhdGEgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgU2F2ZUN0aXZvcyhvRGF0YTogQXJyYXk8YW55PiwgdWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nLCBpbnRlbnRvID0gMCkge1xyXG4gICAgICAgIHZhciBvRGF0YVNlbmQgPSB7IFwiQ3Rpdm9zXCI6IG9EYXRhIH1cclxuICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5BZGREb2N1bWVudCh0aGlzLkdldEtleSh1YmljYWNpb24sIGh1YiksIG9EYXRhU2VuZCkudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPS1wiKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dDdGl2b3NcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImVycm9yXCI6IGVycm9yLCBcIkN0aXZvc1wiOiBvRGF0YVNlbmQsIFwiZnVuY3Rpb25cIjogXCJTYXZlQ3Rpdm9zXCIgfSkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIGlmIChpbnRlbnRvID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2F2ZUN0aXZvcyhvRGF0YSwgdWJpY2FjaW9uLCBodWIsIDEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgRGVsZXRlT2xkRG9jcyhtYXhEaWFzOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm9iZE9mZkxpbmVMb2cuRGVsZXRlT2xkRG9jcyhtYXhEaWFzKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGVuZXIgaW5mb3JtYWNpb24gZGUgSWQgbTMsIGN1YW5kbyBlc3RhIGZ1ZXJhIGRlIGxpbmVhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXN5bmMgR2V0SWRNM09mZmxpbmUoaWRrYXRpb3M6IHN0cmluZywgaWRwcm9jZXNvOiBzdHJpbmcsIHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBvRGF0YUlkTTM7XHJcbiAgICAgICAgdmFyIGlkTTM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgb0RhdGFJZE0zID0gYXdhaXQgdGhpcy5vU2VydmljZU9mZkxpbmUuZ2V0KHRoaXMuR2V0S2V5KHViaWNhY2lvbiwgaHViKSk7XHJcbiAgICAgICAgICAgIHZhciBvRGF0YUZpbmRlZDogYW55ID0gb0RhdGFJZE0zLkN0aXZvcy5maW5kKHggPT4geC5JZFByb2Nlc28gPT0gaWRwcm9jZXNvKTtcclxuICAgICAgICAgICAgaWYgKG9EYXRhRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZE0zID0gb0RhdGFGaW5kZWQuQ3Rpdm87XHJcbiAgICAgICAgICAgICAgICBpZE0zID0gdGhpcy5TdW1hckN0aXZvKGlkTTMpO1xyXG4gICAgICAgICAgICAgICAgaWRNMyA9IHRoaXMudmFsaWRhckF1bWVudG9DdGl2byhpZE0zLCBpZHByb2Nlc28pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWRNMyA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiXCIgKyBkYXRlLmdldE1vbnRoKCkgKyBcIlwiICsgZGF0ZS5nZXREYXkoKSArIFwiXCIgKyBkYXRlLmdldEhvdXJzKCkgKyBcIlwiICsgZGF0ZS5nZXRNaW51dGVzKCkgKyBcIlwiICsgZGF0ZS5nZXRTZWNvbmRzKCkgKyBcIlwiICsgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZE0zID0gdGhpcy5HZXRDdGl2byhpZGthdGlvcywgaWRwcm9jZXNvLCB1YmljYWNpb24sIGh1Yik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgLy8gdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyBpZE0zID0gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCJcIiArIGRhdGUuZ2V0TW9udGgoKSArIFwiXCIgKyBkYXRlLmdldERheSgpICsgXCJcIiArIGRhdGUuZ2V0SG91cnMoKSArIFwiXCIgKyBkYXRlLmdldE1pbnV0ZXMoKSArIFwiXCIgKyBkYXRlLmdldFNlY29uZHMoKSArIFwiXCIgKyBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgICAgICBpZE0zID0gdGhpcy5HZXRDdGl2byhpZGthdGlvcywgaWRwcm9jZXNvLCB1YmljYWNpb24sIGh1Yik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZE0zO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB2YWxpZGFyQXVtZW50b0N0aXZvKGlkTTMsIGlkcHJvY2Vzbykge1xyXG4gICAgICAgIGlmIChpZHByb2Nlc28udG9VcHBlckNhc2UoKSA9PSBcIlRJQ0tFVFZFTlRBXCIpIHtcclxuICAgICAgICAgICAgbGV0IHVsdGltb0lkTTMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkN0aXZvVGlja2V0VmVudGFcIik7XHJcbiAgICAgICAgICAgIGlmICh1bHRpbW9JZE0zID09IGlkTTMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgICAgICBpZE0zID0gdGhpcy5TdW1hckN0aXZvKGlkTTMpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlcnJvckxvZ0N0aXZvc1wiICsgc0ZlY2hhTm93LCBKU09OLnN0cmluZ2lmeSh7IFwiaWRNM1wiOiBpZE0zLCBcImZ1bmN0aW9uXCI6IFwidmFsaWRhckF1bWVudG9DdGl2b1wiIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWRNMztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIEdldEN0aXZvKGlka2F0aW9zOiBzdHJpbmcsIGlkcHJvY2Vzbzogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgb1NlcnZpY2VNM01hZXN0cm8gPSBuZXcgU2VydmljZU0zTWFlc3RybygpO1xyXG4gICAgICAgIHZhciBzQ3Rpdm87XHJcbiAgICAgICAgc0N0aXZvID0gYXdhaXQgb1NlcnZpY2VNM01hZXN0cm8uR2V0Q3Rpdm9CWVByb2Nlc28odGhpcy5vUG9zdFNlcnZpY2VNMywgaWRrYXRpb3MsIGlkcHJvY2VzbywgdWJpY2FjaW9uLCBodWIpO1xyXG4gICAgICAgIHJldHVybiBzQ3Rpdm87XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBsbGF2ZSBkZSBwb3VjaERCXHJcbiAgICAgKiBAcGFyYW0gdWJpYyBcclxuICAgICAqIEBwYXJhbSBodWIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBHZXRLZXkodWJpYywgaHViKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiQ1RJVk9TX1wiICsgdWJpYyArIGh1YjtcclxuICAgIH1cclxuXHJcbn0iXX0=
|
|
858
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1tMy1wcm9jZXNvLW9mZmxpbmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL09mZmxpbmUvc2VydmljZS1tMy1wcm9jZXNvLW9mZmxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7Ozs7O0FBQ2xDLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQzs7SUFPbkIsd0NBQXdDO0lBQ3hDLDJCQUFvQixlQUErQixFQUFVLGNBQTZCLEVBQzlFO1FBRFEsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDOUUsa0JBQWEsR0FBYixhQUFhOzhCQXNHRDtTQUV2QjtLQXRHQTs7Ozs7Ozs7SUFRTSwwQ0FBYzs7Ozs7OztjQUFDLEVBQUUsRUFBRSx3QkFBa0MsRUFBRSwyQkFBcUM7OztRQUUvRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxPQUFPOztZQUVyQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQyxFQUFFLFVBQUEsS0FBSzs7WUFFSixBQURBLHFDQUFxQztZQUNyQyxLQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLHdCQUF3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LEVBQUM7Ozs7Ozs7Ozs7O0lBU1gsa0NBQU07Ozs7OztjQUFDLElBQUksRUFBRSxHQUFHO1FBQ25CLE9BQU8sU0FBUyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7OztnQkFoZXJDLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7Z0JBWFEsY0FBYztnQkFHZCxhQUFhO2dCQUViLFlBQVk7Ozs0QkFOckI7O1NBYWEsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VPZmZMaW5lIH0gZnJvbSBcIi4vU2VydmljZS9iZC1vZmZsaW5lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTTNQcm9jZXNvcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wcm9jZXNvc1wiO1xyXG5pbXBvcnQgeyBNM1JlZ1NlcnZpY2UgfSBmcm9tIFwiLi4vU2VydmljZXMvbTMtcmVnLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9zdFNlcnZpY2VNMyB9IGZyb20gXCIuLi8uLi9Db25leGlvblNRTC9wb3N0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VNM01hZXN0cm8gfSBmcm9tIFwiLi4vU2VydmljZXMvTTNNYWVzdHJvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgYmRPZmZMaW5lTG9nIH0gZnJvbSBcIi4vU2VydmljZS9iZC1vZmZsaW5lLWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTTNQcm9jZXNvc09mZmxpbmUge1xyXG5cclxuICAgIC8vcHJpdmF0ZSBzS2V5Q3Rpdm9zOiBzdHJpbmcgPSBcIkNUSVZPU1wiO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvU2VydmljZU9mZkxpbmU6IFNlcnZpY2VPZmZMaW5lLCBwcml2YXRlIG9Qb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLFxyXG4gICAgICAgIHByaXZhdGUgb2JkT2ZmTGluZUxvZzogYmRPZmZMaW5lTG9nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBNM1Byb2Nlc29zLCBzZWd1biBlbCBJRCBNM1xyXG4gICAgICogQHBhcmFtIGlkIElkIGRlbCBNb3RvciAzXHJcbiAgICAgKiBAcGFyYW0gUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zIFJlc3B1ZXN0YSBPSyBkZSBnZXQgZGUgTTMgcHJvY2Vzb3NcclxuICAgICAqIEBwYXJhbSBSZXNwb25zZUVycm9yTG9hZE0zUHJvY2Vzb3MgUmVzcHVlc3RhIEVycm9yIGRlIGdldCBkZSBNMyBwcm9jZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgR2V0UHJvY2Vzb0J5SWQoaWQsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24sIFJlc3BvbnNlRXJyb3JMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24pIHtcclxuICAgICAgICAvL0pBR00gMjAxOTExMDggY2FtYmlvIGRlIGRvbmRlIHRyYWVyIGVsIHByb2Nlc28gbG8gdHJhZSBkZXNkZSBvZmZsaW5lXHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuZ2V0KGlkKS50aGVuKHByb2Nlc28gPT4ge1xyXG4gICAgICAgICAgICAvL3RoaXMub2JkT2ZmTGluZUxvZy5nZXQoaWQpLnRoZW4ocHJvY2VzbyA9PiB7XHJcbiAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyhwcm9jZXNvKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5HZXRQcm9jZXNvQnlJZEZyb21Mb2coaWQsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcywgUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIEdldFByb2Nlc29CeUlkRnJvbUxvZyhpZCwgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zOiBGdW5jdGlvbiwgUmVzcG9uc2VFcnJvckxvYWRNM1Byb2Nlc29zOiBGdW5jdGlvbikge1xyXG4gICAgICAgIC8vSkFHTSAyMDE5MTEwOCBjYW1iaW8gZGUgZG9uZGUgdHJhZXIgZWwgcHJvY2VzbyBsbyB0cmFlIGRlc2RlIG9mZmxpbmVcclxuICAgICAgICAvL3RoaXMub1NlcnZpY2VPZmZMaW5lLmdldChpZCkudGhlbihwcm9jZXNvID0+IHtcclxuICAgICAgICB0aGlzLm9iZE9mZkxpbmVMb2cuZ2V0KGlkKS50aGVuKHByb2Nlc28gPT4ge1xyXG4gICAgICAgICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MocHJvY2Vzbyk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBSZXNwb25zZUVycm9yTG9hZE0zUHJvY2Vzb3MoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIE0zIFByb2Nlc29zXHJcbiAgICAgKiBAcGFyYW0gaWQgSWQgZGVsIE0zIFByb2Nlc29cclxuICAgICAqIEBwYXJhbSBvbE0zUHJvY2Vzb3MgT2JqZXRvIE0zIFByb2Nlc29zIGEgYWdyZWdhclxyXG4gICAgICogQHBhcmFtIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyBGdW5jaW9uIE9LIHJlc3B1ZXN0YSBxdWUgYXRyYXBhcsOhLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQWRkUHJvY2VzbyhpZGthdGlvczogc3RyaW5nLCBvbE0zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgaWYgKG9sTTNQcm9jZXNvcy5JZE0zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQWRkVG9Eb2NPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkdldElkTTNPZmZsaW5lKGlka2F0aW9zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSkudGhlbihpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbE0zUHJvY2Vzb3MuSWRNMyA9IGlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5BZGRUb0RvY09mZmxpbmUob2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEFkZFRvRG9jT2ZmbGluZShvbE0zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvczogRnVuY3Rpb24sIGludGVudG8gPSAwKSB7XHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuQWRkRG9jdW1lbnQob2xNM1Byb2Nlc29zLklkTTMudG9TdHJpbmcoKSwgb2xNM1Byb2Nlc29zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlNhdmVJZE0zKG9sTTNQcm9jZXNvcy5JZE0zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuQWRkTG9nT2ZmbGluZShvbE0zUHJvY2Vzb3MpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLlNhdmVJZE0zKG9sTTNQcm9jZXNvcy5JZE0zLCBvbE0zUHJvY2Vzb3MuVE1JZFByb2Nlc28sIG9sTTNQcm9jZXNvcy5VYmljMS50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MuSURIdWIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIC8vICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3Mob2xNM1Byb2Nlc29zLklkTTMpO1xyXG4gICAgICAgICAgICAvLyB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICB0aGlzLkFkZExvZ09mZmxpbmUob2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MpO1xyXG5cclxuICAgICAgICAgICAgLy9SZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3Mob2xNM1Byb2Nlc29zLklkTTMpO1xyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB2YXIgc0ZlY2hhTm93OiBzdHJpbmcgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKVxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVycm9yTG9nXCIgKyBzRmVjaGFOb3csIEpTT04uc3RyaW5naWZ5KHsgXCJlcnJvclwiOiBlcnJvciwgXCJvbE0zUHJvY2Vzb3NcIjogb2xNM1Byb2Nlc29zLCBcIkludGVudG9cIjogaW50ZW50bywgXCJmdW5jdGlvblwiOiBcIkFkZFRvRG9jT2ZmbGluZVwiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQWRkVG9Eb2NPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zLCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyh7IFwiRXJyb3JcIjogXCJFcnJvciBlbiBndWFyZGFyIGVuIGJhc2UgZGUgZGF0b3MgcGNwYWwuXCIgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIGxvZyBvZmZsaW5lIGRlIHByb2Nlc29zLlxyXG4gICAgICogQHBhcmFtIG9sTTNQcm9jZXNvcyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkZExvZ09mZmxpbmUob2xNM1Byb2Nlc29zOiBNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3M6IEZ1bmN0aW9uLCBpbnRlbnRvOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgLy9BZ3JlZ2FyIGEgTG9nIFNvY2tldFxyXG4gICAgICAgIC8vdGhpcy5BZGRMb2dTb2NrZXQob2xNM1Byb2Nlc29zKVxyXG4gICAgICAgIC8vcmV0dXJuIHRoaXMub2JkT2ZmTGluZUxvZy5BZGREb2N1bWVudChvbE0zUHJvY2Vzb3MuSWRNMy50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MpXHJcbiAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkFkZERvY3VtZW50KG9sTTNQcm9jZXNvcy5JZE0zLnRvU3RyaW5nKCksIG9sTTNQcm9jZXNvcykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XHJcbiAgICAgICAgICAgIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcyhvbE0zUHJvY2Vzb3MuSWRNMyk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImVycm9yXCI6IGVycm9yLCBcIm9sTTNQcm9jZXNvc1wiOiBvbE0zUHJvY2Vzb3MsIFwiSW50ZW50b1wiOiBpbnRlbnRvLCBcImZ1bmN0aW9uXCI6IFwiQWRkTG9nT2ZmbGluZVwiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQWRkTG9nT2ZmbGluZShvbE0zUHJvY2Vzb3MsIFJlc3BvbnNlT0tMb2FkTTNQcm9jZXNvcywgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MoeyBcIkVycm9yXCI6IFwiRXJyb3IgZW4gZ3VhcmRhciBlbiBiYXNlIGRlIGRhdG9zIGxvY2FsLlwiIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgQWRkTG9nU29ja2V0T0sgPSAoKSA9PiB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZUluc3RhbmNlTG9nT2ZmKCkge1xyXG4gICAgICAgIHRoaXMub2JkT2ZmTGluZUxvZy5jbG9zZUluc3RhbmNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBHZXRPZmZMaW5lTG9nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iZE9mZkxpbmVMb2cuR2V0QWxsRG9jcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgR2V0MURvY09mZkxpbmVMb2coaWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmRPZmZMaW5lTG9nLmdldChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNhciBtMyBwcm9jZXNvLCBlbiBlbCBsb2cgbG9jYWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSZXZlcnNhckVuTG9nKGlkKSB7XHJcbiAgICAgICAgdGhpcy5HZXQxRG9jT2ZmTGluZUxvZyhpZCkudGhlbihvTTNQID0+IHtcclxuICAgICAgICAgICAgdmFyIG9SZXN1bHQ6IE0zUHJvY2Vzb3MgPSBvTTNQO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9SZXN1bHQubE0zUEVuY0ZQLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBvUmVzdWx0LmxNM1BFbmNGUFtpXS5WYWxDYW1iaW8gPSAwO1xyXG4gICAgICAgICAgICAgICAgb1Jlc3VsdC5sTTNQRW5jRlBbaV0uVmFsb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgb1Jlc3VsdC5sTTNQRW5jRlBbaV0uVmFsT3RyYUNsYXNpID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvUmVzdWx0LklkRXN0YWRvID0gXCJSVlwiO1xyXG4gICAgICAgICAgICB0aGlzLkFkZExvZ09mZmxpbmUob1Jlc3VsdCwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RydWlyQkRMb2coZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JkT2ZmTGluZUxvZy5EZXN0cm95KGZ1bmNpb25SZXNwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgRGVzdHJ1aXJCRE9mZihmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vU2VydmljZU9mZkxpbmUuRGVzdHJveShmdW5jaW9uUmVzcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFN1bWFyQ3Rpdm8oaWRtMzogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gdmFyIHNQYXJ0MTtcclxuICAgICAgICAvLyB2YXIgc1BhcnQyO1xyXG5cclxuICAgICAgICAvLyBzUGFydDEgPSBpZG0zLnN1YnN0cmluZygwLCA4KTtcclxuICAgICAgICAvLyBzUGFydDIgPSBpZG0zLnN1YnN0cmluZyg4LCBpZG0zLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gc1BhcnQyID0gK3NQYXJ0MiArIDE7XHJcbiAgICAgICAgLy8gaWRtMyA9IHNQYXJ0MSArIHNQYXJ0MjtcclxuICAgICAgICAvLyByZXR1cm4gaWRtMztcclxuICAgICAgICB2YXIgc1BhcnQxO1xyXG4gICAgICAgIHZhciBzUGFydDI7XHJcbiAgICAgICAgc1BhcnQxID0gaWRtMy5zdWJzdHJpbmcoMCwgOSk7XHJcbiAgICAgICAgc1BhcnQyID0gaWRtMy5zdWJzdHJpbmcoOSk7XHJcbiAgICAgICAgc1BhcnQyID0gK3NQYXJ0MiArIDE7XHJcbiAgICAgICAgaWRtMyA9IHNQYXJ0MSArIFwiXCIgKyBzUGFydDI7XHJcbiAgICAgICAgcmV0dXJuIGlkbTM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3R1YWxpemFyIGVsIE0zIFByb2Nlc29zLCB0ZW5pZW5kbyBlbCBJZCBkZWwgZG9jdW1lbnRvIGd1YXJkYWRvIGVuIGxhIEJEIE5vU1FMXHJcbiAgICAgKiBAcGFyYW0gaWQgSWQgZGVsIGRvY3VtZW50byBCZCBOb1NRTFxyXG4gICAgICogQHBhcmFtIG9sTTNQcm9jZXNvcyBNMyBQcm9jZXNvcyBhIGFsbWFjZW5hciAvIEFjdHVhbGl6YXJcclxuICAgICAqIEBwYXJhbSBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MgUmVzcHVlc3RhIGRlIE9LLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkUHJvY2VzbyhpZCwgb2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3M6IEZ1bmN0aW9uLCBpbnRlbnRvID0gMCkge1xyXG5cclxuICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5BZGREb2N1bWVudChpZC50b1N0cmluZygpLCBvbE0zUHJvY2Vzb3MpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKGlkKTtcclxuICAgICAgICAgICAgdGhpcy5BZGRMb2dPZmZsaW5lKG9sTTNQcm9jZXNvcywgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzRmVjaGFOb3c6IHN0cmluZyA9IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImVycm9yXCI6IGVycm9yLCBcIm9sTTNQcm9jZXNvc1wiOiBvbE0zUHJvY2Vzb3MsIFwiSW50ZW50b1wiOiBpbnRlbnRvLCBcImZ1bmN0aW9uXCI6IFwidXBkUHJvY2Vzb1wiIH0pKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmRPZmZMaW5lTG9nLkluc3RhbmNlQWdhaW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkUHJvY2VzbyhpZCwgb2xNM1Byb2Nlc29zLCBSZXNwb25zZU9LTG9hZE0zUHJvY2Vzb3MsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUmVzcG9uc2VPS0xvYWRNM1Byb2Nlc29zKHsgXCJFcnJvclwiOiBcIkVycm9yIGVuIGd1YXJkYXIgZW4gYmFzZSBkZSBkYXRvcyBwY3BhbC5cIiB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWN0dWFsaXphciBlbCBNMyBQcm9jZXNvcywgdGVuaWVuZG8gZWwgSWQgZGVsIGRvY3VtZW50byBndWFyZGFkbyBlbiBsYSBCRCBOb1NRTFxyXG4gICAgICogQHBhcmFtIGlkIElkIGRlbCBkb2N1bWVudG8gQmQgTm9TUUxcclxuICAgICAqIEBwYXJhbSBvbE0zUHJvY2Vzb3MgTTMgUHJvY2Vzb3MgYSBhbG1hY2VuYXIgLyBBY3R1YWxpemFyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyB1cGRQcm9jZXNvQXN5bmMoaWQsIG9sTTNQcm9jZXNvcykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMub1NlcnZpY2VPZmZMaW5lLkFkZERvY3VtZW50KGlkLnRvU3RyaW5nKCksIG9sTTNQcm9jZXNvcyk7XHJcbiAgICAgICAgdGhpcy5BZGRMb2dPZmZsaW5lKG9sTTNQcm9jZXNvcywgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEFsbERvY3NPZmZMaW5lU2luRG9jcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jc09mZkxpbmVTaW5Eb2NzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2VzYXJUaWNrZXRPZmZsaW5lKGlka2F0aW9zLCBwcm9jZXNvLCBvRGF0YVVzZXI6IGFueSwgZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGxNM1Byb2Nlc29zID0gbmV3IEFycmF5PE0zUHJvY2Vzb3M+KCk7XHJcbiAgICAgICAgdmFyIG9NM1JlZ1NlcnZpY2UgPSBuZXcgTTNSZWdTZXJ2aWNlKG51bGwsIG51bGwsIGlka2F0aW9zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmFsaWRhclRpY2tldENlcnJhZG8ocHJvY2VzbykpIHtcclxuICAgICAgICAgICAgbE0zUHJvY2Vzb3MucHVzaChwcm9jZXNvKTtcclxuXHJcbiAgICAgICAgICAgIG9NM1JlZ1NlcnZpY2UuUmVnaXN0cm9FdmVudG9NM09mZkxpbmUoaWRrYXRpb3MsIHRoaXMub1Bvc3RTZXJ2aWNlTTMsIGxNM1Byb2Nlc29zLCBvRGF0YVVzZXIpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKHRydWUsIFwiT0tcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKGZhbHNlLCBcIk9LXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBwcm9jZXNvcyBxdWUgc2UgcHJvY2VzYXJvbiBtaWVudHJhcyBzZSBlc3RhYmEgZnVlcmEgZGUgbGluZWFcclxuICAgICAqL1xyXG4gICAgcHVibGljIFZhbGlkYXJQcm9jZXNvc0FncmVnYWRvc09mZkxpbmUoaWRrYXRpb3MsIG9EYXRhVXNlcjogYW55LCBmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiRW50cm8gVmFsaWRhclByb2Nlc29zQWdyZWdhZG9zT2ZmTGluZVwiKVxyXG4gICAgICAgIHZhciBsTTNQcm9jZXNvcyA9IG5ldyBBcnJheTxNM1Byb2Nlc29zPigpO1xyXG4gICAgICAgIHZhciBvTTNSZWdTZXJ2aWNlID0gbmV3IE0zUmVnU2VydmljZShudWxsLCBudWxsLCBpZGthdGlvcyk7XHJcbiAgICAgICAgdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jcygpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIHJlc3VsdFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJvd3NbaV0uaWQgJiYgIXJlc3VsdC5yb3dzW2ldLmlkLnN0YXJ0c1dpdGgoXCJDVElWT1NcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbTNQcm9jZXNvOiBNM1Byb2Nlc29zID0gcmVzdWx0LnJvd3NbaV0uZG9jO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZhbGlkYXJUaWNrZXRDZXJyYWRvKG0zUHJvY2VzbykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbE0zUHJvY2Vzb3MucHVzaChyZXN1bHQucm93c1tpXS5kb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQW50ZXMgUmVnaXN0cm9FdmVudG9NM09mZkxpbmVcIilcclxuICAgICAgICAgICAgb00zUmVnU2VydmljZS5SZWdpc3Ryb0V2ZW50b00zT2ZmTGluZShpZGthdGlvcywgdGhpcy5vUG9zdFNlcnZpY2VNMywgbE0zUHJvY2Vzb3MsIG9EYXRhVXNlcikudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRGlvIFJlc3B1ZXN0YSBSZWdpc3Ryb0V2ZW50b00zT2ZmTGluZVwiKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeClcclxuICAgICAgICAgICAgICAgIGlmICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImlmIDFcIilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5EZWxldGVBbGxEb2NzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY2lvblJlc3AodHJ1ZSwgXCJPS1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImlmIDJcIilcclxuICAgICAgICAgICAgICAgICAgICAvL1Jlc3B1ZXN0YSBjb24gZXJyb3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5vU2VydmljZU9mZkxpbmUuRGVsZXRlQWxsRG9jcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKGZhbHNlLCBcIk9LXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICBmdW5jaW9uUmVzcChmYWxzZSwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYWNpb24gZGUgcXVlIGVsIHRpY2tldCBlc3RhIGNlcnJhZG8uXHJcbiAgICAgKiBAcGFyYW0gbTNQcm9jZXNvIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVmFsaWRhclRpY2tldENlcnJhZG8obTNQcm9jZXNvOiBNM1Byb2Nlc29zKSB7XHJcbiAgICAgICAgdmFyIGJDZXJyYWRvOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBpZiAobTNQcm9jZXNvLk0zRU5DICE9IG51bGwgJiYgbTNQcm9jZXNvLmxNM1BFbmNGUCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChtM1Byb2Nlc28gJiYgbTNQcm9jZXNvLlN1YkVzdGFkb0FudCAhPSBcIkRlY2xpbmFkb1wiICYmIG0zUHJvY2Vzby5NM0VOQy5sZW5ndGggPiAwICYmIG0zUHJvY2Vzby5sTTNQRW5jRlAubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FudGlkYWRUb3RhbEJ5TTNQcm9jZXNvKG0zUHJvY2VzbykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBiQ2VycmFkbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBiQ2VycmFkbyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJDZXJyYWRvO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FudGlkYWRUb3RhbEJ5TTNQcm9jZXNvKG9NM1Byb2Nlc29zOiBNM1Byb2Nlc29zKSB7XHJcbiAgICAgICAgaWYgKG9NM1Byb2Nlc29zICYmIG9NM1Byb2Nlc29zLk0zRU5DKSB7XHJcbiAgICAgICAgICAgIHZhciBkQ2FudGlkYWQgPSBvTTNQcm9jZXNvcy5NM0VOQy5maWx0ZXIoZW5jID0+ICgrZW5jLk0zREVULmZpbmQoZGV0ID0+IGRldC5Ob21icmVDb25jZXB0byA9PSBcIkNBTlRJREFEXCIpLlZhbG9yKSA+IDApLlxyXG4gICAgICAgICAgICAgICAgcmVkdWNlKChhY2MsIGN1cikgPT4gKGFjYykgKyAoK2N1ci5NM0RFVC5maW5kKGRldCA9PiBkZXQuTm9tYnJlQ29uY2VwdG8gPT0gXCJDQU5USURBRFwiKS5WYWxvciksIDApO1xyXG4gICAgICAgICAgICBpZiAoZENhbnRpZGFkID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRDYW50aWRhZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciB0b2RvcyBsb3MgZG9jdW1lbnRvcyBPZmYgbGluZSBxdWUgc2UgaGFuIGd1YXJkYWRvIGNvbW8gb2ZmbGluZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIEdldEFsbERvY3NPZmZsaW5lKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBsTTNQcm9jZXNvcyA9IG5ldyBBcnJheTxNM1Byb2Nlc29zPigpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgdGhpcy5vU2VydmljZU9mZkxpbmUuR2V0QWxsRG9jcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJvd3NbaV0uaWQgIT0gXCJDVElWT1NcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxNM1Byb2Nlc29zLnB1c2gocmVzdWx0LnJvd3NbaV0uZG9jKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbE0zUHJvY2Vzb3M7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPYnRlbmVyIHRvZG9zIGxvcyBkb2N1bWVudG9zIE9mZiBsaW5lIHF1ZSBzZSBoYW4gZ3VhcmRhZG8gY29tbyBvZmZsaW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgR2V0QWxsRG9jc09mZmxpbmVEZWxldGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5HZXRBbGxEb2NzRGVsZXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVDdGl2b3ModWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5EZWxldGUodGhpcy5HZXRLZXkodWJpY2FjaW9uLCBodWIpKVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxDdGl2b3ModWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub1NlcnZpY2VPZmZMaW5lLmdldCh0aGlzLkdldEtleSh1YmljYWNpb24sIGh1YikpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIGxvcyBjb25zZWN1dGl2b3MgcXVlIGVzdGFuIGxvY2FsbWVudGUgdnMgbG9zIHF1ZSBlc3RhbiBlbiBlbCBzZXJ2aWRvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIFZhbGlkYWNpb25DdGl2b3NWU1NlcnZlcihpa2F0aW9zOiBzdHJpbmcsIHViaWNhY2lvbjogc3RyaW5nLCBpZEh1Yjogc3RyaW5nLCBmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmdldEFsbEN0aXZvcyh1YmljYWNpb24sIGlkSHViKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9TZXJ2aWNlTTNNYWVzdHJvID0gbmV3IFNlcnZpY2VNM01hZXN0cm8oKTtcclxuICAgICAgICAgICAgICAgIG9TZXJ2aWNlTTNNYWVzdHJvLlZhbGlkYXJDdGl2b3NWU0xvY2FsKHRoaXMub1Bvc3RTZXJ2aWNlTTMsIGlrYXRpb3MsIEpTT04uc3RyaW5naWZ5KHgpLCB1YmljYWNpb24sIGlkSHViLCBmdW5jaW9uUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBlbCBjb25zZWN1dGl2byBlbiBlbCBxdWUgdmEsIGVsIHByb2Nlc28gb2ZmbGluZSBxdWUgcmVjaWJlIGNvbW8gcGFyYW1ldHJvXHJcbiAgICAgKiBAcGFyYW0gdWJpY2FjaW9uIFxyXG4gICAgICogQHBhcmFtIGh1YiBcclxuICAgICAqIEBwYXJhbSBzSWRQcm9jZXNvIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgR2V0Q3Rpdm9PZmZMaW5lKHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZywgc0lkUHJvY2Vzbzogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGN0aXZvOiBzdHJpbmcgPSBcIjBcIjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgb0RhdGEgPSBhd2FpdCB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5nZXQodGhpcy5HZXRLZXkodWJpY2FjaW9uLCBodWIpKTtcclxuICAgICAgICAgICAgaWYgKG9EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb0RhdGFGaW5kZWQ6IGFueSA9IG9EYXRhLkN0aXZvcy5maW5kKHggPT4geC5JZFByb2Nlc28gPT0gc0lkUHJvY2Vzbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAob0RhdGFGaW5kZWQuQ3Rpdm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdGl2byA9IG9EYXRhRmluZGVkLkN0aXZvLnN1YnN0cmluZyg5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgICAgcmV0dXJuIGN0aXZvO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR3VhcmRhciBpZCBtMyBcclxuICAgICAqIEBwYXJhbSBzSWRNMyBcclxuICAgICAqIEBwYXJhbSBzSWRQcm9jZXNvIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgU2F2ZUlkTTMoc0lkTTM6IHN0cmluZywgc0lkUHJvY2Vzbzogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm9TZXJ2aWNlT2ZmTGluZS5nZXQodGhpcy5HZXRLZXkodWJpY2FjaW9uLCBodWIpKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB2YXIgb0RhdGE6IEFycmF5PGFueT4gPSBkYXRhLkN0aXZvcztcclxuICAgICAgICAgICAgdmFyIG9EYXRhRmluZGVkOiBhbnkgPSBvRGF0YS5maW5kKHggPT4geC5JZFByb2Nlc28gPT0gc0lkUHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIGlmIChvRGF0YUZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN0aXZvQW50ID0gK29EYXRhRmluZGVkLkN0aXZvLnN1YnN0cmluZyg5KTtcclxuICAgICAgICAgICAgICAgIHZhciBjdGl2b0FjdCA9ICtzSWRNMy5zdWJzdHJpbmcoOSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3Rpdm9BY3QgPiBjdGl2b0FudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9EYXRhRmluZGVkLkN0aXZvID0gc0lkTTM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvRGF0YS5wdXNoKHsgXCJJZFByb2Nlc29cIjogc0lkUHJvY2VzbywgXCJDdGl2b1wiOiBzSWRNMyB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuU2F2ZUN0aXZvcyhvRGF0YSwgdWJpY2FjaW9uLCBodWIpO1xyXG4gICAgICAgICAgICBpZiAoc0lkUHJvY2Vzby50b1VwcGVyQ2FzZSgpID09IFwiVElDS0VUVkVOVEFcIikge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJDdGl2b1RpY2tldFZlbnRhXCIsIHNJZE0zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdmFyIG9EYXRhID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgICAgICAgb0RhdGEucHVzaCh7IFwiSWRQcm9jZXNvXCI6IHNJZFByb2Nlc28sIFwiQ3Rpdm9cIjogc0lkTTMgfSlcclxuICAgICAgICAgICAgdGhpcy5TYXZlQ3Rpdm9zKG9EYXRhLCB1YmljYWNpb24sIGh1Yik7XHJcbiAgICAgICAgICAgIGlmIChzSWRQcm9jZXNvLnRvVXBwZXJDYXNlKCkgPT0gXCJUSUNLRVRWRU5UQVwiKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkN0aXZvVGlja2V0VmVudGFcIiwgc0lkTTMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHdWFyZGFyIGN0aXZvcywgSWRtMy5cclxuICAgICAqIEBwYXJhbSBvRGF0YSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBTYXZlQ3Rpdm9zKG9EYXRhOiBBcnJheTxhbnk+LCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcsIGludGVudG8gPSAwKSB7XHJcbiAgICAgICAgdmFyIG9EYXRhU2VuZCA9IHsgXCJDdGl2b3NcIjogb0RhdGEgfVxyXG4gICAgICAgIHRoaXMub1NlcnZpY2VPZmZMaW5lLkFkZERvY3VtZW50KHRoaXMuR2V0S2V5KHViaWNhY2lvbiwgaHViKSwgb0RhdGFTZW5kKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9LXCIpO1xyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdmFyIHNGZWNoYU5vdzogc3RyaW5nID0gbW9tZW50KG5ldyBEYXRlKCkpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJylcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlcnJvckxvZ0N0aXZvc1wiICsgc0ZlY2hhTm93LCBKU09OLnN0cmluZ2lmeSh7IFwiZXJyb3JcIjogZXJyb3IsIFwiQ3Rpdm9zXCI6IG9EYXRhU2VuZCwgXCJmdW5jdGlvblwiOiBcIlNhdmVDdGl2b3NcIiB9KSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgaWYgKGludGVudG8gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TYXZlQ3Rpdm9zKG9EYXRhLCB1YmljYWNpb24sIGh1YiwgMSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBEZWxldGVPbGREb2NzKG1heERpYXM6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMub2JkT2ZmTGluZUxvZy5EZWxldGVPbGREb2NzKG1heERpYXMpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBpbmZvcm1hY2lvbiBkZSBJZCBtMywgY3VhbmRvIGVzdGEgZnVlcmEgZGUgbGluZWFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIEdldElkTTNPZmZsaW5lKGlka2F0aW9zOiBzdHJpbmcsIGlkcHJvY2Vzbzogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgb0RhdGFJZE0zO1xyXG4gICAgICAgIHZhciBpZE0zO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG9EYXRhSWRNMyA9IGF3YWl0IHRoaXMub1NlcnZpY2VPZmZMaW5lLmdldCh0aGlzLkdldEtleSh1YmljYWNpb24sIGh1YikpO1xyXG4gICAgICAgICAgICB2YXIgb0RhdGFGaW5kZWQ6IGFueSA9IG9EYXRhSWRNMy5DdGl2b3MuZmluZCh4ID0+IHguSWRQcm9jZXNvID09IGlkcHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIGlmIChvRGF0YUZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWRNMyA9IG9EYXRhRmluZGVkLkN0aXZvO1xyXG4gICAgICAgICAgICAgICAgaWRNMyA9IHRoaXMuU3VtYXJDdGl2byhpZE0zKTtcclxuICAgICAgICAgICAgICAgIGlkTTMgPSB0aGlzLnZhbGlkYXJBdW1lbnRvQ3Rpdm8oaWRNMywgaWRwcm9jZXNvKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGlkTTMgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyBcIlwiICsgZGF0ZS5nZXRNb250aCgpICsgXCJcIiArIGRhdGUuZ2V0RGF5KCkgKyBcIlwiICsgZGF0ZS5nZXRIb3VycygpICsgXCJcIiArIGRhdGUuZ2V0TWludXRlcygpICsgXCJcIiArIGRhdGUuZ2V0U2Vjb25kcygpICsgXCJcIiArIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWRNMyA9IHRoaXMuR2V0Q3Rpdm8oaWRrYXRpb3MsIGlkcHJvY2VzbywgdWJpY2FjaW9uLCBodWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIC8vIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgLy8gaWRNMyA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiXCIgKyBkYXRlLmdldE1vbnRoKCkgKyBcIlwiICsgZGF0ZS5nZXREYXkoKSArIFwiXCIgKyBkYXRlLmdldEhvdXJzKCkgKyBcIlwiICsgZGF0ZS5nZXRNaW51dGVzKCkgKyBcIlwiICsgZGF0ZS5nZXRTZWNvbmRzKCkgKyBcIlwiICsgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICAgICAgaWRNMyA9IHRoaXMuR2V0Q3Rpdm8oaWRrYXRpb3MsIGlkcHJvY2VzbywgdWJpY2FjaW9uLCBodWIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWRNMztcclxuICAgIH1cclxuXHJcblxyXG4gICAgdmFsaWRhckF1bWVudG9DdGl2byhpZE0zLCBpZHByb2Nlc28pIHtcclxuICAgICAgICBpZiAoaWRwcm9jZXNvLnRvVXBwZXJDYXNlKCkgPT0gXCJUSUNLRVRWRU5UQVwiKSB7XHJcbiAgICAgICAgICAgIGxldCB1bHRpbW9JZE0zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJDdGl2b1RpY2tldFZlbnRhXCIpO1xyXG4gICAgICAgICAgICBpZiAodWx0aW1vSWRNMyA9PSBpZE0zKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc0ZlY2hhTm93OiBzdHJpbmcgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKVxyXG4gICAgICAgICAgICAgICAgaWRNMyA9IHRoaXMuU3VtYXJDdGl2byhpZE0zKTtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZXJyb3JMb2dDdGl2b3NcIiArIHNGZWNoYU5vdywgSlNPTi5zdHJpbmdpZnkoeyBcImlkTTNcIjogaWRNMywgXCJmdW5jdGlvblwiOiBcInZhbGlkYXJBdW1lbnRvQ3Rpdm9cIiB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkTTM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBHZXRDdGl2byhpZGthdGlvczogc3RyaW5nLCBpZHByb2Nlc286IHN0cmluZywgdWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTTNNYWVzdHJvID0gbmV3IFNlcnZpY2VNM01hZXN0cm8oKTtcclxuICAgICAgICB2YXIgc0N0aXZvO1xyXG4gICAgICAgIHNDdGl2byA9IGF3YWl0IG9TZXJ2aWNlTTNNYWVzdHJvLkdldEN0aXZvQllQcm9jZXNvKHRoaXMub1Bvc3RTZXJ2aWNlTTMsIGlka2F0aW9zLCBpZHByb2Nlc28sIHViaWNhY2lvbiwgaHViKTtcclxuICAgICAgICByZXR1cm4gc0N0aXZvO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGVuZXIgbGxhdmUgZGUgcG91Y2hEQlxyXG4gICAgICogQHBhcmFtIHViaWMgXHJcbiAgICAgKiBAcGFyYW0gaHViIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgR2V0S2V5KHViaWMsIGh1Yikge1xyXG4gICAgICAgIHJldHVybiBcIkNUSVZPU19cIiArIHViaWMgKyBodWI7XHJcbiAgICB9XHJcblxyXG59Il19
|