tnx-shared 5.1.162 → 5.1.166
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/tnx-shared.umd.js +45 -40
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/component-base.d.ts +1 -1
- package/classes/base/component-base.d.ts.map +1 -1
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/public-function.d.ts +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +2 -2
- package/enums/common.d.ts +2 -1
- package/enums/common.d.ts.map +1 -1
- package/esm2015/classes/base/component-base.js +4 -3
- package/esm2015/classes/base/data-form-base.js +5 -1
- package/esm2015/classes/base/data-list-base.js +3 -2
- package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
- package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
- package/esm2015/components/tn-app-help/tn-app-help.component.js +2 -2
- package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +4 -5
- package/esm2015/enums/common.js +2 -1
- package/esm2015/models/grid-info.js +2 -1
- package/esm2015/services/base.service.js +4 -3
- package/esm2015/services/common.service.js +3 -2
- package/fesm2015/tnx-shared.js +22 -13
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +1 -0
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/services/base.service.d.ts +1 -1
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts +1 -1
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -588,10 +588,11 @@ export class BaseService {
|
|
|
588
588
|
return rsDic;
|
|
589
589
|
});
|
|
590
590
|
}
|
|
591
|
-
newFilter(field, operator, value) {
|
|
591
|
+
newFilter(field, operator, value, valueIsField = false) {
|
|
592
592
|
return new Filter({
|
|
593
593
|
field, operator,
|
|
594
|
-
value: JSON.stringify(value)
|
|
594
|
+
value: JSON.stringify(value),
|
|
595
|
+
valueIsField
|
|
595
596
|
});
|
|
596
597
|
}
|
|
597
598
|
newFilterV4(field, operator, value) {
|
|
@@ -670,4 +671,4 @@ export class BaseService {
|
|
|
670
671
|
return this.defaultPost(`${this.serviceUri}/UpdateDaDuyetQuyetDinh/${id}`, {});
|
|
671
672
|
}
|
|
672
673
|
}
|
|
673
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLFVBQVUsR0FBRyxpRkFBaUYsQ0FBQztBQUNyRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFaEMsTUFBTSxPQUFnQixXQUFXO0lBcUI3QixZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLFVBQWtCO1FBbkJ0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixjQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IseUJBQW9CLEdBQUcs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LENBQUM7SUFDbkYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHJldHJ5LCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRHJvcGRvd25PcHRpb25zLCBPcGVyYXRvciB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvLCBTb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IGdldFN0cmluZ0RhdGVWTiB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi9zaWduYWxyLnNlcnZpY2UnO1xyXG5cclxuXHJcbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbmNvbnN0IEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2Uge1xyXG4gICAgX2h0dHA6IEh0dHBDbGllbnQ7XHJcbiAgICBfaW5qZWN0b3I6IEluamVjdG9yO1xyXG4gICAgX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZTogU2lnbmFsUlNlcnZpY2U7XHJcblxyXG4gICAgc2VydmljZVVyaSA9ICcnO1xyXG4gICAgZW5kUG9pbnQgPSAnJztcclxuICAgIHNlcnZpY2VDb2RlID0gJyc7XHJcbiAgICBlbnRpdHlOYW1lID0gJyc7XHJcbiAgICBvYmplY3ROYW1lID0gJyc7XHJcbiAgICB1c2VXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgYXBpR2V0RGF0YSA9ICdHZXREYXRhJztcclxuICAgIGFwaUdldEFsbCA9ICdHZXRBbGxCeUZpbHRlcic7XHJcbiAgICBhcGlHZXREZXRhaWxCeUZpbHRlciA9ICdHZXRCeUZpbHRlcic7XHJcblxyXG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XHJcbiAgICByZWFkb25seSBSRVBMQVlfQ09VTlQ6IG51bWJlciA9IDE7XHJcbiAgICByZWFkb25seSBMSU1JVF9ERUZBVUxUOiBudW1iZXIgPSAxMDAwO1xyXG5cclxuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBzZXJ2aWNlVXJpOiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX2h0dHAgPSBodHRwO1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZSA9IGluamVjdG9yLmdldChTaWduYWxSU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VycmVudFNlcnZpY2VVcmkoa2V5OiBzdHJpbmcpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLZXlXb3JrZmxvd1NldHRpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZW50aXR5TmFtZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlU2lnbmFsUihjYWxsQmFjaykge1xyXG4gICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgLy8gQuG6r3QgxJHhuqd1IGNo4bqheVxyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS5zdGFydCgnQ29tbW9uSHViJywgdG9waWMsIChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHVuc3Vic2NyaWJlIGPDoWMgdG9waWMgxJHDoyBs4bqvbmcgbmdoZSB0csaw4bubYyDEkcOzXHJcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS51blN1YnNjcmliZVZpZXdDb2RlKCdDb21tb25IdWInLCB0b3BpYyk7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrKG1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0b3BpYztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuU3Vic2NyaWJlU2lnbmFsUihrZXkpIHtcclxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUudW5TdWJzY3JpYmVWaWV3Q29kZSgnQ29tbW9uSHViJywga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0R2V0U2lnbmFsUihhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnN1YnNjcmliZVNpZ25hbFIoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBycyA9IEpTT04ucGFyc2UoZik7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vID09IC0xIGzDoCB0csaw4budbmcgaOG7o3Agc2V0IGtleSBi4buLIGzhu5dpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEgIT0gJy0xJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhY2hlUmVzcG9uc2UocnMuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYD9gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGAmYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlU2lnbmFsUih0b3BpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UG9zdFNpZ25hbFIoYXBpVXJsLCBkYXRhOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnN1YnNjcmliZVNpZ25hbFIoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBycyA9IEpTT04ucGFyc2UoZik7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vID09IC0xIGzDoCB0csaw4budbmcgaOG7o3Agc2V0IGtleSBi4buLIGzhu5dpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEgIT0gJy0xJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhY2hlUmVzcG9uc2UocnMuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcy5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoYXBpVXJsLmluZGV4T2YoJz8nKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGA/YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgJmA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBpVXJsICs9IGBfa2V5U2lnbmFscj0ke3RvcGljfWA7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVTaWduYWxSKHRvcGljKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENhY2hlUmVzcG9uc2Uoa2V5OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0Jhc2VHZXRDYWNoZUluZm8vJHtrZXl9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RHcmlkSW5mbyh1cmw6IHN0cmluZywgZ3JpZEluZm86IEdyaWRJbmZvKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmICghZ3JpZEluZm8pIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKCk7XHJcbiAgICAgICAgaWYgKGdyaWRJbmZvLmZpZWxkcyAmJiBncmlkSW5mby5maWVsZHMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IGdyaWRJbmZvLmZpZWxkcy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vJHt1cmx9YCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXREYXRhO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ5R3JpZFJlcXVlc3RXaXRoQm9keU9sZChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShncmlkSW5mby5maWx0ZXJzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbHRlci5maWx0ZXJzICYmIGZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGZpbHRlci5maWx0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTMOgIHZhbHVlIGtp4buDdSBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0clZhbHVlLmluZGV4T2YoJy0nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4oZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBzdHJWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENo4buJIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBtdeG7kW4gZ+G7rWkgcmVxdWVzdCDEkeG6v24gY3VzdG9tIHJvdXRlIEdldERhdGEve3BsdXNVcmx9XHJcbiAgICAgKi9cclxuICAgIGdldERhdGFDdXN0b21Sb3V0ZShwbHVzVXJsOiBzdHJpbmcsIGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBwYWdlU2l6ZTogbnVtYmVyID0gMSwgcGFnZTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgZmllbGRzLFxyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRzLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgcGx1c1VybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9IGAvJHtwbHVzVXJsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgZmllbGRzLFxyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiA5OTlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc29ydHMsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tFeGlzdGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYXBpVXJsLCBmaWx0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0R1cGxpY2F0ZWRCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlkOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW1xyXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWQnLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGlkKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgICAgICAgZmllbGRzOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzdHJGaWVsZCA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0ke29wdGlvbnMuZGlzcGxheUZpZWxkID09IG9wdGlvbnMudmFsdWVGaWVsZCA/ICcnIDogJywnICsgb3B0aW9ucy5kaXNwbGF5RmllbGR9JHtvcHRpb25zLmZpZWxkUGx1c31gO1xyXG4gICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuYWRkRGlzdGluY3Qoc3RyRmllbGQuc3BsaXQoJywnKSwgW10pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydHMgIT0gbnVsbCAmJiBvcHRpb25zLnNvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMgPSBbLi4ub3B0aW9ucy5zb3J0c107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCAhPSBudWxsICYmIG9wdGlvbnMuc29ydEZpZWxkICE9ICcnKSB7XHJcblxyXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy5wdXNoKHsgZmllbGQ6IG9wdGlvbnMuc29ydEZpZWxkLCBkaXI6IG9wdGlvbnMuc29ydERpciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdyaWRJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCA+IDAgJiYgIW9wdGlvbnMuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyA9ICcsJyArIG9wdGlvbnMuZmllbGRQbHVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0RmllbGQgPT0gJycpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0RmllbGQgPSBvcHRpb25zLmRpc3BsYXlGaWVsZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9uczogRHJvcGRvd25PcHRpb25zLCBmaWVsZFBhcmVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgKz0gJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSBmaWVsZFBhcmVudDtcclxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFEcm9wZG93bihvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QodGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oW10sIG9wdGlvbnMpLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mby5wYWdlSW5mby5wYWdlU2l6ZSA9IDE1O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRyZWVEYXRhKHJhd0RhdGEsIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcclxuICAgICAgICBpZiAocmF3RGF0YSA9PSBudWxsKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3QgZnVuY0RlUXV5ID0gKHJlc3VsdCwgZGF0YXMsIHByZWZpeCwgbGV2ZWwpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbVBhcmVudCA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhc1tpXVtmaWVsZFBhcmVudF0gPT0gaXRlbVBhcmVudFtvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW1dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNbaV0uX3ByZWZpeCA9IGAke3ByZWZpeH0gYDtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc1tpXS5faW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzW2ldLl9sZXZlbCA9IGxldmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRhdGFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBmdW5jRGVRdXkocmVzdWx0LCBkYXRhcywgcHJlZml4ICsgJy0tLScsIGxldmVsICsgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocmF3RGF0YVtpXVtmaWVsZFBhcmVudF0gPT0gdmFsdWVQYXJlbnRSb290KSB7XHJcbiAgICAgICAgICAgICAgICByYXdEYXRhW2ldLl9wcmVmaXggPSAnJztcclxuICAgICAgICAgICAgICAgIHJhd0RhdGFbaV0uX2luZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHJhd0RhdGFbaV0uX2xldmVsID0gMTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJhd0RhdGFbaV0pO1xyXG4gICAgICAgICAgICAgICAgZnVuY0RlUXV5KHJlc3VsdCwgcmF3RGF0YSwgJ3wtLS0nLCAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhRHJvcGRvd24oZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnNUcmVlKG9wdGlvbnMsIGZpZWxkUGFyZW50KTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QodGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oW10sIG9wdGlvbnMpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZ2V0VHJlZURhdGEocmVzLmRhdGEsIGZpZWxkUGFyZW50LCB2YWx1ZVBhcmVudFJvb3QsIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9ucywgZmllbGRQYXJlbnQpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyaWRJbmZvID0gdGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVycywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8ucGFnZUluZm8ucGFnZVNpemUgPSAxNTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZ2V0VHJlZURhdGEocmVzLmRhdGEsIGZpZWxkUGFyZW50LCB2YWx1ZVBhcmVudFJvb3QsIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsKGlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbFdpdGhQZXJtaXNzaW9uKGlkOiBhbnksIHBpZDogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBpZiAocGlkID09IG51bGwpIHtcclxuICAgICAgICAgICAgcGlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZXRhaWxXaXRoUGVybWlzc2lvbi8ke2lkfT9waWQ9JHtwaWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsQnlQaWQocGlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZXRhaWxXaXRoQnlQaWQvJHtwaWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlJbnN0YW5jZUlkKGluc3RhbmNlSWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJ5SW5zdGFjZUlkLyR7aW5zdGFuY2VJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxCeUNvZGUoY29kZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlDb2RlLyR7Y29kZX1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLCBzb3J0czogU29ydFtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3RoaXMuYXBpR2V0RGV0YWlsQnlGaWx0ZXJ9YDtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICBzb3J0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdERldGFpbEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10sIHNvcnRzOiBTb3J0W10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldExhc3RCeUZpbHRlcmA7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgc29ydHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFdvcmtmbG93U2V0dGluZ0J5Q29kZSh3b3JrZmxvd0NvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IChhd2FpdCB0aGlzLmdldERldGFpbEJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmVxdWFsLCB3b3JrZmxvd0NvZGUpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICApKS5kYXRhO1xyXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QganNvblNjaGVtYSA9IDxhbnk+d29ya2Zsb3dTZXR0aW5nWydkYXRhJ107XHJcbiAgICAgICAgd29ya2Zsb3dTZXR0aW5nLmRhdGEgPSBKU09OLnBhcnNlKGpzb25TY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSB3b3JrZmxvd1NldHRpbmcuZGF0YTtcclxuICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcclxuICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxBc3luYygpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBc3luY2A7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3QoaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmkgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfSR7cGx1c1VybH1gIDogdGhpcy5zZXJ2aWNlVXJpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmksIGl0ZW0pXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXQoaWQ6IHN0cmluZywgaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfSR7cGx1c1VybH1gIDogYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZShpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNYW55KGxzdElkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVNYW55QXN5bmMvJHtsc3RJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0R2V0KGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWdub3JlQ2xpZW50Q2FjaGUoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJyB9KSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgb3B0aW9ucylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFBvc3QoYXBpVXJsLCBkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFB1dChhcGlVcmwsIGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHREZWxldGUoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRFbnRpdHlNZXRhZGF0YWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUVudGl0eU1ldGFkYXRhKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9TYXZlRW50aXR5TWV0YWRhdGFgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VNZXRhZGF0YVN0YXR1cyhpZDogbnVtYmVyLCBtZXRhZGF0YVR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vY2hhbmdlTWV0YWRhdGFTdGF0dXM/aWQ9JHtpZH0mbWV0YWRhdGFTdGF0dXNUeXBlPSR7bWV0YWRhdGFUeXBlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCB7fSkucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cyhpZDogbnVtYmVyLCBtZXRhZGF0YVR5cGU6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9zYXZlQW5kQ2hhbmdlTWV0YWRhdGFTdGF0dXM/aWQ9JHtpZH0mbWV0YWRhdGFTdGF0dXNUeXBlPSR7bWV0YWRhdGFUeXBlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW50aXR5UGVybWlzc2lvbigpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRFbnRpdHlQZXJtaXNzaW9uYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRW50aXR5UGVybWlzc2lvbihkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eVBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVFbnRpdHlQZXJtaXNzaW9uKGlkOiBzdHJpbmcsIGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0RW50aXR5UGVybWlzc2lvbi8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUVudGl0eVBlcm1pc3Npb24oaWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZUVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRXZkhpc3RvcnlCeUVudGl0eUl0ZW0oaWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFdmSGlzdG9yeUJ5RW50aXR5SXRlbS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpY1N0YXR1c05ob21UcmFuZ1RoYWkoc3RhdHVzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGljU3RhdHVzTmhvbVRyYW5nVGhhaWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7XHJcbiAgICAgICAgICAgIGxpc3RTdHJpbmdWYWx1ZTogc3RhdHVzZXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVByb2Nlc3NXb3JrZmxvdyhpZDogbnVtYmVyLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVmFsaWRhdGVQcm9jZXNzV0YvJHtpZH0vJHthY3Rpb25Db2RlfWAsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NXb3JrZmxvdyhpZDogbnVtYmVyLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUHJvY2Vzc1dvcmtmbG93LyR7aWR9LyR7YWN0aW9uQ29kZX1gLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySW5Qcm9jZXNzRm9ybSh3b3JrZmxvd0NvZGU6IHN0cmluZywgc3RhdGVDb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFVzZXJJblByb2Nlc3NGb3JtQmFzZS8ke3dvcmtmbG93Q29kZX0vJHtzdGF0ZUNvZGV9LyR7YWN0aW9uQ29kZX0vJHtpdGVtSWR9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGNvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbW1vblNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IsIGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgICAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcclxuICAgICAgICB9KTtcclxuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ18nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1dFdpdGhQbHVzVXJsKGlkOiBzdHJpbmcsIGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH0vJHtwbHVzVXJsfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJ5RmllbGQoZmllbGQ6IHN0cmluZywgYXJyVmFsdWUsIGdldEZpZWxkcyA9ICcnLCBzb3J0RmllbGQgPSBudWxsLCBzb3J0RGlyID0gbnVsbCk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBhcnJWYWx1ZSA9IChhcnJWYWx1ZSB8fCBbXSkuZmlsdGVyKCh2YWwsIGluZCwgYXJyKSA9PiAodmFsID09PSAwIHx8IHZhbCkgJiYgYXJyLmluZGV4T2YodmFsKSA9PT0gaW5kKTtcclxuXHJcbiAgICAgICAgaWYgKCFhcnJWYWx1ZSB8fCAhYXJyVmFsdWUubGVuZ3RoKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGFyckZpbHRlciA9IFtuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5pbixcclxuICAgICAgICAgICAgdmFsdWU6IGFyclZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICB9KV07XHJcblxyXG4gICAgICAgIGNvbnN0IGFyclNvcnQgPSBbXTtcclxuICAgICAgICBpZiAoc29ydEZpZWxkKSB7XHJcbiAgICAgICAgICAgIGFyclNvcnQucHVzaChuZXcgU29ydCh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogc29ydEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZGlyOiBzb3J0RGlyIHwgMVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcnJSZXN1bHQgPSAoYXdhaXQgdGhpcy5nZXRBbGwoYXJyRmlsdGVyLCBnZXRGaWVsZHMsIGFyclNvcnQpKS5kYXRhO1xyXG4gICAgICAgIHJldHVybiAoYXJyUmVzdWx0IHx8IFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCeUZpZWxkVG9EaWMoZmllbGQ6IHN0cmluZywgYXJyVmFsdWUsIGdldEZpZWxkcywga2V5RmllbGQgPSBudWxsLCB2YWx1ZUZpZWxkID0gbnVsbCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRCeUZpZWxkKGZpZWxkLCBhcnJWYWx1ZSwgZ2V0RmllbGRzKTtcclxuICAgICAgICBjb25zdCByc0RpYyA9IHt9O1xyXG4gICAgICAgIGlmICghYXJyUmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcnNEaWM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoa2V5RmllbGQpIHtcclxuICAgICAgICAgICAga2V5RmllbGQgPSBmaWVsZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZUZpZWxkKSB7XHJcbiAgICAgICAgICAgIGFyclJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbVt2YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhcnJSZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHJzRGljW2l0ZW1ba2V5RmllbGRdXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJzRGljO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGFUcmluaEt5KGl0ZW06IGFueSwgcm93RGF0YT86IGFueSk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9QZGYoaWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRUb1BkZi8ke2lkfWAsIHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IGNvbnRlbnRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFdvcmtmbG93KGlkOiBzdHJpbmcsIHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9TdGFydFdvcmtmbG93QmFzZS8ke3dvcmtmbG93Q29kZX0vJHtpZH1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aW9uQWxsb3coaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWN0aW9uQWxsb3cvJHtpZH1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aW9uQWxsb3dJblN0YXJ0KHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBY3Rpb25BbGxvd0luU3RhcnQvJHt3b3JrZmxvd0NvZGV9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVN0YXRlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xyXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5KSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudFZpZXdJZHMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlWaWV3SWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVN0YXRlQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNob1lLaWVuKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hvWUtpZW5CYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGVybWlzc2lvblNoYXJlZEJ5SXRlbUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uU2hhcmVkQnlJdGVtSWRzYCwge1xyXG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaGFyZWRLZXkoZGF0YTogTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFNoYXJlZEtleUl0ZW1CYXNlYCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTGlua1NoYXJpbmcoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTGlua1NoYXJpbmdgLCB7XHJcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGlkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvbGxiYWNrKHJvd0RhdGEsIGxzdE9iamVjdE5hbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2UvJHtyb3dEYXRhLl9fd29ya2Zsb3dDb2RlfS8ke3Jvd0RhdGEuaWR9YCwge1xyXG4gICAgICAgICAgICBMaXN0U3RyaW5nVmFsdWU6IGxzdE9iamVjdE5hbWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByb2xsYmFja0J5SGlzdG9yeShpdGVtSWQ6IHN0cmluZywgaWRIaXN0b3J5OiBzdHJpbmcsIGxzdE9iamVjdE5hbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2VCeUhpc3RvcnkvJHtpdGVtSWR9LyR7aWRIaXN0b3J5fWAsIHtcclxuICAgICAgICAgICAgTGlzdFN0cmluZ1ZhbHVlOiBsc3RPYmplY3ROYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb2xsYmFjayBxdXkgdHLDrG5oIHbhu4EgdHLhuqFuZyB0aMOhaSB0csaw4bubY1xyXG4gICAgICogQHBhcmFtIGlkIGlkIGPhu6dhIGLhuqNuIGdoaVxyXG4gICAgICovXHJcbiAgICByb2xsYmFja1dvcmtmbG93KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrV29ya2Zsb3cvJHtpZH1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdHLhuqFuZyB0aMOhaSB3b3JrZmxvdyBjb3JlIHNhbmcgxJHDoyBkdXnhu4d0IHF1eeG6v3QgxJHhu4tuaFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYUR1eWV0UXV5ZXREaW5oKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZURhRHV5ZXRRdXlldERpbmgvJHtpZH1gLCB7fSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
674
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLFVBQVUsR0FBRyxpRkFBaUYsQ0FBQztBQUNyRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFaEMsTUFBTSxPQUFnQixXQUFXO0lBcUI3QixZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLFVBQWtCO1FBbkJ0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixjQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IseUJBQW9CLEdBQUcs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QixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8sIFNvcnQgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XHJcblxyXG5cclxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcclxuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlU2VydmljZSB7XHJcbiAgICBfaHR0cDogSHR0cENsaWVudDtcclxuICAgIF9pbmplY3RvcjogSW5qZWN0b3I7XHJcbiAgICBfc2lnbmFsclNlcnZpY2VQcml2YXRlOiBTaWduYWxSU2VydmljZTtcclxuXHJcbiAgICBzZXJ2aWNlVXJpID0gJyc7XHJcbiAgICBlbmRQb2ludCA9ICcnO1xyXG4gICAgc2VydmljZUNvZGUgPSAnJztcclxuICAgIGVudGl0eU5hbWUgPSAnJztcclxuICAgIG9iamVjdE5hbWUgPSAnJztcclxuICAgIHVzZVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICBhcGlHZXREYXRhID0gJ0dldERhdGEnO1xyXG4gICAgYXBpR2V0QWxsID0gJ0dldEFsbEJ5RmlsdGVyJztcclxuICAgIGFwaUdldERldGFpbEJ5RmlsdGVyID0gJ0dldEJ5RmlsdGVyJztcclxuXHJcbiAgICByZWFkb25seSBSRVRSWV9DT1VOVDogbnVtYmVyID0gMDtcclxuICAgIHJlYWRvbmx5IFJFUExBWV9DT1VOVDogbnVtYmVyID0gMTtcclxuICAgIHJlYWRvbmx5IExJTUlUX0RFRkFVTFQ6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHNlcnZpY2VVcmk6IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5faHR0cCA9IGh0dHA7XHJcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlID0gaW5qZWN0b3IuZ2V0KFNpZ25hbFJTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXJyZW50U2VydmljZVVyaShrZXk6IHN0cmluZykge1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleVdvcmtmbG93U2V0dGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5lbnRpdHlOYW1lfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVTaWduYWxSKGNhbGxCYWNrKSB7XHJcbiAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICAvLyBC4bqvdCDEkeG6p3UgY2jhuqF5XHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnN0YXJ0KCdDb21tb25IdWInLCB0b3BpYywgKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmUgY8OhYyB0b3BpYyDEkcOjIGzhuq9uZyBuZ2hlIHRyxrDhu5tjIMSRw7NcclxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIHRvcGljKTtcclxuICAgICAgICAgICAgY2FsbEJhY2sobWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRvcGljO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW5TdWJzY3JpYmVTaWduYWxSKGtleSkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS51blN1YnNjcmliZVZpZXdDb2RlKCdDb21tb25IdWInLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRHZXRTaWduYWxSKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwaVVybC5pbmRleE9mKCc/JykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgX2tleVNpZ25hbHI9JHt0b3BpY31gO1xyXG4gICAgICAgICAgICB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVTaWduYWxSKHRvcGljKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRQb3N0U2lnbmFsUihhcGlVcmwsIGRhdGE6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVzLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYD9gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGAmYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2FjaGVSZXNwb25zZShrZXk6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQmFzZUdldENhY2hlSW5mby8ke2tleX1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEdyaWRJbmZvKHVybDogc3RyaW5nLCBncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKCFncmlkSW5mbykgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oKTtcclxuICAgICAgICBpZiAoZ3JpZEluZm8uZmllbGRzICYmIGdyaWRJbmZvLmZpZWxkcy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gZ3JpZEluZm8uZmllbGRzLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3VybH1gLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlHcmlkUmVxdWVzdFdpdGhCb2R5T2xkKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0RGF0YTtcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGdyaWRJbmZvLmZpbHRlcnMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyLmZpbHRlcnMgJiYgZmlsdGVyLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyLmZpbHRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMw6AgdmFsdWUga2nhu4N1IGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyVmFsdWUuaW5kZXhPZignLScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGdldFN0cmluZ0RhdGVWTihkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHN0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2jhu4kgZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG114buRbiBn4butaSByZXF1ZXN0IMSR4bq/biBjdXN0b20gcm91dGUgR2V0RGF0YS97cGx1c1VybH1cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YUN1c3RvbVJvdXRlKHBsdXNVcmw6IHN0cmluZywgZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBhZ2VTaXplOiBudW1iZXIgPSAxLCBwYWdlOiBudW1iZXIgPSAxKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc29ydHMsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBwbHVzVXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0cyxcclxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpIHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0V4aXN0YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChhcGlVcmwsIGZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrRHVwbGljYXRlZEJ5RmllbGQoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgaWQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoaWQpXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgc29ydHM6IFtdLFxyXG4gICAgICAgICAgICBmaWVsZHM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN0ckZpZWxkID0gYCR7b3B0aW9ucy52YWx1ZUZpZWxkfSR7b3B0aW9ucy5kaXNwbGF5RmllbGQgPT0gb3B0aW9ucy52YWx1ZUZpZWxkID8gJycgOiAnLCcgKyBvcHRpb25zLmRpc3BsYXlGaWVsZH0ke29wdGlvbnMuZmllbGRQbHVzfWA7XHJcbiAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChzdHJGaWVsZC5zcGxpdCgnLCcpLCBbXSkudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0cyAhPSBudWxsICYmIG9wdGlvbnMuc29ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cyA9IFsuLi5vcHRpb25zLnNvcnRzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkICE9IG51bGwgJiYgb3B0aW9ucy5zb3J0RmllbGQgIT0gJycpIHtcclxuXHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogb3B0aW9ucy5zb3J0RmllbGQsIGRpcjogb3B0aW9ucy5zb3J0RGlyIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCA9PSAnJykge1xyXG4gICAgICAgICAgICBvcHRpb25zLnNvcnRGaWVsZCA9IG9wdGlvbnMuZGlzcGxheUZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMsIGZpZWxkUGFyZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMuZmllbGRQbHVzICs9IGZpZWxkUGFyZW50O1xyXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YURyb3Bkb3duKG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdCh0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihbXSwgb3B0aW9ucyksIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLnBhZ2VJbmZvLnBhZ2VTaXplID0gMTU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VHJlZURhdGEocmF3RGF0YSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIsIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCBmdW5jRGVRdXkgPSAocmVzdWx0LCBkYXRhcywgcHJlZml4LCBsZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtUGFyZW50ID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFzW2ldW2ZpZWxkUGFyZW50XSA9PSBpdGVtUGFyZW50W29wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc1tpXS5fcHJlZml4ID0gYCR7cHJlZml4fSBgO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzW2ldLl9pbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNbaV0uX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIGRhdGFzLCBwcmVmaXggKyAnLS0tJywgbGV2ZWwgKyAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChyYXdEYXRhW2ldW2ZpZWxkUGFyZW50XSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIHJhd0RhdGFbaV0uX3ByZWZpeCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVtpXS5faW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVtpXS5fbGV2ZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmF3RGF0YVtpXSk7XHJcbiAgICAgICAgICAgICAgICBmdW5jRGVRdXkocmVzdWx0LCByYXdEYXRhLCAnfC0tLScsIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bihmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9ucywgZmllbGRQYXJlbnQpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdCh0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihbXSwgb3B0aW9ucykpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zLCBmaWVsZFBhcmVudCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mby5wYWdlSW5mby5wYWdlU2l6ZSA9IDE1O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFRyZWVEYXRhKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWwoaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWQ6IGFueSwgcGlkOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmIChwaWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhQZXJtaXNzaW9uLyR7aWR9P3BpZD0ke3BpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxCeVBpZChwaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhCeVBpZC8ke3BpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCeUluc3RhbmNlSWQoaW5zdGFuY2VJZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlJbnN0YWNlSWQvJHtpbnN0YW5jZUlkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUNvZGUvJHtjb2RlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10sIHNvcnRzOiBTb3J0W10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREZXRhaWxCeUZpbHRlcn1gO1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHNvcnRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0TGFzdEJ5RmlsdGVyYDtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICBzb3J0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dTZXR0aW5nQnlDb2RlKHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gKGF3YWl0IHRoaXMuZ2V0RGV0YWlsQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuZXF1YWwsIHdvcmtmbG93Q29kZSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZyA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBqc29uU2NoZW1hID0gPGFueT53b3JrZmxvd1NldHRpbmdbJ2RhdGEnXTtcclxuICAgICAgICB3b3JrZmxvd1NldHRpbmcuZGF0YSA9IEpTT04ucGFyc2UoanNvblNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IHdvcmtmbG93U2V0dGluZy5kYXRhO1xyXG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gd29ya2Zsb3dTZXR0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEFzeW5jKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFzeW5jYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdChpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVyaSA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9JHtwbHVzVXJsfWAgOiB0aGlzLnNlcnZpY2VVcmk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVyaSwgaXRlbSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1dChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9JHtwbHVzVXJsfWAgOiBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZU1hbnkobHN0SWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZU1hbnlBc3luYy8ke2xzdElkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRHZXQoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJZ25vcmVDbGllbnRDYWNoZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UG9zdChhcGlVcmwsIGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UHV0KGFwaVVybCwgZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdERlbGV0ZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eU1ldGFkYXRhYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRW50aXR5TWV0YWRhdGEoZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NhdmVFbnRpdHlNZXRhZGF0YWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9jaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIHt9KS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFuZENoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3NhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbnRpdHlQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eVBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFbnRpdHlQZXJtaXNzaW9uKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9TYXZlRW50aXR5UGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUVudGl0eVBlcm1pc3Npb24oaWQ6IHN0cmluZywgaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRFbnRpdHlQZXJtaXNzaW9uLyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRW50aXR5UGVybWlzc2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlRW50aXR5UGVybWlzc2lvbi8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdmSGlzdG9yeUJ5RW50aXR5SXRlbShpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtLyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGljU3RhdHVzTmhvbVRyYW5nVGhhaShzdGF0dXNlczogc3RyaW5nW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREaWNTdGF0dXNOaG9tVHJhbmdUaGFpYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHtcclxuICAgICAgICAgICAgbGlzdFN0cmluZ1ZhbHVlOiBzdGF0dXNlc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9WYWxpZGF0ZVByb2Nlc3NXRi8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Qcm9jZXNzV29ya2Zsb3cvJHtpZH0vJHthY3Rpb25Db2RlfWAsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJblByb2Nlc3NGb3JtKHdvcmtmbG93Q29kZTogc3RyaW5nLCBzdGF0ZUNvZGU6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0VXNlckluUHJvY2Vzc0Zvcm1CYXNlLyR7d29ya2Zsb3dDb2RlfS8ke3N0YXRlQ29kZX0vJHthY3Rpb25Db2RlfS8ke2l0ZW1JZH1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICByZXR1cm4gY29tbW9uU2VydmljZS5oYW5kbGVFcnJvcihlcnJvciwgaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICAgICAgdHlwZTogRVhDRUxfVFlQRVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnXycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIEVYQ0VMX0VYVEVOU0lPTik7XHJcbiAgICB9XHJcblxyXG4gICAgcHV0V2l0aFBsdXNVcmwoaWQ6IHN0cmluZywgaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfS8ke3BsdXNVcmx9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QnlGaWVsZChmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzID0gJycsIHNvcnRGaWVsZCA9IG51bGwsIHNvcnREaXIgPSBudWxsKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGFyclZhbHVlID0gKGFyclZhbHVlIHx8IFtdKS5maWx0ZXIoKHZhbCwgaW5kLCBhcnIpID0+ICh2YWwgPT09IDAgfHwgdmFsKSAmJiBhcnIuaW5kZXhPZih2YWwpID09PSBpbmQpO1xyXG5cclxuICAgICAgICBpZiAoIWFyclZhbHVlIHx8ICFhcnJWYWx1ZS5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyRmlsdGVyID0gW25ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICAgIH0pXTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyU29ydCA9IFtdO1xyXG4gICAgICAgIGlmIChzb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgYXJyU29ydC5wdXNoKG5ldyBTb3J0KHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXHJcbiAgICAgICAgICAgICAgICBkaXI6IHNvcnREaXIgfCAxXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyclJlc3VsdCA9IChhd2FpdCB0aGlzLmdldEFsbChhcnJGaWx0ZXIsIGdldEZpZWxkcywgYXJyU29ydCkpLmRhdGE7XHJcbiAgICAgICAgcmV0dXJuIChhcnJSZXN1bHQgfHwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJ5RmllbGRUb0RpYyhmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzLCBrZXlGaWVsZCA9IG51bGwsIHZhbHVlRmllbGQgPSBudWxsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBhcnJSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJ5RmllbGQoZmllbGQsIGFyclZhbHVlLCBnZXRGaWVsZHMpO1xyXG4gICAgICAgIGNvbnN0IHJzRGljID0ge307XHJcbiAgICAgICAgaWYgKCFhcnJSZXN1bHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByc0RpYztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlGaWVsZCkge1xyXG4gICAgICAgICAgICBrZXlGaWVsZCA9IGZpZWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlRmllbGQpIHtcclxuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICByc0RpY1tpdGVtW2tleUZpZWxkXV0gPSBpdGVtW3ZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFyclJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcnNEaWM7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcclxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YVRyaW5oS3koaXRlbTogYW55LCByb3dEYXRhPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb1BkZihpZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydFRvUGRmLyR7aWR9YCwge1xyXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogY29udGVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0V29ya2Zsb3coaWQ6IHN0cmluZywgd29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1N0YXJ0V29ya2Zsb3dCYXNlLyR7d29ya2Zsb3dDb2RlfS8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3Rpb25BbGxvdyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBY3Rpb25BbGxvdy8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3Rpb25BbGxvd0luU3RhcnQod29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93SW5TdGFydC8ke3dvcmtmbG93Q29kZX1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlU3RhdGUoaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaUlkcyA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaVZpZXdJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRWaWV3SWRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hhbmdlU3RhdGVCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hvWUtpZW4oaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaG9ZS2llbkJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uU2hhcmVkQnlJdGVtSWRzKGlkczogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHNgLCB7XHJcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGlkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNoYXJlZEtleShkYXRhOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2hhcmVkS2V5SXRlbUJhc2VgLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMaW5rU2hhcmluZyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVMaW5rU2hhcmluZ2AsIHtcclxuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogaWRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcm9sbGJhY2socm93RGF0YSwgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZS8ke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9LyR7cm93RGF0YS5pZH1gLCB7XHJcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvbGxiYWNrQnlIaXN0b3J5KGl0ZW1JZDogc3RyaW5nLCBpZEhpc3Rvcnk6IHN0cmluZywgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZUJ5SGlzdG9yeS8ke2l0ZW1JZH0vJHtpZEhpc3Rvcnl9YCwge1xyXG4gICAgICAgICAgICBMaXN0U3RyaW5nVmFsdWU6IGxzdE9iamVjdE5hbWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvbGxiYWNrIHF1eSB0csOsbmggduG7gSB0cuG6oW5nIHRow6FpIHRyxrDhu5tjXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgY+G7p2EgYuG6o24gZ2hpXHJcbiAgICAgKi9cclxuICAgIHJvbGxiYWNrV29ya2Zsb3coaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tXb3JrZmxvdy8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0cuG6oW5nIHRow6FpIHdvcmtmbG93IGNvcmUgc2FuZyDEkcOjIGR1eeG7h3QgcXV54bq/dCDEkeG7i25oXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZURhRHV5ZXRRdXlldERpbmgoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlRGFEdXlldFF1eWV0RGluaC8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|