@hivegpt/hiveai-angular 0.0.562 → 0.0.563
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/hivegpt-hiveai-angular.umd.js +3 -1
- package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
- package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +4 -2
- package/fesm2015/hivegpt-hiveai-angular.js +3 -1
- package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
- package/lib/components/chat-drawer/chat-drawer.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -669,8 +669,10 @@ export class ChatDrawerComponent {
|
|
|
669
669
|
const userTimezone = this.timezone && String(this.timezone).trim()
|
|
670
670
|
? String(this.timezone).trim()
|
|
671
671
|
: undefined;
|
|
672
|
-
return sessions.map((
|
|
672
|
+
return sessions.map((raw) => {
|
|
673
673
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
674
|
+
// get_my_agenda returns wrapper { id, schedule, isSession }; normalize to inner schedule object
|
|
675
|
+
const s = raw && raw.schedule ? raw.schedule : raw;
|
|
674
676
|
// Support both dateTimeRange (string) and actualDateTimeRange (object with start/end)
|
|
675
677
|
const whenRaw = (_b = (_a = s.dateTimeRange) !== null && _a !== void 0 ? _a : s.actualDateTimeRange) !== null && _b !== void 0 ? _b : '';
|
|
676
678
|
const whenFormatted = this.formatSessionWhen(whenRaw, userTimezone);
|
|
@@ -3675,4 +3677,4 @@ ChatDrawerComponent.propDecorators = {
|
|
|
3675
3677
|
refreshToken: [{ type: Output }],
|
|
3676
3678
|
openSupport: [{ type: Output }]
|
|
3677
3679
|
};
|
|
3678
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENB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ZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JtYXROb3csIGZvcm1hdFRpbWVTdGFtcHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBkZXZfZW52aXJvbm1lbnQsXG4gIHByb2RfZW52aXJvbm1lbnQsXG59IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29udmVyc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU29ja2V0U2VydmljZSB9IGZyb20gJy4uL3NvY2tldC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIFNwZWVjaFNESyBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkayc7XG5pbXBvcnQgeyBCb3RzU2VydmljZSB9IGZyb20gJy4uL2JvdC5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcmtlZCBmcm9tICdtYXJrZWQnOyAvLyBJbXBvcnQgbWFya2VkXG5pbXBvcnQgeyBWb2ljZUFnZW50U2VydmljZSB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L3NlcnZpY2VzL3ZvaWNlLWFnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVm9pY2VBZ2VudE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvY29tcG9uZW50cy92b2ljZS1hZ2VudC1tb2RhbC92b2ljZS1hZ2VudC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVk9JQ0VfTU9EQUxfQ09ORklHLFxuICBWT0lDRV9NT0RBTF9DTE9TRV9DQUxMQkFDSyxcbiAgVm9pY2VNb2RhbENvbmZpZyxcbn0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcblxuZXhwb3J0IGVudW0gZUNsYXNzaWZpY2F0aW9uVHlwZSB7XG4gIExpdmUgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU2JyxcbiAgT25EZW1hbmQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU3JyxcbiAgQnJlYWtvdXQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU4Jyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlci1wYWNrYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbXlJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBteUlucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjsgLy8gUmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYVxuICBAVmlld0NoaWxkcmVuKCdjbG9zZXBsYXlncm91bmRidXR0b24nKVxuICBjbG9zZVBsYXlncm91bmRCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2RyYXdlcicpIGRyYXdlciE6IE1hdERyYXdlcjtcbiAgQFZpZXdDaGlsZCgnc291cmNlc0RyYXdlcicpIHNvdXJjZXNEcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcnNEcmF3ZXInKSBlZGl0b3JzRHJhd2VyITogTWF0RHJhd2VyO1xuICBwcml2YXRlIGJvZHlPdmVyZmxvd0NsYXNzID0gJ2JvZHktb3ZlcmZsb3ctaGlkZGVuJztcbiAgaXNDb2xsYXBzZWRUcnVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSAnSGl2ZVhHUFQnO1xuICBASW5wdXQoKSBmaXJzdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBib3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVkZW50aWFscyE6IFtdO1xuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudElkITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFVybCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgd29ya3NwYWNlVG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHMyN1Rva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpc3BsYXlBdmF0YXJVcmwgPVxuICAgICdodHRwczovL3d3dy5qb3Rmb3JtLmNvbS91cGxvYWRzL21laG1ldGthcmFrYXNsaS9mb3JtX2ZpbGVzLzE1NjQ1OTM2Njc2NzZhOGU4NWYyMzc1OC44Njk0NTUzN19pY29uLnBuZyc7XG4gIC8qKiBVc2VyIHByb2ZpbGUgaW1hZ2UgVVJMLiBGYWxscyBiYWNrIHRvIGluaXRpYWxzIChnZXRVc2VySWRJbml0aWFscygpKSBpZiBub3Qgc2V0LiAqL1xuICBASW5wdXQoKSB1c2VyQXZhdGFyVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRCZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRUZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bGxWaWV3ITogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JhZGllbnRDb2xvcnMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZ3JlZXRpbmchOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JBaSE6IHN0cmluZztcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvclVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJ1bGVzITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbmRCdXR0b25UZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDbG9zZSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRodW1ic0Rvd25NZXNzYWdlcyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSB0aHVtYnNVcE1lc3NhZ2UhOiBzdHJpbmc7XG4gIC8qKiBVc2VyJ3Mgc2VsZWN0ZWQgdGltZXpvbmUgKGUuZy4gJ0FtZXJpY2EvTmV3X1lvcmsnKTsgdXNlZCBmb3IgdGltZXN0YW1wcyBhbmQgc2Vzc2lvbiBjYXJkIHRpbWVzLiBXaGVuIG5vdCBzZXQsIHNlc3Npb24gZGF0YSBvciBsb2NhbCB0aW1lIGlzIHVzZWQuICovXG4gIEBJbnB1dCgpIHRpbWV6b25lPzogc3RyaW5nO1xuICBASW5wdXQoKSB1bmtub3duUmVzcG9uc2VzITogW107XG4gIEBJbnB1dCgpIHVzZU9wZW5BaSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcbiAgQElucHV0KCkgaXNEZXYhOiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBjaGF0IGF1dG8tc2Nyb2xscyB0byBib3R0b20gd2hlbiBuZXcgY29udGVudCBpcyBhZGRlZC4gRGVmYXVsdDogZmFsc2UgKG5vIGF1dG8gc2Nyb2xsKS4gKi9cbiAgQElucHV0KCkgYXV0b1Njcm9sbE9uTmV3TWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgQVBJIGJhc2UgVVJMIChlLmcuIG5ncm9rIHR1bm5lbCkuIFdoZW4gc2V0LCBhbGwgY2hhdC92b2ljZSByZXF1ZXN0cyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGRldi9wcm9kIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBDb25uZWN0aW9ucyBsaXN0IGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdENvbm5lY3Rpb25zTGlzdCkuIEVhY2ggaXRlbSBoYXMgdXNlcklkLiBXaGVuIHNldCwgdXNlZCBmb3IgQ29ubmVjdC9SZXF1ZXN0IFNlbnQvRGlzY29ubmVjdCBidXR0b24gc3RhdGUuICovXG4gIEBJbnB1dCgpIGNvbm5lY3Rpb25zTGlzdDogYW55W10gPSBbXTtcbiAgLyoqIFBlbmRpbmcgc2VudCByZXF1ZXN0IHVzZXIgSURzIGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdFBlbmRpbmdDb25uZWN0aW9uc1NlbnRMaXN0KS4gV2hlbiBzZXQsIHVzZWQgZm9yIFJlcXVlc3QgU2VudCBzdGF0ZS4gKi9cbiAgQElucHV0KCkgcGVuZGluZ1NlbnRSZXF1ZXN0VXNlcklkczogYW55W10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBDb25uZWN0IC8gUmVxdWVzdCBTZW50IC8gRGlzY29ubmVjdCBidXR0b25zIG9uIGF0dGVuZGVlIGNhcmRzIChlLmcuIGZyb20gdXNlclNldHRpbmdzPy5pc0Nvbm5lY3Rpb25zRW5hYmxlZCkuICovXG4gIEBJbnB1dCgpIGlzQ29ubmVjdGlvbnNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoVU4vQ09QIGV2ZW50cyk6IHNlc3Npb24gY2FyZCBzaG93cyBcIlNlc3Npb24gdHlwZVwiIGxhYmVsIGFuZCBKb2luL1dhdGNoIGJ1dHRvbnMuIFdoZW4gZmFsc2U6IHNob3dzIFwiTWVldGluZyB0eXBlXCIgbGFiZWwgYW5kIHNpbmdsZSBQbGF5IGJ1dHRvbiAoc2FtZSBhcyB0ZW1wbGF0ZTIpLiAqL1xuICBASW5wdXQoKSBpc1VuRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhZ2FpbkJ1dHRvbkNvbG9yITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFnYWluQnV0dG9uVGV4dENvbG9yITogc3RyaW5nW107XG4gIEBPdXRwdXQoKSBmZWVkYmFja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvcGVuUGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBKb2luL1dhdGNoIGJ1dCBhY3Rpb24gaXMgbm90IHlldCBhdmFpbGFibGUgKGUuZy4gc2Vzc2lvbiBub3Qgc3RhcnRlZCkuIEhvc3QgY2FuIHNob3cgdG9hc3RlciB3aXRoIHRoZSBtZXNzYWdlLiAqL1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbkJsb2NrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlQm90ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb25uZWN0V2l0aFVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IHByb2ZpbGUgb24gYSBzcGVha2VyIGNhcmQgKGdldF9ldmVudF9zcGVha2VycykuIEhvc3Qgc2hvdWxkIG9wZW4gc3BlYWtlciBkZXRhaWwgZHJhd2VyIHNhbWUgYXMgL2V2ZW50cy86aWQvc3BlYWtlcnMuICovXG4gIEBPdXRwdXQoKSB2aWV3U3BlYWtlclByb2ZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3BlYWtlcjogYW55OyBzcGVha2VyczogYW55W10gfT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IEJvb3RoIG9uIGEgc3BvbnNvci9ib290aCBjYXJkIChnZXRfZXZlbnRfc3BvbnNvcnMsIGdldF9ldmVudF9ib290aHMpLiBIb3N0IHNob3VsZCBuYXZpZ2F0ZSB0byBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86Ym9vdGhVcmwuICovXG4gIEBPdXRwdXQoKSB2aWV3Qm9vdGggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYm9vdGhJZD86IHN0cmluZzsgYm9vdGhVcmw/OiBzdHJpbmc7IHNwb25zb3I/OiBhbnkgfT4oKTtcbiAgQE91dHB1dCgpIHNjaGVkdWxlTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaFRva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuU3VwcG9ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGF1dG9nZW5LZXkgPSAnQXV0b2dlbl9lREpUdEVVLU5CMFJ0SXB6cTF3JztcbiAgYWRkVG9NeUFnZW5kYUFjdGlvbiA9ICdhZGRfdG9fbXlfYWdlbmRhJztcbiAgbXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24gPSAnbXlfdXBjb21taW5nX3Nlc3Npb24nO1xuICBjb25uZWN0T3JGb2xsb3dBY3Rpb24gPSAnY29ubmVjdF9vcl9mb2xsb3cnO1xuICBhaVJlc3BvbnNlOiBzdHJpbmcgPSAnJztcbiAgY2hhdExvZzogYW55W10gPSBbXTtcbiAgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBmZWVkYmFja0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JlZXRpbmdNc2c6IHN0cmluZyA9ICcnO1xuICBoYXNCYWNrZHJvcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0OiBzdHJpbmcgPSAnJztcbiAgbGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG1vZGU6IHN0cmluZyA9ICdvdmVyJztcbiAgcXVpY2tQcm9tcHRzOiBhbnlbXSA9IFtdO1xuICB0aHVtYnNEb3duTXNnSW5kZXggPSAwO1xuICB1c2VyTmFtZTogc3RyaW5nID0gJyc7XG4gIHNob3dTdGFydEFnYWluOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSU9TRGV2aWNlOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGZWVkQmFja0ljb25zSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0ZW1wZXJhdHVyZTogbnVtYmVyID0gMTtcbiAgLyoqIFNwZWFrZXIgY2FjaGUgYnkgc3RhZmYgaWQgKGZpbGxlZCB2aWEgZ2V0LWJ5LXN0YWZmLWlkcykuICovXG4gIHNwZWFrZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIC8qKiBQcmV2ZW50IGR1cGxpY2F0ZSBzcGVha2VyIGZldGNoZXMgYWNyb3NzIG1lc3NhZ2VzLiAqL1xuICBwcml2YXRlIHJlcXVlc3RlZFNwZWFrZXJJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZW52aXJvbm1lbnQ6IHtcbiAgICBVU0VSU19BUEk7XG4gICAgQkFTRV9VUkw7XG4gICAgQUdFTlRTX0FQSTtcbiAgfTtcbiAgcGVuZGluZ1JlcXVlc3RzOiBhbnk7XG4gIG15Q29ubmVjdGlvbnM6IGFueTtcbiAgY29udmVyc2F0aW9uS2V5OiBzdHJpbmc7XG4gIGNvblNlc3Npb25LZXk6IHN0cmluZyA9ICcnO1xuICBpc0ZldGNoRGF0YUZvcjogYm9vbGVhbjtcbiAgaXM0MDE6IGJvb2xlYW47XG4gIG1zZzogYW55O1xuICBjaGF0OiBhbnk7XG4gIGlzV29ya2Zsb3dPcGVuOiBib29sZWFuO1xuICBvcmdXb3JrZmxvd3M6IGFueTtcbiAgb3BlbldvcmtmbG93SW5wdXQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkV29ya2Zsb3c6IGFueTtcbiAgd29ya2Zsb3dGb3JtOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb246IHN0cmluZyA9ICcnO1xuICBleGVjdXRpbmdXb3JrZmxvdzogYm9vbGVhbjtcbiAgd29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcbiAgY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuXG4gIHNwZWVjaENvbmZpZzogU3BlZWNoU0RLLlNwZWVjaENvbmZpZztcbiAgcmVjb2duaXplcjogU3BlZWNoU0RLLlNwZWVjaFJlY29nbml6ZXI7XG4gIHJlY29nbml6ZWRUZXh0OiBzdHJpbmcgPSAnJztcbiAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmcgPSAnJztcbiAgcmVnaW9uOiBzdHJpbmcgPSAnd2VzdGV1cm9wZSc7IC8vIFNldCB5b3VyIEF6dXJlIHJlZ2lvbiBoZXJlXG4gIGlzUmVjb3JkaW5nOiBib29sZWFuO1xuICBpc1ZvaWNlTW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdm9pY2VNb2RhbE92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYm90U2VydmljZTogQm90c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzb2NrZXRTZXJ2aWNlOiBTb2NrZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udmVyc2F0aW9uU2VydmljZTogQ29udmVyc2F0aW9uU2VydmljZSwgLy8gcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdm9pY2VBZ2VudFNlcnZpY2U6IFZvaWNlQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHRoaXMuY2hhdE1haW4gPSBuZXcgRWxlbWVudFJlZihudWxsKTtcblxuICAgIC8vIGlmICh0aGlzLnBsYXRmb3JtLklPUykge1xuICAgIC8vICAgdGhpcy5pc0lPU0RldmljZSA9IHRydWU7XG4gICAgLy8gfVxuICB9XG4gIGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGtleSk7XG4gIH1cblxuICAvKiogVGltZSBzaG93biBuZXh0IHRvIFwiQXNzaXN0YW50XCIgd2hlbiBpbiB0aGlua2luZy9sb2FkaW5nIHN0YXRlLiAqL1xuICBnZXRMb2FkaW5nVGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtYXROb3codGhpcy50aW1lem9uZSk7XG4gIH1cblxuICAvKiogVXNlciBpbml0aWFscyBmb3IgYXZhdGFyIGZhbGxiYWNrIChlLmcuIFwiSkRcIiBmcm9tIGZpcnN0TmFtZSArIGxhc3ROYW1lKS4gKi9cbiAgZ2V0VXNlcklkSW5pdGlhbHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaXJzdCA9ICh0aGlzLmZpcnN0TmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGxhc3QgPSAodGhpcy5sYXN0TmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmIChmaXJzdCAmJiBsYXN0KSByZXR1cm4gKGZpcnN0WzBdICsgbGFzdFswXSkudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoZmlyc3QpIHJldHVybiBmaXJzdC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChsYXN0KSByZXR1cm4gbGFzdC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiAnVSc7XG4gIH1cblxuICAvKiogQXR0ZW5kZWUgaW5pdGlhbHMgZm9yIGNhcmQgd2hlbiBubyBwaG90byAoZS5nLiBcIlZpamF5IFBhbGl3YWxcIiAtPiBcIlZQXCIsIFwiSmltXCIgLT4gXCJKXCIpLiAqL1xuICBnZXRBdHRlbmRlZUluaXRpYWxzKG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiAnPyc7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDIpXG4gICAgICByZXR1cm4gKHBhcnRzWzBdWzBdICsgcGFydHNbcGFydHMubGVuZ3RoIC0gMV1bMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHBhcnRzWzBdLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuICc/JztcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZXZlbnRJZCBjaGFuZ2VzIHRvIHVwZGF0ZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4gICAgaWYgKGNoYW5nZXMuZXZlbnRJZCAmJiBjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKGNoYW5nZXMuZXZlbnRJZC5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnMyN1Rva2VuKSB7XG4gICAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5zMjdUb2tlbi5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuczI3VG9rZW4gPSBjaGFuZ2VzLnMyN1Rva2VuLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICBjb25zb2xlLmxvZygnaXNGZXRjaERhdGFGb3I6ICcsIHRoaXMuaXNGZXRjaERhdGFGb3IpO1xuICAgICAgICBjb25zb2xlLmxvZygnbXNnOiAnLCB0aGlzLm1zZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGF0OiAnLCB0aGlzLmNoYXQpO1xuICAgICAgICBpZiAodGhpcy5pczQwMSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRmV0Y2hEYXRhRm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YUZvcih0aGlzLm1zZywgdGhpcy5jaGF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEodGhpcy5tc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERvIE5PVCBjYWxsIGluaXRpYWxpemVTb2NrZXQoKSBoZXJlLiBTb2NrZXQuSU8gaXMgZm9yIGNoYXQgb25seTsgd2UgZGVmZXJcbiAgICAvLyB1bnRpbCB0aGUgdXNlciBhY3R1YWxseSB1c2VzIGNoYXQgKHNlbmQgbWVzc2FnZSBvciBzdGFydCBuZXcgY29udmVyc2F0aW9uKVxuICAgIC8vIHNvIHRoYXQgdm9pY2Utb25seSB1c2FnZSBuZXZlciB0cmlnZ2VycyBTb2NrZXQuSU8gKGF2b2lkcyB2Mi92MyBtaXNtYXRjaCBlcnJvcikuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5vcmdJZCAmJlxuICAgICAgY2hhbmdlcy5vcmdJZC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5vcmdJZC5wcmV2aW91c1ZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5iYXNlVXJsICYmIHRoaXMuZW52aXJvbm1lbnQpIHtcbiAgICAgIHRoaXMuYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hlbiBiYXNlVXJsIGlucHV0IGlzIHNldCwgb3ZlcnJpZGUgZW52aXJvbm1lbnQuQkFTRV9VUkwgc28gYWxsIGNoYXQvdm9pY2Ugc2VydmljZXMgdXNlIGl0IChzdXBwb3J0cyBuZ3JvayBldGMuKS4gKi9cbiAgcHJpdmF0ZSBhcHBseUJhc2VVcmxPdmVycmlkZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0RW52ID0gdGhpcy5pc0RldiA/IGRldl9lbnZpcm9ubWVudCA6IHByb2RfZW52aXJvbm1lbnQ7XG4gICAgaWYgKHRoaXMuYmFzZVVybCAmJiB0eXBlb2YgdGhpcy5iYXNlVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5iYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHsgLi4uZGVmYXVsdEVudiwgQkFTRV9VUkw6IHVybCB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBkZWZhdWx0RW52O1xuICB9XG5cbiAgZG9tYWluQXV0aG9yaXR5VmFsdWU6IGFueSA9ICdwcm9kLWxpdGUnO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCB0aGUgZXZlbnRJZCBpbiB0cmFuc2xhdGlvbiBzZXJ2aWNlIHRvIGdldCB0aGUgY29ycmVjdCBsYW5ndWFnZSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIGlmICh0aGlzLmV2ZW50SWQpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldEV2ZW50SWQodGhpcy5ldmVudElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5QmFzZVVybE92ZXJyaWRlKCk7XG5cbiAgICBjb25zdCBkb21haW4gPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGhlYWRlciB2YWx1ZSBiYXNlZCBvbiB0aGUgZG9tYWluXG5cbiAgICBpZiAoZG9tYWluLmluY2x1ZGVzKCdwcmUtYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3ByZS1wcm9kLWxpdGUnO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluLmluY2x1ZGVzKCdhcHAuc29jaWFsMjcuY29tJykpIHtcbiAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUgPSAncHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnaGl2ZWdwdC5pbycpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ2hpdmVncHQnO1xuICAgIH1cblxuICAgIC8vIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKCk7XG4gICAgLy8gdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5jaGFuZ2VUZW1wZXJhdHVyZSh0aGlzLnRlbXBlcmF0dXJlKTtcbiAgICB0aGlzLmZldGNoQm90Q29uZmlnKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICB0aGlzLmZldGNoQ2hhdEhpc3RvcnkoKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubWFwQ2hhdEhpc3RvcnkocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6JywgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIC8vIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgLy8gdGhpcy5pbml0aWFsaXplU29ja2V0KCk7XG4gICAgdGhpcy5ib3RTZXJ2aWNlXG4gICAgICAuZmV0Y2hTcGVlY2hBdXRob3JpemF0aW9uVG9rZW4oXG4gICAgICAgIHRoaXMuYm90SWQsXG4gICAgICAgIHRoaXMuYXBpS2V5LFxuICAgICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodG9rZW4pID0+IHtcbiAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU3BlZWNoUmVjb2duaXplcih0b2tlbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgLyoqIFRydWUgYWZ0ZXIgU29ja2V0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZvciBjaGF0IChhdm9pZHMgY29ubmVjdGluZyBvbiB2b2ljZS1vbmx5IHVzYWdlKS4gKi9cbiAgcHJpdmF0ZSBjaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2FsbCBiZWZvcmUgY2hhdCBhY3Rpb25zIHNvIFNvY2tldC5JTyBpcyB1c2VkIG9ubHkgZm9yIGNoYXQsIG5vdCBmb3Igdm9pY2UuXG4gICAqIFZvaWNlIGFnZW50IHVzZXMgbmF0aXZlIFdlYlNvY2tldCArIERhaWx5LmpzIG9ubHk7IFNvY2tldC5JTyBtdXN0IG5vdCBydW4gZHVyaW5nIHZvaWNlIGZsb3cuXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZUNoYXRTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkIHx8ICF0aGlzLm9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldFNlcnZpY2UuY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnWUVTIElOSVQnKTtcbiAgICAgICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcblxuICAgICAgICB0aGlzLnNvY2tldFNlcnZpY2UucmVnaXN0ZXJVc2VyU3BlY2lmaWNIaXZlU29ja2V0KFxuICAgICAgICAgIHRoaXMuYm90SWQsXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgIHRoaXMub3JnSWQsXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdGVuU29ja2V0cygpO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uTmV3OiBhbnk7XG4gIHNvY2tldERhdGE6IGFueTtcblxuICAvKiogSW5pdGlhbCBudW1iZXIgb2Ygc2Vzc2lvbi9hdHRlbmRlZSBjYXJkcyBzaG93biBiZWZvcmUgXCJTaG93IFggbW9yZVwiLiAqL1xuICByZWFkb25seSBTRVNTSU9OX0NBUkRTX0lOSVRJQUwgPSA2O1xuICByZWFkb25seSBBVFRFTkRFRV9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgU1BFQUtFUl9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgU1BPTlNPUl9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUwgPSA5O1xuICAvKiogTWVzc2FnZSBpZCAtPiB0cnVlIHdoZW4gdXNlciBleHBhbmRlZCBcIlNob3cgbW9yZVwiIGZvciBzZXNzaW9ucy9hdHRlbmRlZXMuICovXG4gIGV4cGFuZGVkU2Vzc2lvbkNhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZFNwZWFrZXJDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZFNwb25zb3JDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZEJvb3RoUmVwQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gZGVzY3JpcHRpb24gZXhwYW5kZWQgKi9cbiAgZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAvKioga2V5OiBgJHttZXNzYWdlSWR9OiR7YXR0ZW5kZWVJZH1gIC0+IHRydWUgd2hlbiB2aWRlbyBpcyBwbGF5aW5nICovXG4gIGF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAvKioga2V5OiBgJHttZXNzYWdlSWR9OiR7YXR0ZW5kZWVJZH1gIC0+IHRydWUgd2hlbiB2aWRlbyBpcyBtdXRlZCAoZGVmYXVsdCB0cnVlKSAqL1xuICBhdHRlbmRlZVZpZGVvTXV0ZWRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cbiAgLyoqIFN0cmlwIEhUTUwgdGFncyB0byBwbGFpbiB0ZXh0IChlLmcuIGZvciBzcGVha2VyL2F0dGVuZGVlIGRlc2NyaXB0aW9uIGZyb20gQVBJKS4gKi9cbiAgc3RyaXBIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFodG1sIHx8IHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuICAgIGNvbnN0IHRleHQgPSBkb2MuYm9keT8udGV4dENvbnRlbnQgPz8gJyc7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgfVxuXG4gIGdldEF0dGVuZGVlRGVzY3JpcHRpb24oYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmF3ID1cbiAgICAgIGF0dGVuZGVlPy5kZXNjcmlwdGlvbiA/PyBhdHRlbmRlZT8uaW50ZXJlc3RzID8/IGF0dGVuZGVlPy5qb2JUaXRsZSA/PyAnJztcbiAgICBjb25zdCBzdHIgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHJhdy50cmltKCkgOiBTdHJpbmcocmF3ID8/ICcnKS50cmltKCk7XG4gICAgLy8gSWYgaXQgbG9va3MgbGlrZSBIVE1MLCBzdHJpcCB0YWdzIHNvIGNhcmQgc2hvd3MgcGxhaW4gdGV4dFxuICAgIGlmIChzdHIgJiYgLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHN0cikpIHJldHVybiB0aGlzLnN0cmlwSHRtbChzdHIpO1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzaG91bGRTaG93QXR0ZW5kZWVSZWFkTW9yZShhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gaGV1cmlzdGljOiBvbmx5IHNob3cgdG9nZ2xlIGZvciByZWFzb25hYmx5IGxvbmcgdGV4dFxuICAgIHJldHVybiB0aGlzLmdldEF0dGVuZGVlRGVzY3JpcHRpb24oYXR0ZW5kZWUpLmxlbmd0aCA+IDkwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRlbmRlZURlc2NLZXkoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbXNnSWQgPSBjaGF0Py5faWQ7XG4gICAgY29uc3QgYXR0ZW5kZWVJZCA9IGF0dGVuZGVlPy5pZCA/PyBhdHRlbmRlZT8uX2lkID8/IGF0dGVuZGVlPy51c2VySWQ7XG4gICAgaWYgKCFtc2dJZCB8fCAhYXR0ZW5kZWVJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke21zZ0lkfToke2F0dGVuZGVlSWR9YDtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVEZXNjcmlwdGlvbkV4cGFuZGVkKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzW2tleV07XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZURlc2NyaXB0aW9uKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSwgZXY/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHNba2V5XTtcbiAgICB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkcyA9IHtcbiAgICAgIC4uLnRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzLFxuICAgICAgW2tleV06IG5leHQsXG4gICAgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldEF0dGVuZGVlVmlkZW9VcmwoYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gYXR0ZW5kZWU/LnVzZXJWaWRlb3NNb2RlbD8udXJsO1xuICAgIHJldHVybiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHVybC50cmltKCkgOiAnJztcbiAgfVxuXG4gIGdldEF0dGVuZGVlVmlkZW9Qb3N0ZXIoYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcG9zdGVyID0gYXR0ZW5kZWU/LnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsO1xuICAgIHJldHVybiB0eXBlb2YgcG9zdGVyID09PSAnc3RyaW5nJyA/IHBvc3Rlci50cmltKCkgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBtc2dJZCA9IGNoYXQ/Ll9pZDtcbiAgICBjb25zdCBhdHRlbmRlZUlkID0gYXR0ZW5kZWU/LmlkID8/IGF0dGVuZGVlPy5faWQgPz8gYXR0ZW5kZWU/LnVzZXJJZDtcbiAgICBpZiAoIW1zZ0lkIHx8ICFhdHRlbmRlZUlkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7bXNnSWR9OiR7YXR0ZW5kZWVJZH1gO1xuICB9XG5cbiAgaXNBdHRlbmRlZVZpZGVvTXV0ZWQoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIHRydWU7XG4gICAgLy8gZGVmYXVsdCB0cnVlIChtdXRlZCkgdW5sZXNzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlXG4gICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVWaWRlb011dGVkSWRzW2tleV0gIT09IGZhbHNlO1xuICB9XG5cbiAgaXNBdHRlbmRlZVZpZGVvUGxheWluZyhjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkc1trZXldO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVWaWRlb011dGUoXG4gICAgY2hhdDogYW55LFxuICAgIGF0dGVuZGVlOiBhbnksXG4gICAgdmlkZW9FbD86IEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsLFxuICAgIGV2PzogRXZlbnQsXG4gICk6IHZvaWQge1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuaXNBdHRlbmRlZVZpZGVvTXV0ZWQoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb011dGVkSWRzID0geyAuLi50aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkcywgW2tleV06IG5leHQgfTtcbiAgICBpZiAodmlkZW9FbCkge1xuICAgICAgdmlkZW9FbC5tdXRlZCA9IG5leHQ7XG4gICAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdm9sdW1lIHRvIGJlID4wIHdoZW4gdW5tdXRpbmdcbiAgICAgIGlmICghbmV4dCAmJiAodmlkZW9FbC52b2x1bWUgPT0gbnVsbCB8fCB2aWRlb0VsLnZvbHVtZSA9PT0gMCkpIHtcbiAgICAgICAgdmlkZW9FbC52b2x1bWUgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlVmlkZW9QbGF5KFxuICAgIGNoYXQ6IGFueSxcbiAgICBhdHRlbmRlZTogYW55LFxuICAgIHZpZGVvRWw/OiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCxcbiAgICBldj86IEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmlzQXR0ZW5kZWVWaWRlb1BsYXlpbmcoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgW2tleV06IG5leHQsXG4gICAgfTtcbiAgICBpZiAodmlkZW9FbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBjb25zdCBwID0gdmlkZW9FbC5wbGF5KCk7XG4gICAgICAgICAgaWYgKHAgJiYgdHlwZW9mIChwIGFzIGFueSkuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIChwIGFzIGFueSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBJZiBwbGF5IGZhaWxzLCByZWZsZWN0IHBhdXNlZCBzdGF0ZVxuICAgICAgICAgICAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMsXG4gICAgICAgICAgICAgICAgW2tleV06IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWRlb0VsLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkF0dGVuZGVlVmlkZW9QbGF5U3RhdGUoY2hhdDogYW55LCBhdHRlbmRlZTogYW55LCBpc1BsYXlpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgaWYgKHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHNba2V5XSA9PT0gaXNQbGF5aW5nKSByZXR1cm47XG4gICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgIC4uLnRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMsXG4gICAgICBba2V5XTogaXNQbGF5aW5nLFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHNlc3Npb24gZGF0ZS90aW1lIGZvciBkaXNwbGF5LlxuICAgKiBAcGFyYW0gZGF0ZVRpbWVSYW5nZSBTZXNzaW9uIHN0YXJ0L2VuZCAob2JqZWN0IHdpdGggc3RhcnQvZW5kIG9yIHN0cmluZyB3aXRoIFwiU3RhcnQ6IC4uLiBFbmQ6IC4uLlwiKVxuICAgKiBAcGFyYW0gZGlzcGxheVRpbWVab25lIE9wdGlvbmFsIHVzZXItc2VsZWN0ZWQgdGltZXpvbmUgKGUuZy4gJ0FtZXJpY2EvTmV3X1lvcmsnKTsgd2hlbiBzZXQsIHRpbWVzIGFyZSBzaG93biBpbiB0aGlzIHpvbmUuXG4gICAqL1xuICBmb3JtYXRTZXNzaW9uV2hlbihcbiAgICBkYXRlVGltZVJhbmdlOiBzdHJpbmcgfCB7IHN0YXJ0Pzogc3RyaW5nOyBlbmQ/OiBzdHJpbmcgfSB8IG51bGwsXG4gICAgZGlzcGxheVRpbWVab25lPzogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgIGlmICghZGF0ZVRpbWVSYW5nZSkgcmV0dXJuICcnO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgZGF0ZVRpbWVSYW5nZT8uc3RhcnQgJiZcbiAgICAgIGRhdGVUaW1lUmFuZ2U/LmVuZFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2UuZW5kKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlRm9ybWF0dGVkfSB8ICR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgL1N0YXJ0OlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICApO1xuICAgIGNvbnN0IGVuZE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgIC9FbmQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICk7XG4gICAgaWYgKCFzdGFydE1hdGNoIHx8ICFlbmRNYXRjaCkgcmV0dXJuIGRhdGVUaW1lUmFuZ2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0U3RyID0gc3RhcnRNYXRjaFsxXTtcbiAgICAgIGNvbnN0IGVuZFN0ciA9IGVuZE1hdGNoWzFdO1xuICAgICAgY29uc3Qgc3RhcnREdCA9IG5ldyBEYXRlKHN0YXJ0U3RyLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIGNvbnN0IGVuZER0ID0gbmV3IERhdGUoZW5kU3RyLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXR0ZWQgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydFRpbWVTaG9ydCA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5kVGltZVNob3J0ID0gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGAke2RhdGVGb3JtYXR0ZWR9IHwgJHtzdGFydFRpbWVTaG9ydH0gLSAke2VuZFRpbWVTaG9ydH1gO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRhdGVUaW1lUmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkYXRlIGJhZGdlIChkYXkgKyBtb250aCkgZm9yIHNlc3Npb24gY2FyZCBmcm9tIGRhdGVUaW1lUmFuZ2UuXG4gICAqIEhhbmRsZXMgZGF0ZVRpbWVSYW5nZSBhcyBzdHJpbmcgKFwiU3RhcnQ6IDIwMjYtMDItMjAgMDE6MDU6MDAsIEVuZDogLi4uXCIpIG9yIG9iamVjdCB7IHN0YXJ0LCBlbmQgfS5cbiAgICogVXNlcyBkaXNwbGF5VGltZVpvbmUgb25seSB3aGVuIGl0IGlzIGEgdmFsaWQgSUFOQSBpZGVudGlmaWVyOyBvdGhlcndpc2UgZm9ybWF0cyBpbiBsb2NhbCB0aW1lLlxuICAgKi9cbiAgZ2V0U2Vzc2lvbkRhdGVCYWRnZShcbiAgICBkYXRlVGltZVJhbmdlOiBzdHJpbmcgfCB7IHN0YXJ0Pzogc3RyaW5nOyBlbmQ/OiBzdHJpbmcgfSB8IG51bGwsXG4gICAgZGlzcGxheVRpbWVab25lPzogc3RyaW5nLFxuICApOiB7IGRheTogc3RyaW5nOyBtb250aDogc3RyaW5nIH0ge1xuICAgIGlmICghZGF0ZVRpbWVSYW5nZSkgcmV0dXJuIHsgZGF5OiAnJywgbW9udGg6ICcnIH07XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdGFydER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdGFydE1hdGNoKVxuICAgICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnREdCB8fCBpc05hTihzdGFydER0LmdldFRpbWUoKSkpIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgICAgY29uc3QgbG9jYWxlT3B0cyA9IGRpc3BsYXlUaW1lWm9uZSA/IHsgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSB9IDoge307XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXkgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBkYXksIG1vbnRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZGlzcGxheVRpbWVab25lIG1heSBiZSBub24tSUFOQSAoZS5nLiBcIihVVEMtMDM6MDApIEJyYXNpbGlhXCIpOyBmb3JtYXQgd2l0aG91dCB0aW1lWm9uZVxuICAgICAgICBjb25zdCBkYXkgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IGRheTogJ251bWVyaWMnIH0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcgfSk7XG4gICAgICAgIHJldHVybiB7IGRheSwgbW9udGggfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGltZSByYW5nZSBvbmx5IChlLmcuIFwiOTowMCBBTSAtIDEwOjMwIEFNXCIpIGZvciBzZXNzaW9uIGNhcmQuXG4gICAqIEZhbGxzIGJhY2sgdG8gZm9ybWF0dGluZyB3aXRob3V0IHRpbWVab25lIHdoZW4gZGlzcGxheVRpbWVab25lIGlzIG5vdCBhIHZhbGlkIElBTkEgaWRlbnRpZmllci5cbiAgICovXG4gIGZvcm1hdFNlc3Npb25UaW1lUmFuZ2UoXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiAnJztcbiAgICB0cnkge1xuICAgICAgbGV0IHN0YXJ0RHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbmREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgZGF0ZVRpbWVSYW5nZT8uc3RhcnQgJiZcbiAgICAgICAgZGF0ZVRpbWVSYW5nZT8uZW5kXG4gICAgICApIHtcbiAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBlbmREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2UuZW5kKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvRW5kOlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHN0YXJ0TWF0Y2gpXG4gICAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKHN0YXJ0TWF0Y2hbMV0ucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgICBpZiAoZW5kTWF0Y2gpIGVuZER0ID0gbmV3IERhdGUoZW5kTWF0Y2hbMV0ucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdGFydER0IHx8IGlzTmFOKHN0YXJ0RHQuZ2V0VGltZSgpKSkgcmV0dXJuICcnO1xuICAgICAgY29uc3QgbG9jYWxlT3B0cyA9IGRpc3BsYXlUaW1lWm9uZSA/IHsgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSB9IDoge307XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9XG4gICAgICAgICAgZW5kRHQgJiYgIWlzTmFOKGVuZER0LmdldFRpbWUoKSlcbiAgICAgICAgICAgID8gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICByZXR1cm4gZW5kVGltZSA/IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YCA6IHN0YXJ0VGltZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPVxuICAgICAgICAgIGVuZER0ICYmICFpc05hTihlbmREdC5nZXRUaW1lKCkpXG4gICAgICAgICAgICA/IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHJldHVybiBlbmRUaW1lID8gYCR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gIDogc3RhcnRUaW1lO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJQU5BIHRpbWV6b25lIElEIC0+IGFiYnJldmlhdGlvbiBtYXAgKG1hdGNoZXMgcGFyZW50IGFwcCBzZXNzaW9uLWxheW91dHMgLyB0aW1lem9uZXMuZW51bSBUaW1lWm9uZXMpLlxuICAgKiBVc2VkIHNvIHNlc3Npb24gY2FyZHMgc2hvdyBTQVNULCBFRVNULCBTQVdTVCwgRVNBU1QsIGV0Yy4gaW5zdGVhZCBvZiBHTVQrMSwgR01UKzIuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUWl9BQkJSX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnUGFjaWZpYy9LaXJpdGltYXRpJzogJ0xJTlQnLFxuICAgICdQYWNpZmljL0FwaWEnOiAnU1NUJyxcbiAgICAnUGFjaWZpYy9Ub25nYXRhcHUnOiAnVFNUJyxcbiAgICAnRXRjL0dNVC0xMyc6ICdVVEMnLFxuICAgICdQYWNpZmljL0NoYXRoYW0nOiAnQ0hBRFQnLFxuICAgICdBc2lhL0thbWNoYXRrYSc6ICdBTkFUJyxcbiAgICAnUGFjaWZpYy9GaWppJzogJ0ZKVCcsXG4gICAgJ0V0Yy9HTVQtMTInOiAnVScsXG4gICAgJ1BhY2lmaWMvQXVja2xhbmQnOiAnTlpTVCcsXG4gICAgJ1BhY2lmaWMvR3VhZGFsY2FuYWwnOiAnQ1BTVCcsXG4gICAgJ0FzaWEvU2FraGFsaW4nOiAnU0FLVCcsXG4gICAgJ1BhY2lmaWMvTm9yZm9sayc6ICdORlQnLFxuICAgICdBc2lhL01hZ2FkYW4nOiAnTUFHVCcsXG4gICAgJ0FzaWEvU3JlZG5la29seW1zayc6ICdTUkVUJyxcbiAgICAnUGFjaWZpYy9Cb3VnYWludmlsbGUnOiAnQlNUJyxcbiAgICAnQXVzdHJhbGlhL0xvcmRfSG93ZSc6ICdMSFNUJyxcbiAgICAnQXNpYS9WbGFkaXZvc3Rvayc6ICdWTEFUJyxcbiAgICAnQXVzdHJhbGlhL0hvYmFydCc6ICdBRVNUJyxcbiAgICAnUGFjaWZpYy9Qb3J0X01vcmVzYnknOiAnQ2hTVCcsXG4gICAgJ0F1c3RyYWxpYS9TeWRuZXknOiAnQUVTVCcsXG4gICAgJ0F1c3RyYWxpYS9CcmlzYmFuZSc6ICdBV1NUJyxcbiAgICAnQXVzdHJhbGlhL0Rhcndpbic6ICdBQ1NUJyxcbiAgICAnQXVzdHJhbGlhL0FkZWxhaWRlJzogJ0FDU1QnLFxuICAgICdBc2lhL1lha3V0c2snOiAnWUFLVCcsXG4gICAgJ0FzaWEvU2VvdWwnOiAnS1NUJyxcbiAgICAnQXNpYS9QeW9uZ3lhbmcnOiAnS1NUJyxcbiAgICAnQXNpYS9Ub2t5byc6ICdUU1QnLFxuICAgICdBc2lhL0NoaXRhJzogJ1lBS1QnLFxuICAgICdBdXN0cmFsaWEvRXVjbGEnOiAnQUNXU1QnLFxuICAgICdBc2lhL1VsYWFuYmFhdGFyJzogJ0ZTVCcsXG4gICAgJ0FzaWEvVGFpcGVpJzogJ1VMQVQnLFxuICAgICdBdXN0cmFsaWEvUGVydGgnOiAnQVdTVCcsXG4gICAgJ0FzaWEvU2luZ2Fwb3JlJzogJ1NOU1QnLFxuICAgICdBc2lhL0lya3V0c2snOiAnSVJLVCcsXG4gICAgJ0FzaWEvU2hhbmdoYWknOiAnQ1NUJyxcbiAgICAnQXNpYS9Ub21zayc6ICdNU0QnLFxuICAgICdBc2lhL05vdm9zaWJpcnNrJzogJ05PVlQnLFxuICAgICdBc2lhL0tyYXNub3lhcnNrJzogJ0tSQVQnLFxuICAgICdBc2lhL0hvdmQnOiAnU0FTVCcsXG4gICAgJ0FzaWEvQmFybmF1bCc6ICdNU0snLFxuICAgICdBc2lhL0Jhbmdrb2snOiAnVEhBJyxcbiAgICAnQXNpYS9ZYW5nb24nOiAnTVlTVCcsXG4gICAgJ0FzaWEvT21zayc6ICdPTVNUJyxcbiAgICAnQXNpYS9EaGFrYSc6ICdCU1QnLFxuICAgICdBc2lhL0FsbWF0eSc6ICdOQ0FTVCcsXG4gICAgJ0FzaWEvS2F0aG1hbmR1JzogJ05QVCcsXG4gICAgJ0FzaWEvQ29sb21ibyc6ICdTTFQnLFxuICAgICdBc2lhL0tvbGthdGEnOiAnSVNUJyxcbiAgICAnQXNpYS9DYWxjdXR0YSc6ICdJU1QnLFxuICAgICdBc2lhL1F5enlsb3JkYSc6ICdDQVNUJyxcbiAgICAnQXNpYS9LYXJhY2hpJzogJ1BLVCcsXG4gICAgJ0FzaWEvWWVrYXRlcmluYnVyZyc6ICdZRUtUJyxcbiAgICAnQXNpYS9UYXNoa2VudCc6ICdXQVNUJyxcbiAgICAnQXNpYS9LYWJ1bCc6ICdBRlQnLFxuICAgICdBc2lhL1llcmV2YW4nOiAnQU1UJyxcbiAgICAnRXVyb3BlL1ZvbGdvZ3JhZCc6ICdWU1QnLFxuICAgICdBc2lhL1RiaWxpc2knOiAnR0VUJyxcbiAgICAnRXVyb3BlL1NhcmF0b3YnOiAnU0xUJyxcbiAgICAnSW5kaWFuL01hdXJpdGl1cyc6ICdNVVQnLFxuICAgICdFdXJvcGUvU2FtYXJhJzogJ1NBTVQnLFxuICAgICdBc2lhL0Jha3UnOiAnQVpUJyxcbiAgICAnRXVyb3BlL0FzdHJha2hhbic6ICdTQU1UJyxcbiAgICAnQXNpYS9EdWJhaSc6ICdBUkJTVCcsXG4gICAgJ0FzaWEvVGVocmFuJzogJ0lEVCcsXG4gICAgJ0FmcmljYS9OYWlyb2JpJzogJ0VBU1QnLFxuICAgICdFdXJvcGUvTW9zY293JzogJ01TSycsXG4gICAgJ0V1cm9wZS9NaW5zayc6ICdNU0snLFxuICAgICdBc2lhL1JpeWFkaCc6ICdBU1QnLFxuICAgICdFdXJvcGUvSXN0YW5idWwnOiAnVERUJyxcbiAgICAnQXNpYS9CYWdoZGFkJzogJ0FTVCcsXG4gICAgJ0FmcmljYS9XaW5kaG9layc6ICdOU1QnLFxuICAgICdBZnJpY2EvVHJpcG9saSc6ICdMU1QnLFxuICAgICdBZnJpY2EvS2hhcnRvdW0nOiAnRUFTVCcsXG4gICAgJ0V1cm9wZS9LYWxpbmluZ3JhZCc6ICdLU1QnLFxuICAgICdBc2lhL0plcnVzYWxlbSc6ICdKRFQnLFxuICAgICdFdXJvcGUvS2lldic6ICdFRURUJyxcbiAgICAnQWZyaWNhL0pvaGFubmVzYnVyZyc6ICdTQVNUJyxcbiAgICAnQXNpYS9IZWJyb24nOiAnRUVUJyxcbiAgICAnQXNpYS9EYW1hc2N1cyc6ICdTRFQnLFxuICAgICdFdXJvcGUvQ2hpc2luYXUnOiAnR0RUJyxcbiAgICAnQWZyaWNhL0NhaXJvJzogJ0VTVCcsXG4gICAgJ0FzaWEvQmVpcnV0JzogJ01FRFQnLFxuICAgICdFdXJvcGUvQnVjaGFyZXN0JzogJ0dEVCcsXG4gICAgJ0FzaWEvQW1tYW4nOiAnSlNUJyxcbiAgICAnQWZyaWNhL0xhZ29zJzogJ0VDVCcsXG4gICAgJ0V1cm9wZS9XYXJzYXcnOiAnQ0VEVCcsXG4gICAgJ0FmcmljYS9DYXNhYmxhbmNhJzogJ01EVCcsXG4gICAgJ0V1cm9wZS9QYXJpcyc6ICdDRVNUJyxcbiAgICAnRXVyb3BlL0J1ZGFwZXN0JzogJ0NFRFQnLFxuICAgICdFdXJvcGUvQmVybGluJzogJ1dFRFQnLFxuICAgICdBZnJpY2EvU2FvX1RvbWUnOiAnR1NUJyxcbiAgICAnQXRsYW50aWMvUmV5a2phdmlrJzogJ0dTVCcsXG4gICAgJ0V1cm9wZS9Mb25kb24nOiAnR0RUJyxcbiAgICAnRXRjL1VUQyc6ICdVVEMnLFxuICAgICdBdGxhbnRpYy9Bem9yZXMnOiAnQURUJyxcbiAgICAnQXRsYW50aWMvQ2FwZV9WZXJkZSc6ICdDVlNUJyxcbiAgICAnRXRjL0dNVCsyJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvQXJhZ3VhaW5hJzogJ1NFU1QnLFxuICAgICdBbWVyaWNhL1Nhb19QYXVsbyc6ICdFU0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2F5ZW5uZSc6ICdTRVNUJyxcbiAgICAnQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzJzogJ0FTVCcsXG4gICAgJ0FtZXJpY2EvTnV1ayc6ICdXR1QnLFxuICAgICdBbWVyaWNhL01vbnRldmlkZW8nOiAnTVNUJyxcbiAgICAnQW1lcmljYS9QdW50YV9BcmVuYXMnOiAnQ0xTVCcsXG4gICAgJ0FtZXJpY2EvTWlxdWVsb24nOiAnUE1TVCcsXG4gICAgJ0FtZXJpY2EvQmFoaWEnOiAnQlNUJyxcbiAgICAnQW1lcmljYS9TdF9Kb2hucyc6ICdOU1QnLFxuICAgICdBbWVyaWNhL0FzdW5jaW9uJzogJ1BSU1QnLFxuICAgICdBbWVyaWNhL0hhbGlmYXgnOiAnQVNUJyxcbiAgICAnQW1lcmljYS9DYXJhY2FzJzogJ1ZTVCcsXG4gICAgJ0FtZXJpY2EvQ3VpYWJhJzogJ0NCU1QnLFxuICAgICdBbWVyaWNhL0xhX1Bheic6ICdTQVdTVCcsXG4gICAgJ0FtZXJpY2EvU2FudGlhZ28nOiAnUFNTVCcsXG4gICAgJ0FtZXJpY2EvQm9nb3RhJzogJ1NQU1QnLFxuICAgICdBbWVyaWNhL0NhbmN1bic6ICdFU1QnLFxuICAgICdBbWVyaWNhL05ld19Zb3JrJzogJ0VUJyxcbiAgICAnQW1lcmljYS9Qb3J0LWF1LVByaW5jZSc6ICdFRFQnLFxuICAgICdBbWVyaWNhL0hhdmFuYSc6ICdFRFQnLFxuICAgICdBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzJzogJ0VTVCcsXG4gICAgJ0FtZXJpY2EvR3JhbmRfVHVyayc6ICdFU1QnLFxuICAgICdBbWVyaWNhL0d1YXRlbWFsYSc6ICdDQVNUJyxcbiAgICAnQW1lcmljYS9DaGljYWdvJzogJ0NUJyxcbiAgICAnUGFjaWZpYy9FYXN0ZXInOiAnRUFTVCcsXG4gICAgJ0FtZXJpY2EvTWV4aWNvX0NpdHknOiAnQ1NUJyxcbiAgICAnQW1lcmljYS9SZWdpbmEnOiAnQ0NTVCcsXG4gICAgJ0FtZXJpY2EvUGhvZW5peCc6ICdNVCcsXG4gICAgJ0FtZXJpY2EvQ2hpaHVhaHVhJzogJ01EVCcsXG4gICAgJ0FtZXJpY2EvRGVudmVyJzogJ01UJyxcbiAgICAnQW1lcmljYS9XaGl0ZWhvcnNlJzogJ1lTVCcsXG4gICAgJ0FtZXJpY2EvVGlqdWFuYSc6ICdQU1QnLFxuICAgICdFdGMvR01UKzgnOiAnVVRDLTA4JyxcbiAgICAnQW1lcmljYS9Mb3NfQW5nZWxlcyc6ICdQVCcsXG4gICAgJ0FtZXJpY2EvQW5jaG9yYWdlJzogJ0FLJyxcbiAgICAnRXRjL0dNVCs5JzogJ1VUQy0wOScsXG4gICAgJ1BhY2lmaWMvTWFycXVlc2FzJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvQWRhayc6ICdIU1QnLFxuICAgICdQYWNpZmljL0hvbm9sdWx1JzogJ0hBU1QnLFxuICAgICdFdGMvR01UKzExJzogJ1VUQy0xMScsXG4gICAgJ0V0Yy9HTVQrMTInOiAnQklUJyxcbiAgfTtcblxuICAvKipcbiAgICogV2luZG93cy1zdHlsZSBcIihVVEPCsUhIOk1NKSBQbGFjZVwiIC0+IHNob3J0IG5hbWUgKElTVCwgQlJULCBldGMuKSBzbyB3ZSBzaG93IFwiSVNUXCIgbm90IFwiKChVVEMrMDU6MzApIEluZGlhKVwiLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgV0lORE9XU19UWl9BQkJSX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnKFVUQy0wMzowMCkgQnJhc2lsaWEnOiAnQlJUJyxcbiAgICAnKFVUQy0wMzowMCkgQnVlbm9zIEFpcmVzJzogJ0FSVCcsXG4gICAgJyhVVEMrMDU6MzApIEluZGlhJzogJ0lTVCcsXG4gICAgJyhVVEMrMDU6MzApIENoZW5uYWksIEtvbGthdGEsIE11bWJhaSwgTmV3IERlbGhpJzogJ0lTVCcsXG4gICAgJyhVVEMrMDA6MDApIER1YmxpbiwgRWRpbmJ1cmdoLCBMb25kb24nOiAnR01UJyxcbiAgICAnKFVUQyswMDowMCkgTW9ucm92aWEsIFJleWtqYXZpayc6ICdHTVQnLFxuICAgICcoVVRDKzAxOjAwKSBBbXN0ZXJkYW0sIEJlcmxpbiwgUm9tZSwgU3RvY2tob2xtJzogJ0NFVCcsXG4gICAgJyhVVEMrMDE6MDApIEJydXNzZWxzLCBDb3BlbmhhZ2VuLCBNYWRyaWQsIFBhcmlzJzogJ0NFVCcsXG4gICAgJyhVVEMrMDI6MDApIEF0aGVucywgSXN0YW5idWwsIE1pbnNrJzogJ0VFVCcsXG4gICAgJyhVVEMrMDI6MDApIENhaXJvJzogJ0VFVCcsXG4gICAgJyhVVEMrMDI6MDApIEplcnVzYWxlbSc6ICdJU1QnLFxuICAgICcoVVRDKzAzOjAwKSBNb3Njb3csIFN0LiBQZXRlcnNidXJnJzogJ01TSycsXG4gICAgJyhVVEMrMDM6MDApIE5haXJvYmknOiAnRUFUJyxcbiAgICAnKFVUQyswNDowMCkgRHViYWknOiAnR1NUJyxcbiAgICAnKFVUQyswNTowMCkgSXNsYW1hYmFkLCBLYXJhY2hpJzogJ1BLVCcsXG4gICAgJyhVVEMrMDU6NDUpIEthdGhtYW5kdSc6ICdOUFQnLFxuICAgICcoVVRDKzA2OjAwKSBEaGFrYSc6ICdCU1QnLFxuICAgICcoVVRDKzA2OjMwKSBZYW5nb24gKFJhbmdvb24pJzogJ01NVCcsXG4gICAgJyhVVEMrMDc6MDApIEJhbmdrb2ssIEhhbm9pLCBKYWthcnRhJzogJ0lDVCcsXG4gICAgJyhVVEMrMDg6MDApIEJlaWppbmcsIENob25ncWluZywgSG9uZyBLb25nLCBVcnVtcWknOiAnQ1NUJyxcbiAgICAnKFVUQyswODowMCkgS3VhbGEgTHVtcHVyLCBTaW5nYXBvcmUnOiAnU0dUJyxcbiAgICAnKFVUQyswOTowMCkgT3Nha2EsIFNhcHBvcm8sIFRva3lvJzogJ0pTVCcsXG4gICAgJyhVVEMrMDk6MzApIEFkZWxhaWRlJzogJ0FDU1QnLFxuICAgICcoVVRDKzEwOjAwKSBCcmlzYmFuZSc6ICdBRVNUJyxcbiAgICAnKFVUQysxMDowMCkgQ2FuYmVycmEsIE1lbGJvdXJuZSwgU3lkbmV5JzogJ0FFU1QnLFxuICAgICcoVVRDKzEyOjAwKSBBdWNrbGFuZCwgV2VsbGluZ3Rvbic6ICdOWlNUJyxcbiAgICAnKFVUQy0wNTowMCkgRWFzdGVybiBUaW1lIChVUyAmIENhbmFkYSknOiAnRVQnLFxuICAgICcoVVRDLTA2OjAwKSBDZW50cmFsIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdDVCcsXG4gICAgJyhVVEMtMDc6MDApIE1vdW50YWluIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdNVCcsXG4gICAgJyhVVEMtMDg6MDApIFBhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpJzogJ1BUJyxcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRpbWV6b25lIGFiYnJldmlhdGlvbiAoZS5nLiBJU1QsIEJSVCwgU0FTVCkgZm9yIGRpc3BsYXkgYWZ0ZXIgdGhlIHRpbWUuXG4gICAqIFVzZXMgSUFOQSBtYXAgYW5kIFdpbmRvd3Mtc3R5bGUgbWFwIHNvIHdlIHNob3cgXCJCUlRcIiAvIFwiSVNUXCIgaW5zdGVhZCBvZiBcIigoVVRDLTAzOjAwKSBCcmFzaWxpYSlcIi5cbiAgICogT25seSBjb25zdWx0cyBXaW5kb3dzIG1hcCB3aGVuIGlucHV0IGxvb2tzIGxpa2UgXCIoVVRDLi4uKVwiIHNvIGV4aXN0aW5nIElBTkEvSW50bCBiZWhhdmlvciBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0ejogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXR6IHx8ICFTdHJpbmcodHopLnRyaW0oKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHR6SWQgPSBTdHJpbmcodHopLnRyaW0oKTtcbiAgICBpZiAodHpJZC5zdGFydHNXaXRoKCcoVVRDJykgfHwgdHpJZC5zdGFydHNXaXRoKCcodXRjJykpIHtcbiAgICAgIGNvbnN0IHdpbk1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KVxuICAgICAgICAuV0lORE9XU19UWl9BQkJSX01BUDtcbiAgICAgIGNvbnN0IHdpbktleSA9IE9iamVjdC5rZXlzKHdpbk1hcCkuZmluZChcbiAgICAgICAgKGspID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gdHpJZC50b0xvd2VyQ2FzZSgpLFxuICAgICAgKTtcbiAgICAgIGlmICh3aW5LZXkpIHJldHVybiB3aW5NYXBbd2luS2V5XTtcbiAgICB9XG4gICAgY29uc3QgbWFwID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIENoYXREcmF3ZXJDb21wb25lbnQpLlRaX0FCQlJfTUFQO1xuICAgIGxldCBtYXBwZWQgPSBtYXBbdHpJZF07XG4gICAgaWYgKCFtYXBwZWQpIHtcbiAgICAgIGNvbnN0IGtleUxvd2VyID0gdHpJZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhtYXApLmZpbmQoXG4gICAgICAgIChba10pID0+IGsudG9Mb3dlckNhc2UoKSA9PT0ga2V5TG93ZXIsXG4gICAgICApO1xuICAgICAgaWYgKGVudHJ5KSBtYXBwZWQgPSBlbnRyeVsxXTtcbiAgICB9XG4gICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICB0aW1lWm9uZTogdHpJZCxcbiAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocCkgPT4gcC50eXBlID09PSAndGltZVpvbmVOYW1lJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9ICh0elBhcnQ/LnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICBpZiAodmFsdWUgJiYgL15HTVRbKy1dXFxkLy50ZXN0KHZhbHVlKSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHNlc3Npb25Sb2xlczogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvblJvbGVzKSB8fCBzZXNzaW9uUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IHNlc3Npb25Sb2xlc1swXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFN0cmluZyhmaXJzdClcbiAgICAgICAgLnJlcGxhY2UoL15cXHMqLVxccyovLCAnJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gJ29iamVjdCcgJiYgKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnKSB8fFxuICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgKTtcbiAgfVxuXG4gIG1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9uczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25zKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHVzZXJUaW1lem9uZSA9XG4gICAgICB0aGlzLnRpbWV6b25lICYmIFN0cmluZyh0aGlzLnRpbWV6b25lKS50cmltKClcbiAgICAgICAgPyBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzZXNzaW9ucy5tYXAoKHM6IGFueSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBib3RoIGRhdGVUaW1lUmFuZ2UgKHN0cmluZykgYW5kIGFjdHVhbERhdGVUaW1lUmFuZ2UgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZClcbiAgICAgIGNvbnN0IHdoZW5SYXcgPSBzLmRhdGVUaW1lUmFuZ2UgPz8gcy5hY3R1YWxEYXRlVGltZVJhbmdlID8/ICcnO1xuICAgICAgY29uc3Qgd2hlbkZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2Vzc2lvbldoZW4od2hlblJhdywgdXNlclRpbWV6b25lKTtcbiAgICAgIC8vIE9ubHkgc2V0IHN0YXR1c1RleHQgd2hlbiBzZXNzaW9uIGhhcyBqb2luL3dhdGNoIHJvbGVzIChzbyB3ZSBkb24ndCBzaG93IFwiWW91IGNhbiBqb2luIHRoaXMgbWVldGluZ1wiIHdoZW4gdGhlcmUgYXJlIG5vIGJ1dHRvbnMpXG4gICAgICBjb25zdCBoYXNKb2luV2F0Y2hSb2xlID1cbiAgICAgICAgQXJyYXkuaXNBcnJheShzLnNlc3Npb25Sb2xlcykgJiZcbiAgICAgICAgcy5zZXNzaW9uUm9sZXMuc29tZSgocjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgICAgICByICYmIHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByLnNlc3Npb25Sb2xlTmFtZVxuICAgICAgICAgICAgICA/IFN0cmluZyhyLnNlc3Npb25Sb2xlTmFtZSkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgOiBTdHJpbmcociA/PyAnJylcbiAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHJldHVybiBuYW1lID09PSAnam9pbicgfHwgbmFtZSA9PT0gJ3dhdGNoJztcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBzdGF0dXNUZXh0ID0gaGFzSm9pbldhdGNoUm9sZVxuICAgICAgICA/IHRoaXMuZ2V0U3RhdHVzVGV4dEZyb21TZXNzaW9uUm9sZXMocy5zZXNzaW9uUm9sZXMpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzZXNzaW9uVGltZVpvbmUgPVxuICAgICAgICBzLnRpbWVab25lICE9IG51bGxcbiAgICAgICAgICA/IHR5cGVvZiBzLnRpbWVab25lID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyAocy50aW1lWm9uZS5pZCA/PyBzLnRpbWVab25lLm5hbWUgPz8gJycpXG4gICAgICAgICAgICA6IFN0cmluZyhzLnRpbWVab25lKVxuICAgICAgICAgIDogJyc7XG4gICAgICAvLyBTaG93IHVzZXIncyBzZWxlY3RlZCB0aW1lem9uZSB3aGVuIHNldCwgb3RoZXJ3aXNlIHNlc3Npb24ncyB0aW1lem9uZSBmcm9tIGRhdGFcbiAgICAgIGNvbnN0IGRpc3BsYXlUaW1lWm9uZSA9ICh1c2VyVGltZXpvbmUgfHwgc2Vzc2lvblRpbWVab25lIHx8ICcnKS50cmltKCk7XG4gICAgICBjb25zdCB0ekFiYnIgPSBkaXNwbGF5VGltZVpvbmVcbiAgICAgICAgPyB0aGlzLmdldFRpbWV6b25lQWJicmV2aWF0aW9uKGRpc3BsYXlUaW1lWm9uZSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHdoZW5XaXRoVHogPVxuICAgICAgICB3aGVuRm9ybWF0dGVkIHx8ICh0eXBlb2Ygd2hlblJhdyA9PT0gJ29iamVjdCcgPyAnJyA6IFN0cmluZyh3aGVuUmF3KSk7XG4gICAgICBjb25zdCB3aGVuRGlzcGxheSA9IHR6QWJiclxuICAgICAgICA/IGAke3doZW5XaXRoVHp9ICgke3R6QWJicn0pYC50cmltKClcbiAgICAgICAgOiB3aGVuV2l0aFR6O1xuICAgICAgY29uc3QgZGF0ZUJhZGdlID0gdGhpcy5nZXRTZXNzaW9uRGF0ZUJhZGdlKHdoZW5SYXcsIGRpc3BsYXlUaW1lWm9uZSk7XG4gICAgICBsZXQgdGltZVJhbmdlID0gdGhpcy5mb3JtYXRTZXNzaW9uVGltZVJhbmdlKHdoZW5SYXcsIGRpc3BsYXlUaW1lWm9uZSk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN0cmluZyhzLmRlc2NyaXB0aW9uID8/IHMuYWJzdHJhY3QgPz8gJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IG1lZXRpbmdUeXBlID0gU3RyaW5nKFxuICAgICAgICBzLnNlc3Npb25UeXBlID8/IHMudHlwZSA/PyBzLm1lZXRpbmdUeXBlID8/ICcnLFxuICAgICAgKS50cmltKCk7XG4gICAgICBjb25zdCBzZXNzaW9uVHlwZUxhYmVsID0gdGhpcy5pc1VuRXZlbnRcbiAgICAgICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdNZWV0aW5nIHR5cGUnKSB8fCAnTWVldGluZyB0eXBlJ1xuICAgICAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1Nlc3Npb24gdHlwZScpIHx8ICdTZXNzaW9uIHR5cGUnO1xuICAgICAgLy8gU2FtZSBsb2dpYyBhcyBiZWZvcmUgZGVzaWduIHVwZGF0ZTogcHJlZmVyIHR6IGFiYnJldmlhdGlvbiAoZS5nLiBFU1QpLCBlbHNlIHNob3cgZGlzcGxheSB0aW1lem9uZSBzdHJpbmcgKGUuZy4gXCIoVVRDLTAzOjAwKSBCcmFzaWxpYSlcIilcbiAgICAgIGNvbnN0IHRpbWVab25lRGlzcGxheSA9IHR6QWJiciB8fCBkaXNwbGF5VGltZVpvbmUgfHwgJyc7XG4gICAgICAvLyBXaGVuIEFQSSByZXR1cm5zIFwiU3RhcnQ6IE4vQSwgRW5kOiBOL0EsIFRpbWVab25lOiAuLi5cIiAoc3RyaW5nKSwgc2hvdyBhdCBsZWFzdCB0aW1lem9uZVxuICAgICAgaWYgKCF0aW1lUmFuZ2UgJiYgZGlzcGxheVRpbWVab25lKSB7XG4gICAgICAgIHRpbWVSYW5nZSA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ05vdCBzcGVjaWZpZWQnKSB8fCAnTm90IHNwZWNpZmllZCc7XG4gICAgICB9XG4gICAgICAvLyBUaW1lIHJhbmdlIHdpdGggdGltZXpvbmUgaW4gcGFyZW50aGVzZXMgd2hlbiBhdmFpbGFibGUgKHNhbWUgYXMgb2xkIHdoZW5EaXNwbGF5IGZvcm1hdClcbiAgICAgIGNvbnN0IHRpbWVSYW5nZVdpdGhUeiA9IHRpbWVab25lRGlzcGxheVxuICAgICAgICA/IGAke3RpbWVSYW5nZX0gKCR7dGltZVpvbmVEaXNwbGF5fSlgLnRyaW0oKVxuICAgICAgICA6IHRpbWVSYW5nZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBTdHJpbmcocy50aXRsZSA/PyAnJykudHJpbSgpLFxuICAgICAgICBvcmdhbml6ZXI6IFN0cmluZyhzLm9yZ2FuaXplciA/PyAnJykudHJpbSgpLFxuICAgICAgICByb29tOiBTdHJpbmcocy5yb29tTmFtZSA/PyAnJykudHJpbSgpLFxuICAgICAgICB3aGVuOiB3aGVuRGlzcGxheSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICB0aW1lUmFuZ2VXaXRoVHo6IHRpbWVSYW5nZSA/IHRpbWVSYW5nZVdpdGhUeiA6IHRpbWVab25lRGlzcGxheSB8fCAnJyxcbiAgICAgICAgZGF0ZURheTogZGF0ZUJhZGdlLmRheSxcbiAgICAgICAgZGF0ZU1vbnRoOiBkYXRlQmFkZ2UubW9udGgsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lLFxuICAgICAgICB0aW1lWm9uZURpc3BsYXksXG4gICAgICAgIG1lZXRpbmdUeXBlLFxuICAgICAgICBzZXNzaW9uVHlwZUxhYmVsLFxuICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICBzZXNzaW9uOiBzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFNwZWFrZXJJZHNGcm9tU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25DYXJkcykpIHJldHVybiBbXTtcbiAgICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBjYXJkIG9mIHNlc3Npb25DYXJkcykge1xuICAgICAgY29uc3QgcmF3ID0gY2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmF3KSB7XG4gICAgICAgICAgY29uc3Qgc2lkID0gU3RyaW5nKGlkID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgaWYgKHNpZCkgaWRzLnB1c2goc2lkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGlkcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvbkNhcmRzKSkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgY2FyZCBvZiBzZXNzaW9uQ2FyZHMpIHtcbiAgICAgIGNvbnN0IHNwZWFrZXJJZHM6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShjYXJkPy5zZXNzaW9uPy5zcGVha2VycylcbiAgICAgICAgPyBjYXJkLnNlc3Npb24uc3BlYWtlcnNcbiAgICAgICAgICAgIC5tYXAoKHg6IGFueSkgPT4gU3RyaW5nKHggPz8gJycpLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHNwZWFrZXJzTGlzdCA9IHNwZWFrZXJJZHNcbiAgICAgICAgLm1hcCgoaWQpID0+IHRoaXMuc3BlYWtlcnNbaWRdKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgY2FyZC5zcGVha2Vyc0xpc3QgPSBzcGVha2Vyc0xpc3Q7XG4gICAgICBpZiAoY2FyZD8uc2Vzc2lvbiAmJiB0eXBlb2YgY2FyZC5zZXNzaW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYXJkLnNlc3Npb24uc3BlYWtlcnNMaXN0ID0gc3BlYWtlcnNMaXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuY29sbGVjdFNwZWFrZXJJZHNGcm9tU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IG1pc3NpbmcgPSBpZHMuZmlsdGVyKFxuICAgICAgKGlkKSA9PiAhdGhpcy5zcGVha2Vyc1tpZF0gJiYgIXRoaXMucmVxdWVzdGVkU3BlYWtlcklkcy5oYXMoaWQpLFxuICAgICk7XG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWlzc2luZy5mb3JFYWNoKChpZCkgPT4gdGhpcy5yZXF1ZXN0ZWRTcGVha2VySWRzLmFkZChpZCkpO1xuICAgIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKG1pc3NpbmcpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAvLyBCZXN0IGVmZm9ydDogc3RpbGwgYXR0YWNoIHdoYXQgd2UgaGF2ZSBjYWNoZWRcbiAgICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNwZWFrZXJQaG90b1VybChzcGVha2VyOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXNwZWFrZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXG4gICAgICBzcGVha2VyLnBob3RvLFxuICAgICAgc3BlYWtlci5waG90b1BhdGgsXG4gICAgICBzcGVha2VyLmF2YXRhclVybCxcbiAgICAgIHNwZWFrZXIucHJvZmlsZUltYWdlVXJsLFxuICAgICAgc3BlYWtlci5wcm9maWxlSW1hZ2UsXG4gICAgICBzcGVha2VyLnByb2ZpbGVQaWN0dXJlLFxuICAgICAgc3BlYWtlci5pbWFnZVVybCxcbiAgICAgIHNwZWFrZXIuaW1hZ2UsXG4gICAgXTtcbiAgICBjb25zdCB1cmwgPSBjYW5kaWRhdGVzLmZpbmQoKHYpID0+IHYgIT0gbnVsbCAmJiBTdHJpbmcodikudHJpbSgpICE9PSAnJyk7XG4gICAgcmV0dXJuIHVybCA/IFN0cmluZyh1cmwpLnRyaW0oKSA6IG51bGw7XG4gIH1cblxuICBoYXNTZXNzaW9uQ2FyZFNwZWFrZXJzKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBsaXN0ID1cbiAgICAgIHNlc3Npb25DYXJkPy5zcGVha2Vyc0xpc3QgfHwgc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzTGlzdDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCA+IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGlkcyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zcGVha2VycztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShpZHMpICYmIGlkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0U3BlYWtlckRpc3BsYXlOYW1lKHNwZWFrZXI6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFzcGVha2VyKSByZXR1cm4gJyc7XG4gICAgaWYgKHNwZWFrZXIubmFtZSAhPSBudWxsICYmIFN0cmluZyhzcGVha2VyLm5hbWUpLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4gU3RyaW5nKHNwZWFrZXIubmFtZSkudHJpbSgpO1xuICAgIGNvbnN0IGZpcnN0ID1cbiAgICAgIHNwZWFrZXIuZmlyc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5maXJzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGxhc3QgPVxuICAgICAgc3BlYWtlci5sYXN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIubGFzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIHJldHVybiBgJHtmaXJzdH0gJHtsYXN0fWAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3BlYWtlckluaXRpYWxzKHNwZWFrZXI6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0U3BlYWtlckRpc3BsYXlOYW1lKHNwZWFrZXIpO1xuICAgIGlmIChuYW1lKSByZXR1cm4gdGhpcy5nZXRBdHRlbmRlZUluaXRpYWxzKG5hbWUpO1xuICAgIGNvbnN0IGlkID0gc3BlYWtlcj8uaWQgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmlkKSA6ICcnO1xuICAgIHJldHVybiBpZCA/IGlkLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCkgOiAnPyc7XG4gIH1cblxuICBtYXBBdHRlbmRlZXNUb0NhcmREYXRhKGF0dGVuZGVlczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGF0dGVuZGVlcykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXR0ZW5kZWVzLm1hcCgoYTogYW55KSA9PiAoe1xuICAgICAgbmFtZTogU3RyaW5nKGEubmFtZSA/PyAnJykudHJpbSgpLFxuICAgICAgY29tcGFueTpcbiAgICAgICAgYS5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKGEuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuY29tcGFueSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgam9iVGl0bGU6XG4gICAgICAgIGEuam9iVGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcoYS5qb2JUaXRsZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuam9iVGl0bGUpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBob3RvOlxuICAgICAgICBhLnBob3RvICE9IG51bGwgJiYgU3RyaW5nKGEucGhvdG8pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLnBob3RvKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBpZDogYS5pZCA/PyBhLnVzZXJJZCA/PyBhLl9pZCA/PyBhLmF0dGVuZGVlSWQgPz8gdW5kZWZpbmVkLFxuICAgICAgaW50ZXJlc3RzOlxuICAgICAgICBhLmludGVyZXN0cyAhPSBudWxsICYmIFN0cmluZyhhLmludGVyZXN0cykudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuaW50ZXJlc3RzKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgYS5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhhLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdXNlclZpZGVvc01vZGVsOiBhLnVzZXJWaWRlb3NNb2RlbFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgYS51c2VyVmlkZW9zTW9kZWw/LnVybCAhPSBudWxsICYmXG4gICAgICAgICAgICAgIFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHRodW1ibmFpbDpcbiAgICAgICAgICAgICAgYS51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbCAhPSBudWxsICYmXG4gICAgICAgICAgICAgIFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gIH1cblxuICBtYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGVha2VycykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gc3BlYWtlcnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBzLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHMuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHJhd1RpdGxlID0gcy50aXRsZSA/PyBzLmpvYlRpdGxlO1xuICAgICAgY29uc3Qgam9iVGl0bGUgPVxuICAgICAgICByYXdUaXRsZSAhPSBudWxsICYmIFN0cmluZyhyYXdUaXRsZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKHJhd1RpdGxlKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLmdldFNwZWFrZXJEaXNwbGF5TmFtZShzKSxcbiAgICAgICAgY29tcGFueTpcbiAgICAgICAgICBzLmNvbXBhbnkgIT0gbnVsbCAmJiBTdHJpbmcocy5jb21wYW55KS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhzLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBqb2JUaXRsZSxcbiAgICAgICAgcGhvdG86IHRoaXMuZ2V0U3BlYWtlclBob3RvVXJsKHMpLFxuICAgICAgICBpZDogcy5pZCA/PyBzLnVzZXJJZCA/PyBzLl9pZCA/PyBzLnNwZWFrZXJJZCA/PyB1bmRlZmluZWQsXG4gICAgICAgIGludGVyZXN0czpcbiAgICAgICAgICBzLmludGVyZXN0cyAhPSBudWxsICYmIFN0cmluZyhzLmludGVyZXN0cykudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcocy5pbnRlcmVzdHMpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdXNlclZpZGVvc01vZGVsOiBzLnVzZXJWaWRlb3NNb2RlbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB1cmw6XG4gICAgICAgICAgICAgICAgcy51c2VyVmlkZW9zTW9kZWw/LnVybCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgdGh1bWJuYWlsOlxuICAgICAgICAgICAgICAgIHMudXNlclZpZGVvc01vZGVsPy50aHVtYm5haWwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnRodW1ibmFpbCkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29yczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwb25zb3JzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBzcG9uc29ycy5tYXAoKHM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmF3RGVzYyA9XG4gICAgICAgIHMuYm9vdGhEZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhzLmJvb3RoRGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmJvb3RoRGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmF3RGVzY1xuICAgICAgICA/IC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChyYXdEZXNjKVxuICAgICAgICAgID8gdGhpcy5zdHJpcEh0bWwocmF3RGVzYylcbiAgICAgICAgICA6IHJhd0Rlc2NcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgdXJsU2x1ZyA9IHMudXJsID8/IHMuYm9vdGhVcmwgPz8gKHMuYm9vdGhJRCAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhJRCkgOiBudWxsKSA/PyAocy5ib290aElkICE9IG51bGwgPyBTdHJpbmcocy5ib290aElkKSA6IG51bGwpO1xuICAgICAgY29uc3QgbG9nb1VybCA9XG4gICAgICAgIHMubG9nb1VybCAhPSBudWxsICYmIFN0cmluZyhzLmxvZ29VcmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmxvZ29VcmwpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHMubmFtZSAhPSBudWxsID8gU3RyaW5nKHMubmFtZSkudHJpbSgpIDogJycsXG4gICAgICAgIHdlYnNpdGU6IHMud2Vic2l0ZSAhPSBudWxsICYmIFN0cmluZyhzLndlYnNpdGUpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcocy53ZWJzaXRlKS50cmltKCkgOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogcy5jYXRlZ29yeSAhPSBudWxsID8gU3RyaW5nKHMuY2F0ZWdvcnkpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGJvb3RoSUQ6IHMuYm9vdGhJRCA/PyBzLmJvb3RoSWQgPz8gbnVsbCxcbiAgICAgICAgYm9vdGhUaXRsZTogcy5ib290aFRpdGxlICE9IG51bGwgPyBTdHJpbmcocy5ib290aFRpdGxlKS50cmltKCkgOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgICAgIC8qKiBCb290aCBVUkwgc2x1ZyBmb3Igcm91dGluZyB0byBkZXRhaWwgcGFnZSAoZS5nLiBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86dXJsKS4gKi9cbiAgICAgICAgdXJsOiB1cmxTbHVnICE9IG51bGwgPyBTdHJpbmcodXJsU2x1ZykudHJpbSgpIDogbnVsbCxcbiAgICAgICAgbG9nb1VybCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGdldF9ldmVudF9ib290aHMgcmVzdWx0cyBpbnRvIHRoZSBzYW1lIHNoYXBlIHVzZWQgYnkgc3BvbnNvciBjYXJkcy5cbiAgICovXG4gIG1hcEJvb3Roc1RvQ2FyZERhdGEoYm9vdGhzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYm9vdGhzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBib290aHMubWFwKChiOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBiLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKGIuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhiLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHVybFNsdWcgPSBiLnVybCA/PyBiLmJvb3RoVXJsID8/IChiLmJvb3RoSWQgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoSWQpIDogbnVsbCkgPz8gKGIuYm9vdGhJRCAhPSBudWxsID8gU3RyaW5nKGIuYm9vdGhJRCkgOiBudWxsKTtcbiAgICAgIGNvbnN0IGxvZ29VcmwgPVxuICAgICAgICBiLmxvZ29VcmwgIT0gbnVsbCAmJiBTdHJpbmcoYi5sb2dvVXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYi5sb2dvVXJsKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBiLmNvbXBhbnkgIT0gbnVsbCA/IFN0cmluZyhiLmNvbXBhbnkpLnRyaW0oKSA6ICcnLFxuICAgICAgICB3ZWJzaXRlOlxuICAgICAgICAgIGIud2Vic2l0ZSAhPSBudWxsICYmIFN0cmluZyhiLndlYnNpdGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKGIud2Vic2l0ZSkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgICBib290aElEOiBiLmJvb3RoSWQgPz8gYi5ib290aElEID8/IG51bGwsXG4gICAgICAgIGJvb3RoVGl0bGU6IGIuYm9vdGhUaXRsZSAhPSBudWxsID8gU3RyaW5nKGIuYm9vdGhUaXRsZSkudHJpbSgpIDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgICAgICAvKiogQm9vdGggVVJMIHNsdWcgZm9yIHJvdXRpbmcgdG8gZGV0YWlsIHBhZ2UgKGUuZy4gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOnVybCkuICovXG4gICAgICAgIHVybDogdXJsU2x1ZyAhPSBudWxsID8gU3RyaW5nKHVybFNsdWcpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGxvZ29VcmwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIHJlc3VsdHMgaW50byB0aGUgc2FtZSBzaGFwZSBhcyBhdHRlbmRlZSBjYXJkcyAoZm9yIHJldXNlIG9mIGF0dGVuZGVlIGRlc2lnbikuXG4gICAqL1xuICBtYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aXZlcykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gcmVwcmVzZW50YXRpdmVzLm1hcCgocjogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaXJzdCA9IHIuZmlyc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoci5maXJzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgICAgY29uc3QgbGFzdCA9IHIubGFzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhyLmxhc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IG5hbWUgPSBbZmlyc3QsIGxhc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgJyc7XG4gICAgICBjb25zdCB1c2VySWQgPSByLnVzZXJJZCAhPSBudWxsICYmIFN0cmluZyhyLnVzZXJJZCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyhyLnVzZXJJZCkudHJpbSgpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY29tcGFueTpcbiAgICAgICAgICByLmNvbXBhbnkgIT0gbnVsbCAmJiBTdHJpbmcoci5jb21wYW55KS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBqb2JUaXRsZTpcbiAgICAgICAgICByLmpvYlRpdGxlICE9IG51bGwgJiYgU3RyaW5nKHIuam9iVGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuam9iVGl0bGUpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBwaG90bzpcbiAgICAgICAgICByLnBob3RvUGF0aCAhPSBudWxsICYmIFN0cmluZyhyLnBob3RvUGF0aCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5waG90b1BhdGgpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICBpbnRlcmVzdHM6IG51bGwsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIHIuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoci5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHVzZXJWaWRlb3NNb2RlbDogbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZ2V0X2V2ZW50X3Nlc3Npb25zX3YyIHBsYWluLXRleHQgY29udGVudCBpbnRvIHNlc3Npb24gb2JqZWN0cyBmb3IgY2FyZHMuXG4gICAqIEZvcm1hdDogXCJGb3VuZCBOIHNlc3Npb25zOlxcbjEuIDx0aXRsZT5cXG4gICAtIFRpbWU6IFN0YXJ0OiAuLi4sIEVuZDogLi4uLCBUaW1lWm9uZTogLi4uXFxuICAgLSBSb29tOiAuLi5cXG4gICAtIFR5cGU6IC4uLlxcbjIuIC4uLlwiXG4gICAqL1xuICBwYXJzZVNlc3Npb25Db250ZW50VjIoY29udGVudDogc3RyaW5nKTogYW55W10ge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcbiAgICBjb25zdCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAvLyBTcGxpdCBpbnRvIGJsb2NrcyBieSBcIjEuIFwiLCBcIjIuIFwiLCBldGMuIChudW1iZXIgKyBkb3QgKyBzcGFjZSBhdCBsaW5lIHN0YXJ0KVxuICAgIGNvbnN0IGJsb2NrUmVnZXggPSAvXFxuXFxkK1xcLlxccysvO1xuICAgIGNvbnN0IHBhcnRzID0gY29udGVudC5zcGxpdChibG9ja1JlZ2V4KTtcbiAgICAvLyBGaXJzdCBwYXJ0IG1heSBiZSBcIkZvdW5kIE4gc2Vzc2lvbnM6XCIgb3Igc2ltaWxhcjsgc2tpcCBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHNlc3Npb24gdGl0bGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBibG9jayA9IHBhcnRzW2ldLnRyaW0oKTtcbiAgICAgIGlmICghYmxvY2spIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbGluZXMgPSBibG9ja1xuICAgICAgICAuc3BsaXQoL1xcbi8pXG4gICAgICAgIC5tYXAoKGwpID0+IGwudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgY29uc3QgdGl0bGUgPSBsaW5lc1swXSB8fCAnJztcbiAgICAgIGlmICghdGl0bGUgfHwgL15Gb3VuZFxccytcXGQrXFxzK3Nlc3Npb25zL2kudGVzdCh0aXRsZSkpIGNvbnRpbnVlO1xuICAgICAgbGV0IGRhdGVUaW1lUmFuZ2UgPSAnJztcbiAgICAgIGxldCByb29tTmFtZSA9ICcnO1xuICAgICAgbGV0IHNlc3Npb25UeXBlID0gJyc7XG4gICAgICBsZXQgdGltZVpvbmUgPSAnJztcbiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgbGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2pdO1xuICAgICAgICBjb25zdCB0aW1lTWF0Y2ggPSBsaW5lLm1hdGNoKC9UaW1lOlxccyooLispL2kpO1xuICAgICAgICBpZiAodGltZU1hdGNoKSB7XG4gICAgICAgICAgZGF0ZVRpbWVSYW5nZSA9IHRpbWVNYXRjaFsxXS50cmltKCk7XG4gICAgICAgICAgY29uc3QgdHpNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goL1RpbWVab25lOlxccyooW14sXFxuXSspL2kpO1xuICAgICAgICAgIGlmICh0ek1hdGNoKSB0aW1lWm9uZSA9IHR6TWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb21NYXRjaCA9IGxpbmUubWF0Y2goL1Jvb206XFxzKiguKykvaSk7XG4gICAgICAgIGlmIChyb29tTWF0Y2gpIHtcbiAgICAgICAgICByb29tTmFtZSA9IHJvb21NYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZU1hdGNoID0gbGluZS5tYXRjaCgvVHlwZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHR5cGVNYXRjaCkge1xuICAgICAgICAgIHNlc3Npb25UeXBlID0gdHlwZU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ekxpbmVNYXRjaCA9IGxpbmUubWF0Y2goL1RpbWVab25lOlxccyooLispL2kpO1xuICAgICAgICBpZiAodHpMaW5lTWF0Y2ggJiYgIXRpbWVab25lKSB0aW1lWm9uZSA9IHR6TGluZU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHNlc3Npb25zLnB1c2goe1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgcm9vbU5hbWU6IHJvb21OYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0ZVRpbWVSYW5nZTogZGF0ZVRpbWVSYW5nZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHNlc3Npb25UeXBlOiBzZXNzaW9uVHlwZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHNlc3Npb25Sb2xlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb25zO1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNlc3Npb25DYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNlc3Npb25DYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNFU1NJT05fQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU0VTU0lPTl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlQXR0ZW5kZWVDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LmF0dGVuZGVlQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuQVRURU5ERUVfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuQVRURU5ERUVfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNwZWFrZXJDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNwZWFrZXJDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNwZWFrZXJDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNQRUFLRVJfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU1BFQUtFUl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlU3BvbnNvckNhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uc3BvbnNvckNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuU1BPTlNPUl9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5TUE9OU09SX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVCb290aFJlcENhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uYm9vdGhSZXBDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZEJvb3RoUmVwQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5CT09USF9SRVBfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGV4cGFuZFNlc3Npb25DYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRBdHRlbmRlZUNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kU3BlYWtlckNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZFNwZWFrZXJDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZFNwb25zb3JDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTcG9uc29yQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRCb290aFJlcENhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciBzZXNzaW9uIHR5cGUgb24gY2FyZHM6IFwiU2Vzc2lvbiB0eXBlXCIgd2hlbiBpc1VuRXZlbnQsIGVsc2UgXCJNZWV0aW5nIHR5cGVcIi5cbiAgICovXG4gIGdldFNlc3Npb25UeXBlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1VuRXZlbnRcbiAgICA/IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01lZXRpbmcgdHlwZScpIHx8ICdNZWV0aW5nIHR5cGUnXG4gICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdTZXNzaW9uIHR5cGUnKSB8fCAnU2Vzc2lvbiB0eXBlJ1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBKb2luL1dhdGNoIHJvbGUgYnV0dG9ucyBmcm9tIHNlc3Npb24uc2Vzc2lvblJvbGVzIGZvciBzZXNzaW9uIGNhcmRzLlxuICAgKiBXaGVuIGlzVW5FdmVudCBpcyBmYWxzZSwgcmV0dXJucyBzaW5nbGUgXCJXYXRjaFwiIGJ1dHRvbiAoc2FtZSBhcyB0ZW1wbGF0ZTIpLiBXaGVuIHRydWUsIHJldHVybnMgSm9pbi9XYXRjaCBmcm9tIHNlc3Npb25Sb2xlcy5cbiAgICovXG4gIGdldFNlc3Npb25Sb2xlQnV0dG9ucyhzZXNzaW9uQ2FyZDogYW55KTogeyBhY3Rpb246IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10ge1xuICAgIGlmICh0aGlzLmlzVW5FdmVudCA9PT0gZmFsc2UgJiYgc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246ICdqb2luJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5nZXRUcmFuc2xhdGlvbignV2F0Y2gnKSB8fCAnV2F0Y2gnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgcmF3ID0gc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LnNlc3Npb25Sb2xlcztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3KSB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgY29uc3Qgcm9sZXM6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gICAgZm9yIChjb25zdCByIG9mIHJhdykge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByICE9IG51bGwgJiYgci5zZXNzaW9uUm9sZU5hbWVcbiAgICAgICAgICA/IFN0cmluZyhyLnNlc3Npb25Sb2xlTmFtZSkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IFN0cmluZyhyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChuYW1lID09PSAnam9pbicgfHwgbmFtZSA9PT0gJ3dhdGNoJykge1xuICAgICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgICAgbmFtZSA9PT0gJ2pvaW4nXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ0pvaW4nKSB8fCAnSm9pbidcbiAgICAgICAgICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignV2F0Y2gnKSB8fCAnV2F0Y2gnO1xuICAgICAgICByb2xlcy5wdXNoKHsgYWN0aW9uOiBuYW1lLCBsYWJlbCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvbGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHNlc3Npb24gaXMgb24tZGVtYW5kIChjbGFzc2lmaWNhdGlvbklkID09PSBlQ2xhc3NpZmljYXRpb25UeXBlLk9uRGVtYW5kKS5cbiAgICogV2hlbiB0cnVlLCBKb2luL1dhdGNoIGFyZSBhbHdheXMgYWN0aW9uYWJsZSBhbmQgY2FyZCB1c2VzIE9uRGVtYW5kIGRlc2lnbi5cbiAgICovXG4gIGlzU2Vzc2lvbk9uZGVtYW5kKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uY2xhc3NpZmljYXRpb25JZCA/PyBzZXNzaW9uQ2FyZD8uY2xhc3NpZmljYXRpb25JZDtcbiAgICBpZiAoaWQgPT0gbnVsbCB8fCBpZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gU3RyaW5nKGlkKSA9PT0gZUNsYXNzaWZpY2F0aW9uVHlwZS5PbkRlbWFuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIEpvaW4vV2F0Y2ggYWN0aW9uIGlzIHBvc3NpYmxlIChzYW1lIGxvZ2ljIGFzIGFwcCB0ZW1wbGF0ZTgpLlxuICAgKiBBY3Rpb24gaXMgYWxsb3dlZCB3aGVuOiBvbi1kZW1hbmQgc2Vzc2lvbiBPUiBpc0J1dHRvbkFjdGl2YXRlZCAoc2Vzc2lvbiBoYXMgc3RhcnRlZCkuXG4gICAqL1xuICBjYW5QZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZXNzaW9uQ2FyZD8uc2Vzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uQ2FyZC5zZXNzaW9uO1xuICAgIGlmICh0aGlzLmlzU2Vzc2lvbk9uZGVtYW5kKHNlc3Npb25DYXJkKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICEhcy5pc0J1dHRvbkFjdGl2YXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGxvZ2ljIGFzIGFwcCB0ZW1wbGF0ZTg6IGRlbGF5IGluIG1pbnV0ZXMgKHNjaGVkdWxlZCBzdGFydCAtIGFjdHVhbCBzdGFydCkuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIGVpdGhlciBkYXRlIG1pc3Npbmc7ID4gMCB3aGVuIG1lZXRpbmcgaXMgZGVsYXllZC5cbiAgICovXG4gIGdldE1lZXRpbmdEZWxheU1pbnV0ZXMoc2Vzc2lvbkNhcmQ6IGFueSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBzLmRhdGVUaW1lUmFuZ2U/LnN0YXJ0O1xuICAgIGNvbnN0IGFjdHVhbFN0YXJ0ID0gcy5hY3R1YWxEYXRlVGltZVJhbmdlPy5zdGFydDtcbiAgICBpZiAoIXN0YXJ0RGF0ZSB8fCAhYWN0dWFsU3RhcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpZmZNcyA9XG4gICAgICAgIG5ldyBEYXRlKHN0YXJ0RGF0ZSkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYWN0dWFsU3RhcnQpLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmZNcyAvICgxMDAwICogNjApKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBtZWV0aW5nIGlzIGRlbGF5ZWQgKHNhbWUgY29uZGl0aW9uIGFzIHRlbXBsYXRlODogZGVsYXkgbWludXRlcyA+IDAsIG5vdCBvbi1kZW1hbmQsIGJ1dHRvbiBub3QgYWN0aXZhdGVkKS4gKi9cbiAgaXNNZWV0aW5nRGVsYXllZChzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVsYXkgPSB0aGlzLmdldE1lZXRpbmdEZWxheU1pbnV0ZXMoc2Vzc2lvbkNhcmQpO1xuICAgIGlmIChkZWxheSA9PSBudWxsIHx8IGRlbGF5IDw9IDApIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LmlzQnV0dG9uQWN0aXZhdGVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvblNlc3Npb25DYXJkQWN0aW9uKFxuICAgIHNlc3Npb25DYXJkOiBhbnksXG4gICAgcm9sZTogeyBhY3Rpb246IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXNlc3Npb25DYXJkPy5zZXNzaW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNVbkV2ZW50ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5lbWl0KHtcbiAgICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgICBhY3Rpb246IHJvbGUuYWN0aW9uLFxuICAgICAgICBzZXNzaW9uOiBzZXNzaW9uQ2FyZC5zZXNzaW9uLFxuICAgICAgICBzZXNzaW9uQ2FyZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luL3dhdGNoIGF0IHRoZSBzdGFydGluZyB0aW1lJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbi93YXRjaCBhdCB0aGUgc3RhcnRpbmcgdGltZSc7XG4gICAgICB0aGlzLnNlc3Npb25BY3Rpb25CbG9ja2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICB0eXBlOiAnc2Vzc2lvbicsXG4gICAgICBhY3Rpb246IHJvbGUuYWN0aW9uLFxuICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgIHNlc3Npb25DYXJkLFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuU29ja2V0cygpIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnTGlzdGVuIFNvY2tldCcpO1xuICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2VcbiAgICAgIC5nZXRVc2VyU3BlY2lmaWNOb3RpZmljYXRpb24oKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIGxpc3RlblNvY2tldHMgcmVjZWl2ZWQnLCB7XG4gICAgICAgICAgICBoYXNPdGhlckZpZWxkczogISFyZXM/Lm0/Lk90aGVyRmllbGRzLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiByZXM/Lm0/Lk90aGVyRmllbGRzPy5tZXNzYWdlX2lkLFxuICAgICAgICAgICAgaGFzQW5zd2VyOiAhIXJlcz8ubT8uT3RoZXJGaWVsZHM/LmFuc3dlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBDaGVjayBpZiBPdGhlckZpZWxkcyBleGlzdHMgaW4gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgaWYgKHJlcz8ubT8uT3RoZXJGaWVsZHM/LndvcmtmbG93X2lkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gV29ya2Zsb3cgcHJvZ3Jlc3MgdXBkYXRlJyxcbiAgICAgICAgICAgICAgcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZCxcbiAgICAgICAgICAgICAgdGltZV9zdGFtcCxcbiAgICAgICAgICAgIH0gPSByZXM/Lm0/Lk90aGVyRmllbGRzO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID0gcGVyY2VudGFnZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uID0gYWN0aW9uX25hbWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGV4ID0gdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChhKSA9PiBhLk5hbWUgPT0gY3VycmVudF9hY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9uc1thY3Rpb25JbmRleF1bJ091dHB1dCddID1cbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdW1xuICAgICAgICAgICAgICAgICdJbnNlcnRUaW1lU3RhbXAnXG4gICAgICAgICAgICAgIF0gPSBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIHRpbWVfc3RhbXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQWN0aW9uIHdpdGggbmFtZSAke2FjdGlvbl9uYW1lfSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID1cbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID09IDEwMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydXb3JrZmxvd0V4ZWN1dGlvbklkJ10gPVxuICAgICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZDtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckZpZWxkcyA9IHJlcy5tLk90aGVyRmllbGRzO1xuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXphYmxlID0gb3RoZXJGaWVsZHMuc2VyaWFsaXphYmxlX3RvX3JldHVybjtcblxuICAgICAgICAgICAgLy8gU2Vzc2lvbiBjYXJkczogZXZlbnQgc2Vzc2lvbnMgdG9vbHMgKEpTT04gb3IgcGxhaW4gdGV4dClcbiAgICAgICAgICAgIGNvbnN0IGlzU2Vzc2lvblRvb2wgPVxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X2ludGVyZXN0JyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV90cmFjaycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfdXBjb21pbmdfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X215X2FnZW5kYSc7XG4gICAgICAgICAgICBpZiAoaXNTZXNzaW9uVG9vbCkge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIgJiYgdHlwZW9mIGNvbnRlbnRTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSBwYXJzZWQ/LnNlc3Npb25zID8/IFtdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHYyIHBsYWluIHRleHQ6IFwiRm91bmQgMiBzZXNzaW9uczpcXG4xLiBUaXRsZVxcbiAgIC0gVGltZTogU3RhcnQ6IC4uLiBFbmQ6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cIlxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNlc3Npb25fY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXNzaW9uX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25DYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gTm8gc2Vzc2lvbiBjYXJkcyBwdXNoZWQ6IGZhbGwgdGhyb3VnaCB0byBub3JtYWwgT3RoZXJGaWVsZHMgaGFuZGxpbmcgc28gYW5zd2VyIGlzIGRpc3BsYXllZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBdHRlbmRlZSBjYXJkczogdG9vbCBnZXRfZXZlbnRfYXR0ZW5kZWVzIChvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIGF0dGVuZGVlczsgZWxzZSBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2F0dGVuZGVlcycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRlbmRlZXMgPSBwYXJzZWQ/LmF0dGVuZGVlcyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgYXR0ZW5kZWVfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdHRlbmRlZV9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYXR0ZW5kZWVzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogYXR0ZW5kZWVzIGVtcHR5IChlLmcuIHRvdGFsQ291bnQ6IDApOiBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGxpa2UgXCJJIGNvdWxkbid0IGZpbmQgYW55IGF0dGVuZGVlcy4uLlwiIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlICovXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNwZWFrZXIgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X3NwZWFrZXJzIChzYW1lIGhhbmRsaW5nIGFzIGF0dGVuZGVlczsgb25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcGVha2VycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVha2VycyA9IHBhcnNlZD8uc3BlYWtlcnMgPz8gcGFyc2VkPy5zcGVha2VyID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BlYWtlcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWFrZXJDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfc3BlYWtlcnMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiBzcGVha2VycyBlbXB0eTogZmFsbCB0aHJvdWdoIHNvIGFuc3dlciBpcyBzaG93biBhcyBub3JtYWwgQUkgbWVzc2FnZSAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTcG9uc29yIGNhcmRzOiB0b29sIGdldF9ldmVudF9zcG9uc29ycyAob25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcG9uc29ycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcG9uc29ycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcG9uc29ycyA9IHBhcnNlZD8uc3BvbnNvcnMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29ycyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcG9uc29yX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9zcG9uc29ycyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJvb3RoIGNhcmRzOiB0b29sIGdldF9ldmVudF9ib290aHMgKHJldXNlIHNwb25zb3IgY2FyZCBkZXNpZ247IG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgYm9vdGhzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2Jvb3RocycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBib290aHMgPSBwYXJzZWQ/LmJvb3RocyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BvbnNvcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYm9vdGhzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQm9vdGggcmVwcmVzZW50YXRpdmUgY2FyZHM6IHRvb2wgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyAoc2FtZSBkZXNpZ24gYXMgYXR0ZW5kZWUgY2FyZHMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aXZlcyA9IHBhcnNlZD8ucmVwcmVzZW50YXRpdmVzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBib290aF9yZXBfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib290aF9yZXBfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIGJvb3RoUmVwQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9kZXRhaWxzJykge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICBhbnN3ZXIsXG4gICAgICAgICAgICAgIHdlYl9yZXN1bHRzLFxuICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0cyxcbiAgICAgICAgICAgICAgZ3JhcGhzLFxuICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIH0gPSBvdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFByb2Nlc3NpbmcgT3RoZXJGaWVsZHMnLCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBoYXNBbnN3ZXI6ICEhYW5zd2VyLFxuICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICB3ZWJSZXN1bHRzQ291bnQ6IHdlYl9yZXN1bHRzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NvdW50OiBzZWFyY2hfcmVzdWx0cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hhdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2cuZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09IG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gTmV3IEFJIG1lc3NhZ2UgZnJvbSBzb2NrZXQnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBjaGF0TG9nTGVuZ3RoOiB0aGlzLmNoYXRMb2cubGVuZ3RoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjdXJyZW50Q2hhdE1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBVcGRhdGluZyBleGlzdGluZyBtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGZpZWxkcyBiYXNlZCBvbiB0aGVpciBwcmVzZW5jZVxuICAgICAgICAgICAgaWYgKHNlYXJjaF9yZXN1bHRzICYmIEFycmF5LmlzQXJyYXkoc2VhcmNoX3Jlc3VsdHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIHNlYXJjaF9yZXN1bHRzJywgc2VhcmNoX3Jlc3VsdHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc2VhcmNoVGVybXMgPSBzZWFyY2hfcmVzdWx0cztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2ViX3Jlc3VsdHMgJiYgQXJyYXkuaXNBcnJheSh3ZWJfcmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gd2ViX3Jlc3VsdHMnLFxuICAgICAgICAgICAgICAgIHdlYl9yZXN1bHRzPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgd2ViX3Jlc3VsdHMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zb3VyY2VzTGlzdCA9IHdlYl9yZXN1bHRzO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZGlzcGxheWVkU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgwLCAzKTsgLy8gRmlyc3QgMyBjYXJkc1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVtYWluaW5nU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgzKTsgLy8gUmVtYWluaW5nIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBSZWNlaXZlZCBhbnN3ZXIsIHVwZGF0aW5nIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGFuc3dlclByZXZpZXc6IGFuc3dlcj8uc3Vic3RyaW5nPy4oMCwgMTAwKSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlcik7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZ3JhcGhzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBncmFwaHMnLCBncmFwaHM/Lmxlbmd0aCwgZ3JhcGhzKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmdyYXBocyA9IGdyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhlY3V0aW9uX2dyYXBocyAmJiBBcnJheS5pc0FycmF5KGV4ZWN1dGlvbl9ncmFwaHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIGV4ZWN1dGlvbl9ncmFwaHMnLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZXhlY3V0aW9uR3JhcGhzID0gZXhlY3V0aW9uX2dyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gc3VnZ2VzdGlvbnMnLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5yZWxhdGVkTGlzdEl0ZW1zID0gc3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBvbmxpbmUgc2VhcmNoIHRlcm1zIGFzIG5lZWRlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgYW55IG90aGVyIGZpZWxkcyBhbmQgdGhlaXIgcHJvY2Vzc2luZyBoZXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignT3RoZXJGaWVsZHMgaXMgbWlzc2luZyBpbiB0aGUgcmVzcG9uc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHNvY2tldCcsIGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldEFuZExpc3RlbigpIHt9XG4gIGhhbmRsZUV2ZW50KGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd3ZWJyZXN1bHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JhcGgnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgLy90aGlzLnNvY2tldFNlcnZpY2UuY2xvc2UoKTtcbiAgfVxuICBjaGFuZ2VUZW1wZXJhdHVyZShuZXdUZW1wZXJhdHVyZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMudGVtcGVyYXR1cmUgPSBuZXdUZW1wZXJhdHVyZTtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhpdmVncHQtY2hhdC1ib3Qtd3JhcHBlcicpO1xuICAgIC8vIFJlbW92ZSBleGlzdGluZyB0aGVtZSBjbGFzc2VzIGZyb20gYm9keVxuICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2NyZWF0aXZlJywgJ2JhbGFuY2VkJywgJ3ByZWNpc2UnKTtcblxuICAgIHN3aXRjaCAobmV3VGVtcGVyYXR1cmUpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnY3JlYXRpdmUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2JhbGFuY2VkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdwcmVjaXNlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25TdGFydEFnYWluKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdGFydEFnYWluID0gZmFsc2U7XG4gICAgdGhpcy5jaGF0TG9nID0gW107XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG5cbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICB9KTtcbiAgICB0aGlzLmFyY2hpZXZlTWVzc2FnZXMoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFyY2hpZXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3QvY2xlYXItaGlzdG9yeS8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICB0cmlnZ2VyU3VwcG9ydCgpIHtcbiAgICB0aGlzLm9wZW5TdXBwb3J0LmVtaXQoKTtcbiAgfVxuICBmZXRjaEJvdENvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJvdE5hbWUgPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlcy5OYW1lKTtcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgPSByZXMuR3JlZXRpbmdcbiAgICAgICAgICA/ICh0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShyZXMuR3JlZXRpbmcpIGFzIGFueSlcbiAgICAgICAgICA6ICcnO1xuXG4gICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzID0gcmVzPy5OZWdhdGl2ZVJlc3BvbnNlcz8ubGVuZ3RoXG4gICAgICAgICAgPyByZXMuTmVnYXRpdmVSZXNwb25zZXNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICBgV2UgYXJlIHNvcnJ5IHdlJ3ZlIG5vdCBiZWVuIGFibGUgdG8gYW5zd2VyIHlvdXIgcXVlc3Rpb25gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgdGhpcy5xdWlja1Byb21wdHMgPSByZXMuUXVpY2tQcm9tcHRzO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZzogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQ2hhdEhpc3RvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKTtcbiAgICB0aGlzLmNvblNlc3Npb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0U2Vzc2lvbktleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbktleX0/c2Vzc2lvbl9pZD0ke3RoaXMuY29uU2Vzc2lvbktleX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yPGFueT4oJ2ZldGNoQ29udmVyc2F0aW9uJykpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3I8VD4ob3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHJlc3VsdD86IFQpIHtcbiAgICByZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybiBvZihyZXN1bHQgYXMgVCk7XG4gICAgfTtcbiAgfVxuICAvLyBmZXRjaENoYXRIaXN0b3J5KCkge1xuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gIC8vICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAvLyAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAvLyAgIH0pO1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHBcbiAgLy8gICAgIC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fWAsIHsgaGVhZGVycyB9KVxuICAvLyAgICAgLnBpcGUoXG4gIC8vICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgLy8gICAgICAgfSksXG4gIC8vICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6ICcsIGVycm9yKTtcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gIC8vICAgICAgIH0pXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLyoqIFB1c2ggYSBzdGFuZGFyZCBBSSBtZXNzYWdlIGZyb20gaGlzdG9yeSAoc291cmNlcywgZ3JhcGhzLCBldGMuKS4gVXNlZCB3aGVuIG5vdCBjb252ZXJ0aW5nIHRvIHNlc3Npb25fY2FyZHMuICovXG4gIHByaXZhdGUgcHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZXNMaXN0ID0gY2hhdC5XZWJMaW5rcyB8fCBbXTtcbiAgICBjb25zdCBkaXNwbGF5ZWRTb3VyY2VzID0gKGNoYXQuV2ViTGlua3MgfHwgW10pLnNsaWNlKDAsIDMpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NvdXJjZXMgPSAoY2hhdC5XZWJMaW5rcyB8fCBbXSkuc2xpY2UoMyk7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dCksXG4gICAgICBleGVjdXRpb25HcmFwaHM6IGNoYXQuRXhlY3V0aW9uR3JhcGhzLFxuICAgICAgZ3JhcGhzOiBjaGF0LkdyYXBocyxcbiAgICAgIHNlYXJjaFRlcm1zOiBjaGF0LlNlYXJjaFRlcm1zLFxuICAgICAgc291cmNlc0xpc3Q6IHNvdXJjZXNMaXN0LFxuICAgICAgZGlzcGxheWVkU291cmNlczogZGlzcGxheWVkU291cmNlcyxcbiAgICAgIHJlbWFpbmluZ1NvdXJjZXM6IHJlbWFpbmluZ1NvdXJjZXMsXG4gICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICB9KTtcbiAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIG1hcENoYXRIaXN0b3J5KGNoYXRzOiBhbnkpIHtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5ncmVldGluZ01zZyxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICB9KTtcbiAgICBpZiAoY2hhdHMgJiYgY2hhdHM/Lk1lc3NhZ2VzPy5sZW5ndGgpIHtcbiAgICAgIGNoYXRzPy5NZXNzYWdlcy5mb3JFYWNoKChjaGF0OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoYXQuVHlwZSA9PSAndXNlcicpIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIFdvcmtmbG93RXhlY3V0aW9uSWQ6IGNoYXQuV29ya2Zsb3dFeGVjdXRpb25JZCxcbiAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXQuVHlwZSA9PSAnYWknKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBzZXNzaW9uIHRvb2xzLCBzaG93IHNlc3Npb24gY2FyZHMgaW5zdGVhZCBvZiBwbGFpbiB0ZXh0XG4gICAgICAgICAgY29uc3QgdG9vbE5hbWUgPSBjaGF0LnRvb2xyZXN1bHRzPy50b29sX25hbWU7XG4gICAgICAgICAgY29uc3QgaXNTZXNzaW9uVG9vbCA9XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zX3YyJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfaW50ZXJlc3QnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV90cmFjaycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3NwZWFrZXJfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF91cGNvbWluZ19zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X215X2FnZW5kYSc7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNTZXNzaW9uVG9vbCAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICBsZXQgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBzZXNzaW9ucyA9IHBhcnNlZD8uc2Vzc2lvbnMgPz8gW107XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHNlc3Npb25zID0gdGhpcy5wYXJzZVNlc3Npb25Db250ZW50VjIoY29udGVudFN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9ucyk7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKG1hcHBlZCk7XG4gICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Nlc3Npb25fY2FyZHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgIHNlc3Npb25DYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfYXR0ZW5kZWVzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X2F0dGVuZGVlcywgc2hvdyBhdHRlbmRlZSBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dGVuZGVlcyA9IHBhcnNlZD8uYXR0ZW5kZWVzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEF0dGVuZGVlc1RvQ2FyZERhdGEoYXR0ZW5kZWVzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdHRlbmRlZV9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIGF0dGVuZGVlQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc3BlYWtlcnMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfc3BlYWtlcnMsIHNob3cgc3BlYWtlciBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHNwZWFrZXJzID0gcGFyc2VkPy5zcGVha2VycyA/PyBwYXJzZWQ/LnNwZWFrZXIgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BlYWtlckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nwb25zb3JzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X3Nwb25zb3JzLCBzaG93IHNwb25zb3IgY2FyZHMgb24gaW5pdGlhbCBoaXN0b3J5IGxvYWRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCBzcG9uc29ycyA9IHBhcnNlZD8uc3BvbnNvcnMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BvbnNvcnNUb0NhcmREYXRhKHNwb25zb3JzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X2Jvb3RocycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9ib290aHMsIHNob3cgYm9vdGggY2FyZHMgdXNpbmcgc3BvbnNvciBjYXJkIGRlc2lnblxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IGJvb3RocyA9IHBhcnNlZD8uYm9vdGhzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3Roc1RvQ2FyZERhdGEoYm9vdGhzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ib290aF9yZXByZXNlbnRhdGl2ZXMsIHNob3cgYm9vdGggcmVwIGNhcmRzIChhdHRlbmRlZSBkZXNpZ24pXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVwcmVzZW50YXRpdmVzID0gcGFyc2VkPy5yZXByZXNlbnRhdGl2ZXMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb3RoX3JlcF9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIGJvb3RoUmVwQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm9jZXNzTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgaWYgKCFtZXNzYWdlIHx8ICEobWVzc2FnZT8ubGVuZ3RoID4gMCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygnaGVyZSBpcyBteSBtZXNzYWdlJylcbiAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlKTtcblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gL1xcWyhbXltdKyldXFwoKFteKV0rKVxcKS9nO1xuICAgIGNvbnN0IHVybFJlZ2V4ID0gLyg/PCFocmVmPVwiKVxcYmh0dHBzPzpcXC9cXC9cXFMrKD88IVsuLF0pL2dpO1xuXG4gICAgaWYgKG1hcmtkb3duTGlua1JlZ2V4LnRlc3QobWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgIG1hcmtkb3duTGlua1JlZ2V4LFxuICAgICAgICAnPGEgaHJlZj1cIiQyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JDE8L2E+JyxcbiAgICAgICk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdTYW5pdGl6ZWQgbWVzc2FnZTogJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XG4gICAgfVxuXG4gICAgaWYgKHVybFJlZ2V4LnRlc3QobWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgIHVybFJlZ2V4LFxuICAgICAgICAnPGEgaHJlZj1cIiQmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JCY8L2E+JyxcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgdG8gSFRNTCBoZWFkZXJzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXigjezEsNn0pXFxzKyguKikkL2dtLCAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGA8aCR7bGV2ZWx9PiR7dGV4dH08L2gke2xldmVsfT5gO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgY29uc3Qgc2FuaXRpemVkTWVzc2FnZSA9IHRoaXMuc2FuaXRpemVIdG1sKG1lc3NhZ2UpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRNZXNzYWdlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGNvbnN0IGZlZWRiYWNrTGlua3MgPVxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZlZWRiYWNrLWxpbmsnKTtcbiAgICBmZWVkYmFja0xpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJyksXG4gICAgICApO1xuICAgIH0pO1xuICAgIC8vIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpKSB7XG4gICAgLy8gICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgIC8vICAgICAucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrLWxpbmsnKVxuICAgIC8vICAgICAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJykpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNhbml0aXplSHRtbChodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG5cbiAgb25GZWVkYmFja0NsaWNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZlZWRiYWNrRXZlbnQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gICAgdGhpcy5vbkNsb3NlRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgc2VuZE1lc3NhZ2VXaXRoVGlsZShwcm9tcHQ6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXQgPSBwcm9tcHQ7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gIH1cbiAgaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gIGZldGNoRGF0YShtc2cgPSBudWxsKSB7XG4gICAgdGhpcy5pbnB1dCA9IG1zZyB8fCB0aGlzLmlucHV0Py50cmltKCk7XG4gICAgdGhpcy5tc2cgPSB0aGlzLmlucHV0O1xuICAgIGlmICghdGhpcy5pbnB1dCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG5cbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0aGlzLmlucHV0KSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnaGlkZGVuJzsgLy8gUmVzZXQgdGhlIGhlaWdodFxuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDYycHhgO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuXG4gICAgdGhpcy5tYWtlQXNrUmVxdWVzdCh0aGlzLmlucHV0LCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXkpO1xuICB9XG4gIGZldGNoRGF0YUZvcihtc2csIGNoYXQpIHtcbiAgICBjb25zdCBpbnB1dE1zZyA9IG1zZz8udHJpbSgpO1xuICAgIGlmICghaW5wdXRNc2cgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hhdFNvY2tldCgpO1xuICAgIHRyeSB7XG4gICAgICBjaGF0LnJlbGF0ZWRMaXN0SXRlbXMgPSBbXTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShpbnB1dE1zZyksXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuXG4gICAgdGhpcy5tYWtlQXNrUmVxdWVzdChpbnB1dE1zZywgdGhpcy5hZ2VudHMsIHRoaXMuY29udmVyc2F0aW9uS2V5LCBtc2csIGNoYXQpO1xuICB9XG4gIGZldGNoU21hbGxUYWxrKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3Qvc21hbGwtdGFsay8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcblxuICAgIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHNtYWxsVGFsazogc3RyaW5nIH0+KHVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGZldGNoaW5nIHNtYWxsIHRhbGs6JywgZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnNtYWxsVGFsaykge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKHJlc3BvbnNlLnNtYWxsVGFsayksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAyO1xuICAgICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICByZWFkQWxsQ2h1bmtzID0gKHN0cmVhbTogYW55KSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIGNvbnN0IGFsbFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmVhZGVyLmNsb3NlZC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVhZGluZyBzdHJlYW06ICcsIGVycik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHN0YXJ0OiAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBwdW1wKGNvbnRyb2xsZXI6IGFueSwgcmVhZGVyOiBhbnksIGFsbFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSkge1xuICAgIHJlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGxhc3RJdGVtID0gdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGxhc3RJdGVtLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNoYXRMb2cucG9wKCk7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGxhc3RJdGVtKTtcbiAgICAgICAgaWYgKGFsbFN1Z2dlc3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnc3VnZ2VzdGlvbnMnLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IGFsbFN1Z2dlc3Rpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnNob3dTdGFydEFnYWluID0gdHJ1ZTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmZldGNoU21hbGxUYWxrKCk7XG4gICAgICAgIC8vIH0sMTAwMClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGVjb2RlZENodW5rID0gdGhpcy5kZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICB0aGlzLmFpUmVzcG9uc2UgKz0gZGVjb2RlZENodW5rO1xuICAgICAgaWYgKGxhc3RJdGVtLnR5cGUgPT09ICdhaScpIHtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNNYXRjaCA9IHRoaXMuYWlSZXNwb25zZS5tYXRjaCgvPHN1Zz4oLio/KTxcXC9zdWc+L2cpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnNNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zTWF0Y2guZm9yRWFjaCgobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9IHRoaXMuYWlSZXNwb25zZS5yZXBsYWNlKG1hdGNoLCAnJyk7XG4gICAgICAgICAgICBhbGxTdWdnZXN0aW9ucy5wdXNoKG1hdGNoPy5yZXBsYWNlKC88XFwvP3N1Zz4vZywgJycpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLmFpUmVzcG9uc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcblxuICAgICAgICBsZXQgYWlGb3JtYXR0ZWREYXRhOiBhbnk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uICcpO1xuICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIDInKTtcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YSA9IEpTT04ucGFyc2UodGhpcy5haVJlc3BvbnNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiBkb25lJyk7XG5cbiAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YSAmJiBhaUZvcm1hdHRlZERhdGE/LnNlY3Rpb25faWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAnY29tcGFueV9zZWFyY2gnIHx8XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAndXNlcl9zZWFyY2gnIHx8XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAnaW5kdXN0cnlfY29tcGFueV9zZWFyY2gnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLm15VXBjb21pbmdTZXNzaW9uQWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BlYWtlcklkcyA9IFtdO1xuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/LmZvckVhY2goKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgc3BlYWtlcklkcyA9IFsuLi5zcGVha2VySWRzLCAuLi5zZXNzaW9uLnNwZWFrZXJzXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoc3BlYWtlcklkcz8ubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgdGhpcy5nZXRTcGVha2Vyc0J5U3RhZmZJZHMoc3BlYWtlcklkcykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5hZGRUb015QWdlbmRhQWN0aW9uICYmXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkczogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5jb25uZWN0T3JGb2xsb3dBY3Rpb24pIHtcbiAgICAgICAgICAgIGxldCB1c2Vyc0xlbiA9IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodXNlcnNMZW4gPiAxKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiAnb3Blbl9uZXR3b3JraW5nX2RyYXdlcicsXG4gICAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJzTGVuID09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGNvbm5ldFVzZXJJZHM6IFthaUZvcm1hdHRlZERhdGEuY29udGVudFswXS51c2VySWRdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLmlzX29wZW5fcGFnZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UgKz1cbiAgICAgICAgICAgICAgICAnXFxuXFxuJyArICc8YSBpZD1cImNsb3NlQm90Tm93XCI+Q2xpY2sgSGVyZTwvYT4gdG8gc2VlIHJlc3VsdHMuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICBhY3Rpb246IGFpRm9ybWF0dGVkRGF0YSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRDbG9zZUJvdENsaWNrRXZlbnQoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuYWlSZXNwb25zZSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuXG4gICAgICAvLyBFbnF1ZXVlIHRoZSBuZXh0IGRhdGEgY2h1bmsgaW50byBvdXIgdGFyZ2V0IHN0cmVhbVxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcbiAgICAgIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1Ym1pdEZlZWRiYWNrKGZsYWc6IGJvb2xlYW4sIG1lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcblxuICAgIHRoaXMuZmVlZGJhY2tEb25lID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb24vY29QaWxvdC8ke3RoaXMuYm90SWR9L2NvbnZlcnNhdGlvbi8ke2NvbnZlcnNhdGlvbl9pZH0vaGVscGZ1bC1yZXNwb25zZWA7XG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgYXBpS2V5OiAnQ29udmVyc2F0aW9uX1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VJZDogbWVzc2FnZS5faWQsIGlzSGVscGZ1bDogZmxhZyB9KSxcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChmbGFnKSB7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICB0aGlzLnRodW1ic1VwTWVzc2FnZSB8fFxuICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignTWF5IEkgYXNzaXN0IHlvdSB3aXRoIGFueXRoaW5nIGVsc2UnKSxcbiAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UoXG4gICAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXNbdGhpcy50aHVtYnNEb3duTXNnSW5kZXhdLFxuICAgICAgICApLFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0TGluazg4Jyk7XG4gICAgICAgIGlmIChzdXBwb3J0TGluaykge1xuICAgICAgICAgIHN1cHBvcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50cmlnZ2VyU3VwcG9ydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChuZXcgbGluZSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBDYWxsIHlvdXIgc3VibWl0IGZ1bmN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBsYXN0IEFJIG1lc3NhZ2UgaW4gY2hhdExvZzsgLTEgaWYgbm9uZS4gKi9cbiAgZ2V0IGxhc3RBaU1lc3NhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGogPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIGlmICh0aGlzLmNoYXRMb2dbal0/LnR5cGUgPT09ICdhaScpIHJldHVybiBqO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBoYW5kbGVVcENsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayh0cnVlLCB0aGlzLmNoYXRMb2dbaWR4XSk7XG4gICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG5cbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCkge1xuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaGFuZGxlRG93bkNsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSByZXR1cm47XG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayhmYWxzZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQpXG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcbiAgfVxuICAvLyBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAvLyAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAvLyAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gIC8vICAgY29uc29sZS5sb2coJ2NvbnRlbnRUb0NvcHknKTtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250ZW50VG9Db3B5KTtcbiAgLy8gICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50VG9Db3B5KS50aGVuKCgpID0+IHtcbiAgLy8gICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGNvcGllZFxuICAvLyAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAvLyAgIH0pO1xuICAvLyB9XG4gIGNvcHlUZXh0KGlkLCBpbmRleCkge1xuICAgIC8vIEdldCB0aGUgdGV4dCBlbGVtZW50XG4gICAgdmFyIHRleHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IHRleHRhcmVhIGVsZW1lbnQgdG8gY29weSB0aGUgdGV4dFxuICAgIHZhciB0ZW1wVGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRlbXBUZXh0QXJlYS52YWx1ZSA9IHRleHRFbGVtZW50LmlubmVyVGV4dDtcblxuICAgIC8vIEFwcGVuZCB0aGUgdGV4dGFyZWEgdG8gdGhlIGJvZHkgKG5lY2Vzc2FyeSBmb3IgdGhlIGV4ZWNDb21tYW5kIHRvIHdvcmspXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluc2lkZSB0aGUgdGV4dGFyZWFcbiAgICB0ZW1wVGV4dEFyZWEuc2VsZWN0KCk7XG5cbiAgICAvLyBDb3B5IHRoZSB0ZXh0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBUZXh0QXJlYSk7XG5cbiAgICAvLyBPcHRpb25hbGx5LCB5b3UgY2FuIGFsZXJ0IHRoZSB1c2VyIG9yIGNoYW5nZSB0aGUgYnV0dG9uIHRleHQgdG8gaW5kaWNhdGUgdGhlIGNvcHkgd2FzIHN1Y2Nlc3NmdWxcbiAgICAvLyBhbGVydCgnVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuXG4gICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICB9XG4gIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XG4gICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXG4gICAgY29uc3QgY29udGVudFRvQ29weSA9IHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZTtcbiAgICBjb25zdCByZXN1dGx0ID0gdGhpcy5jb3B5VGV4dCgnbWVzc2FnZVRleHRfJyArIGluZGV4LCBpbmRleCk7XG4gIH1cblxuICBzYW5pdGl6ZUhUTUwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIGNvbnRlbnRcbiAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4gb2YgdGhlIGJvZHkgb2YgdGhlIHBhcnNlZCBkb2N1bWVudCB0byB0aGUgZnJhZ21lbnRcbiAgICBBcnJheS5mcm9tKGRvYy5ib2R5LmNoaWxkTm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkaXYgZWxlbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIEhUTUxcbiAgICBjb25zdCBzaW1wbGlmaWVkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2ltcGxpZmllZERpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cbiAgICAvLyBSZW1vdmUgY29tcGxleCB0YWdzIG9yIGF0dHJpYnV0ZXMgYXMgbmVlZGVkXG4gICAgLy8gRXhhbXBsZTogcmVtb3ZlIHNjcmlwdHNcbiAgICBzaW1wbGlmaWVkRGl2XG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JylcbiAgICAgIC5mb3JFYWNoKChzY3JpcHQpID0+IHNjcmlwdC5yZW1vdmUoKSk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHNpbXBsaWZpZWQgSFRNTCBhcyBhIHN0cmluZ1xuICAgIHJldHVybiBzaW1wbGlmaWVkRGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIGN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yOiBhbnkgPSAnJztcbiAgY3VycmVudEluZGV4Rm9yRWRpdG9yOiBhbnkgPSAtMTtcbiAgaGFuZGxlRWRpdG9yQ2xpY2soaW5kZXg6IGFueSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSAtMSkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICcnLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gaW5kZXgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciArPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbE9uTmV3TWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRNYWluLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIGlmIChjb3VudGVyKysgPiA1KSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB9LCA1KTtcbiAgfVxuXG4gIGZvY3VzT25UZXh0YXJlYSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgY29uc29sZS5pbmZvKCdpbmNvbWluZyBhY3Rpb24gZnJvbSB0aGUgY2hhdGJvdCBBSScpO1xuICAgIGNvbnNvbGUuaW5mbyhhY3Rpb24pO1xuXG4gICAgaWYgKGFjdGlvbj8uY29udGVudCkge1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgZHJhd2VyIGlzIGluaXRpYWxseSBvcGVuIGFuZCBhcHBseSBvdmVyZmxvdyBoaWRkZW4gdG8gYm9keSBpZiBzb1xuICAgIGlmICh0aGlzLmRyYXdlci5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHRvIGNoYW5nZXMgaW4gdGhlIGRyYXdlciBiZWluZyBvcGVuZWQgb3IgY2xvc2VkXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUJvZHlPdmVyZmxvdygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IC8vIEZvY3VzIG9uIHRoZSB0ZXh0YXJlYVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCb2R5T3ZlcmZsb3coKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJzQnlTdGFmZklkcyhpZHM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnlbXSB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy9nZXQtYnktc3RhZmYtaWRzYDtcbiAgICBjb25zdCBjbGVhbklkcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KChpZHMgfHwgW10pLm1hcCgoeCkgPT4gU3RyaW5nKHggPz8gJycpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pKSxcbiAgICApO1xuICAgIGlmIChjbGVhbklkcy5sZW5ndGggPT09IDApIHJldHVybiBvZihudWxsKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KHVybCwgY2xlYW5JZHMsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgdGFwKChkYXRhOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKHNwZWFrZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHNwZWFrZXI/LmlkID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3BlYWtlcnNbaWRdID0gc3BlYWtlcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3BlYWtlcnM6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25JZCwgYWN0aW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5uZXh0KHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENsb3NlQm90Q2xpY2tFdmVudCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2Nsb3NlQm90Tm93Jyk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUJvdC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc01vYmlsZUJyb3dzZXIoKSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChcbiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgKTtcbiAgfVxuXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XG4gICAgICBjb25uZWN0OiAhdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCksXG4gICAgICB1c2VySWQsXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBnaXZlbiB1c2VySWQgaGFzIGEgcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3Qgc2VudCAoc2hvdyBcIlJlcXVlc3QgU2VudFwiIGRpc2FibGVkKS4gKi9cbiAgY2hlY2tQZW5kaW5nU2VudFJlcXVlc3QodXNlcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKHVzZXJJZCA9PSBudWxsIHx8IHVzZXJJZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzPy5sZW5ndGhcbiAgICAgID8gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzXG4gICAgICA6IHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICAgIHJldHVybiAhIXBlbmRpbmc/LmZpbmQoKGE6IGFueSkgPT4gYSA9PSB1c2VySWQpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBjYW4gYmUgZm9sbG93ZWQgKHNob3cgXCJDb25uZWN0XCIgYnV0dG9uKS4gTm90IGNvbm5lY3RlZCBhbmQgbm8gcGVuZGluZyBzZW50IHJlcXVlc3QuICovXG4gIGNhbkZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNhblVuZm9sbG93VXNlcihhdHRlbmRlZSkgfHwgdGhpcy5jaGVja1BlbmRpbmdTZW50UmVxdWVzdCh1aWQpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBpcyBhbHJlYWR5IGNvbm5lY3RlZCAoc2hvdyBcIkRpc2Nvbm5lY3RcIiBidXR0b24pLiAqL1xuICBjYW5VbmZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbm5lY3Rpb25zTGlzdD8ubGVuZ3RoXG4gICAgICA/IHRoaXMuY29ubmVjdGlvbnNMaXN0XG4gICAgICA6IHRoaXMubXlDb25uZWN0aW9ucztcbiAgICByZXR1cm4gISFsaXN0Py5maW5kKChjOiBhbnkpID0+IChjLnVzZXJJZCA/PyBjLmlkKSA9PSB1aWQpO1xuICB9XG5cbiAgY2FuQ29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gIShcbiAgICAgIHRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpIHx8XG4gICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5maW5kKChhKSA9PiBhID09IHVzZXJJZClcbiAgICApO1xuICB9XG5cbiAgY2FuRGlzY29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5teUNvbm5lY3Rpb25zLmZpbmQoKGNvbm4pID0+IGNvbm4udXNlcklkID09IHVzZXJJZCk7XG4gIH1cblxuICBmZXRjaFBlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS9jb25uZWN0aW9uLXJlcXVlc3RzL2F1dG9nZW4vcGVuZGluZy1zZW50LXJlcXVlc3RzP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBmZXRjaE15Q29ubmVjdGlvbnMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnMvYXV0b2dlbj91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfSxcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5teUNvbm5lY3Rpb25zID0gcmVzO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGFnZW50czogYW55O1xuICBzZWxlY3RlZEFnZW50cyA9IFtdO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAvLyBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmFnZW50cykgdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50cz8uZm9yRWFjaCgoYWdlbnQpID0+IChhZ2VudC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BZ2VudENoYW5nZShhZ2VudDogYW55KTogdm9pZCB7XG4gICAgLy9hZ2VudC5zZWxlY3RlZCA9ICFhZ2VudC5zZWxlY3RlZDtcbiAgICAvL2NvbnNvbGUubG9nKGFnZW50KTtcbiAgICBsZXQgYWdlbnRGb3VuZCA9IHRoaXMuYWdlbnRzLmZpbHRlcigocCkgPT4gcC5pZCA9PSBhZ2VudC5pZCk7XG4gICAgaWYgKGFnZW50Rm91bmQgJiYgYWdlbnRGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICBhZ2VudEZvdW5kWzBdLnNlbGVjdGVkID0gIWFnZW50Rm91bmRbMF0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFnZW50cz8uZXZlcnkoKGFnZW50KSA9PiAhYWdlbnQuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25IZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBZ2VudHMgPSB0aGlzLmFnZW50cz8uZmlsdGVyKChhZ2VudCkgPT4gYWdlbnQuc2VsZWN0ZWQpO1xuICAgIGlmICghc2VsZWN0ZWRBZ2VudHMpIHtcbiAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50cyAmJiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50cyBTZWxlY3RlZGBcbiAgICAgICAgICA6IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZmV0Y2hBZ2VudHNfaHR0cCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29QaWxvdC8ke3RoaXMuYm90SWR9L2FjdGl2ZS1hZ2VudHNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHt9LCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWdlbnRzID0gcmVzLm1hcCgoYWdlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5hZ2VudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuICBpc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgZG9jdW1lbnRDb250ZW50OiBhbnk7XG5cbiAgY29udmVyc2F0aW9uSWQ6IGFueTtcbiAgaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG5cbiAgZmV0Y2hDb250ZW50X2h0dHAoKSB7XG4gICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKCdBUEkgY2FsbCBmdW5jdGlvbicpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uX2lkO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uRG9jdW1lbnRzP2NvbnZlcnNhdGlvbklkPSR7Y29udmVyc2F0aW9uX2lkfSZib3RJZD0ke3RoaXMuYm90SWR9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6ICdXSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuaXNEb2NJbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50Q29udGVudCA9IHJlcztcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2V0IEFQSSBjYWxsbGVkIHN1Y2Nlc3MnKTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWcgREo6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NvbnRlbnRMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvcj8uc3RhdHVzID09IDQwNCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXNoJyk7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQWdlbnRzKCkge1xuICAgIHRoaXMuZmV0Y2hBZ2VudHNfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZmV0Y2hFZGl0b3JDb250ZW50KCkge1xuICAgIHRoaXMuZmV0Y2hDb250ZW50X2h0dHAoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vIGV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zXG4gIHByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShtYXJrZG93bjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYSBjdXN0b20gcmVuZGVyZXIgdG8gbW9kaWZ5IDxhPiB0YWdzXG4gICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcblxuICAgICAgLy8gQ3VzdG9taXplIGFuY2hvciB0YWdzIHRvIGluY2x1ZGUgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIHJlbmRlcmVyLmxpbmsgPSAoaHJlZjogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHtocmVmfVwiIHRpdGxlPVwiJHtcbiAgICAgICAgICB0aXRsZSB8fCAnJ1xuICAgICAgICB9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHt0ZXh0fTwvYT5gO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIG1hcmtkb3duIGNvbnRlbnQgdG8gSFRNTCB1c2luZyBtYXJrZWQgd2l0aCB0aGUgY3VzdG9tIHJlbmRlcmVyXG4gICAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBtYXJrZWQucGFyc2UobWFya2Rvd24sIHsgcmVuZGVyZXI6IHJlbmRlcmVyIH0pO1xuXG4gICAgICAvLyBTYW5pdGl6ZSB0aGUgcGFyc2VkIEhUTUwgdXNpbmcgQW5ndWxhcidzIERvbVNhbml0aXplclxuICAgICAgY29uc3Qgc2FuaXRpemVkSHRtbCA9XG4gICAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKG1hcmtkb3duQ29udGVudCk7XG5cbiAgICAgIC8vIFJldHVybiB0aGUgc2FmZSBIVE1MIGNvbnRlbnQgZm9yIGRpc3BsYXlcbiAgICAgIHJldHVybiBzYW5pdGl6ZWRIdG1sO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIG1hcmtkb3duOicsIGVycm9yKTtcbiAgICAgIHJldHVybiAnJzsgLy8gUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBvciBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHlcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlSHRtbChtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW1hcmtkb3duIHx8ICEobWFya2Rvd24ubGVuZ3RoID4gMCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lucHV0IE1hcmtkb3duIGlzIG51bGwgb3IgZW1wdHknKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgKCMjIyBvciAjIykgdG8gPHN0cm9uZz4gZm9yIGJvbGQgaGVhZGluZ3NcbiAgICBsZXQgaHRtbCA9IG1hcmtkb3duLnJlcGxhY2UoXG4gICAgICAvXigjezEsNn0pXFxzKyguKikkL2dtLFxuICAgICAgKG1hdGNoLCBoYXNoZXMsIHRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGV2ZWwgPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gYDxoMz48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2gzPmA7XG4gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IDQpIHtcbiAgICAgICAgICByZXR1cm4gYDxoND48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2g0PmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3Ryb25nPiR7dGV4dH08L3N0cm9uZz5gO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBjb2RlIGJsb2NrcyB3aXRoIGxhbmd1YWdlIHRvIHByZWZvcm1hdHRlZCBIVE1MXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYGBgKFxcdyspP1xcbihbXFxzXFxTXSo/KWBgYC9nLCAobWF0Y2gsIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWRDb2RlID0gdGhpcy5lc2NhcGVIdG1sKGNvZGUpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5nIHx8ICdwbGFpbnRleHQnO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IGJ1dHRvbiBmb3IgdGhlIGNvZGUgYmxvY2tcbiAgICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNvcHktYnV0dG9uXCIgY2xhc3M9XCJjb3B5LWJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ1xcYCR7ZXNjYXBlZENvZGV9XFxgJylcIj4ke3RoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgJ0NvcHknLFxuICAgICAgICApfTwvYnV0dG9uPlxuICAgICAgICA8cHJlIGNsYXNzPVwiY29kZV9ibG9jayBkaWZmXCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0ke2xhbmd1YWdlfVwiPiR7ZXNjYXBlZENvZGV9PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgaW5saW5lIGNvZGUgKHdyYXBwZWQgaW4gYGJhY2t0aWNrc2ApIHRvIGlubGluZSA8Y29kZT4gdGFnc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGJvbGQgdG8gSFRNTCA8c3Ryb25nPlxuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IG51bWJlcmVkIGxpc3RzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxcZCtcXC5cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBidWxsZXQgcG9pbnQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFwtXFxzKyguKikkL2dtLCAnPGxpPiQxPC9saT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gbGlua3MgdG8gSFRNTCBsaW5rc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoXG4gICAgICAvXFxbKFteXFxdXSspXVxcKChbXildKylcXCkvZyxcbiAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IG5ldyBsaW5lcyB0byA8YnI+IHRhZ3MgZm9yIHBhcmFncmFwaHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgZm9yIGNvZGUgYmxvY2tzXG4gIGVzY2FwZUh0bWwoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29kZVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29kZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIGlzQ29sbGFwc2VkRm9yR3JhcGggPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JGR3JhcGggPSBmYWxzZTtcbiAgdG9nZ2xlQ29sbGFwc2UoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbGxhcHNlR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JHcmFwaDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgdG9nZ2xlQ29sbGFwc2VGR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckZHcmFwaCA9ICF0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICAvLyAgIFtcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiQUkgTmV3cyBKYW51YXJ5IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJFYWNoIG1vbnRoLCB3ZSBjb21waWxlIHNpZ25pZmljYW50IG5ld3MsIHRyZW5kcywgYW5kIGhhcHBlbmluZ3MgaW4gQUksIHByb3ZpZGluZyBkZXRhaWxlZCBzdW1tYXJpZXMgd2l0aCBrZXkgcG9pbnRzIGluIGJ1bGxldCBmb3JtIGZvciBjb25jaXNlIHlldCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWphbnVhcnktMjAyNC9cIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIlRvcCBBSSBOZXdzLCBKYW51YXJ5IDIwMjQgLSBFdmVyeXBpeGVsIEpvdXJuYWxcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkluIHRoaXMgbW9udGhseSByb3VuZHVwLCB3ZSBzcG90bGlnaHQgdGhlIHRvcCBBSSBuZXdzIHN0b3JpZXMgZnJvbSBKYW51YXJ5LCBpbmNsdWRpbmcgdGhlIE9wZW5BSSB2cy4gVGhlIE5ldyBZb3JrIFRpbWVzIExhd3N1aXQuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL2pvdXJuYWwuZXZlcnlwaXhlbC5jb20vdG9wLWFpLW5ld3MtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEp1bHkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIlRoaXMgcGFnZSBmZWF0dXJlcyBBSSBOZXdzIGZvciBKdWx5IDIwMjQsIGhpZ2hsaWdodGluZyBzaWduaWZpY2FudCBldmVudHMgc3VjaCBhcyBDYW52YSBhY3F1aXJpbmcgTGVvbmFyZG8gQUkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtanVseS0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlL1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiSmFudWFyeSBuZXdzIHJvdW5kdXA6IFdoYXQncyBuZXcgaW4gdGhlIHdvcmxkIG9mIEFJPyAtIFBsdXJhbHNpZ2h0XCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJPcGVuQUnigJlzIG5ldyBHUFQgc3RvcmUsIGJ1c2luZXNzLXJlYWR5IENoYXRHUFQgcGxhbnMsIGFuZCBhIHByZWRpY3RlZCByaXNlIGluIEFJLXBvd2VyZWQgY3liZXJjcmltZS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vd3d3LnBsdXJhbHNpZ2h0LmNvbS9yZXNvdXJjZXMvYmxvZy9kYXRhL2FpLXRoaXMtbW9udGgtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEF1Z3VzdCAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEF1Z3VzdCAyMDI0LCB3aXRoIGhpZ2hsaWdodHMgc3VjaCBhcyBOdmlkaWEgZGVsYXlpbmcgdGhlIOKAnEJsYWNrd2VsbOKAnSBCMjAwIEFJIGNoaXBzIGRlbGl2ZXJ5LlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWF1Z3VzdC0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlLWR1cGxpY2F0ZS9cIlxuICAvLyAgIH1cbiAgLy8gXVxuICBkYXRlVGltZSA9IHsgbm93OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgLy8gRXh0cmFjdHMgdGhlIGRvbWFpbiBmcm9tIGEgVVJMXG4gIGdldERvbWFpbk5hbWUodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGhvc3RuYW1lIH0gPSBuZXcgVVJMKHVybCk7XG4gICAgICByZXR1cm4gaG9zdG5hbWUucmVwbGFjZSgvXnd3d1xcLi8sICcnKTsgLy8gUmVtb3ZlICd3d3cuJyBpZiBwcmVzZW50XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlcyB0aGUgZmF2aWNvbiBVUkxcbiAgZ2V0RmF2aWNvblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5nZXREb21haW5OYW1lKHVybCk7XG4gICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL3MyL2Zhdmljb25zP3N6PTEyOCZkb21haW49JHtkb21haW59YDtcbiAgfVxuICBjdXJyZW50U291cmNlc0xpc3Q6IGFueSA9IFtdO1xuICBvbkNhcmRDbGljayhzb3VyY2VzKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U291cmNlc0xpc3QgPSBzb3VyY2VzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIub3BlbigpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBpc1Nob3dFZGl0b3JCdXR0b24gPSB0cnVlO1xuXG4gIG9wZW5PdXRlckVkaXRvcigpIHtcbiAgICB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2VFZGl0b3IoKSB7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLmNsb3NlKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG5cbiAgb25DbG9zZVNvdXJjZSgpIHtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgIHRoaXMub25EcmF3ZXJDbG9zZWQoKTtcbiAgfVxuICBvbkRyYXdlckNsb3NlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgICAgLy8gVXNlIG5nQ2xhc3MgdG8gZHluYW1pY2FsbHkgYXBwbHkgdGhlIGNsYXNzXG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICB9LCA4MDApO1xuICB9XG4gIGlzRHJhd2VyT3BlbiA9IHRydWU7XG5cbiAgdG9nZ2xlRHJhd2VyKHRvZG8pIHtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRvZG87XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpO1xuICB9XG4gIHVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKSB7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5pc0RyYXdlck9wZW4gPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cbiAgfVxuICBvcGVuTGlua0luTmV3VGFiKGxpbms6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5vcGVuKGxpbmssICdfYmxhbmsnKTtcbiAgfVxuICBhZGp1c3RUZXh0YXJlYUhlaWdodChldmVudDogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFByZXZlbnRzIGEgbmV3IGxpbmUgZnJvbSBiZWluZyBhZGRlZFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIGNvbnN0IHRleHRhcmVhID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgLy8gRW5zdXJlIHRoZSBoZWlnaHQgZG9lc24ndCBleGNlZWQgdGhlIG1heC1oZWlnaHQgc2V0IGluIENTU1xuICAgIGlmICh0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgPiAxNTApIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAxNTBweGA7IC8vIEFkanVzdCBoZWlnaHQgdG8gbWF0Y2ggY29udGVudFxuICAgICAgdGV4dGFyZWEuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nOyAvLyBFbmFibGUgc2Nyb2xsaW5nIGlmIGNvbnRlbnQgZXhjZWVkcyA0MDBweFxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJzsgLy8gSGlkZSBzY3JvbGxiYXIgaWYgY29udGVudCBpcyB3aXRoaW4gbGltaXRzXG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlV29ya2Zsb3dzKHZhbHVlID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5jaGVja0ZvckNvcDI5Qm90SWQoKSkge1xuICAgICAgdGhpcy5ib3RTZXJ2aWNlLmdldFdvcmtmbG93c0J5T3JnSWQodGhpcy5vcmdJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcmdXb3JrZmxvd3MgPSByZXM7XG4gICAgICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSB2YWx1ZSA9PSBudWxsID8gIXRoaXMuaXNXb3JrZmxvd09wZW4gOiB2YWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JrZmxvd09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIC8vIENyZWF0ZSBmb3JtIGNvbnRyb2xzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYVxuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/LlRyaWdnZXI/LklucHV0U2NoZW1hKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBmb3JtQ29udHJvbHNbaW5wdXQuSW5wdXRJZF0gPSBbXG4gICAgICAgICAgaW5wdXQuVmFsdWUgfHwgJycsXG4gICAgICAgICAgaW5wdXQuUmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGZvcm1cbiAgICB0aGlzLndvcmtmbG93Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTZWxlY3RlZCh3b3JrZmxvdykge1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IHdvcmtmbG93O1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IHRydWU7XG4gIH1cblxuICBvbldvcmtmbG93U3VibWl0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RBbGxDaGF0Jyk7XG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSk7XG5cbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucHJlcGFyZUh0bWwoXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNYXJrZG93bihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIHVwZGF0ZSBsYXN0IHR3byBjaGF0TG9nIGVudHJpZXMsIHNldCBzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXIgPSBmYWxzZVxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyJ10gPVxuICAgICAgICAgIGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDJdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIG1lc3NhZ2U6IGlucHV0LFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhpbnB1dCk7XG5cbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb24gPVxuICAgICAgICAnRXhlY3V0aW5nICcgKyB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9uc1swXS5OYW1lO1xuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHtcbiAgICAgICAgQWN0aW9uczogdGhpcy5zZWxlY3RlZFdvcmtmbG93LkFjdGlvbnMsXG4gICAgICAgIElucHV0czogdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICAgIHdvcmtmbG93SW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgV29ya2Zsb3dOYW1lOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscztcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBleGVjdXRlIHRoZSBhc2sgZW5kcG9pbnQgd2l0aCB3b3JrZmxvdyBpbnB1dFxuICAgICAgdGhpcy5tYWtlQXNrUmVxdWVzdChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHRoaXMuYWdlbnRzLFxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbktleSxcbiAgICAgICAgJycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1snX2lkJ10sXG4gICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueSxcbiAgKTogdm9pZCB7XG4gICAgdmFyIHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHVzZXJfcXVlc3Rpb246IGlucHV0TXNnLFxuICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXG4gICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXG4gICAgICBtZXNzYWdlX2lkOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2VuZXJhdGVLZXkoKSxcbiAgICAgIHNlc3Npb25faWQ6IHRoaXMuY29uU2Vzc2lvbktleSxcbiAgICAgIGFnZW50czogYWdlbnRzPy5maWx0ZXIoKHApID0+IHAuc2VsZWN0ZWQpLm1hcCgocCkgPT4gcC5pZCkgPz8gW10sXG4gICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgZmlyc3RfbmFtZTogdGhpcy5maXJzdE5hbWUsXG4gICAgICBsYXN0X25hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgfTtcblxuICAgIGlmICh3b3JrZmxvd0lkKSB7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pZCddID0gd29ya2Zsb3dJZDtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lucHV0cyddID0gd29ya2Zsb3dfaW5wdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyB0aGlzLnMyN1Rva2VuLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIGV2ZW50VXJsOiB0aGlzLmV2ZW50VXJsLFxuICAgICAgZXZlbnRUb2tlbjogdGhpcy5ldmVudFRva2VuLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy53b3Jrc3BhY2VUb2tlbikge1xuICAgICAgaGVhZGVyc1snd29ya3NwYWNlVG9rZW4nXSA9IHRoaXMud29ya3NwYWNlVG9rZW47XG4gICAgfVxuXG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgIHRoaXMuaXM0MDEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuLmVtaXQoKTtcblxuICAgICAgICAgIC8vIElmIGBtc2dgIGFuZCBgY2hhdGAgZXhpc3QsIGhhbmRsZSB0aGVtXG4gICAgICAgICAgaWYgKG1zZyAmJiBjaGF0KSB7XG4gICAgICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgICAgIHRoaXMuY2hhdCA9IGNoYXQ7XG4gICAgICAgICAgICB0aGlzLmlzRmV0Y2hEYXRhRm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcmVzcG9uc2UgaGFuZGxpbmcgaWYgbmVlZGVkXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbWFrZUFza1JlcXVlc3RvbGQoXG4gICAgaW5wdXRNc2c6IHN0cmluZyxcbiAgICBhZ2VudHM6IGFueVtdLFxuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gICAgbXNnPzogYW55LFxuICAgIGNoYXQ/OiBhbnksXG4gICAgd29ya2Zsb3dJZD86IHN0cmluZyxcbiAgICB3b3JrZmxvd19pbnB1dHM/OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICB1c2VyX3F1ZXN0aW9uOiBpbnB1dE1zZyxcbiAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcklkLFxuICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxuICAgICAgbWVzc2FnZV9pZDogdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdlbmVyYXRlS2V5KCksXG4gICAgICBhZ2VudHM6IGFnZW50cz8uZmlsdGVyKChwKSA9PiBwLnNlbGVjdGVkKS5tYXAoKHApID0+IHAuaWQpID8/IFtdLFxuICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGZpcnN0X25hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdF9uYW1lOiB0aGlzLmxhc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAod29ya2Zsb3dJZCkge1xuICAgICAgYm9keVsnd29ya2Zsb3dfaWQnXSA9IHdvcmtmbG93SWQ7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pbnB1dHMnXSA9IHdvcmtmbG93X2lucHV0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCB7IGhlYWRlcnMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAvLyBBZGRpdGlvbmFsIHJlc3BvbnNlIGhhbmRsaW5nIGlmIG5lZWRlZFxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2VuZXJhdGVNYXJrZG93bih0aXRsZSwgb2JqKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZG93biB3aXRoIHRoZSB0aXRsZVxuICAgIGxldCBtYXJrZG93biA9IGAjIyAke3RpdGxlfVxcbmA7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG9iamVjdCBhbmQgYXBwZW5kIHRoZSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgdmFyIGtleV9sYWJlbCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZpbmQoXG4gICAgICAgICAgKGlucHV0KSA9PiBpbnB1dC5JbnB1dElkID09PSBrZXksXG4gICAgICAgICk/LkxhYmVsIHx8IGtleTtcbiAgICAgIG1hcmtkb3duICs9IGAtICoqJHtrZXlfbGFiZWx9Kio6ICR7dmFsdWV9XFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Rvd247XG4gIH1cblxuICBzaG93V29ya2Zsb3dIaXN0b3J5RGV0YWlscyh3b3JrZmxvd19pZCkge1xuICAgIGlmICghd29ya2Zsb3dfaWQpIHtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dFeGVjdXRpb25CeUlkKHdvcmtmbG93X2lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMuQWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHJlcy5BY3Rpb25zKSkge1xuICAgICAgICByZXMuQWN0aW9ucyA9IHJlcy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5JbnNlcnRUaW1lU3RhbXApIHtcbiAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICAgICAgICBhY3Rpb24uSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICByZXMuSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgKTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gcmVzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gZmFsc2U7XG4gIH1cblxuICBvYmplY3RUb0FycmF5KG9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBvYmpba2V5XSB9KSk7XG4gIH1cblxuICBzdGFydE5ld0NvbnZlcnNhdGlvbigpIHtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgdHJ1ZSk7XG4gICAgdGhpcy5jaGF0TG9nID0gW3RoaXMuY2hhdExvZ1swXV07XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgfSwgMjAwKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuc3BlZWNoQ29uZmlnID0gU3BlZWNoU0RLLlNwZWVjaENvbmZpZy5mcm9tQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgdG9rZW4sXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICApO1xuICAgIGNvbnN0IGF1ZGlvQ29uZmlnID0gU3BlZWNoU0RLLkF1ZGlvQ29uZmlnLmZyb21EZWZhdWx0TWljcm9waG9uZUlucHV0KCk7XG4gICAgdGhpcy5yZWNvZ25pemVyID0gbmV3IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyKFxuICAgICAgdGhpcy5zcGVlY2hDb25maWcsXG4gICAgICBhdWRpb0NvbmZpZyxcbiAgICApO1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6aW5nID0gKHMsIGUpID0+IHtcbiAgICAgIGlmIChlLnJlc3VsdC5yZWFzb24gPT09IFNwZWVjaFNESy5SZXN1bHRSZWFzb24uUmVjb2duaXppbmdTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemluZzogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6ZWQgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemVkU3BlZWNoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBlLnJlc3VsdC50ZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVjb2duaXplZDogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlY29yZGluZygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLmNhbmNlbGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhbmNlbGVkOiAnLCBlLmVycm9yRGV0YWlscyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5zZXNzaW9uU3RvcHBlZCA9IChzLCBlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnU2Vzc2lvbiBzdG9wcGVkLicpO1xuICAgICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSAhdGhpcy5pc1JlY29yZGluZztcblxuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICB0aGlzLnN0YXJ0UmVjb2duaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUmVjb2duaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFJlY29nbml0aW9uKCkge1xuICAgIHRoaXMucmVjb2duaXplci5zdGFydENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBzdG9wUmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICB9XG5cbiAgY2hlY2tGb3JDb3AyOUJvdElkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvdElkID09ICc2NmZhM2YyNzZjNWQ3MWUyNzE3YmZlYTgnIHx8XG4gICAgICB0aGlzLmJvdElkID09ICc2NzE2MzM1NDU2NTJkZDc4ZWZlYzg0OGQnXG4gICAgKTtcbiAgfVxuXG4gIGdldExhdGVzdFRpbWUodGltZSk6IHN0cmluZyB7XG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgIH0pOyAvLyByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiAnc2hvcnRUaW1lJyBmb3JtYXRcbiAgfVxuXG4gIC8qKiBVc2VkIGJ5IHRoZSB2b2ljZSBtb2RhbCB3aGVuIG9wZW5lZCBmcm9tIHRoaXMgZHJhd2VyLiAqL1xuICB2b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQ6IHN0cmluZyA9ICcnO1xuXG4gIG9wZW5Wb2ljZU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID1cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID8/XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKSA/P1xuICAgICAgJyc7XG4gICAgdGhpcy52b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICB0aGlzLnNldHVwVm9pY2VUcmFuc2NyaXB0cygpO1xuXG4gICAgLy8gQ2xvc2UgZXhpc3Rpbmcgb3ZlcmxheSBpZiBhbnlcbiAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBWb2ljZU1vZGFsQ29uZmlnID0ge1xuICAgICAgYXBpVXJsOiB0aGlzLmVudmlyb25tZW50Py5CQVNFX1VSTCA/PyAnJyxcbiAgICAgIHRva2VuOiB0aGlzLnMyN1Rva2VuID8/ICcnLFxuICAgICAgYm90SWQ6IHRoaXMuYm90SWQgPz8gJycsXG4gICAgICBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFwaUtleTogdGhpcy5hcGlLZXkgPz8gJycsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4gPz8gJycsXG4gICAgICBldmVudFVybDogdGhpcy5ldmVudFVybCA/PyAnJyxcbiAgICAgIGRvbWFpbkF1dGhvcml0eTogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA/PyAncHJvZC1saXRlJyxcbiAgICAgIGFnZW50TmFtZTogdGhpcy5ib3ROYW1lIHx8ICdBSSBBc3Npc3RhbnQnLFxuICAgICAgYWdlbnRSb2xlOiB0aGlzLmJvdFNraWxscyB8fCAnQUkgQWdlbnQgU3BlY2lhbGlzdCcsXG4gICAgICBhZ2VudEF2YXRhcjogdGhpcy5ib3RJY29uLFxuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9zZVZvaWNlTW9kYWwoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoXG4gICAgICBbXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssIHVzZVZhbHVlOiBjbG9zZUNhbGxiYWNrIH0sXG4gICAgICBdLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICApO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmdsb2JhbCgpXG4gICAgICAgIC5ib3R0b20oJzAnKVxuICAgICAgICAucmlnaHQoJzAnKVxuICAgICAgICAubGVmdCgnMCcpXG4gICAgICAgIC50b3AoJzAnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICBWb2ljZUFnZW50TW9kYWxDb21wb25lbnQsXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICBpbmplY3RvcixcbiAgICApO1xuICAgIG92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG4gICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG92ZXJsYXlSZWY7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbG9zZVZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmlzVm9pY2VNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFJlbG9hZCBjaGF0IGhpc3Rvcnkgd2hlbiB2b2ljZSBtb2RhbCBjbG9zZXMgKHNhbWUgYXMgaW5pdGlhbCBsb2FkKVxuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuZmV0Y2hDaGF0SGlzdG9yeSgpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3RvcnkgYWZ0ZXIgdm9pY2UgbW9kYWwgY2xvc2U6JyxcbiAgICAgICAgICBlcnIsXG4gICAgICAgICk7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBzaG93IGdyZWV0aW5nIHNvIGNoYXQgaXMgbm90IGVtcHR5XG4gICAgICAgIGlmICh0aGlzLmNoYXRMb2cubGVuZ3RoID09PSAwICYmIHRoaXMuZ3JlZXRpbmdNc2cpIHtcbiAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHsgTWVzc2FnZXM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwVm9pY2VUcmFuc2NyaXB0cygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIHVzZXIgdHJhbnNjcmlwdHNcbiAgICBjb25zdCB1c2VyU3ViID0gdGhpcy52b2ljZUFnZW50U2VydmljZS51c2VyVHJhbnNjcmlwdCQuc3Vic2NyaWJlKFxuICAgICAgKHRyYW5zY3JpcHQpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zY3JpcHQuZmluYWwgJiYgdHJhbnNjcmlwdC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2UgdG8gY2hhdFxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRyYW5zY3JpcHQudGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBib3QgdHJhbnNjcmlwdHNcbiAgICBjb25zdCBib3RTdWIgPSB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmJvdFRyYW5zY3JpcHQkLnN1YnNjcmliZShcbiAgICAgICh0cmFuc2NyaXB0KSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2NyaXB0ICYmIHRyYW5zY3JpcHQudHJpbSgpKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBtZXNzYWdlIGlzIGZyb20gYm90LCB1cGRhdGUgaXQsIG90aGVyd2lzZSBhZGQgbmV3XG4gICAgICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS50eXBlID09PSAnYWknKSB7XG4gICAgICAgICAgICBsYXN0TWVzc2FnZS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCksXG4gICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLnB1c2godXNlclN1YiwgYm90U3ViKTtcbiAgfVxufVxuXG5leHBvcnQgeyBWb2ljZU1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcbiJdfQ==
|
|
3680
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxLQUFLLFNBQVMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUMsQ0FBQyxnQkFBZ0I7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDbkgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQiwwQkFBMEIsR0FFM0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLHdEQUFpQyxDQUFBO0lBQ2pDLDREQUFxQyxDQUFBO0lBQ3JDLDREQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBUUQsTUFBTSxPQUFPLG1CQUFtQjtJQW9KOUIsWUFDVSxFQUFlLEVBQ2YsVUFBdUIsRUFDdkIsR0FBc0IsRUFDdEIsSUFBZ0IsRUFDaEIsU0FBdUIsRUFDdkIsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQUUsNkJBQTZCO0lBQ3ZFLGtCQUFzQyxFQUN0QyxpQkFBb0MsRUFDcEMsT0FBZ0IsRUFDaEIsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBYmxCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVU7UUF6SnBCLHNCQUFpQixHQUFHLHNCQUFzQixDQUFDO1FBQ25ELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZ0JBQVcsR0FBVyxVQUFVLENBQUM7UUF1QmpDLHFCQUFnQixHQUN2Qix1R0FBdUcsQ0FBQztRQXNCMUcseUdBQXlHO1FBQ2hHLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUdqRCxpS0FBaUs7UUFDeEosb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDckMseUlBQXlJO1FBQ2hJLDhCQUF5QixHQUFVLEVBQUUsQ0FBQztRQUMvQyxvSUFBb0k7UUFDM0gseUJBQW9CLEdBQVksSUFBSSxDQUFDO1FBQzlDLG9MQUFvTDtRQUMzSyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBSTFCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25ELDhJQUE4STtRQUNwSSx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCx5SkFBeUo7UUFDL0ksdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQXFDLENBQUM7UUFDckYsOEtBQThLO1FBQ3BLLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBMEQsQ0FBQztRQUN2RixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoRCxlQUFVLEdBQUcsNkJBQTZCLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsc0JBQXNCLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsbUJBQW1CLENBQUM7UUFDNUMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUN0QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLCtEQUErRDtRQUMvRCxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyx5REFBeUQ7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQVNoRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVUzQixrQ0FBNkIsR0FBVyxDQUFDLENBQUM7UUFDMUMsMEJBQXFCLEdBQVcsRUFBRSxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNoQyxXQUFNLEdBQVcsWUFBWSxDQUFDLENBQUMsNkJBQTZCO1FBRTVELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUMxQix5QkFBb0IsR0FBc0IsSUFBSSxDQUFDO1FBQy9DLGlDQUE0QixHQUFtQixFQUFFLENBQUM7UUF1RzFELHlCQUFvQixHQUFRLFdBQVcsQ0FBQztRQThEeEMsK0ZBQStGO1FBQ3ZGLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQXFDdEMsMkVBQTJFO1FBQ2xFLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiw0QkFBdUIsR0FBRyxDQUFDLENBQUM7UUFDckMsZ0ZBQWdGO1FBQ2hGLDJCQUFzQixHQUE0QixFQUFFLENBQUM7UUFDckQsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCwyQkFBc0IsR0FBNEIsRUFBRSxDQUFDO1FBQ3JELDJCQUFzQixHQUE0QixFQUFFLENBQUM7UUFDckQsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCwwRUFBMEU7UUFDMUUsbUNBQThCLEdBQTRCLEVBQUUsQ0FBQztRQUM3RCxzRUFBc0U7UUFDdEUsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCxtRkFBbUY7UUFDbkYsMEJBQXFCLEdBQTRCLEVBQUUsQ0FBQztRQTBxRXBELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBbUd4QixrQkFBYSxHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztZQUVwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUMvQixJQUFJLEdBQUcsRUFBRTtvQkFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUM5QztnQkFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixPQUFPO1lBQ1QsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksY0FBYyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUF1VUYsNEJBQXVCLEdBQVEsRUFBRSxDQUFDO1FBQ2xDLDBCQUFxQixHQUFRLENBQUMsQ0FBQyxDQUFDO1FBeVFoQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQW9FcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFJeEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFpS3hCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFjN0IsTUFBTTtRQUNOLE1BQU07UUFDTiw0RUFBNEU7UUFDNUUsNExBQTRMO1FBQzVMLDZEQUE2RDtRQUM3RCxPQUFPO1FBQ1AsTUFBTTtRQUNOLGlFQUFpRTtRQUNqRSxrSkFBa0o7UUFDbEosd0VBQXdFO1FBQ3hFLE9BQU87UUFDUCxNQUFNO1FBQ04seUVBQXlFO1FBQ3pFLGdJQUFnSTtRQUNoSSwrRUFBK0U7UUFDL0UsT0FBTztRQUNQLE1BQU07UUFDTixxRkFBcUY7UUFDckYsc0hBQXNIO1FBQ3RILDJGQUEyRjtRQUMzRixPQUFPO1FBQ1AsTUFBTTtRQUNOLDJFQUEyRTtRQUMzRSw2SUFBNkk7UUFDN0ksMkZBQTJGO1FBQzNGLE1BQU07UUFDTixJQUFJO1FBQ0osYUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQWdCN0MsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBVzdCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQXdDMUIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUF3WnBCLDREQUE0RDtRQUM1RCw2QkFBd0IsR0FBVyxFQUFFLENBQUM7UUE5eUhwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IsSUFBSTtJQUNOLENBQUM7SUFDRCxjQUFjLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxjQUFjO1FBQ1osT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsaUJBQWlCO1FBQ2YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsNkZBQTZGO0lBQzdGLG1CQUFtQixDQUFDLElBQStCO1FBQ2pELElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLHVEQUF1RDtRQUN2RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBRTlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFCO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UsbUZBQW1GO1FBQ25GLElBQ0UsT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDekQ7WUFDQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsd0hBQXdIO0lBQ2hILG9CQUFvQjtRQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsV0FBVyxtQ0FBUSxVQUFVLEtBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRSxDQUFDO2dCQUNwRCxPQUFPO2FBQ1I7U0FDRjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFJRCxRQUFRO1FBQ04sdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXhDLGlEQUFpRDtRQUVqRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxDQUFDO1NBQzdDO2FBQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQztTQUN6QzthQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1NBQ3ZDO1FBRUQseUNBQXlDO1FBQ3pDLDJDQUEyQztRQUUzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQzdCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FDL0IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FDRixDQUFDO1FBQ0Ysc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVTthQUNaLDZCQUE2QixDQUM1QixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUMxQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1EOzs7T0FHRztJQUNLLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQy9DLElBQUksQ0FBQyxLQUFLLEVBQ1YsZUFBZSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQXdCRCxzRkFBc0Y7SUFDdEYsU0FBUyxDQUFDLElBQVk7O1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsV0FBVyxtQ0FBSSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBYTs7UUFDbEMsTUFBTSxHQUFHLEdBQ1AsTUFBQSxNQUFBLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFdBQVcsbUNBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFNBQVMsbUNBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFFBQVEsbUNBQUksRUFBRSxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUUsNkRBQTZEO1FBQzdELElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsMEJBQTBCLENBQUMsUUFBYTtRQUN0Qyx1REFBdUQ7UUFDdkQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBUyxFQUFFLFFBQWE7O1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxHQUFHLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFTLEVBQUUsUUFBYSxFQUFFLEVBQVU7O1FBQzVELE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsK0NBQW5CLEVBQUUsQ0FBcUIsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsOEJBQThCLG1DQUM5QixJQUFJLENBQUMsOEJBQThCLEtBQ3RDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNaLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFhOztRQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxlQUFlLDBDQUFFLEdBQUcsQ0FBQztRQUMzQyxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWE7O1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGVBQWUsMENBQUUsU0FBUyxDQUFDO1FBQ3BELE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBUyxFQUFFLFFBQWE7O1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxHQUFHLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsc0RBQXNEO1FBQ3RELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBUyxFQUFFLFFBQWE7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLElBQVMsRUFDVCxRQUFhLEVBQ2IsT0FBaUMsRUFDakMsRUFBVTs7UUFFVixNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxlQUFlLCtDQUFuQixFQUFFLENBQXFCLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxxQkFBcUIsbUNBQVEsSUFBSSxDQUFDLHFCQUFxQixLQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyQixzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx1QkFBdUIsQ0FDckIsSUFBUyxFQUNULFFBQWEsRUFDYixPQUFpQyxFQUNqQyxFQUFVOztRQUVWLE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsK0NBQW5CLEVBQUUsQ0FBcUIsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FDWixDQUFDO1FBQ0YsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJO2dCQUNGLElBQUksSUFBSSxFQUFFO29CQUNSLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLElBQUksT0FBUSxDQUFTLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTt3QkFDOUMsQ0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7NEJBQ3BCLHNDQUFzQzs0QkFDdEMsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FDYixDQUFDOzRCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDakI7YUFDRjtZQUFDLFdBQU07Z0JBQ04sU0FBUzthQUNWO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFTLEVBQUUsUUFBYSxFQUFFLFNBQWtCO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQzVELElBQUksQ0FBQyx1QkFBdUIsbUNBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsS0FDL0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQ2YsYUFBK0QsRUFDL0QsZUFBd0I7UUFFeEIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFDRSxPQUFPLGFBQWEsS0FBSyxRQUFRO2FBQ2pDLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLENBQUE7YUFDcEIsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLEdBQUcsQ0FBQSxFQUNsQjtZQUNBLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN0RCxLQUFLLEVBQUUsT0FBTyxFQUNkLEdBQUcsRUFBRSxTQUFTLEVBQ2QsSUFBSSxFQUFFLFNBQVMsSUFDWixVQUFVLEVBQ2IsQ0FBQztnQkFDSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbEQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsS0FBSyxJQUNWLFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM5QyxJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE1BQU0sRUFBRSxLQUFLLElBQ1YsVUFBVSxFQUNiLENBQUM7Z0JBQ0gsT0FBTyxHQUFHLGFBQWEsTUFBTSxTQUFTLE1BQU0sT0FBTyxFQUFFLENBQUM7YUFDdkQ7WUFBQyxXQUFNO2dCQUNOLE9BQU8sRUFBRSxDQUFDO2FBQ1g7U0FDRjtRQUNELElBQUksT0FBTyxhQUFhLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3BDLGtEQUFrRCxDQUNuRCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDbEMsZ0RBQWdELENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ25ELElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN0RCxLQUFLLEVBQUUsT0FBTyxFQUNkLEdBQUcsRUFBRSxTQUFTLEVBQ2QsSUFBSSxFQUFFLFNBQVMsSUFDWixVQUFVLEVBQ2IsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN2RCxJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE1BQU0sRUFBRSxLQUFLLElBQ1YsVUFBVSxFQUNiLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbkQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsS0FBSyxJQUNWLFVBQVUsRUFDYixDQUFDO1lBQ0gsT0FBTyxHQUFHLGFBQWEsTUFBTSxjQUFjLE1BQU0sWUFBWSxFQUFFLENBQUM7U0FDakU7UUFBQyxXQUFNO1lBQ04sT0FBTyxhQUFhLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUNqQixhQUErRCxFQUMvRCxlQUF3QjtRQUV4QixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJO1lBQ0YsSUFBSSxPQUFPLEdBQWdCLElBQUksQ0FBQztZQUNoQyxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsS0FBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsS0FBSyxDQUFBLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekM7aUJBQU0sSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3BDLGtEQUFrRCxDQUNuRCxDQUFDO2dCQUNGLElBQUksVUFBVTtvQkFDWixPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDN0Q7WUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxJQUFJO2dCQUNGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM1QyxHQUFHLEVBQUUsU0FBUyxJQUNYLFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM5QyxLQUFLLEVBQUUsT0FBTyxJQUNYLFVBQVUsRUFDYixDQUFDO2dCQUNILE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdkI7WUFBQyxXQUFNO2dCQUNOLHlGQUF5RjtnQkFDekYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdkI7U0FDRjtRQUFDLFdBQU07WUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQ3BCLGFBQStELEVBQy9ELGVBQXdCO1FBRXhCLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSTtZQUNGLElBQUksT0FBTyxHQUFnQixJQUFJLENBQUM7WUFDaEMsSUFBSSxLQUFLLEdBQWdCLElBQUksQ0FBQztZQUM5QixJQUNFLE9BQU8sYUFBYSxLQUFLLFFBQVE7aUJBQ2pDLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLENBQUE7aUJBQ3BCLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxHQUFHLENBQUEsRUFDbEI7Z0JBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDcEMsa0RBQWtELENBQ25ELENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDbEMsZ0RBQWdELENBQ2pELENBQUM7Z0JBQ0YsSUFBSSxVQUFVO29CQUNaLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxRQUFRO29CQUFFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNyRTtZQUNELElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSTtnQkFDRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbEQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxJQUNULFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUNYLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDOUIsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxJQUNULFVBQVUsRUFDYjtvQkFDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzFEO1lBQUMsV0FBTTtnQkFDTixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO29CQUNwRCxJQUFJLEVBQUUsU0FBUztvQkFDZixNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLElBQUk7aUJBQ2IsQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUNYLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO3dCQUNoQyxJQUFJLEVBQUUsU0FBUzt3QkFDZixNQUFNLEVBQUUsU0FBUzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IsQ0FBQztvQkFDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzFEO1NBQ0Y7UUFBQyxXQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUF3TEQ7Ozs7T0FJRztJQUNILHVCQUF1QixDQUFDLEVBQVU7O1FBQ2hDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RELE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxXQUEwQztpQkFDNUQsbUJBQW1CLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3JDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUM5QyxDQUFDO1lBQ0YsSUFBSSxNQUFNO2dCQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxHQUFHLEdBQUksSUFBSSxDQUFDLFdBQTBDLENBQUMsV0FBVyxDQUFDO1FBQ3pFLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQ3RDLENBQUM7WUFDRixJQUFJLEtBQUs7Z0JBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFCLElBQUk7WUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO2dCQUNqRCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsT0FBTzthQUN0QixDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUNqRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQUMsV0FBTTtZQUNOLE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRUQsNkJBQTZCLENBQUMsWUFBaUI7UUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0QsT0FBTyxDQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUM7Z0JBQ2hELDJCQUEyQixDQUM1QixDQUFDO1NBQ0g7UUFDRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUNqQixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztpQkFDdkIsSUFBSSxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSyxLQUFhLENBQUMsV0FBVyxFQUFFO1lBQ3BFLE9BQU8sTUFBTSxDQUFFLEtBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsRDtRQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDO1lBQ2hELDJCQUEyQixDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWU7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQy9CLGdHQUFnRztZQUNoRyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ25ELHNGQUFzRjtZQUN0RixNQUFNLE9BQU8sR0FBRyxNQUFBLE1BQUEsQ0FBQyxDQUFDLGFBQWEsbUNBQUksQ0FBQyxDQUFDLG1CQUFtQixtQ0FBSSxFQUFFLENBQUM7WUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNwRSxpSUFBaUk7WUFDakksTUFBTSxnQkFBZ0IsR0FDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUM3QixDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUM3QixNQUFNLElBQUksR0FDUixDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxlQUFlO3dCQUM3QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7d0JBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFELENBQUMsY0FBRCxDQUFDLEdBQUksRUFBRSxDQUFDOzZCQUNaLElBQUksRUFBRTs2QkFDTixXQUFXLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJO2dCQUNoQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVE7b0JBQzlCLENBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBQSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsbUNBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN0QixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsaUZBQWlGO1lBQ2pGLE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBWSxJQUFJLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RSxNQUFNLE1BQU0sR0FBRyxlQUFlO2dCQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE1BQU0sVUFBVSxHQUNkLGFBQWEsSUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFNLFdBQVcsR0FBRyxNQUFNO2dCQUN4QixDQUFDLENBQUMsR0FBRyxVQUFVLEtBQUssTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNwQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNyRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFBLE1BQUEsQ0FBQyxDQUFDLFdBQVcsbUNBQUksQ0FBQyxDQUFDLFFBQVEsbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUN4QixNQUFBLE1BQUEsTUFBQSxDQUFDLENBQUMsV0FBVyxtQ0FBSSxDQUFDLENBQUMsSUFBSSxtQ0FBSSxDQUFDLENBQUMsV0FBVyxtQ0FBSSxFQUFFLENBQy9DLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjO2dCQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUM7WUFDMUQsMElBQTBJO1lBQzFJLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxlQUFlLElBQUksRUFBRSxDQUFDO1lBQ3hELDBGQUEwRjtZQUMxRixJQUFJLENBQUMsU0FBUyxJQUFJLGVBQWUsRUFBRTtnQkFDakMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDO2FBQ3JFO1lBQ0QsMEZBQTBGO1lBQzFGLE1BQU0sZUFBZSxHQUFHLGVBQWU7Z0JBQ3JDLENBQUMsQ0FBQyxHQUFHLFNBQVMsS0FBSyxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDZCxPQUFPO2dCQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBQSxDQUFDLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBQSxDQUFDLENBQUMsU0FBUyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzNDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBQSxDQUFDLENBQUMsUUFBUSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLElBQUksRUFBRSxXQUFXO2dCQUNqQixTQUFTO2dCQUNULGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLEVBQUU7Z0JBQ3BFLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRztnQkFDdEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLO2dCQUMxQixXQUFXO2dCQUNYLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixlQUFlO2dCQUNmLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLFlBQW1COztRQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTywwQ0FBRSxRQUFRLENBQUM7WUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRTtvQkFDcEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBRixFQUFFLGNBQUYsRUFBRSxHQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQyxJQUFJLEdBQUc7d0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFlBQW1COztRQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPO1FBQ3pDLEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFO1lBQy9CLE1BQU0sVUFBVSxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTywwQ0FBRSxRQUFRLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7cUJBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBRCxDQUFDLGNBQUQsQ0FBQyxHQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO3FCQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNwQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxZQUFZLEdBQUcsVUFBVTtpQkFDNUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDakMsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLEtBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtnQkFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2FBQzFDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsWUFBbUI7UUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUU3QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUN4QixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDaEUsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLGdEQUFnRDtnQkFDaEQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBWTtRQUM3QixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLO1lBQ2IsT0FBTyxDQUFDLFNBQVM7WUFDakIsT0FBTyxDQUFDLFNBQVM7WUFDakIsT0FBTyxDQUFDLGVBQWU7WUFDdkIsT0FBTyxDQUFDLFlBQVk7WUFDcEIsT0FBTyxDQUFDLGNBQWM7WUFDdEIsT0FBTyxDQUFDLFFBQVE7WUFDaEIsT0FBTyxDQUFDLEtBQUs7U0FDZCxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxXQUFnQjs7UUFDckMsTUFBTSxJQUFJLEdBQ1IsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsWUFBWSxNQUFJLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsWUFBWSxDQUFBLENBQUM7UUFDbEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hELE1BQU0sR0FBRyxHQUFHLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsUUFBUSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBWTtRQUNoQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sSUFBSSxHQUNSLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBWTtRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLEdBQUcsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxLQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2pELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFnQjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6QyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7WUFBQyxPQUFBLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBQSxDQUFDLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pDLE9BQU8sRUFDTCxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDMUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsUUFBUSxFQUNOLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUMzQixDQUFDLENBQUMsSUFBSTtnQkFDVixLQUFLLEVBQ0gsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3hCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLEVBQUUsRUFBRSxNQUFBLE1BQUEsTUFBQSxNQUFBLENBQUMsQ0FBQyxFQUFFLG1DQUFJLENBQUMsQ0FBQyxNQUFNLG1DQUFJLENBQUMsQ0FBQyxHQUFHLG1DQUFJLENBQUMsQ0FBQyxVQUFVLG1DQUFJLFNBQVM7Z0JBQzFELFNBQVMsRUFDUCxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDNUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsV0FBVyxFQUNULENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM5QixDQUFDLENBQUMsSUFBSTtnQkFDVixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7b0JBQ2hDLENBQUMsQ0FBQzt3QkFDRSxHQUFHLEVBQ0QsQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLEdBQUcsS0FBSSxJQUFJOzRCQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFOzRCQUN6QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFOzRCQUN0QyxDQUFDLENBQUMsSUFBSTt3QkFDVixTQUFTLEVBQ1AsQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsS0FBSSxJQUFJOzRCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFOzRCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFOzRCQUM1QyxDQUFDLENBQUMsSUFBSTtxQkFDWDtvQkFDSCxDQUFDLENBQUMsSUFBSTthQUNULENBQUMsQ0FBQTtTQUFBLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFlO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOztZQUM3QixNQUFNLE9BQU8sR0FDWCxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU87Z0JBQ3pCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxPQUFPO2dCQUNYLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCxNQUFNLFFBQVEsR0FBRyxNQUFBLENBQUMsQ0FBQyxLQUFLLG1DQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQ1osUUFBUSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLEVBQ0wsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUNsRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzFCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLFFBQVE7Z0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLEVBQUUsRUFBRSxNQUFBLE1BQUEsTUFBQSxNQUFBLENBQUMsQ0FBQyxFQUFFLG1DQUFJLENBQUMsQ0FBQyxNQUFNLG1DQUFJLENBQUMsQ0FBQyxHQUFHLG1DQUFJLENBQUMsQ0FBQyxTQUFTLG1DQUFJLFNBQVM7Z0JBQ3pELFNBQVMsRUFDUCxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDNUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsV0FBVztnQkFDWCxlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7b0JBQ2hDLENBQUMsQ0FBQzt3QkFDRSxHQUFHLEVBQ0QsQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLEdBQUcsS0FBSSxJQUFJOzRCQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFOzRCQUN6QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFOzRCQUN0QyxDQUFDLENBQUMsSUFBSTt3QkFDVixTQUFTLEVBQ1AsQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsS0FBSSxJQUFJOzRCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFOzRCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFOzRCQUM1QyxDQUFDLENBQUMsSUFBSTtxQkFDWDtvQkFDSCxDQUFDLENBQUMsSUFBSTthQUNULENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFlO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOztZQUM3QixNQUFNLE9BQU8sR0FDWCxDQUFDLENBQUMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUNwRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU87Z0JBQ3pCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxPQUFPO2dCQUNYLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCxNQUFNLE9BQU8sR0FBRyxNQUFBLE1BQUEsTUFBQSxDQUFDLENBQUMsR0FBRyxtQ0FBSSxDQUFDLENBQUMsUUFBUSxtQ0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEksTUFBTSxPQUFPLEdBQ1gsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUNsRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxPQUFPO2dCQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakQsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMvRixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQy9ELE9BQU8sRUFBRSxNQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sbUNBQUksQ0FBQyxDQUFDLE9BQU8sbUNBQUksSUFBSTtnQkFDdkMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuRSxXQUFXLEVBQUUsV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksSUFBSTtnQkFDaEMsOEZBQThGO2dCQUM5RixHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNwRCxPQUFPO2FBQ1IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7WUFDM0IsTUFBTSxPQUFPLEdBQ1gsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxNQUFNLFdBQVcsR0FBRyxPQUFPO2dCQUN6QixDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO29CQUN6QixDQUFDLENBQUMsT0FBTztnQkFDWCxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1QsTUFBTSxPQUFPLEdBQUcsTUFBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLEdBQUcsbUNBQUksQ0FBQyxDQUFDLFFBQVEsbUNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1DQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hJLE1BQU0sT0FBTyxHQUNYLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDbEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1gsT0FBTztnQkFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZELE9BQU8sRUFDTCxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDMUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLE1BQUEsTUFBQSxDQUFDLENBQUMsT0FBTyxtQ0FBSSxDQUFDLENBQUMsT0FBTyxtQ0FBSSxJQUFJO2dCQUN2QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLFdBQVcsRUFBRSxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxJQUFJO2dCQUNoQyw4RkFBOEY7Z0JBQzlGLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BELE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0IsQ0FBQyxlQUFzQjtRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMvQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RyxPQUFPO2dCQUNMLElBQUk7Z0JBQ0osT0FBTyxFQUNMLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUMxQixDQUFDLENBQUMsSUFBSTtnQkFDVixRQUFRLEVBQ04sQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLEtBQUssRUFDSCxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDNUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsV0FBVyxFQUNULENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM5QixDQUFDLENBQUMsSUFBSTtnQkFDVixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsT0FBZTtRQUNuQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBVSxFQUFFLENBQUM7UUFDM0IsK0VBQStFO1FBQy9FLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLGlHQUFpRztRQUNqRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsU0FBUztZQUNyQixNQUFNLEtBQUssR0FBRyxLQUFLO2lCQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsU0FBUztZQUMvRCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLE9BQU87d0JBQUUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDM0M7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDaEM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDbkM7Z0JBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsSUFBSSxDQUFDLFFBQVE7b0JBQUUsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNoRTtZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osS0FBSztnQkFDTCxRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7Z0JBQy9CLGFBQWEsRUFBRSxhQUFhLElBQUksU0FBUztnQkFDekMsV0FBVyxFQUFFLFdBQVcsSUFBSSxTQUFTO2dCQUNyQyxRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7Z0JBQy9CLFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7O1FBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksbUNBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBUzs7UUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDdEQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFTOztRQUM5QixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLG1DQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNyRCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7O1FBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksbUNBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBUzs7UUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxzQkFBc0IsbUNBQ3RCLElBQUksQ0FBQyxzQkFBc0IsS0FDOUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFTO1FBQzNCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyx1QkFBdUIsbUNBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsS0FDL0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxzQkFBc0IsbUNBQ3RCLElBQUksQ0FBQyxzQkFBc0IsS0FDOUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxzQkFBc0IsbUNBQ3RCLElBQUksQ0FBQyxzQkFBc0IsS0FDOUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFTO1FBQzNCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyx1QkFBdUIsbUNBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsS0FDL0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGNBQWM7WUFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksY0FBYyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxXQUFnQjs7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssS0FBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxDQUFBLEVBQUU7WUFDcEQsT0FBTztnQkFDTDtvQkFDRSxNQUFNLEVBQUUsTUFBTTtvQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPO2lCQUMvQzthQUNGLENBQUM7U0FDSDtRQUNELE1BQU0sR0FBRyxHQUFHLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsWUFBWSxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELE1BQU0sS0FBSyxHQUF3QyxFQUFFLENBQUM7UUFDdEQsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQ1IsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLGVBQWU7Z0JBQ3JELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDdkMsTUFBTSxLQUFLLEdBQ1QsSUFBSSxLQUFLLE1BQU07b0JBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTTtvQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDO2dCQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxXQUFnQjs7UUFDaEMsTUFBTSxFQUFFLEdBQ04sTUFBQSxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLDBDQUFFLGdCQUFnQixtQ0FBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsZ0JBQWdCLENBQUM7UUFDMUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssbUJBQW1CLENBQUMsUUFBUSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBQyxXQUFnQjtRQUN0QyxJQUFJLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxDQUFBO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLFdBQWdCOztRQUNyQyxNQUFNLENBQUMsR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBQSxDQUFDLENBQUMsYUFBYSwwQ0FBRSxLQUFLLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBQSxDQUFDLENBQUMsbUJBQW1CLDBDQUFFLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2pELElBQUk7WUFDRixNQUFNLE1BQU0sR0FDVixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFBQyxXQUFNO1lBQ04sT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsMEhBQTBIO0lBQzFILGdCQUFnQixDQUFDLFdBQWdCOztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLDBDQUFFLGlCQUFpQjtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG1CQUFtQixDQUNqQixXQUFnQixFQUNoQixJQUF1QztRQUV2QyxJQUFJLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxDQUFBO1lBQUUsT0FBTztRQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztnQkFDNUIsV0FBVzthQUNaLENBQUMsQ0FBQztZQUNILE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5Q0FBeUMsQ0FBQztnQkFDOUQseUNBQXlDLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87WUFDNUIsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjthQUM5QywyQkFBMkIsRUFBRTthQUM3QixTQUFTLENBQ1IsQ0FBQyxHQUFHLEVBQUUsRUFBRTs7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFO2dCQUNsRCxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLENBQUE7Z0JBQ3JDLFNBQVMsRUFBRSxNQUFBLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVywwQ0FBRSxVQUFVO2dCQUMxQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUEsTUFBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsMENBQUUsTUFBTSxDQUFBO2FBQ3pDLENBQUMsQ0FBQztZQUNILDhDQUE4QztZQUM5QyxJQUFJLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCx3Q0FBd0MsRUFDeEMsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLENBQ3BCLENBQUM7Z0JBQ0YsTUFBTSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLEdBQUcsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLENBQUM7Z0JBRXhCLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7Z0JBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNqRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FDckMsQ0FBQztnQkFFRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUM7d0JBQzFELE1BQU0sQ0FBQztvQkFDVCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUNoRCxpQkFBaUIsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixXQUFXLFlBQVksQ0FBQyxDQUFDO2lCQUM1RDtnQkFFRCxJQUFJLENBQUMsK0JBQStCO29CQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBRWhDLElBQUksSUFBSSxDQUFDLDZCQUE2QixJQUFJLEdBQUcsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDMUQscUJBQXFCLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO29CQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7aUJBQ3hCO2dCQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7aUJBQU0sSUFBSSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsRUFBRTtnQkFDOUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3RDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFFeEQsMkRBQTJEO2dCQUMzRCxNQUFNLGFBQWEsR0FDakIsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLG9CQUFvQjtvQkFDaEQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLHVCQUF1QjtvQkFDbkQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLDBCQUEwQjtvQkFDdEQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLHVCQUF1QjtvQkFDbkQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLHNCQUFzQjtvQkFDbEQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLHVCQUF1QjtvQkFDbkQsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLGVBQWUsQ0FBQztnQkFDOUMsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLE1BQU0sVUFBVSxHQUNkLE1BQUEsTUFBQSxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDcEQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7d0JBQ2hELElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQzt3QkFDekIsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxRQUFRLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxtQ0FBSSxFQUFFLENBQUM7eUJBQ25DO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLCtHQUErRzs0QkFDL0csUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDbkQ7d0JBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3JCLE1BQU0sS0FBSyxHQUNULFlBQVksQ0FBQyxVQUFVLElBQUksaUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDOzRCQUMzRCxNQUFNLFNBQVMsR0FBRztnQ0FDaEIsR0FBRyxFQUFFLEtBQUs7Z0NBQ1YsSUFBSSxFQUFFLGVBQWU7Z0NBQ3JCLE9BQU8sRUFBRSxVQUFVO29DQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQztvQ0FDM0MsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dDQUM5QixZQUFZLEVBQUUsTUFBTTs2QkFDckIsQ0FBQzs0QkFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDOzRCQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtnQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7NkJBQ3ZDO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzZCQUM5Qjs0QkFDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzRCQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzs0QkFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDO3lCQUNmO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7b0JBQ0QsOEZBQThGO2lCQUMvRjtnQkFFRCx5SUFBeUk7Z0JBQ3pJLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLHFCQUFxQixFQUFFO29CQUNyRCxNQUFNLFVBQVUsR0FDZCxNQUFBLE1BQUEsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUM7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLFNBQVMsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTLG1DQUFJLEVBQUUsQ0FBQzs0QkFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUN0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixNQUFNLEtBQUssR0FDVCxZQUFZLENBQUMsVUFBVSxJQUFJLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQ0FDNUQsTUFBTSxTQUFTLEdBQUc7b0NBQ2hCLEdBQUcsRUFBRSxLQUFLO29DQUNWLElBQUksRUFBRSxnQkFBZ0I7b0NBQ3RCLE9BQU8sRUFBRSxVQUFVO3dDQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQzt3Q0FDM0MsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29DQUM5QixhQUFhLEVBQUUsTUFBTTtpQ0FDdEIsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDO2dDQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7aUNBQ3ZDO3FDQUFNO29DQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUN0RCxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNmO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMERBQTBELEVBQzFELENBQUMsQ0FDRixDQUFDO3lCQUNIO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7b0JBQ0Qsd0lBQXdJO2lCQUN6STtnQkFFRCx1R0FBdUc7Z0JBQ3ZHLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLG9CQUFvQixFQUFFO29CQUNwRCxNQUFNLFVBQVUsR0FDZCxNQUFBLE1BQUEsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUM7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsbUNBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDOzRCQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLE1BQU0sS0FBSyxHQUNULFlBQVksQ0FBQyxVQUFVLElBQUksaUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUMzRCxNQUFNLFNBQVMsR0FBRztvQ0FDaEIsR0FBRyxFQUFFLEtBQUs7b0NBQ1YsSUFBSSxFQUFFLGVBQWU7b0NBQ3JCLE9BQU8sRUFBRSxVQUFVO3dDQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQzt3Q0FDM0MsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29DQUM5QixZQUFZLEVBQUUsTUFBTTtpQ0FDckIsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDO2dDQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7aUNBQ3ZDO3FDQUFNO29DQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUN0RCxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNmO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQ1gseURBQXlELEVBQ3pELENBQUMsQ0FDRixDQUFDO3lCQUNIO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7b0JBQ0QsMEVBQTBFO2lCQUMzRTtnQkFFRCwyRUFBMkU7Z0JBQzNFLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLG9CQUFvQixFQUFFO29CQUNwRCxNQUFNLFVBQVUsR0FDZCxNQUFBLE1BQUEsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUM7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzs0QkFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixNQUFNLEtBQUssR0FDVCxZQUFZLENBQUMsVUFBVSxJQUFJLGlCQUFpQixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQ0FDM0QsTUFBTSxTQUFTLEdBQUc7b0NBQ2hCLEdBQUcsRUFBRSxLQUFLO29DQUNWLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsVUFBVTt3Q0FDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUM7d0NBQzNDLENBQUMsQ0FBQyxFQUFFO29DQUNOLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQ0FDOUIsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUM7Z0NBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FDdkIsQ0FBQztnQ0FDRixJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUU7b0NBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO2lDQUN2QztxQ0FBTTtvQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQ0FDOUI7Z0NBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQ0FDdEQsTUFBTSxHQUFHLElBQUksQ0FBQzs2QkFDZjt5QkFDRjt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixPQUFPLENBQUMsS0FBSyxDQUNYLHlEQUF5RCxFQUN6RCxDQUFDLENBQ0YsQ0FBQzt5QkFDSDtxQkFDRjtvQkFDRCxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN4QixPQUFPO3FCQUNSO2lCQUNGO2dCQUVELGdHQUFnRztnQkFDaEcsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssa0JBQWtCLEVBQUU7b0JBQ2xELE1BQU0sVUFBVSxHQUNkLE1BQUEsTUFBQSxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDcEQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sbUNBQUksRUFBRSxDQUFDOzRCQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ2hELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLE1BQU0sS0FBSyxHQUNULFlBQVksQ0FBQyxVQUFVLElBQUksaUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUMzRCxNQUFNLFNBQVMsR0FBRztvQ0FDaEIsR0FBRyxFQUFFLEtBQUs7b0NBQ1YsSUFBSSxFQUFFLGVBQWU7b0NBQ3JCLE9BQU8sRUFBRSxVQUFVO3dDQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQzt3Q0FDM0MsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29DQUM5QixZQUFZLEVBQUUsTUFBTTtpQ0FDckIsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDO2dDQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7aUNBQ3ZDO3FDQUFNO29DQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUN0RCxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNmO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQ1gsdURBQXVELEVBQ3ZELENBQUMsQ0FDRixDQUFDO3lCQUNIO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBRUQsNkZBQTZGO2dCQUM3RixJQUFJLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFNBQVMsTUFBSywyQkFBMkIsRUFBRTtvQkFDM0QsTUFBTSxVQUFVLEdBQ2QsTUFBQSxNQUFBLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFDO29CQUNwRCxNQUFNLFVBQVUsR0FDZCxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLElBQUksVUFBVSxFQUFFO3dCQUNkLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsTUFBTSxlQUFlLEdBQUcsT0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxxQ0FBSSxFQUFFLENBQUM7NEJBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQzs0QkFDNUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQ0FDckIsTUFBTSxLQUFLLEdBQ1QsWUFBWSxDQUFDLFVBQVUsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0NBQzdELE1BQU0sU0FBUyxHQUFHO29DQUNoQixHQUFHLEVBQUUsS0FBSztvQ0FDVixJQUFJLEVBQUUsaUJBQWlCO29DQUN2QixPQUFPLEVBQUUsVUFBVTt3Q0FDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUM7d0NBQzNDLENBQUMsQ0FBQyxFQUFFO29DQUNOLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQ0FDOUIsYUFBYSxFQUFFLE1BQU07aUNBQ3RCLENBQUM7Z0NBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FDdkIsQ0FBQztnQ0FDRixJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUU7b0NBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO2lDQUN2QztxQ0FBTTtvQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQ0FDOUI7Z0NBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQ0FDdEQsTUFBTSxHQUFHLElBQUksQ0FBQzs2QkFDZjt5QkFDRjt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixPQUFPLENBQUMsS0FBSyxDQUNYLGdFQUFnRSxFQUNoRSxDQUFDLENBQ0YsQ0FBQzt5QkFDSDtxQkFDRjtvQkFDRCxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN4QixPQUFPO3FCQUNSO2lCQUNGO2dCQUVELElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLG1CQUFtQixFQUFFO29CQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztpQkFDUjtnQkFFRCxNQUFNLEVBQ0osZUFBZSxFQUNmLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixXQUFXLEdBQ1osR0FBRyxXQUFXLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUU7b0JBQ2xELFVBQVU7b0JBQ1YsZUFBZTtvQkFDZixNQUFNO29CQUNOLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTTtvQkFDbkIsWUFBWSxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNO29CQUM1QixlQUFlLEVBQUUsT0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsTUFBTSxxQ0FBSSxDQUFDO29CQUN6QyxrQkFBa0IsRUFBRSxPQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLHFDQUFJLENBQUM7aUJBQ2hELENBQUMsQ0FBQztnQkFDSCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQzNCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFO3dCQUN0RCxVQUFVO3dCQUNWLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07cUJBQ25DLENBQUMsQ0FBQztvQkFDSCxrQkFBa0IsR0FBRzt3QkFDbkIsR0FBRyxFQUFFLFVBQVU7d0JBQ2YsSUFBSSxFQUFFLElBQUk7d0JBQ1YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUMvQixDQUFDO29CQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRXRDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLEVBQUU7d0JBQ3JELFVBQVU7cUJBQ1gsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELDRDQUE0QztnQkFDNUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDNUQsa0JBQWtCLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCwyQkFBMkIsRUFDM0IsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE1BQU0sRUFDbkIsV0FBVyxDQUNaLENBQUM7b0JBQ0Ysa0JBQWtCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztvQkFDN0Msa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ2hGLGtCQUFrQixDQUFDLGdCQUFnQixHQUFHLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7b0JBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2dCQUVELElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxFQUFFO3dCQUM3RCxVQUFVO3dCQUNWLFlBQVksRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTTt3QkFDNUIsYUFBYSxFQUFFLE9BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsaURBQWpCLE1BQU0sRUFBYyxDQUFDLEVBQUUsR0FBRyxDQUFDO3FCQUMzQyxDQUFDLENBQUM7b0JBRUgsa0JBQWtCLENBQUMsT0FBTzt3QkFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztpQkFDeEI7Z0JBRUQsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUM1RCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0MsRUFDaEMsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsTUFBTSxFQUN4QixnQkFBZ0IsQ0FDakIsQ0FBQztvQkFDRixrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7b0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2dCQUVELElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsMkJBQTJCLEVBQzNCLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxNQUFNLEVBQ25CLFdBQVcsQ0FDWixDQUFDO29CQUNGLGtCQUFrQixDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsd0NBQXdDO2lCQUN6QztnQkFFRCxpREFBaUQ7YUFDbEQ7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2FBQ3hEO1FBQ0gsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUIsS0FBSSxDQUFDO0lBQzlCLFdBQVcsQ0FBQyxJQUFTLEVBQUUsSUFBWTtRQUNqQyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssV0FBVztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2hELDZCQUE2QjtJQUMvQixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsY0FBc0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3BFLDBDQUEwQztRQUMxQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdELFFBQVEsY0FBYyxFQUFFO1lBQ3RCLEtBQUssQ0FBQztnQkFDSixPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFFekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUM5QyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxzQkFBc0IsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDMUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUM5QyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3pDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFTO2dCQUN0RCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRVAsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsaUJBQWlCLDBDQUFFLE1BQU07Z0JBQ3RELENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO2dCQUN2QixDQUFDLENBQUM7b0JBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FDakIsMERBQTBELENBQzNEO2lCQUNGLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUN6RCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FDTixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsa0JBQWtCLElBQUksQ0FBQyxlQUFlLGVBQWUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xILE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFNLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxXQUFXLENBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxNQUFVO1FBQ3hELE9BQU8sQ0FBQyxLQUFVLEVBQWlCLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLEVBQUUsQ0FBQyxNQUFXLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLDhGQUE4RjtJQUM5RixhQUFhO0lBQ2Isa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLHFDQUFxQztJQUNyQyxpRUFBaUU7SUFDakUsZ0NBQWdDO0lBQ2hDLDJCQUEyQjtJQUMzQixXQUFXO0lBQ1gsU0FBUztJQUNULElBQUk7SUFFSixrSEFBa0g7SUFDMUcsd0JBQXdCLENBQUMsSUFBUztRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsV0FBVztZQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0I7WUFDbEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDM0QsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTs7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxLQUFJLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDcEMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTs7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsTUFBTTt3QkFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ2pELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQzNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3dCQUN0QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO3dCQUM3QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7cUJBQ2QsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLHVGQUF1RjtvQkFDdkYsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxTQUFTLENBQUM7b0JBQzdDLE1BQU0sYUFBYSxHQUNqQixRQUFRLEtBQUssb0JBQW9CO3dCQUNqQyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssMEJBQTBCO3dCQUN2QyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssc0JBQXNCO3dCQUNuQyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssZUFBZSxDQUFDO29CQUMvQixJQUNFLGFBQWE7eUJBQ2IsTUFBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQSxFQUNyRDt3QkFDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dCQUNwRSxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7d0JBQ3pCLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsUUFBUSxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsbUNBQUksRUFBRSxDQUFDO3lCQUNuQzt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNuRDt3QkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3BELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0NBQ2hCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQ0FDYixJQUFJLEVBQUUsZUFBZTtnQ0FDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO29DQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0NBQzFDLENBQUMsQ0FBQyxFQUFFO2dDQUNOLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7Z0NBQzNELFlBQVksRUFBRSxNQUFNOzZCQUNyQixDQUFDLENBQUM7NEJBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt5QkFDdkQ7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNyQztxQkFDRjt5QkFBTSxJQUNMLFFBQVEsS0FBSyxxQkFBcUI7eUJBQ2xDLE1BQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUEsRUFDckQ7d0JBQ0EsZ0dBQWdHO3dCQUNoRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dCQUNwRSxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsbUNBQUksRUFBRSxDQUFDOzRCQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQ3RELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0NBQ2IsSUFBSSxFQUFFLGdCQUFnQjtvQ0FDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO3dDQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0NBQzFDLENBQUMsQ0FBQyxFQUFFO29DQUNOLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7b0NBQzNELGFBQWEsRUFBRSxNQUFNO2lDQUN0QixDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs2QkFDdkQ7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUNyQzt5QkFDRjt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3JDO3FCQUNGO3lCQUFNLElBQ0wsUUFBUSxLQUFLLG9CQUFvQjt5QkFDakMsTUFBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQSxFQUNyRDt3QkFDQSw4RkFBOEY7d0JBQzlGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7d0JBQ3BFLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBQSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLG1DQUFJLEVBQUUsQ0FBQzs0QkFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssb0JBQW9CO3lCQUNqQyxNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLDhGQUE4Rjt3QkFDOUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzs0QkFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssa0JBQWtCO3lCQUMvQixNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLDRGQUE0Rjt3QkFDNUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLG1DQUFJLEVBQUUsQ0FBQzs0QkFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNoRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssMkJBQTJCO3lCQUN4QyxNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLGlHQUFpRzt3QkFDakcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLG1DQUFJLEVBQUUsQ0FBQzs0QkFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUM1RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxpQkFBaUI7b0NBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTt3Q0FDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dDQUMxQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO29DQUMzRCxhQUFhLEVBQUUsTUFBTTtpQ0FDdEIsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7NkJBQ3ZEO2lDQUFNO2dDQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzs2QkFDckM7eUJBQ0Y7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNyQztxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELG9DQUFvQztRQUNwQyx3QkFBd0I7UUFFeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRTFELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzFCLGlCQUFpQixFQUNqQixxQ0FBcUMsQ0FDdEMsQ0FBQztZQUNGLDhDQUE4QztZQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDMUIsUUFBUSxFQUNSLHFDQUFxQyxDQUN0QyxDQUFDO1lBQ0YsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkUsMkNBQTJDO1FBQzNDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLDhFQUE4RTtRQUM5RSxJQUFJO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJOztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLElBQUksRUFBRSxDQUFBLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQjtZQUNyRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDaEM7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM3QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUVsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztZQUNoRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2RixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBd0IsR0FBRyxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztTQUNGLENBQUM7YUFDRCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXVCRCxJQUFJLENBQUMsVUFBZSxFQUFFLE1BQVcsRUFBRSxjQUF3QjtRQUN6RCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRTs7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2RCxJQUFJLElBQUksRUFBRTtnQkFDUixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLGNBQWM7cUJBQzVCLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUUzQixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjtnQkFDM0IsVUFBVTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQztZQUNoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBRTdCLElBQUksZUFBb0IsQ0FBQztnQkFFekIsSUFBSTtvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM3QixlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJO3dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUIsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO2lCQUNmO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFakMsSUFBSSxlQUFlLElBQUksQ0FBQSxNQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQzlELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0I7d0JBQzlDLGVBQWUsQ0FBQyxVQUFVLElBQUksYUFBYTt3QkFDM0MsZUFBZSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsRUFDdkQ7d0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUN6QztvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUM5RCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3BCLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzNDLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sSUFBRyxDQUFDOzRCQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ3REO29CQUVELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsbUJBQW1CO3dCQUN0RCxDQUFBLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsTUFBTSxJQUFHLENBQUMsRUFDbkM7d0JBQ0EsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsVUFBVTs0QkFDckMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxPQUFPO3lCQUNwQyxDQUFDLENBQUM7cUJBQ0o7b0JBRUQsSUFBSSxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTt3QkFDNUQsSUFBSSxRQUFRLEdBQUcsTUFBQSxlQUFlLENBQUMsT0FBTywwQ0FBRSxNQUFNLENBQUM7d0JBQy9DLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0NBQ2pCLFNBQVMsRUFBRSx3QkFBd0I7Z0NBQ25DLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTzs2QkFDaEMsQ0FBQyxDQUFDO3lCQUNKOzZCQUFNLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTs0QkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0NBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsVUFBVTtnQ0FDckMsYUFBYSxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7NkJBQ25ELENBQUMsQ0FBQzt5QkFDSjtxQkFDRjtvQkFFRCxJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksTUFBTSxFQUFFO3dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVOzRCQUNyQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE9BQU87eUJBQ2hDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTs0QkFDMUIsZUFBZSxDQUFDLE9BQU87Z0NBQ3JCLE1BQU0sR0FBRyxvREFBb0QsQ0FBQzt5QkFDakU7cUJBQ0Y7b0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTzt3QkFDaEMsTUFBTSxFQUFFLGVBQWU7d0JBQ3ZCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDL0IsQ0FBQyxDQUFDO29CQUVILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dCQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQ1Q7b0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsSUFBSTt3QkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7d0JBQ3hCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDL0IsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7WUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIscURBQXFEO1lBQ3JELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFhLEVBQUUsT0FBTztRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUseUJBQXlCLElBQUksQ0FBQyxLQUFLLGlCQUFpQixlQUFlLG1CQUFtQixDQUFDO1FBQ2pJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxNQUFNLEVBQUUsdUNBQXVDO2dCQUMvQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7YUFDOUM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNsRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNoQixJQUFJLEVBQUUsSUFBSTtvQkFDVixPQUFPLEVBQ0wsSUFBSSxDQUFDLGVBQWU7d0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMscUNBQXFDLENBQUM7b0JBQzVELElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDOUIsYUFBYSxFQUFFLElBQUk7aUJBQ3BCLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDakQ7Z0JBQ0QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM5QixhQUFhLEVBQUUsSUFBSTthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsa0JBQWtCO2dCQUNyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUN2RTtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzVDLHNDQUFzQztZQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsMkRBQTJEO0lBQzNELElBQUksa0JBQWtCOztRQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksTUFBSyxJQUFJO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6Qyx1REFBdUQ7SUFDdkQsa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsOENBQThDO0lBQzlDLHlDQUF5QztJQUN6QyxnQ0FBZ0M7SUFDaEMsOENBQThDO0lBQzlDLHlCQUF5QjtJQUN6Qiw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHlDQUF5QztJQUN6QyxRQUFRO0lBQ1IsSUFBSTtJQUNKLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSztRQUNoQix1QkFBdUI7UUFDdkIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5Qyx1REFBdUQ7UUFDdkQsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFM0MsMEVBQTBFO1FBQzFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLHNDQUFzQztRQUN0QyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdEIsaUNBQWlDO1FBQ2pDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLG1HQUFtRztRQUNuRyxzQ0FBc0M7UUFFdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDcEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLG9DQUFvQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUvRCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFbkQseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixhQUFhO2FBQ1YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEMseUNBQXlDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBSUQsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTztZQUNqRSw0Q0FBNEM7WUFDNUMsRUFBRSxDQUNILENBQUM7WUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU87Z0JBQ2pFLDRDQUE0QztnQkFDNUMsRUFBRSxDQUNILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPO2dCQUNqRSw0Q0FBNEM7Z0JBQzVDLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7U0FDRjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHVDQUF1QztRQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNwQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyQixJQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLEVBQUU7U0FDcEI7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUNyRCxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksTUFBTSxFQUFFO2dCQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO3dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtxQkFDN0Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQVU7UUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyx5QkFBeUIsQ0FBQztRQUMxRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQUQsQ0FBQyxjQUFELENBQUMsR0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RSxDQUFDO1FBQ0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O29CQUN2QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxFQUFFO3dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLGdFQUFnRSxDQUFDLElBQUksQ0FDMUUsU0FBUyxDQUFDLFNBQVMsQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBSTtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQscUdBQXFHO0lBQ3JHLHVCQUF1QixDQUFDLE1BQWlDOztRQUN2RCxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLHlCQUF5QiwwQ0FBRSxNQUFNO1lBQ3BELENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUM7SUFDbEQsQ0FBQztJQUVELGdIQUFnSDtJQUNoSCxhQUFhLENBQUMsUUFBeUI7UUFDckMsTUFBTSxHQUFHLEdBQUcsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEVBQUUsQ0FBQztRQUN6QixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxlQUFlLENBQUMsUUFBeUI7O1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLE1BQU07WUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFDLE1BQUEsQ0FBQyxDQUFDLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQSxFQUFBLENBQUMsQ0FBQSxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsTUFBTTtRQUNmLE9BQU8sQ0FBQyxDQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQ0YsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyw2REFBNkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUM5SCxFQUFFLE9BQU8sRUFBRSxDQUNaO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUNGLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLFdBQVcsSUFBSSxDQUFDLE9BQU8scUNBQXFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDdEcsRUFBRSxPQUFPLEVBQUUsQ0FDWjthQUNBLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFNRCxpQ0FBaUM7SUFDakMsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWTs7UUFDdEIsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLG1DQUFtQztRQUNuQyxxQkFBcUI7UUFDckIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjOztRQUNaLE9BQU8sTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxxQkFBcUI7O1FBQ25CLE1BQU0sY0FBYyxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixPQUFPLFlBQVksQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxjQUFjLElBQUksQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRTtnQkFDbEQsT0FBTyxZQUFZLENBQUM7YUFDckI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLElBQUcsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLEdBQUcsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sa0JBQWtCO29CQUM3QyxDQUFDLENBQUMsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxpQkFBaUIsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLFlBQVksSUFBSSxDQUFDLEtBQUssZ0JBQWdCLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDOUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxpQ0FDNUIsS0FBSyxLQUNSLFFBQVEsRUFBRSxLQUFLLElBQ2YsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFeEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFPRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUseUNBQXlDLGVBQWUsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekgsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxNQUFNLEVBQUUsMEJBQTBCO1lBQ2xDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV4QixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBRTVCLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxLQUFJLEdBQUcsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2FBQzdCO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLHdCQUF3QixDQUFDLFFBQWdCO1FBQ3ZDLElBQUk7WUFDRiw4Q0FBOEM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFdkMsbURBQW1EO1lBQ25ELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxFQUFFO2dCQUM1RCxPQUFPLFlBQVksSUFBSSxZQUNyQixLQUFLLElBQUksRUFDWCxxQkFBcUIsSUFBSSxNQUFNLENBQUM7WUFDbEMsQ0FBQyxDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFdkUsd0RBQXdEO1lBQ3hELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTFELDJDQUEyQztZQUMzQyxPQUFPLGFBQWEsQ0FBQztTQUN0QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLDJEQUEyRDtTQUN2RTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDakQsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELHFFQUFxRTtRQUNyRSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUN6QixxQkFBcUIsRUFDckIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLE9BQU8sZUFBZSxJQUFJLGdCQUFnQixDQUFDO2FBQzVDO2lCQUFNLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxlQUFlLElBQUksZ0JBQWdCLENBQUM7YUFDNUM7WUFDRCxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUM7UUFDcEMsQ0FBQyxDQUNGLENBQUM7UUFFRixrRUFBa0U7UUFDbEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3JFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQztZQUVyQywwQ0FBMEM7WUFDMUMsT0FBTzs7bUZBRXNFLFdBQVcsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUNoSCxNQUFNLENBQ1A7NkRBQ29ELFFBQVEsS0FBSyxXQUFXO2FBQ3hFLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUVyRCx5Q0FBeUM7UUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUU3RCx5QkFBeUI7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFdkQsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVwRCx1Q0FBdUM7UUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ2pCLHlCQUF5QixFQUN6QixxQ0FBcUMsQ0FDdEMsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQscUNBQXFDO0lBQzlCLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDdEMsR0FBRyxFQUFFO1lBQ0gsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDckMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUtELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBNkJELGlDQUFpQztJQUNqQyxhQUFhLENBQUMsR0FBVztRQUN2QixJQUFJO1lBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7U0FDbkU7UUFBQyxXQUFNO1lBQ04sT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxvREFBb0QsTUFBTSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFPO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztTQUMvQjtJQUNILENBQUM7SUFJRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztRQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7UUFDL0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxjQUFjO1FBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7WUFDL0QsNkNBQTZDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNuRSxJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDaEM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBR0QsWUFBWSxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxzQkFBc0I7UUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBVTtRQUM3QixJQUFJO1lBQ0YsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLHVDQUF1QztnQkFDdkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3hCO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUE2QixDQUFDO1FBQ3JELFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQjtRQUNuRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLGlDQUFpQztRQUN2Riw2REFBNkQ7UUFDN0QsSUFBSSxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUMvQixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxpQ0FBaUM7WUFDbEUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsNENBQTRDO1NBQ2hGO2FBQU07WUFDTCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyw2Q0FBNkM7U0FDbkY7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUssR0FBRyxJQUFJO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBRW5FLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2lCQUNoQztnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixpRkFBaUY7UUFDakYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTywwQ0FBRSxXQUFXLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFELFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7b0JBQzVCLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDakIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDNUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBUTtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3hCLENBQ0YsQ0FBQztZQUVGLDJFQUEyRTtZQUMzRSxJQUFJO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQ2xFLEtBQUssQ0FBQztnQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDO29CQUNsRSxLQUFLLENBQUM7YUFDVDtZQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7WUFFbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLDJCQUEyQixFQUFFLElBQUk7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuQixJQUFJLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3hCLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRztnQkFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUk7YUFDekMsQ0FBQztZQUNGLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFekIsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQ2pCLEtBQUssRUFDTCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxlQUFlLEVBQ3BCLEVBQUUsRUFDRixJQUFJLEVBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDeEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FDWixRQUFnQixFQUNoQixNQUFhLEVBQ2IsY0FBc0IsRUFDdEIsR0FBUyxFQUNULElBQVUsRUFDVixVQUFtQixFQUNuQixlQUFxQjs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsU0FBUyxDQUFDO1FBRWhELElBQUksSUFBSSxHQUFHO1lBQ1QsYUFBYSxFQUFFLFFBQVE7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtZQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDOUIsTUFBTSxFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUNBQUksRUFBRTtZQUNoRSxlQUFlLEVBQUUsY0FBYztZQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3pCLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxPQUFPLEdBQVE7WUFDbkIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxhQUFhLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRO1lBQ3hDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUNqRDtRQUVELEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztTQUMzQixDQUFDO2FBQ0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRXpCLHlDQUF5QztnQkFDekMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO29CQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztpQkFDNUI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNwQjtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQix5Q0FBeUM7UUFDM0MsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsUUFBZ0IsRUFDaEIsTUFBYSxFQUNiLGNBQXNCLEVBQ3RCLEdBQVMsRUFDVCxJQUFVLEVBQ1YsVUFBbUIsRUFDbkIsZUFBcUI7O1FBRXJCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFNBQVMsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBUTtZQUNoQixhQUFhLEVBQUUsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQ2xELE1BQU0sRUFBRSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1DQUFJLEVBQUU7WUFDaEUsZUFBZSxFQUFFLGNBQWM7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQzFCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN6QixDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsQ0FBQztTQUMzQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMvQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQix5Q0FBeUM7WUFDM0MsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUMvQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRzs7UUFDekIscUNBQXFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLE1BQU0sS0FBSyxJQUFJLENBQUM7UUFFL0IsZ0VBQWdFO1FBQ2hFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLElBQUksU0FBUyxHQUNYLENBQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzVDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FDakMsMENBQUUsS0FBSyxLQUFJLEdBQUcsQ0FBQztZQUNsQixRQUFRLElBQUksT0FBTyxTQUFTLE9BQU8sS0FBSyxJQUFJLENBQUM7U0FDOUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsMEJBQTBCLENBQUMsV0FBVztRQUNwQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUM7WUFDckUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEQsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUN2QyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7d0JBQzFCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQ2IsTUFBTSxDQUFDLGVBQWUsQ0FDdkIsQ0FBQztxQkFDSDtvQkFDRCxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELEdBQUcsQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQ2IsR0FBRyxDQUFDLGVBQWUsQ0FDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQUM7WUFDcEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FDL0QsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUM5QyxJQUFJLENBQUMsWUFBWSxFQUNqQixXQUFXLENBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEI7WUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEIsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0lBQ25ELENBQUM7SUFLRCxjQUFjOztRQUNaLE1BQU0sY0FBYyxHQUNsQixNQUFBLE1BQUEsSUFBSSxDQUFDLGVBQWUsbUNBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsbUNBQ2xELEVBQUUsQ0FBQztRQUNMLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxjQUFjLENBQUM7UUFDL0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUNsQztRQUVELE1BQU0sTUFBTSxHQUFxQjtZQUMvQixNQUFNLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFFBQVEsbUNBQUksRUFBRTtZQUN4QyxLQUFLLEVBQUUsTUFBQSxJQUFJLENBQUMsUUFBUSxtQ0FBSSxFQUFFO1lBQzFCLEtBQUssRUFBRSxNQUFBLElBQUksQ0FBQyxLQUFLLG1DQUFJLEVBQUU7WUFDdkIsY0FBYztZQUNkLE1BQU0sRUFBRSxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLEVBQUU7WUFDekIsVUFBVSxFQUFFLE1BQUEsSUFBSSxDQUFDLFVBQVUsbUNBQUksRUFBRTtZQUNqQyxRQUFRLEVBQUUsTUFBQSxJQUFJLENBQUMsUUFBUSxtQ0FBSSxFQUFFO1lBQzdCLGVBQWUsRUFBRSxNQUFBLElBQUksQ0FBQyxvQkFBb0IsbUNBQUksV0FBVztZQUN6RCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxjQUFjO1lBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLHFCQUFxQjtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDMUIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7YUFDbEM7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDOUI7WUFDRSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ2pELEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7U0FDakUsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxXQUFXLEVBQUUsS0FBSztZQUNsQixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDckQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQzNCLFFBQVEsRUFBRTtpQkFDVixNQUFNLEVBQUU7aUJBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ1QsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUNoQyx3QkFBd0IsRUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixRQUFRLENBQ1QsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4QixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUMvQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsS0FBSyxDQUNYLHNEQUFzRCxFQUN0RCxHQUFHLENBQ0osQ0FBQztZQUNGLCtDQUErQztZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsK0JBQStCO1FBQy9CLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUM7UUFFdkMsZ0NBQWdDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUM5RCxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlDLDJCQUEyQjtnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDdkQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixNQUFNLEVBQUUsS0FBSztvQkFDYixlQUFlLEVBQUUsS0FBSztpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsK0JBQStCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUM1RCxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQyxrRUFBa0U7Z0JBQ2xFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUM1QyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDakU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO3dCQUNsRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQzlCLE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3FCQUN2QixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDOztBQXI2R0Q7OztHQUdHO0FBQ3FCLCtCQUFXLEdBQTJCO0lBQzVELG9CQUFvQixFQUFFLE1BQU07SUFDNUIsY0FBYyxFQUFFLEtBQUs7SUFDckIsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixZQUFZLEVBQUUsS0FBSztJQUNuQixpQkFBaUIsRUFBRSxPQUFPO0lBQzFCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsWUFBWSxFQUFFLEdBQUc7SUFDakIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsY0FBYyxFQUFFLE1BQU07SUFDdEIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLHFCQUFxQixFQUFFLE1BQU07SUFDN0Isa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixvQkFBb0IsRUFBRSxNQUFNO0lBQzVCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixjQUFjLEVBQUUsTUFBTTtJQUN0QixZQUFZLEVBQUUsS0FBSztJQUNuQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGlCQUFpQixFQUFFLE9BQU87SUFDMUIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixhQUFhLEVBQUUsTUFBTTtJQUNyQixpQkFBaUIsRUFBRSxNQUFNO0lBQ3pCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsY0FBYyxFQUFFLE1BQU07SUFDdEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFlBQVksRUFBRSxLQUFLO0lBQ25CLGFBQWEsRUFBRSxPQUFPO0lBQ3RCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsY0FBYyxFQUFFLEtBQUs7SUFDckIsY0FBYyxFQUFFLEtBQUs7SUFDckIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixjQUFjLEVBQUUsS0FBSztJQUNyQixvQkFBb0IsRUFBRSxNQUFNO0lBQzVCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLFlBQVksRUFBRSxLQUFLO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsY0FBYyxFQUFFLEtBQUs7SUFDckIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsWUFBWSxFQUFFLE9BQU87SUFDckIsYUFBYSxFQUFFLEtBQUs7SUFDcEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixlQUFlLEVBQUUsS0FBSztJQUN0QixjQUFjLEVBQUUsS0FBSztJQUNyQixhQUFhLEVBQUUsS0FBSztJQUNwQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixpQkFBaUIsRUFBRSxNQUFNO0lBQ3pCLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixhQUFhLEVBQUUsTUFBTTtJQUNyQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsYUFBYSxFQUFFLE1BQU07SUFDckIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixZQUFZLEVBQUUsS0FBSztJQUNuQixjQUFjLEVBQUUsS0FBSztJQUNyQixlQUFlLEVBQUUsTUFBTTtJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGNBQWMsRUFBRSxNQUFNO0lBQ3RCLGlCQUFpQixFQUFFLE1BQU07SUFDekIsZUFBZSxFQUFFLE1BQU07SUFDdkIsaUJBQWlCLEVBQUUsS0FBSztJQUN4QixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIscUJBQXFCLEVBQUUsTUFBTTtJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLG1CQUFtQixFQUFFLE9BQU87SUFDNUIsaUJBQWlCLEVBQUUsTUFBTTtJQUN6QixnQ0FBZ0MsRUFBRSxLQUFLO0lBQ3ZDLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLG9CQUFvQixFQUFFLEtBQUs7SUFDM0Isc0JBQXNCLEVBQUUsTUFBTTtJQUM5QixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsd0JBQXdCLEVBQUUsS0FBSztJQUMvQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLDhCQUE4QixFQUFFLEtBQUs7SUFDckMsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixXQUFXLEVBQUUsUUFBUTtJQUNyQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQztBQUVGOztHQUVHO0FBQ3FCLHVDQUFtQixHQUEyQjtJQUNwRSxzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDBCQUEwQixFQUFFLEtBQUs7SUFDakMsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixpREFBaUQsRUFBRSxLQUFLO0lBQ3hELHVDQUF1QyxFQUFFLEtBQUs7SUFDOUMsaUNBQWlDLEVBQUUsS0FBSztJQUN4QyxnREFBZ0QsRUFBRSxLQUFLO0lBQ3ZELGlEQUFpRCxFQUFFLEtBQUs7SUFDeEQscUNBQXFDLEVBQUUsS0FBSztJQUM1QyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLHVCQUF1QixFQUFFLEtBQUs7SUFDOUIsb0NBQW9DLEVBQUUsS0FBSztJQUMzQyxxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsZ0NBQWdDLEVBQUUsS0FBSztJQUN2Qyx1QkFBdUIsRUFBRSxLQUFLO0lBQzlCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsOEJBQThCLEVBQUUsS0FBSztJQUNyQyxxQ0FBcUMsRUFBRSxLQUFLO0lBQzVDLG1EQUFtRCxFQUFFLEtBQUs7SUFDMUQscUNBQXFDLEVBQUUsS0FBSztJQUM1QyxtQ0FBbUMsRUFBRSxLQUFLO0lBQzFDLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsc0JBQXNCLEVBQUUsTUFBTTtJQUM5Qix5Q0FBeUMsRUFBRSxNQUFNO0lBQ2pELGtDQUFrQyxFQUFFLE1BQU07SUFDMUMsd0NBQXdDLEVBQUUsSUFBSTtJQUM5Qyx3Q0FBd0MsRUFBRSxJQUFJO0lBQzlDLHlDQUF5QyxFQUFFLElBQUk7SUFDL0Msd0NBQXdDLEVBQUUsSUFBSTtDQUMvQyxDQUFDOztZQTkzQkgsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLHlubEhBQTJDO2dCQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXZCUSxXQUFXO1lBRVgsV0FBVztZQWhDbEIsaUJBQWlCO1lBTFYsVUFBVTtZQXVCVixZQUFZO1lBaEJuQixVQUFVO1lBU1YsU0FBUztZQWlCRixhQUFhO1lBRmIsbUJBQW1CO1lBOUJuQixrQkFBa0I7WUFzQ2xCLGlCQUFpQjtZQXpDakIsT0FBTztZQXNCZCxnQkFBZ0I7WUFWaEIsUUFBUTs7O3VCQWtEUCxTQUFTLFNBQUMsVUFBVTtzQkFDcEIsU0FBUyxTQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7cUNBRXRDLFlBQVksU0FBQyx1QkFBdUI7cUJBRXBDLFNBQVMsU0FBQyxRQUFROzRCQUNsQixTQUFTLFNBQUMsZUFBZTs0QkFDekIsU0FBUyxTQUFDLGVBQWU7MEJBR3pCLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLO29CQUNMLEtBQUs7b0JBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsS0FBSzs0QkFDTCxLQUFLOzRCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3dCQUNMLEtBQUs7c0JBQ0wsS0FBSzs0QkFJTCxLQUFLOytCQUNMLEtBQUs7aUNBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSztpQ0FDTCxLQUFLO21DQUNMLEtBQUs7b0JBQ0wsS0FBSzs4QkFDTCxLQUFLO2tDQUNMLEtBQUs7d0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzhCQUNMLEtBQUs7dUJBRUwsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxLQUFLO3FDQUVMLEtBQUs7c0JBRUwsS0FBSzs4QkFFTCxLQUFLO3dDQUVMLEtBQUs7bUNBRUwsS0FBSzt3QkFFTCxLQUFLOytCQUVMLEtBQUs7bUNBQ0wsS0FBSzs0QkFDTCxNQUFNOzJCQUNOLE1BQU07dUJBQ04sTUFBTTs2QkFDTixNQUFNO21DQUVOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO2lDQUVOLE1BQU07d0JBRU4sTUFBTTs4QkFDTixNQUFNOzJCQUNOLE1BQU07MEJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JtYXROb3csIGZvcm1hdFRpbWVTdGFtcHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBkZXZfZW52aXJvbm1lbnQsXG4gIHByb2RfZW52aXJvbm1lbnQsXG59IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29udmVyc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU29ja2V0U2VydmljZSB9IGZyb20gJy4uL3NvY2tldC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIFNwZWVjaFNESyBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkayc7XG5pbXBvcnQgeyBCb3RzU2VydmljZSB9IGZyb20gJy4uL2JvdC5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcmtlZCBmcm9tICdtYXJrZWQnOyAvLyBJbXBvcnQgbWFya2VkXG5pbXBvcnQgeyBWb2ljZUFnZW50U2VydmljZSB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L3NlcnZpY2VzL3ZvaWNlLWFnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVm9pY2VBZ2VudE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvY29tcG9uZW50cy92b2ljZS1hZ2VudC1tb2RhbC92b2ljZS1hZ2VudC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVk9JQ0VfTU9EQUxfQ09ORklHLFxuICBWT0lDRV9NT0RBTF9DTE9TRV9DQUxMQkFDSyxcbiAgVm9pY2VNb2RhbENvbmZpZyxcbn0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcblxuZXhwb3J0IGVudW0gZUNsYXNzaWZpY2F0aW9uVHlwZSB7XG4gIExpdmUgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU2JyxcbiAgT25EZW1hbmQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU3JyxcbiAgQnJlYWtvdXQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU4Jyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlci1wYWNrYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbXlJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBteUlucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjsgLy8gUmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYVxuICBAVmlld0NoaWxkcmVuKCdjbG9zZXBsYXlncm91bmRidXR0b24nKVxuICBjbG9zZVBsYXlncm91bmRCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2RyYXdlcicpIGRyYXdlciE6IE1hdERyYXdlcjtcbiAgQFZpZXdDaGlsZCgnc291cmNlc0RyYXdlcicpIHNvdXJjZXNEcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcnNEcmF3ZXInKSBlZGl0b3JzRHJhd2VyITogTWF0RHJhd2VyO1xuICBwcml2YXRlIGJvZHlPdmVyZmxvd0NsYXNzID0gJ2JvZHktb3ZlcmZsb3ctaGlkZGVuJztcbiAgaXNDb2xsYXBzZWRUcnVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSAnSGl2ZVhHUFQnO1xuICBASW5wdXQoKSBmaXJzdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBib3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVkZW50aWFscyE6IFtdO1xuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudElkITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFVybCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgd29ya3NwYWNlVG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHMyN1Rva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpc3BsYXlBdmF0YXJVcmwgPVxuICAgICdodHRwczovL3d3dy5qb3Rmb3JtLmNvbS91cGxvYWRzL21laG1ldGthcmFrYXNsaS9mb3JtX2ZpbGVzLzE1NjQ1OTM2Njc2NzZhOGU4NWYyMzc1OC44Njk0NTUzN19pY29uLnBuZyc7XG4gIC8qKiBVc2VyIHByb2ZpbGUgaW1hZ2UgVVJMLiBGYWxscyBiYWNrIHRvIGluaXRpYWxzIChnZXRVc2VySWRJbml0aWFscygpKSBpZiBub3Qgc2V0LiAqL1xuICBASW5wdXQoKSB1c2VyQXZhdGFyVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRCZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRUZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bGxWaWV3ITogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JhZGllbnRDb2xvcnMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZ3JlZXRpbmchOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JBaSE6IHN0cmluZztcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvclVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJ1bGVzITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbmRCdXR0b25UZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDbG9zZSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRodW1ic0Rvd25NZXNzYWdlcyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSB0aHVtYnNVcE1lc3NhZ2UhOiBzdHJpbmc7XG4gIC8qKiBVc2VyJ3Mgc2VsZWN0ZWQgdGltZXpvbmUgKGUuZy4gJ0FtZXJpY2EvTmV3X1lvcmsnKTsgdXNlZCBmb3IgdGltZXN0YW1wcyBhbmQgc2Vzc2lvbiBjYXJkIHRpbWVzLiBXaGVuIG5vdCBzZXQsIHNlc3Npb24gZGF0YSBvciBsb2NhbCB0aW1lIGlzIHVzZWQuICovXG4gIEBJbnB1dCgpIHRpbWV6b25lPzogc3RyaW5nO1xuICBASW5wdXQoKSB1bmtub3duUmVzcG9uc2VzITogW107XG4gIEBJbnB1dCgpIHVzZU9wZW5BaSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcbiAgQElucHV0KCkgaXNEZXYhOiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBjaGF0IGF1dG8tc2Nyb2xscyB0byBib3R0b20gd2hlbiBuZXcgY29udGVudCBpcyBhZGRlZC4gRGVmYXVsdDogZmFsc2UgKG5vIGF1dG8gc2Nyb2xsKS4gKi9cbiAgQElucHV0KCkgYXV0b1Njcm9sbE9uTmV3TWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgQVBJIGJhc2UgVVJMIChlLmcuIG5ncm9rIHR1bm5lbCkuIFdoZW4gc2V0LCBhbGwgY2hhdC92b2ljZSByZXF1ZXN0cyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGRldi9wcm9kIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBDb25uZWN0aW9ucyBsaXN0IGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdENvbm5lY3Rpb25zTGlzdCkuIEVhY2ggaXRlbSBoYXMgdXNlcklkLiBXaGVuIHNldCwgdXNlZCBmb3IgQ29ubmVjdC9SZXF1ZXN0IFNlbnQvRGlzY29ubmVjdCBidXR0b24gc3RhdGUuICovXG4gIEBJbnB1dCgpIGNvbm5lY3Rpb25zTGlzdDogYW55W10gPSBbXTtcbiAgLyoqIFBlbmRpbmcgc2VudCByZXF1ZXN0IHVzZXIgSURzIGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdFBlbmRpbmdDb25uZWN0aW9uc1NlbnRMaXN0KS4gV2hlbiBzZXQsIHVzZWQgZm9yIFJlcXVlc3QgU2VudCBzdGF0ZS4gKi9cbiAgQElucHV0KCkgcGVuZGluZ1NlbnRSZXF1ZXN0VXNlcklkczogYW55W10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBDb25uZWN0IC8gUmVxdWVzdCBTZW50IC8gRGlzY29ubmVjdCBidXR0b25zIG9uIGF0dGVuZGVlIGNhcmRzIChlLmcuIGZyb20gdXNlclNldHRpbmdzPy5pc0Nvbm5lY3Rpb25zRW5hYmxlZCkuICovXG4gIEBJbnB1dCgpIGlzQ29ubmVjdGlvbnNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoVU4vQ09QIGV2ZW50cyk6IHNlc3Npb24gY2FyZCBzaG93cyBcIlNlc3Npb24gdHlwZVwiIGxhYmVsIGFuZCBKb2luL1dhdGNoIGJ1dHRvbnMuIFdoZW4gZmFsc2U6IHNob3dzIFwiTWVldGluZyB0eXBlXCIgbGFiZWwgYW5kIHNpbmdsZSBQbGF5IGJ1dHRvbiAoc2FtZSBhcyB0ZW1wbGF0ZTIpLiAqL1xuICBASW5wdXQoKSBpc1VuRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhZ2FpbkJ1dHRvbkNvbG9yITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFnYWluQnV0dG9uVGV4dENvbG9yITogc3RyaW5nW107XG4gIEBPdXRwdXQoKSBmZWVkYmFja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvcGVuUGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBKb2luL1dhdGNoIGJ1dCBhY3Rpb24gaXMgbm90IHlldCBhdmFpbGFibGUgKGUuZy4gc2Vzc2lvbiBub3Qgc3RhcnRlZCkuIEhvc3QgY2FuIHNob3cgdG9hc3RlciB3aXRoIHRoZSBtZXNzYWdlLiAqL1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbkJsb2NrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlQm90ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb25uZWN0V2l0aFVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IHByb2ZpbGUgb24gYSBzcGVha2VyIGNhcmQgKGdldF9ldmVudF9zcGVha2VycykuIEhvc3Qgc2hvdWxkIG9wZW4gc3BlYWtlciBkZXRhaWwgZHJhd2VyIHNhbWUgYXMgL2V2ZW50cy86aWQvc3BlYWtlcnMuICovXG4gIEBPdXRwdXQoKSB2aWV3U3BlYWtlclByb2ZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3BlYWtlcjogYW55OyBzcGVha2VyczogYW55W10gfT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IEJvb3RoIG9uIGEgc3BvbnNvci9ib290aCBjYXJkIChnZXRfZXZlbnRfc3BvbnNvcnMsIGdldF9ldmVudF9ib290aHMpLiBIb3N0IHNob3VsZCBuYXZpZ2F0ZSB0byBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86Ym9vdGhVcmwuICovXG4gIEBPdXRwdXQoKSB2aWV3Qm9vdGggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYm9vdGhJZD86IHN0cmluZzsgYm9vdGhVcmw/OiBzdHJpbmc7IHNwb25zb3I/OiBhbnkgfT4oKTtcbiAgQE91dHB1dCgpIHNjaGVkdWxlTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaFRva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuU3VwcG9ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGF1dG9nZW5LZXkgPSAnQXV0b2dlbl9lREpUdEVVLU5CMFJ0SXB6cTF3JztcbiAgYWRkVG9NeUFnZW5kYUFjdGlvbiA9ICdhZGRfdG9fbXlfYWdlbmRhJztcbiAgbXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24gPSAnbXlfdXBjb21taW5nX3Nlc3Npb24nO1xuICBjb25uZWN0T3JGb2xsb3dBY3Rpb24gPSAnY29ubmVjdF9vcl9mb2xsb3cnO1xuICBhaVJlc3BvbnNlOiBzdHJpbmcgPSAnJztcbiAgY2hhdExvZzogYW55W10gPSBbXTtcbiAgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBmZWVkYmFja0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JlZXRpbmdNc2c6IHN0cmluZyA9ICcnO1xuICBoYXNCYWNrZHJvcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0OiBzdHJpbmcgPSAnJztcbiAgbGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG1vZGU6IHN0cmluZyA9ICdvdmVyJztcbiAgcXVpY2tQcm9tcHRzOiBhbnlbXSA9IFtdO1xuICB0aHVtYnNEb3duTXNnSW5kZXggPSAwO1xuICB1c2VyTmFtZTogc3RyaW5nID0gJyc7XG4gIHNob3dTdGFydEFnYWluOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSU9TRGV2aWNlOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGZWVkQmFja0ljb25zSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0ZW1wZXJhdHVyZTogbnVtYmVyID0gMTtcbiAgLyoqIFNwZWFrZXIgY2FjaGUgYnkgc3RhZmYgaWQgKGZpbGxlZCB2aWEgZ2V0LWJ5LXN0YWZmLWlkcykuICovXG4gIHNwZWFrZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIC8qKiBQcmV2ZW50IGR1cGxpY2F0ZSBzcGVha2VyIGZldGNoZXMgYWNyb3NzIG1lc3NhZ2VzLiAqL1xuICBwcml2YXRlIHJlcXVlc3RlZFNwZWFrZXJJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZW52aXJvbm1lbnQ6IHtcbiAgICBVU0VSU19BUEk7XG4gICAgQkFTRV9VUkw7XG4gICAgQUdFTlRTX0FQSTtcbiAgfTtcbiAgcGVuZGluZ1JlcXVlc3RzOiBhbnk7XG4gIG15Q29ubmVjdGlvbnM6IGFueTtcbiAgY29udmVyc2F0aW9uS2V5OiBzdHJpbmc7XG4gIGNvblNlc3Npb25LZXk6IHN0cmluZyA9ICcnO1xuICBpc0ZldGNoRGF0YUZvcjogYm9vbGVhbjtcbiAgaXM0MDE6IGJvb2xlYW47XG4gIG1zZzogYW55O1xuICBjaGF0OiBhbnk7XG4gIGlzV29ya2Zsb3dPcGVuOiBib29sZWFuO1xuICBvcmdXb3JrZmxvd3M6IGFueTtcbiAgb3BlbldvcmtmbG93SW5wdXQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkV29ya2Zsb3c6IGFueTtcbiAgd29ya2Zsb3dGb3JtOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb246IHN0cmluZyA9ICcnO1xuICBleGVjdXRpbmdXb3JrZmxvdzogYm9vbGVhbjtcbiAgd29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcbiAgY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuXG4gIHNwZWVjaENvbmZpZzogU3BlZWNoU0RLLlNwZWVjaENvbmZpZztcbiAgcmVjb2duaXplcjogU3BlZWNoU0RLLlNwZWVjaFJlY29nbml6ZXI7XG4gIHJlY29nbml6ZWRUZXh0OiBzdHJpbmcgPSAnJztcbiAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmcgPSAnJztcbiAgcmVnaW9uOiBzdHJpbmcgPSAnd2VzdGV1cm9wZSc7IC8vIFNldCB5b3VyIEF6dXJlIHJlZ2lvbiBoZXJlXG4gIGlzUmVjb3JkaW5nOiBib29sZWFuO1xuICBpc1ZvaWNlTW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdm9pY2VNb2RhbE92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYm90U2VydmljZTogQm90c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzb2NrZXRTZXJ2aWNlOiBTb2NrZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udmVyc2F0aW9uU2VydmljZTogQ29udmVyc2F0aW9uU2VydmljZSwgLy8gcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdm9pY2VBZ2VudFNlcnZpY2U6IFZvaWNlQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHRoaXMuY2hhdE1haW4gPSBuZXcgRWxlbWVudFJlZihudWxsKTtcblxuICAgIC8vIGlmICh0aGlzLnBsYXRmb3JtLklPUykge1xuICAgIC8vICAgdGhpcy5pc0lPU0RldmljZSA9IHRydWU7XG4gICAgLy8gfVxuICB9XG4gIGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGtleSk7XG4gIH1cblxuICAvKiogVGltZSBzaG93biBuZXh0IHRvIFwiQXNzaXN0YW50XCIgd2hlbiBpbiB0aGlua2luZy9sb2FkaW5nIHN0YXRlLiAqL1xuICBnZXRMb2FkaW5nVGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtYXROb3codGhpcy50aW1lem9uZSk7XG4gIH1cblxuICAvKiogVXNlciBpbml0aWFscyBmb3IgYXZhdGFyIGZhbGxiYWNrIChlLmcuIFwiSkRcIiBmcm9tIGZpcnN0TmFtZSArIGxhc3ROYW1lKS4gKi9cbiAgZ2V0VXNlcklkSW5pdGlhbHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaXJzdCA9ICh0aGlzLmZpcnN0TmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGxhc3QgPSAodGhpcy5sYXN0TmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmIChmaXJzdCAmJiBsYXN0KSByZXR1cm4gKGZpcnN0WzBdICsgbGFzdFswXSkudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoZmlyc3QpIHJldHVybiBmaXJzdC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChsYXN0KSByZXR1cm4gbGFzdC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiAnVSc7XG4gIH1cblxuICAvKiogQXR0ZW5kZWUgaW5pdGlhbHMgZm9yIGNhcmQgd2hlbiBubyBwaG90byAoZS5nLiBcIlZpamF5IFBhbGl3YWxcIiAtPiBcIlZQXCIsIFwiSmltXCIgLT4gXCJKXCIpLiAqL1xuICBnZXRBdHRlbmRlZUluaXRpYWxzKG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiAnPyc7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDIpXG4gICAgICByZXR1cm4gKHBhcnRzWzBdWzBdICsgcGFydHNbcGFydHMubGVuZ3RoIC0gMV1bMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHBhcnRzWzBdLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuICc/JztcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZXZlbnRJZCBjaGFuZ2VzIHRvIHVwZGF0ZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4gICAgaWYgKGNoYW5nZXMuZXZlbnRJZCAmJiBjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKGNoYW5nZXMuZXZlbnRJZC5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnMyN1Rva2VuKSB7XG4gICAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5zMjdUb2tlbi5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuczI3VG9rZW4gPSBjaGFuZ2VzLnMyN1Rva2VuLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICBjb25zb2xlLmxvZygnaXNGZXRjaERhdGFGb3I6ICcsIHRoaXMuaXNGZXRjaERhdGFGb3IpO1xuICAgICAgICBjb25zb2xlLmxvZygnbXNnOiAnLCB0aGlzLm1zZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGF0OiAnLCB0aGlzLmNoYXQpO1xuICAgICAgICBpZiAodGhpcy5pczQwMSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRmV0Y2hEYXRhRm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YUZvcih0aGlzLm1zZywgdGhpcy5jaGF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEodGhpcy5tc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERvIE5PVCBjYWxsIGluaXRpYWxpemVTb2NrZXQoKSBoZXJlLiBTb2NrZXQuSU8gaXMgZm9yIGNoYXQgb25seTsgd2UgZGVmZXJcbiAgICAvLyB1bnRpbCB0aGUgdXNlciBhY3R1YWxseSB1c2VzIGNoYXQgKHNlbmQgbWVzc2FnZSBvciBzdGFydCBuZXcgY29udmVyc2F0aW9uKVxuICAgIC8vIHNvIHRoYXQgdm9pY2Utb25seSB1c2FnZSBuZXZlciB0cmlnZ2VycyBTb2NrZXQuSU8gKGF2b2lkcyB2Mi92MyBtaXNtYXRjaCBlcnJvcikuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5vcmdJZCAmJlxuICAgICAgY2hhbmdlcy5vcmdJZC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5vcmdJZC5wcmV2aW91c1ZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5iYXNlVXJsICYmIHRoaXMuZW52aXJvbm1lbnQpIHtcbiAgICAgIHRoaXMuYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hlbiBiYXNlVXJsIGlucHV0IGlzIHNldCwgb3ZlcnJpZGUgZW52aXJvbm1lbnQuQkFTRV9VUkwgc28gYWxsIGNoYXQvdm9pY2Ugc2VydmljZXMgdXNlIGl0IChzdXBwb3J0cyBuZ3JvayBldGMuKS4gKi9cbiAgcHJpdmF0ZSBhcHBseUJhc2VVcmxPdmVycmlkZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0RW52ID0gdGhpcy5pc0RldiA/IGRldl9lbnZpcm9ubWVudCA6IHByb2RfZW52aXJvbm1lbnQ7XG4gICAgaWYgKHRoaXMuYmFzZVVybCAmJiB0eXBlb2YgdGhpcy5iYXNlVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5iYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHsgLi4uZGVmYXVsdEVudiwgQkFTRV9VUkw6IHVybCB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBkZWZhdWx0RW52O1xuICB9XG5cbiAgZG9tYWluQXV0aG9yaXR5VmFsdWU6IGFueSA9ICdwcm9kLWxpdGUnO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCB0aGUgZXZlbnRJZCBpbiB0cmFuc2xhdGlvbiBzZXJ2aWNlIHRvIGdldCB0aGUgY29ycmVjdCBsYW5ndWFnZSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIGlmICh0aGlzLmV2ZW50SWQpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldEV2ZW50SWQodGhpcy5ldmVudElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5QmFzZVVybE92ZXJyaWRlKCk7XG5cbiAgICBjb25zdCBkb21haW4gPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGhlYWRlciB2YWx1ZSBiYXNlZCBvbiB0aGUgZG9tYWluXG5cbiAgICBpZiAoZG9tYWluLmluY2x1ZGVzKCdwcmUtYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3ByZS1wcm9kLWxpdGUnO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluLmluY2x1ZGVzKCdhcHAuc29jaWFsMjcuY29tJykpIHtcbiAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUgPSAncHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnaGl2ZWdwdC5pbycpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ2hpdmVncHQnO1xuICAgIH1cblxuICAgIC8vIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKCk7XG4gICAgLy8gdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5jaGFuZ2VUZW1wZXJhdHVyZSh0aGlzLnRlbXBlcmF0dXJlKTtcbiAgICB0aGlzLmZldGNoQm90Q29uZmlnKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICB0aGlzLmZldGNoQ2hhdEhpc3RvcnkoKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubWFwQ2hhdEhpc3RvcnkocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6JywgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIC8vIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgLy8gdGhpcy5pbml0aWFsaXplU29ja2V0KCk7XG4gICAgdGhpcy5ib3RTZXJ2aWNlXG4gICAgICAuZmV0Y2hTcGVlY2hBdXRob3JpemF0aW9uVG9rZW4oXG4gICAgICAgIHRoaXMuYm90SWQsXG4gICAgICAgIHRoaXMuYXBpS2V5LFxuICAgICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodG9rZW4pID0+IHtcbiAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU3BlZWNoUmVjb2duaXplcih0b2tlbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgLyoqIFRydWUgYWZ0ZXIgU29ja2V0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZvciBjaGF0IChhdm9pZHMgY29ubmVjdGluZyBvbiB2b2ljZS1vbmx5IHVzYWdlKS4gKi9cbiAgcHJpdmF0ZSBjaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2FsbCBiZWZvcmUgY2hhdCBhY3Rpb25zIHNvIFNvY2tldC5JTyBpcyB1c2VkIG9ubHkgZm9yIGNoYXQsIG5vdCBmb3Igdm9pY2UuXG4gICAqIFZvaWNlIGFnZW50IHVzZXMgbmF0aXZlIFdlYlNvY2tldCArIERhaWx5LmpzIG9ubHk7IFNvY2tldC5JTyBtdXN0IG5vdCBydW4gZHVyaW5nIHZvaWNlIGZsb3cuXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZUNoYXRTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkIHx8ICF0aGlzLm9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldFNlcnZpY2UuY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnWUVTIElOSVQnKTtcbiAgICAgICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcblxuICAgICAgICB0aGlzLnNvY2tldFNlcnZpY2UucmVnaXN0ZXJVc2VyU3BlY2lmaWNIaXZlU29ja2V0KFxuICAgICAgICAgIHRoaXMuYm90SWQsXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgIHRoaXMub3JnSWQsXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdGVuU29ja2V0cygpO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uTmV3OiBhbnk7XG4gIHNvY2tldERhdGE6IGFueTtcblxuICAvKiogSW5pdGlhbCBudW1iZXIgb2Ygc2Vzc2lvbi9hdHRlbmRlZSBjYXJkcyBzaG93biBiZWZvcmUgXCJTaG93IFggbW9yZVwiLiAqL1xuICByZWFkb25seSBTRVNTSU9OX0NBUkRTX0lOSVRJQUwgPSA2O1xuICByZWFkb25seSBBVFRFTkRFRV9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgU1BFQUtFUl9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgU1BPTlNPUl9DQVJEU19JTklUSUFMID0gOTtcbiAgcmVhZG9ubHkgQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUwgPSA5O1xuICAvKiogTWVzc2FnZSBpZCAtPiB0cnVlIHdoZW4gdXNlciBleHBhbmRlZCBcIlNob3cgbW9yZVwiIGZvciBzZXNzaW9ucy9hdHRlbmRlZXMuICovXG4gIGV4cGFuZGVkU2Vzc2lvbkNhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZFNwZWFrZXJDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZFNwb25zb3JDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZEJvb3RoUmVwQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gZGVzY3JpcHRpb24gZXhwYW5kZWQgKi9cbiAgZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAvKioga2V5OiBgJHttZXNzYWdlSWR9OiR7YXR0ZW5kZWVJZH1gIC0+IHRydWUgd2hlbiB2aWRlbyBpcyBwbGF5aW5nICovXG4gIGF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAvKioga2V5OiBgJHttZXNzYWdlSWR9OiR7YXR0ZW5kZWVJZH1gIC0+IHRydWUgd2hlbiB2aWRlbyBpcyBtdXRlZCAoZGVmYXVsdCB0cnVlKSAqL1xuICBhdHRlbmRlZVZpZGVvTXV0ZWRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cbiAgLyoqIFN0cmlwIEhUTUwgdGFncyB0byBwbGFpbiB0ZXh0IChlLmcuIGZvciBzcGVha2VyL2F0dGVuZGVlIGRlc2NyaXB0aW9uIGZyb20gQVBJKS4gKi9cbiAgc3RyaXBIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFodG1sIHx8IHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuICAgIGNvbnN0IHRleHQgPSBkb2MuYm9keT8udGV4dENvbnRlbnQgPz8gJyc7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgfVxuXG4gIGdldEF0dGVuZGVlRGVzY3JpcHRpb24oYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmF3ID1cbiAgICAgIGF0dGVuZGVlPy5kZXNjcmlwdGlvbiA/PyBhdHRlbmRlZT8uaW50ZXJlc3RzID8/IGF0dGVuZGVlPy5qb2JUaXRsZSA/PyAnJztcbiAgICBjb25zdCBzdHIgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHJhdy50cmltKCkgOiBTdHJpbmcocmF3ID8/ICcnKS50cmltKCk7XG4gICAgLy8gSWYgaXQgbG9va3MgbGlrZSBIVE1MLCBzdHJpcCB0YWdzIHNvIGNhcmQgc2hvd3MgcGxhaW4gdGV4dFxuICAgIGlmIChzdHIgJiYgLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHN0cikpIHJldHVybiB0aGlzLnN0cmlwSHRtbChzdHIpO1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzaG91bGRTaG93QXR0ZW5kZWVSZWFkTW9yZShhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gaGV1cmlzdGljOiBvbmx5IHNob3cgdG9nZ2xlIGZvciByZWFzb25hYmx5IGxvbmcgdGV4dFxuICAgIHJldHVybiB0aGlzLmdldEF0dGVuZGVlRGVzY3JpcHRpb24oYXR0ZW5kZWUpLmxlbmd0aCA+IDkwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRlbmRlZURlc2NLZXkoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbXNnSWQgPSBjaGF0Py5faWQ7XG4gICAgY29uc3QgYXR0ZW5kZWVJZCA9IGF0dGVuZGVlPy5pZCA/PyBhdHRlbmRlZT8uX2lkID8/IGF0dGVuZGVlPy51c2VySWQ7XG4gICAgaWYgKCFtc2dJZCB8fCAhYXR0ZW5kZWVJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke21zZ0lkfToke2F0dGVuZGVlSWR9YDtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVEZXNjcmlwdGlvbkV4cGFuZGVkKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzW2tleV07XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZURlc2NyaXB0aW9uKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSwgZXY/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHNba2V5XTtcbiAgICB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkcyA9IHtcbiAgICAgIC4uLnRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzLFxuICAgICAgW2tleV06IG5leHQsXG4gICAgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldEF0dGVuZGVlVmlkZW9VcmwoYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gYXR0ZW5kZWU/LnVzZXJWaWRlb3NNb2RlbD8udXJsO1xuICAgIHJldHVybiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHVybC50cmltKCkgOiAnJztcbiAgfVxuXG4gIGdldEF0dGVuZGVlVmlkZW9Qb3N0ZXIoYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcG9zdGVyID0gYXR0ZW5kZWU/LnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsO1xuICAgIHJldHVybiB0eXBlb2YgcG9zdGVyID09PSAnc3RyaW5nJyA/IHBvc3Rlci50cmltKCkgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBtc2dJZCA9IGNoYXQ/Ll9pZDtcbiAgICBjb25zdCBhdHRlbmRlZUlkID0gYXR0ZW5kZWU/LmlkID8/IGF0dGVuZGVlPy5faWQgPz8gYXR0ZW5kZWU/LnVzZXJJZDtcbiAgICBpZiAoIW1zZ0lkIHx8ICFhdHRlbmRlZUlkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7bXNnSWR9OiR7YXR0ZW5kZWVJZH1gO1xuICB9XG5cbiAgaXNBdHRlbmRlZVZpZGVvTXV0ZWQoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIHRydWU7XG4gICAgLy8gZGVmYXVsdCB0cnVlIChtdXRlZCkgdW5sZXNzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlXG4gICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVWaWRlb011dGVkSWRzW2tleV0gIT09IGZhbHNlO1xuICB9XG5cbiAgaXNBdHRlbmRlZVZpZGVvUGxheWluZyhjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkc1trZXldO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVWaWRlb011dGUoXG4gICAgY2hhdDogYW55LFxuICAgIGF0dGVuZGVlOiBhbnksXG4gICAgdmlkZW9FbD86IEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsLFxuICAgIGV2PzogRXZlbnQsXG4gICk6IHZvaWQge1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuaXNBdHRlbmRlZVZpZGVvTXV0ZWQoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb011dGVkSWRzID0geyAuLi50aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkcywgW2tleV06IG5leHQgfTtcbiAgICBpZiAodmlkZW9FbCkge1xuICAgICAgdmlkZW9FbC5tdXRlZCA9IG5leHQ7XG4gICAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdm9sdW1lIHRvIGJlID4wIHdoZW4gdW5tdXRpbmdcbiAgICAgIGlmICghbmV4dCAmJiAodmlkZW9FbC52b2x1bWUgPT0gbnVsbCB8fCB2aWRlb0VsLnZvbHVtZSA9PT0gMCkpIHtcbiAgICAgICAgdmlkZW9FbC52b2x1bWUgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlVmlkZW9QbGF5KFxuICAgIGNoYXQ6IGFueSxcbiAgICBhdHRlbmRlZTogYW55LFxuICAgIHZpZGVvRWw/OiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCxcbiAgICBldj86IEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmlzQXR0ZW5kZWVWaWRlb1BsYXlpbmcoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgW2tleV06IG5leHQsXG4gICAgfTtcbiAgICBpZiAodmlkZW9FbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBjb25zdCBwID0gdmlkZW9FbC5wbGF5KCk7XG4gICAgICAgICAgaWYgKHAgJiYgdHlwZW9mIChwIGFzIGFueSkuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIChwIGFzIGFueSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBJZiBwbGF5IGZhaWxzLCByZWZsZWN0IHBhdXNlZCBzdGF0ZVxuICAgICAgICAgICAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMsXG4gICAgICAgICAgICAgICAgW2tleV06IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWRlb0VsLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkF0dGVuZGVlVmlkZW9QbGF5U3RhdGUoY2hhdDogYW55LCBhdHRlbmRlZTogYW55LCBpc1BsYXlpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgaWYgKHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHNba2V5XSA9PT0gaXNQbGF5aW5nKSByZXR1cm47XG4gICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgIC4uLnRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMsXG4gICAgICBba2V5XTogaXNQbGF5aW5nLFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHNlc3Npb24gZGF0ZS90aW1lIGZvciBkaXNwbGF5LlxuICAgKiBAcGFyYW0gZGF0ZVRpbWVSYW5nZSBTZXNzaW9uIHN0YXJ0L2VuZCAob2JqZWN0IHdpdGggc3RhcnQvZW5kIG9yIHN0cmluZyB3aXRoIFwiU3RhcnQ6IC4uLiBFbmQ6IC4uLlwiKVxuICAgKiBAcGFyYW0gZGlzcGxheVRpbWVab25lIE9wdGlvbmFsIHVzZXItc2VsZWN0ZWQgdGltZXpvbmUgKGUuZy4gJ0FtZXJpY2EvTmV3X1lvcmsnKTsgd2hlbiBzZXQsIHRpbWVzIGFyZSBzaG93biBpbiB0aGlzIHpvbmUuXG4gICAqL1xuICBmb3JtYXRTZXNzaW9uV2hlbihcbiAgICBkYXRlVGltZVJhbmdlOiBzdHJpbmcgfCB7IHN0YXJ0Pzogc3RyaW5nOyBlbmQ/OiBzdHJpbmcgfSB8IG51bGwsXG4gICAgZGlzcGxheVRpbWVab25lPzogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgIGlmICghZGF0ZVRpbWVSYW5nZSkgcmV0dXJuICcnO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgZGF0ZVRpbWVSYW5nZT8uc3RhcnQgJiZcbiAgICAgIGRhdGVUaW1lUmFuZ2U/LmVuZFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2UuZW5kKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlRm9ybWF0dGVkfSB8ICR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgL1N0YXJ0OlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICApO1xuICAgIGNvbnN0IGVuZE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgIC9FbmQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICk7XG4gICAgaWYgKCFzdGFydE1hdGNoIHx8ICFlbmRNYXRjaCkgcmV0dXJuIGRhdGVUaW1lUmFuZ2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0U3RyID0gc3RhcnRNYXRjaFsxXTtcbiAgICAgIGNvbnN0IGVuZFN0ciA9IGVuZE1hdGNoWzFdO1xuICAgICAgY29uc3Qgc3RhcnREdCA9IG5ldyBEYXRlKHN0YXJ0U3RyLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIGNvbnN0IGVuZER0ID0gbmV3IERhdGUoZW5kU3RyLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXR0ZWQgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydFRpbWVTaG9ydCA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5kVGltZVNob3J0ID0gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGAke2RhdGVGb3JtYXR0ZWR9IHwgJHtzdGFydFRpbWVTaG9ydH0gLSAke2VuZFRpbWVTaG9ydH1gO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRhdGVUaW1lUmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkYXRlIGJhZGdlIChkYXkgKyBtb250aCkgZm9yIHNlc3Npb24gY2FyZCBmcm9tIGRhdGVUaW1lUmFuZ2UuXG4gICAqIEhhbmRsZXMgZGF0ZVRpbWVSYW5nZSBhcyBzdHJpbmcgKFwiU3RhcnQ6IDIwMjYtMDItMjAgMDE6MDU6MDAsIEVuZDogLi4uXCIpIG9yIG9iamVjdCB7IHN0YXJ0LCBlbmQgfS5cbiAgICogVXNlcyBkaXNwbGF5VGltZVpvbmUgb25seSB3aGVuIGl0IGlzIGEgdmFsaWQgSUFOQSBpZGVudGlmaWVyOyBvdGhlcndpc2UgZm9ybWF0cyBpbiBsb2NhbCB0aW1lLlxuICAgKi9cbiAgZ2V0U2Vzc2lvbkRhdGVCYWRnZShcbiAgICBkYXRlVGltZVJhbmdlOiBzdHJpbmcgfCB7IHN0YXJ0Pzogc3RyaW5nOyBlbmQ/OiBzdHJpbmcgfSB8IG51bGwsXG4gICAgZGlzcGxheVRpbWVab25lPzogc3RyaW5nLFxuICApOiB7IGRheTogc3RyaW5nOyBtb250aDogc3RyaW5nIH0ge1xuICAgIGlmICghZGF0ZVRpbWVSYW5nZSkgcmV0dXJuIHsgZGF5OiAnJywgbW9udGg6ICcnIH07XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdGFydER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdGFydE1hdGNoKVxuICAgICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnREdCB8fCBpc05hTihzdGFydER0LmdldFRpbWUoKSkpIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgICAgY29uc3QgbG9jYWxlT3B0cyA9IGRpc3BsYXlUaW1lWm9uZSA/IHsgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSB9IDoge307XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXkgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBkYXksIG1vbnRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZGlzcGxheVRpbWVab25lIG1heSBiZSBub24tSUFOQSAoZS5nLiBcIihVVEMtMDM6MDApIEJyYXNpbGlhXCIpOyBmb3JtYXQgd2l0aG91dCB0aW1lWm9uZVxuICAgICAgICBjb25zdCBkYXkgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IGRheTogJ251bWVyaWMnIH0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcgfSk7XG4gICAgICAgIHJldHVybiB7IGRheSwgbW9udGggfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGltZSByYW5nZSBvbmx5IChlLmcuIFwiOTowMCBBTSAtIDEwOjMwIEFNXCIpIGZvciBzZXNzaW9uIGNhcmQuXG4gICAqIEZhbGxzIGJhY2sgdG8gZm9ybWF0dGluZyB3aXRob3V0IHRpbWVab25lIHdoZW4gZGlzcGxheVRpbWVab25lIGlzIG5vdCBhIHZhbGlkIElBTkEgaWRlbnRpZmllci5cbiAgICovXG4gIGZvcm1hdFNlc3Npb25UaW1lUmFuZ2UoXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiAnJztcbiAgICB0cnkge1xuICAgICAgbGV0IHN0YXJ0RHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbmREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgZGF0ZVRpbWVSYW5nZT8uc3RhcnQgJiZcbiAgICAgICAgZGF0ZVRpbWVSYW5nZT8uZW5kXG4gICAgICApIHtcbiAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBlbmREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2UuZW5kKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvRW5kOlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHN0YXJ0TWF0Y2gpXG4gICAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKHN0YXJ0TWF0Y2hbMV0ucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgICBpZiAoZW5kTWF0Y2gpIGVuZER0ID0gbmV3IERhdGUoZW5kTWF0Y2hbMV0ucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdGFydER0IHx8IGlzTmFOKHN0YXJ0RHQuZ2V0VGltZSgpKSkgcmV0dXJuICcnO1xuICAgICAgY29uc3QgbG9jYWxlT3B0cyA9IGRpc3BsYXlUaW1lWm9uZSA/IHsgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSB9IDoge307XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9XG4gICAgICAgICAgZW5kRHQgJiYgIWlzTmFOKGVuZER0LmdldFRpbWUoKSlcbiAgICAgICAgICAgID8gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICByZXR1cm4gZW5kVGltZSA/IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YCA6IHN0YXJ0VGltZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPVxuICAgICAgICAgIGVuZER0ICYmICFpc05hTihlbmREdC5nZXRUaW1lKCkpXG4gICAgICAgICAgICA/IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHJldHVybiBlbmRUaW1lID8gYCR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gIDogc3RhcnRUaW1lO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJQU5BIHRpbWV6b25lIElEIC0+IGFiYnJldmlhdGlvbiBtYXAgKG1hdGNoZXMgcGFyZW50IGFwcCBzZXNzaW9uLWxheW91dHMgLyB0aW1lem9uZXMuZW51bSBUaW1lWm9uZXMpLlxuICAgKiBVc2VkIHNvIHNlc3Npb24gY2FyZHMgc2hvdyBTQVNULCBFRVNULCBTQVdTVCwgRVNBU1QsIGV0Yy4gaW5zdGVhZCBvZiBHTVQrMSwgR01UKzIuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUWl9BQkJSX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnUGFjaWZpYy9LaXJpdGltYXRpJzogJ0xJTlQnLFxuICAgICdQYWNpZmljL0FwaWEnOiAnU1NUJyxcbiAgICAnUGFjaWZpYy9Ub25nYXRhcHUnOiAnVFNUJyxcbiAgICAnRXRjL0dNVC0xMyc6ICdVVEMnLFxuICAgICdQYWNpZmljL0NoYXRoYW0nOiAnQ0hBRFQnLFxuICAgICdBc2lhL0thbWNoYXRrYSc6ICdBTkFUJyxcbiAgICAnUGFjaWZpYy9GaWppJzogJ0ZKVCcsXG4gICAgJ0V0Yy9HTVQtMTInOiAnVScsXG4gICAgJ1BhY2lmaWMvQXVja2xhbmQnOiAnTlpTVCcsXG4gICAgJ1BhY2lmaWMvR3VhZGFsY2FuYWwnOiAnQ1BTVCcsXG4gICAgJ0FzaWEvU2FraGFsaW4nOiAnU0FLVCcsXG4gICAgJ1BhY2lmaWMvTm9yZm9sayc6ICdORlQnLFxuICAgICdBc2lhL01hZ2FkYW4nOiAnTUFHVCcsXG4gICAgJ0FzaWEvU3JlZG5la29seW1zayc6ICdTUkVUJyxcbiAgICAnUGFjaWZpYy9Cb3VnYWludmlsbGUnOiAnQlNUJyxcbiAgICAnQXVzdHJhbGlhL0xvcmRfSG93ZSc6ICdMSFNUJyxcbiAgICAnQXNpYS9WbGFkaXZvc3Rvayc6ICdWTEFUJyxcbiAgICAnQXVzdHJhbGlhL0hvYmFydCc6ICdBRVNUJyxcbiAgICAnUGFjaWZpYy9Qb3J0X01vcmVzYnknOiAnQ2hTVCcsXG4gICAgJ0F1c3RyYWxpYS9TeWRuZXknOiAnQUVTVCcsXG4gICAgJ0F1c3RyYWxpYS9CcmlzYmFuZSc6ICdBV1NUJyxcbiAgICAnQXVzdHJhbGlhL0Rhcndpbic6ICdBQ1NUJyxcbiAgICAnQXVzdHJhbGlhL0FkZWxhaWRlJzogJ0FDU1QnLFxuICAgICdBc2lhL1lha3V0c2snOiAnWUFLVCcsXG4gICAgJ0FzaWEvU2VvdWwnOiAnS1NUJyxcbiAgICAnQXNpYS9QeW9uZ3lhbmcnOiAnS1NUJyxcbiAgICAnQXNpYS9Ub2t5byc6ICdUU1QnLFxuICAgICdBc2lhL0NoaXRhJzogJ1lBS1QnLFxuICAgICdBdXN0cmFsaWEvRXVjbGEnOiAnQUNXU1QnLFxuICAgICdBc2lhL1VsYWFuYmFhdGFyJzogJ0ZTVCcsXG4gICAgJ0FzaWEvVGFpcGVpJzogJ1VMQVQnLFxuICAgICdBdXN0cmFsaWEvUGVydGgnOiAnQVdTVCcsXG4gICAgJ0FzaWEvU2luZ2Fwb3JlJzogJ1NOU1QnLFxuICAgICdBc2lhL0lya3V0c2snOiAnSVJLVCcsXG4gICAgJ0FzaWEvU2hhbmdoYWknOiAnQ1NUJyxcbiAgICAnQXNpYS9Ub21zayc6ICdNU0QnLFxuICAgICdBc2lhL05vdm9zaWJpcnNrJzogJ05PVlQnLFxuICAgICdBc2lhL0tyYXNub3lhcnNrJzogJ0tSQVQnLFxuICAgICdBc2lhL0hvdmQnOiAnU0FTVCcsXG4gICAgJ0FzaWEvQmFybmF1bCc6ICdNU0snLFxuICAgICdBc2lhL0Jhbmdrb2snOiAnVEhBJyxcbiAgICAnQXNpYS9ZYW5nb24nOiAnTVlTVCcsXG4gICAgJ0FzaWEvT21zayc6ICdPTVNUJyxcbiAgICAnQXNpYS9EaGFrYSc6ICdCU1QnLFxuICAgICdBc2lhL0FsbWF0eSc6ICdOQ0FTVCcsXG4gICAgJ0FzaWEvS2F0aG1hbmR1JzogJ05QVCcsXG4gICAgJ0FzaWEvQ29sb21ibyc6ICdTTFQnLFxuICAgICdBc2lhL0tvbGthdGEnOiAnSVNUJyxcbiAgICAnQXNpYS9DYWxjdXR0YSc6ICdJU1QnLFxuICAgICdBc2lhL1F5enlsb3JkYSc6ICdDQVNUJyxcbiAgICAnQXNpYS9LYXJhY2hpJzogJ1BLVCcsXG4gICAgJ0FzaWEvWWVrYXRlcmluYnVyZyc6ICdZRUtUJyxcbiAgICAnQXNpYS9UYXNoa2VudCc6ICdXQVNUJyxcbiAgICAnQXNpYS9LYWJ1bCc6ICdBRlQnLFxuICAgICdBc2lhL1llcmV2YW4nOiAnQU1UJyxcbiAgICAnRXVyb3BlL1ZvbGdvZ3JhZCc6ICdWU1QnLFxuICAgICdBc2lhL1RiaWxpc2knOiAnR0VUJyxcbiAgICAnRXVyb3BlL1NhcmF0b3YnOiAnU0xUJyxcbiAgICAnSW5kaWFuL01hdXJpdGl1cyc6ICdNVVQnLFxuICAgICdFdXJvcGUvU2FtYXJhJzogJ1NBTVQnLFxuICAgICdBc2lhL0Jha3UnOiAnQVpUJyxcbiAgICAnRXVyb3BlL0FzdHJha2hhbic6ICdTQU1UJyxcbiAgICAnQXNpYS9EdWJhaSc6ICdBUkJTVCcsXG4gICAgJ0FzaWEvVGVocmFuJzogJ0lEVCcsXG4gICAgJ0FmcmljYS9OYWlyb2JpJzogJ0VBU1QnLFxuICAgICdFdXJvcGUvTW9zY293JzogJ01TSycsXG4gICAgJ0V1cm9wZS9NaW5zayc6ICdNU0snLFxuICAgICdBc2lhL1JpeWFkaCc6ICdBU1QnLFxuICAgICdFdXJvcGUvSXN0YW5idWwnOiAnVERUJyxcbiAgICAnQXNpYS9CYWdoZGFkJzogJ0FTVCcsXG4gICAgJ0FmcmljYS9XaW5kaG9layc6ICdOU1QnLFxuICAgICdBZnJpY2EvVHJpcG9saSc6ICdMU1QnLFxuICAgICdBZnJpY2EvS2hhcnRvdW0nOiAnRUFTVCcsXG4gICAgJ0V1cm9wZS9LYWxpbmluZ3JhZCc6ICdLU1QnLFxuICAgICdBc2lhL0plcnVzYWxlbSc6ICdKRFQnLFxuICAgICdFdXJvcGUvS2lldic6ICdFRURUJyxcbiAgICAnQWZyaWNhL0pvaGFubmVzYnVyZyc6ICdTQVNUJyxcbiAgICAnQXNpYS9IZWJyb24nOiAnRUVUJyxcbiAgICAnQXNpYS9EYW1hc2N1cyc6ICdTRFQnLFxuICAgICdFdXJvcGUvQ2hpc2luYXUnOiAnR0RUJyxcbiAgICAnQWZyaWNhL0NhaXJvJzogJ0VTVCcsXG4gICAgJ0FzaWEvQmVpcnV0JzogJ01FRFQnLFxuICAgICdFdXJvcGUvQnVjaGFyZXN0JzogJ0dEVCcsXG4gICAgJ0FzaWEvQW1tYW4nOiAnSlNUJyxcbiAgICAnQWZyaWNhL0xhZ29zJzogJ0VDVCcsXG4gICAgJ0V1cm9wZS9XYXJzYXcnOiAnQ0VEVCcsXG4gICAgJ0FmcmljYS9DYXNhYmxhbmNhJzogJ01EVCcsXG4gICAgJ0V1cm9wZS9QYXJpcyc6ICdDRVNUJyxcbiAgICAnRXVyb3BlL0J1ZGFwZXN0JzogJ0NFRFQnLFxuICAgICdFdXJvcGUvQmVybGluJzogJ1dFRFQnLFxuICAgICdBZnJpY2EvU2FvX1RvbWUnOiAnR1NUJyxcbiAgICAnQXRsYW50aWMvUmV5a2phdmlrJzogJ0dTVCcsXG4gICAgJ0V1cm9wZS9Mb25kb24nOiAnR0RUJyxcbiAgICAnRXRjL1VUQyc6ICdVVEMnLFxuICAgICdBdGxhbnRpYy9Bem9yZXMnOiAnQURUJyxcbiAgICAnQXRsYW50aWMvQ2FwZV9WZXJkZSc6ICdDVlNUJyxcbiAgICAnRXRjL0dNVCsyJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvQXJhZ3VhaW5hJzogJ1NFU1QnLFxuICAgICdBbWVyaWNhL1Nhb19QYXVsbyc6ICdFU0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2F5ZW5uZSc6ICdTRVNUJyxcbiAgICAnQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzJzogJ0FTVCcsXG4gICAgJ0FtZXJpY2EvTnV1ayc6ICdXR1QnLFxuICAgICdBbWVyaWNhL01vbnRldmlkZW8nOiAnTVNUJyxcbiAgICAnQW1lcmljYS9QdW50YV9BcmVuYXMnOiAnQ0xTVCcsXG4gICAgJ0FtZXJpY2EvTWlxdWVsb24nOiAnUE1TVCcsXG4gICAgJ0FtZXJpY2EvQmFoaWEnOiAnQlNUJyxcbiAgICAnQW1lcmljYS9TdF9Kb2hucyc6ICdOU1QnLFxuICAgICdBbWVyaWNhL0FzdW5jaW9uJzogJ1BSU1QnLFxuICAgICdBbWVyaWNhL0hhbGlmYXgnOiAnQVNUJyxcbiAgICAnQW1lcmljYS9DYXJhY2FzJzogJ1ZTVCcsXG4gICAgJ0FtZXJpY2EvQ3VpYWJhJzogJ0NCU1QnLFxuICAgICdBbWVyaWNhL0xhX1Bheic6ICdTQVdTVCcsXG4gICAgJ0FtZXJpY2EvU2FudGlhZ28nOiAnUFNTVCcsXG4gICAgJ0FtZXJpY2EvQm9nb3RhJzogJ1NQU1QnLFxuICAgICdBbWVyaWNhL0NhbmN1bic6ICdFU1QnLFxuICAgICdBbWVyaWNhL05ld19Zb3JrJzogJ0VUJyxcbiAgICAnQW1lcmljYS9Qb3J0LWF1LVByaW5jZSc6ICdFRFQnLFxuICAgICdBbWVyaWNhL0hhdmFuYSc6ICdFRFQnLFxuICAgICdBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzJzogJ0VTVCcsXG4gICAgJ0FtZXJpY2EvR3JhbmRfVHVyayc6ICdFU1QnLFxuICAgICdBbWVyaWNhL0d1YXRlbWFsYSc6ICdDQVNUJyxcbiAgICAnQW1lcmljYS9DaGljYWdvJzogJ0NUJyxcbiAgICAnUGFjaWZpYy9FYXN0ZXInOiAnRUFTVCcsXG4gICAgJ0FtZXJpY2EvTWV4aWNvX0NpdHknOiAnQ1NUJyxcbiAgICAnQW1lcmljYS9SZWdpbmEnOiAnQ0NTVCcsXG4gICAgJ0FtZXJpY2EvUGhvZW5peCc6ICdNVCcsXG4gICAgJ0FtZXJpY2EvQ2hpaHVhaHVhJzogJ01EVCcsXG4gICAgJ0FtZXJpY2EvRGVudmVyJzogJ01UJyxcbiAgICAnQW1lcmljYS9XaGl0ZWhvcnNlJzogJ1lTVCcsXG4gICAgJ0FtZXJpY2EvVGlqdWFuYSc6ICdQU1QnLFxuICAgICdFdGMvR01UKzgnOiAnVVRDLTA4JyxcbiAgICAnQW1lcmljYS9Mb3NfQW5nZWxlcyc6ICdQVCcsXG4gICAgJ0FtZXJpY2EvQW5jaG9yYWdlJzogJ0FLJyxcbiAgICAnRXRjL0dNVCs5JzogJ1VUQy0wOScsXG4gICAgJ1BhY2lmaWMvTWFycXVlc2FzJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvQWRhayc6ICdIU1QnLFxuICAgICdQYWNpZmljL0hvbm9sdWx1JzogJ0hBU1QnLFxuICAgICdFdGMvR01UKzExJzogJ1VUQy0xMScsXG4gICAgJ0V0Yy9HTVQrMTInOiAnQklUJyxcbiAgfTtcblxuICAvKipcbiAgICogV2luZG93cy1zdHlsZSBcIihVVEPCsUhIOk1NKSBQbGFjZVwiIC0+IHNob3J0IG5hbWUgKElTVCwgQlJULCBldGMuKSBzbyB3ZSBzaG93IFwiSVNUXCIgbm90IFwiKChVVEMrMDU6MzApIEluZGlhKVwiLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgV0lORE9XU19UWl9BQkJSX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnKFVUQy0wMzowMCkgQnJhc2lsaWEnOiAnQlJUJyxcbiAgICAnKFVUQy0wMzowMCkgQnVlbm9zIEFpcmVzJzogJ0FSVCcsXG4gICAgJyhVVEMrMDU6MzApIEluZGlhJzogJ0lTVCcsXG4gICAgJyhVVEMrMDU6MzApIENoZW5uYWksIEtvbGthdGEsIE11bWJhaSwgTmV3IERlbGhpJzogJ0lTVCcsXG4gICAgJyhVVEMrMDA6MDApIER1YmxpbiwgRWRpbmJ1cmdoLCBMb25kb24nOiAnR01UJyxcbiAgICAnKFVUQyswMDowMCkgTW9ucm92aWEsIFJleWtqYXZpayc6ICdHTVQnLFxuICAgICcoVVRDKzAxOjAwKSBBbXN0ZXJkYW0sIEJlcmxpbiwgUm9tZSwgU3RvY2tob2xtJzogJ0NFVCcsXG4gICAgJyhVVEMrMDE6MDApIEJydXNzZWxzLCBDb3BlbmhhZ2VuLCBNYWRyaWQsIFBhcmlzJzogJ0NFVCcsXG4gICAgJyhVVEMrMDI6MDApIEF0aGVucywgSXN0YW5idWwsIE1pbnNrJzogJ0VFVCcsXG4gICAgJyhVVEMrMDI6MDApIENhaXJvJzogJ0VFVCcsXG4gICAgJyhVVEMrMDI6MDApIEplcnVzYWxlbSc6ICdJU1QnLFxuICAgICcoVVRDKzAzOjAwKSBNb3Njb3csIFN0LiBQZXRlcnNidXJnJzogJ01TSycsXG4gICAgJyhVVEMrMDM6MDApIE5haXJvYmknOiAnRUFUJyxcbiAgICAnKFVUQyswNDowMCkgRHViYWknOiAnR1NUJyxcbiAgICAnKFVUQyswNTowMCkgSXNsYW1hYmFkLCBLYXJhY2hpJzogJ1BLVCcsXG4gICAgJyhVVEMrMDU6NDUpIEthdGhtYW5kdSc6ICdOUFQnLFxuICAgICcoVVRDKzA2OjAwKSBEaGFrYSc6ICdCU1QnLFxuICAgICcoVVRDKzA2OjMwKSBZYW5nb24gKFJhbmdvb24pJzogJ01NVCcsXG4gICAgJyhVVEMrMDc6MDApIEJhbmdrb2ssIEhhbm9pLCBKYWthcnRhJzogJ0lDVCcsXG4gICAgJyhVVEMrMDg6MDApIEJlaWppbmcsIENob25ncWluZywgSG9uZyBLb25nLCBVcnVtcWknOiAnQ1NUJyxcbiAgICAnKFVUQyswODowMCkgS3VhbGEgTHVtcHVyLCBTaW5nYXBvcmUnOiAnU0dUJyxcbiAgICAnKFVUQyswOTowMCkgT3Nha2EsIFNhcHBvcm8sIFRva3lvJzogJ0pTVCcsXG4gICAgJyhVVEMrMDk6MzApIEFkZWxhaWRlJzogJ0FDU1QnLFxuICAgICcoVVRDKzEwOjAwKSBCcmlzYmFuZSc6ICdBRVNUJyxcbiAgICAnKFVUQysxMDowMCkgQ2FuYmVycmEsIE1lbGJvdXJuZSwgU3lkbmV5JzogJ0FFU1QnLFxuICAgICcoVVRDKzEyOjAwKSBBdWNrbGFuZCwgV2VsbGluZ3Rvbic6ICdOWlNUJyxcbiAgICAnKFVUQy0wNTowMCkgRWFzdGVybiBUaW1lIChVUyAmIENhbmFkYSknOiAnRVQnLFxuICAgICcoVVRDLTA2OjAwKSBDZW50cmFsIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdDVCcsXG4gICAgJyhVVEMtMDc6MDApIE1vdW50YWluIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdNVCcsXG4gICAgJyhVVEMtMDg6MDApIFBhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpJzogJ1BUJyxcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRpbWV6b25lIGFiYnJldmlhdGlvbiAoZS5nLiBJU1QsIEJSVCwgU0FTVCkgZm9yIGRpc3BsYXkgYWZ0ZXIgdGhlIHRpbWUuXG4gICAqIFVzZXMgSUFOQSBtYXAgYW5kIFdpbmRvd3Mtc3R5bGUgbWFwIHNvIHdlIHNob3cgXCJCUlRcIiAvIFwiSVNUXCIgaW5zdGVhZCBvZiBcIigoVVRDLTAzOjAwKSBCcmFzaWxpYSlcIi5cbiAgICogT25seSBjb25zdWx0cyBXaW5kb3dzIG1hcCB3aGVuIGlucHV0IGxvb2tzIGxpa2UgXCIoVVRDLi4uKVwiIHNvIGV4aXN0aW5nIElBTkEvSW50bCBiZWhhdmlvciBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0ejogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXR6IHx8ICFTdHJpbmcodHopLnRyaW0oKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHR6SWQgPSBTdHJpbmcodHopLnRyaW0oKTtcbiAgICBpZiAodHpJZC5zdGFydHNXaXRoKCcoVVRDJykgfHwgdHpJZC5zdGFydHNXaXRoKCcodXRjJykpIHtcbiAgICAgIGNvbnN0IHdpbk1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KVxuICAgICAgICAuV0lORE9XU19UWl9BQkJSX01BUDtcbiAgICAgIGNvbnN0IHdpbktleSA9IE9iamVjdC5rZXlzKHdpbk1hcCkuZmluZChcbiAgICAgICAgKGspID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gdHpJZC50b0xvd2VyQ2FzZSgpLFxuICAgICAgKTtcbiAgICAgIGlmICh3aW5LZXkpIHJldHVybiB3aW5NYXBbd2luS2V5XTtcbiAgICB9XG4gICAgY29uc3QgbWFwID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIENoYXREcmF3ZXJDb21wb25lbnQpLlRaX0FCQlJfTUFQO1xuICAgIGxldCBtYXBwZWQgPSBtYXBbdHpJZF07XG4gICAgaWYgKCFtYXBwZWQpIHtcbiAgICAgIGNvbnN0IGtleUxvd2VyID0gdHpJZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhtYXApLmZpbmQoXG4gICAgICAgIChba10pID0+IGsudG9Mb3dlckNhc2UoKSA9PT0ga2V5TG93ZXIsXG4gICAgICApO1xuICAgICAgaWYgKGVudHJ5KSBtYXBwZWQgPSBlbnRyeVsxXTtcbiAgICB9XG4gICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICB0aW1lWm9uZTogdHpJZCxcbiAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocCkgPT4gcC50eXBlID09PSAndGltZVpvbmVOYW1lJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9ICh0elBhcnQ/LnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICBpZiAodmFsdWUgJiYgL15HTVRbKy1dXFxkLy50ZXN0KHZhbHVlKSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHNlc3Npb25Sb2xlczogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvblJvbGVzKSB8fCBzZXNzaW9uUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IHNlc3Npb25Sb2xlc1swXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFN0cmluZyhmaXJzdClcbiAgICAgICAgLnJlcGxhY2UoL15cXHMqLVxccyovLCAnJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gJ29iamVjdCcgJiYgKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnKSB8fFxuICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgKTtcbiAgfVxuXG4gIG1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9uczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25zKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHVzZXJUaW1lem9uZSA9XG4gICAgICB0aGlzLnRpbWV6b25lICYmIFN0cmluZyh0aGlzLnRpbWV6b25lKS50cmltKClcbiAgICAgICAgPyBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzZXNzaW9ucy5tYXAoKHJhdzogYW55KSA9PiB7XG4gICAgICAvLyBnZXRfbXlfYWdlbmRhIHJldHVybnMgd3JhcHBlciB7IGlkLCBzY2hlZHVsZSwgaXNTZXNzaW9uIH07IG5vcm1hbGl6ZSB0byBpbm5lciBzY2hlZHVsZSBvYmplY3RcbiAgICAgIGNvbnN0IHMgPSByYXcgJiYgcmF3LnNjaGVkdWxlID8gcmF3LnNjaGVkdWxlIDogcmF3O1xuICAgICAgLy8gU3VwcG9ydCBib3RoIGRhdGVUaW1lUmFuZ2UgKHN0cmluZykgYW5kIGFjdHVhbERhdGVUaW1lUmFuZ2UgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZClcbiAgICAgIGNvbnN0IHdoZW5SYXcgPSBzLmRhdGVUaW1lUmFuZ2UgPz8gcy5hY3R1YWxEYXRlVGltZVJhbmdlID8/ICcnO1xuICAgICAgY29uc3Qgd2hlbkZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2Vzc2lvbldoZW4od2hlblJhdywgdXNlclRpbWV6b25lKTtcbiAgICAgIC8vIE9ubHkgc2V0IHN0YXR1c1RleHQgd2hlbiBzZXNzaW9uIGhhcyBqb2luL3dhdGNoIHJvbGVzIChzbyB3ZSBkb24ndCBzaG93IFwiWW91IGNhbiBqb2luIHRoaXMgbWVldGluZ1wiIHdoZW4gdGhlcmUgYXJlIG5vIGJ1dHRvbnMpXG4gICAgICBjb25zdCBoYXNKb2luV2F0Y2hSb2xlID1cbiAgICAgICAgQXJyYXkuaXNBcnJheShzLnNlc3Npb25Sb2xlcykgJiZcbiAgICAgICAgcy5zZXNzaW9uUm9sZXMuc29tZSgocjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgICAgICByICYmIHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByLnNlc3Npb25Sb2xlTmFtZVxuICAgICAgICAgICAgICA/IFN0cmluZyhyLnNlc3Npb25Sb2xlTmFtZSkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgOiBTdHJpbmcociA/PyAnJylcbiAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHJldHVybiBuYW1lID09PSAnam9pbicgfHwgbmFtZSA9PT0gJ3dhdGNoJztcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBzdGF0dXNUZXh0ID0gaGFzSm9pbldhdGNoUm9sZVxuICAgICAgICA/IHRoaXMuZ2V0U3RhdHVzVGV4dEZyb21TZXNzaW9uUm9sZXMocy5zZXNzaW9uUm9sZXMpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzZXNzaW9uVGltZVpvbmUgPVxuICAgICAgICBzLnRpbWVab25lICE9IG51bGxcbiAgICAgICAgICA/IHR5cGVvZiBzLnRpbWVab25lID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyAocy50aW1lWm9uZS5pZCA/PyBzLnRpbWVab25lLm5hbWUgPz8gJycpXG4gICAgICAgICAgICA6IFN0cmluZyhzLnRpbWVab25lKVxuICAgICAgICAgIDogJyc7XG4gICAgICAvLyBTaG93IHVzZXIncyBzZWxlY3RlZCB0aW1lem9uZSB3aGVuIHNldCwgb3RoZXJ3aXNlIHNlc3Npb24ncyB0aW1lem9uZSBmcm9tIGRhdGFcbiAgICAgIGNvbnN0IGRpc3BsYXlUaW1lWm9uZSA9ICh1c2VyVGltZXpvbmUgfHwgc2Vzc2lvblRpbWVab25lIHx8ICcnKS50cmltKCk7XG4gICAgICBjb25zdCB0ekFiYnIgPSBkaXNwbGF5VGltZVpvbmVcbiAgICAgICAgPyB0aGlzLmdldFRpbWV6b25lQWJicmV2aWF0aW9uKGRpc3BsYXlUaW1lWm9uZSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHdoZW5XaXRoVHogPVxuICAgICAgICB3aGVuRm9ybWF0dGVkIHx8ICh0eXBlb2Ygd2hlblJhdyA9PT0gJ29iamVjdCcgPyAnJyA6IFN0cmluZyh3aGVuUmF3KSk7XG4gICAgICBjb25zdCB3aGVuRGlzcGxheSA9IHR6QWJiclxuICAgICAgICA/IGAke3doZW5XaXRoVHp9ICgke3R6QWJicn0pYC50cmltKClcbiAgICAgICAgOiB3aGVuV2l0aFR6O1xuICAgICAgY29uc3QgZGF0ZUJhZGdlID0gdGhpcy5nZXRTZXNzaW9uRGF0ZUJhZGdlKHdoZW5SYXcsIGRpc3BsYXlUaW1lWm9uZSk7XG4gICAgICBsZXQgdGltZVJhbmdlID0gdGhpcy5mb3JtYXRTZXNzaW9uVGltZVJhbmdlKHdoZW5SYXcsIGRpc3BsYXlUaW1lWm9uZSk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN0cmluZyhzLmRlc2NyaXB0aW9uID8/IHMuYWJzdHJhY3QgPz8gJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IG1lZXRpbmdUeXBlID0gU3RyaW5nKFxuICAgICAgICBzLnNlc3Npb25UeXBlID8/IHMudHlwZSA/PyBzLm1lZXRpbmdUeXBlID8/ICcnLFxuICAgICAgKS50cmltKCk7XG4gICAgICBjb25zdCBzZXNzaW9uVHlwZUxhYmVsID0gdGhpcy5pc1VuRXZlbnRcbiAgICAgICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdNZWV0aW5nIHR5cGUnKSB8fCAnTWVldGluZyB0eXBlJ1xuICAgICAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1Nlc3Npb24gdHlwZScpIHx8ICdTZXNzaW9uIHR5cGUnO1xuICAgICAgLy8gU2FtZSBsb2dpYyBhcyBiZWZvcmUgZGVzaWduIHVwZGF0ZTogcHJlZmVyIHR6IGFiYnJldmlhdGlvbiAoZS5nLiBFU1QpLCBlbHNlIHNob3cgZGlzcGxheSB0aW1lem9uZSBzdHJpbmcgKGUuZy4gXCIoVVRDLTAzOjAwKSBCcmFzaWxpYSlcIilcbiAgICAgIGNvbnN0IHRpbWVab25lRGlzcGxheSA9IHR6QWJiciB8fCBkaXNwbGF5VGltZVpvbmUgfHwgJyc7XG4gICAgICAvLyBXaGVuIEFQSSByZXR1cm5zIFwiU3RhcnQ6IE4vQSwgRW5kOiBOL0EsIFRpbWVab25lOiAuLi5cIiAoc3RyaW5nKSwgc2hvdyBhdCBsZWFzdCB0aW1lem9uZVxuICAgICAgaWYgKCF0aW1lUmFuZ2UgJiYgZGlzcGxheVRpbWVab25lKSB7XG4gICAgICAgIHRpbWVSYW5nZSA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ05vdCBzcGVjaWZpZWQnKSB8fCAnTm90IHNwZWNpZmllZCc7XG4gICAgICB9XG4gICAgICAvLyBUaW1lIHJhbmdlIHdpdGggdGltZXpvbmUgaW4gcGFyZW50aGVzZXMgd2hlbiBhdmFpbGFibGUgKHNhbWUgYXMgb2xkIHdoZW5EaXNwbGF5IGZvcm1hdClcbiAgICAgIGNvbnN0IHRpbWVSYW5nZVdpdGhUeiA9IHRpbWVab25lRGlzcGxheVxuICAgICAgICA/IGAke3RpbWVSYW5nZX0gKCR7dGltZVpvbmVEaXNwbGF5fSlgLnRyaW0oKVxuICAgICAgICA6IHRpbWVSYW5nZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBTdHJpbmcocy50aXRsZSA/PyAnJykudHJpbSgpLFxuICAgICAgICBvcmdhbml6ZXI6IFN0cmluZyhzLm9yZ2FuaXplciA/PyAnJykudHJpbSgpLFxuICAgICAgICByb29tOiBTdHJpbmcocy5yb29tTmFtZSA/PyAnJykudHJpbSgpLFxuICAgICAgICB3aGVuOiB3aGVuRGlzcGxheSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICB0aW1lUmFuZ2VXaXRoVHo6IHRpbWVSYW5nZSA/IHRpbWVSYW5nZVdpdGhUeiA6IHRpbWVab25lRGlzcGxheSB8fCAnJyxcbiAgICAgICAgZGF0ZURheTogZGF0ZUJhZGdlLmRheSxcbiAgICAgICAgZGF0ZU1vbnRoOiBkYXRlQmFkZ2UubW9udGgsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lLFxuICAgICAgICB0aW1lWm9uZURpc3BsYXksXG4gICAgICAgIG1lZXRpbmdUeXBlLFxuICAgICAgICBzZXNzaW9uVHlwZUxhYmVsLFxuICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICBzZXNzaW9uOiBzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFNwZWFrZXJJZHNGcm9tU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25DYXJkcykpIHJldHVybiBbXTtcbiAgICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBjYXJkIG9mIHNlc3Npb25DYXJkcykge1xuICAgICAgY29uc3QgcmF3ID0gY2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmF3KSB7XG4gICAgICAgICAgY29uc3Qgc2lkID0gU3RyaW5nKGlkID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgaWYgKHNpZCkgaWRzLnB1c2goc2lkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGlkcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvbkNhcmRzKSkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgY2FyZCBvZiBzZXNzaW9uQ2FyZHMpIHtcbiAgICAgIGNvbnN0IHNwZWFrZXJJZHM6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShjYXJkPy5zZXNzaW9uPy5zcGVha2VycylcbiAgICAgICAgPyBjYXJkLnNlc3Npb24uc3BlYWtlcnNcbiAgICAgICAgICAgIC5tYXAoKHg6IGFueSkgPT4gU3RyaW5nKHggPz8gJycpLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHNwZWFrZXJzTGlzdCA9IHNwZWFrZXJJZHNcbiAgICAgICAgLm1hcCgoaWQpID0+IHRoaXMuc3BlYWtlcnNbaWRdKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgY2FyZC5zcGVha2Vyc0xpc3QgPSBzcGVha2Vyc0xpc3Q7XG4gICAgICBpZiAoY2FyZD8uc2Vzc2lvbiAmJiB0eXBlb2YgY2FyZC5zZXNzaW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYXJkLnNlc3Npb24uc3BlYWtlcnNMaXN0ID0gc3BlYWtlcnNMaXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuY29sbGVjdFNwZWFrZXJJZHNGcm9tU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IG1pc3NpbmcgPSBpZHMuZmlsdGVyKFxuICAgICAgKGlkKSA9PiAhdGhpcy5zcGVha2Vyc1tpZF0gJiYgIXRoaXMucmVxdWVzdGVkU3BlYWtlcklkcy5oYXMoaWQpLFxuICAgICk7XG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWlzc2luZy5mb3JFYWNoKChpZCkgPT4gdGhpcy5yZXF1ZXN0ZWRTcGVha2VySWRzLmFkZChpZCkpO1xuICAgIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKG1pc3NpbmcpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAvLyBCZXN0IGVmZm9ydDogc3RpbGwgYXR0YWNoIHdoYXQgd2UgaGF2ZSBjYWNoZWRcbiAgICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNwZWFrZXJQaG90b1VybChzcGVha2VyOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXNwZWFrZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXG4gICAgICBzcGVha2VyLnBob3RvLFxuICAgICAgc3BlYWtlci5waG90b1BhdGgsXG4gICAgICBzcGVha2VyLmF2YXRhclVybCxcbiAgICAgIHNwZWFrZXIucHJvZmlsZUltYWdlVXJsLFxuICAgICAgc3BlYWtlci5wcm9maWxlSW1hZ2UsXG4gICAgICBzcGVha2VyLnByb2ZpbGVQaWN0dXJlLFxuICAgICAgc3BlYWtlci5pbWFnZVVybCxcbiAgICAgIHNwZWFrZXIuaW1hZ2UsXG4gICAgXTtcbiAgICBjb25zdCB1cmwgPSBjYW5kaWRhdGVzLmZpbmQoKHYpID0+IHYgIT0gbnVsbCAmJiBTdHJpbmcodikudHJpbSgpICE9PSAnJyk7XG4gICAgcmV0dXJuIHVybCA/IFN0cmluZyh1cmwpLnRyaW0oKSA6IG51bGw7XG4gIH1cblxuICBoYXNTZXNzaW9uQ2FyZFNwZWFrZXJzKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBsaXN0ID1cbiAgICAgIHNlc3Npb25DYXJkPy5zcGVha2Vyc0xpc3QgfHwgc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzTGlzdDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCA+IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGlkcyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zcGVha2VycztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShpZHMpICYmIGlkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0U3BlYWtlckRpc3BsYXlOYW1lKHNwZWFrZXI6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFzcGVha2VyKSByZXR1cm4gJyc7XG4gICAgaWYgKHNwZWFrZXIubmFtZSAhPSBudWxsICYmIFN0cmluZyhzcGVha2VyLm5hbWUpLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4gU3RyaW5nKHNwZWFrZXIubmFtZSkudHJpbSgpO1xuICAgIGNvbnN0IGZpcnN0ID1cbiAgICAgIHNwZWFrZXIuZmlyc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5maXJzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGxhc3QgPVxuICAgICAgc3BlYWtlci5sYXN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIubGFzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIHJldHVybiBgJHtmaXJzdH0gJHtsYXN0fWAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3BlYWtlckluaXRpYWxzKHNwZWFrZXI6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0U3BlYWtlckRpc3BsYXlOYW1lKHNwZWFrZXIpO1xuICAgIGlmIChuYW1lKSByZXR1cm4gdGhpcy5nZXRBdHRlbmRlZUluaXRpYWxzKG5hbWUpO1xuICAgIGNvbnN0IGlkID0gc3BlYWtlcj8uaWQgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmlkKSA6ICcnO1xuICAgIHJldHVybiBpZCA/IGlkLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCkgOiAnPyc7XG4gIH1cblxuICBtYXBBdHRlbmRlZXNUb0NhcmREYXRhKGF0dGVuZGVlczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGF0dGVuZGVlcykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXR0ZW5kZWVzLm1hcCgoYTogYW55KSA9PiAoe1xuICAgICAgbmFtZTogU3RyaW5nKGEubmFtZSA/PyAnJykudHJpbSgpLFxuICAgICAgY29tcGFueTpcbiAgICAgICAgYS5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKGEuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuY29tcGFueSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgam9iVGl0bGU6XG4gICAgICAgIGEuam9iVGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcoYS5qb2JUaXRsZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuam9iVGl0bGUpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBob3RvOlxuICAgICAgICBhLnBob3RvICE9IG51bGwgJiYgU3RyaW5nKGEucGhvdG8pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLnBob3RvKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBpZDogYS5pZCA/PyBhLnVzZXJJZCA/PyBhLl9pZCA/PyBhLmF0dGVuZGVlSWQgPz8gdW5kZWZpbmVkLFxuICAgICAgaW50ZXJlc3RzOlxuICAgICAgICBhLmludGVyZXN0cyAhPSBudWxsICYmIFN0cmluZyhhLmludGVyZXN0cykudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuaW50ZXJlc3RzKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgYS5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhhLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdXNlclZpZGVvc01vZGVsOiBhLnVzZXJWaWRlb3NNb2RlbFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgYS51c2VyVmlkZW9zTW9kZWw/LnVybCAhPSBudWxsICYmXG4gICAgICAgICAgICAgIFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHRodW1ibmFpbDpcbiAgICAgICAgICAgICAgYS51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbCAhPSBudWxsICYmXG4gICAgICAgICAgICAgIFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhhLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gIH1cblxuICBtYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGVha2VycykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gc3BlYWtlcnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBzLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHMuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHJhd1RpdGxlID0gcy50aXRsZSA/PyBzLmpvYlRpdGxlO1xuICAgICAgY29uc3Qgam9iVGl0bGUgPVxuICAgICAgICByYXdUaXRsZSAhPSBudWxsICYmIFN0cmluZyhyYXdUaXRsZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKHJhd1RpdGxlKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLmdldFNwZWFrZXJEaXNwbGF5TmFtZShzKSxcbiAgICAgICAgY29tcGFueTpcbiAgICAgICAgICBzLmNvbXBhbnkgIT0gbnVsbCAmJiBTdHJpbmcocy5jb21wYW55KS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhzLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBqb2JUaXRsZSxcbiAgICAgICAgcGhvdG86IHRoaXMuZ2V0U3BlYWtlclBob3RvVXJsKHMpLFxuICAgICAgICBpZDogcy5pZCA/PyBzLnVzZXJJZCA/PyBzLl9pZCA/PyBzLnNwZWFrZXJJZCA/PyB1bmRlZmluZWQsXG4gICAgICAgIGludGVyZXN0czpcbiAgICAgICAgICBzLmludGVyZXN0cyAhPSBudWxsICYmIFN0cmluZyhzLmludGVyZXN0cykudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcocy5pbnRlcmVzdHMpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdXNlclZpZGVvc01vZGVsOiBzLnVzZXJWaWRlb3NNb2RlbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB1cmw6XG4gICAgICAgICAgICAgICAgcy51c2VyVmlkZW9zTW9kZWw/LnVybCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgdGh1bWJuYWlsOlxuICAgICAgICAgICAgICAgIHMudXNlclZpZGVvc01vZGVsPy50aHVtYm5haWwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnRodW1ibmFpbCkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29yczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwb25zb3JzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBzcG9uc29ycy5tYXAoKHM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmF3RGVzYyA9XG4gICAgICAgIHMuYm9vdGhEZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhzLmJvb3RoRGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmJvb3RoRGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmF3RGVzY1xuICAgICAgICA/IC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChyYXdEZXNjKVxuICAgICAgICAgID8gdGhpcy5zdHJpcEh0bWwocmF3RGVzYylcbiAgICAgICAgICA6IHJhd0Rlc2NcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgdXJsU2x1ZyA9IHMudXJsID8/IHMuYm9vdGhVcmwgPz8gKHMuYm9vdGhJRCAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhJRCkgOiBudWxsKSA/PyAocy5ib290aElkICE9IG51bGwgPyBTdHJpbmcocy5ib290aElkKSA6IG51bGwpO1xuICAgICAgY29uc3QgbG9nb1VybCA9XG4gICAgICAgIHMubG9nb1VybCAhPSBudWxsICYmIFN0cmluZyhzLmxvZ29VcmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhzLmxvZ29VcmwpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHMubmFtZSAhPSBudWxsID8gU3RyaW5nKHMubmFtZSkudHJpbSgpIDogJycsXG4gICAgICAgIHdlYnNpdGU6IHMud2Vic2l0ZSAhPSBudWxsICYmIFN0cmluZyhzLndlYnNpdGUpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcocy53ZWJzaXRlKS50cmltKCkgOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogcy5jYXRlZ29yeSAhPSBudWxsID8gU3RyaW5nKHMuY2F0ZWdvcnkpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGJvb3RoSUQ6IHMuYm9vdGhJRCA/PyBzLmJvb3RoSWQgPz8gbnVsbCxcbiAgICAgICAgYm9vdGhUaXRsZTogcy5ib290aFRpdGxlICE9IG51bGwgPyBTdHJpbmcocy5ib290aFRpdGxlKS50cmltKCkgOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgICAgIC8qKiBCb290aCBVUkwgc2x1ZyBmb3Igcm91dGluZyB0byBkZXRhaWwgcGFnZSAoZS5nLiBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86dXJsKS4gKi9cbiAgICAgICAgdXJsOiB1cmxTbHVnICE9IG51bGwgPyBTdHJpbmcodXJsU2x1ZykudHJpbSgpIDogbnVsbCxcbiAgICAgICAgbG9nb1VybCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGdldF9ldmVudF9ib290aHMgcmVzdWx0cyBpbnRvIHRoZSBzYW1lIHNoYXBlIHVzZWQgYnkgc3BvbnNvciBjYXJkcy5cbiAgICovXG4gIG1hcEJvb3Roc1RvQ2FyZERhdGEoYm9vdGhzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYm9vdGhzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBib290aHMubWFwKChiOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBiLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKGIuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhiLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHVybFNsdWcgPSBiLnVybCA/PyBiLmJvb3RoVXJsID8/IChiLmJvb3RoSWQgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoSWQpIDogbnVsbCkgPz8gKGIuYm9vdGhJRCAhPSBudWxsID8gU3RyaW5nKGIuYm9vdGhJRCkgOiBudWxsKTtcbiAgICAgIGNvbnN0IGxvZ29VcmwgPVxuICAgICAgICBiLmxvZ29VcmwgIT0gbnVsbCAmJiBTdHJpbmcoYi5sb2dvVXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYi5sb2dvVXJsKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBiLmNvbXBhbnkgIT0gbnVsbCA/IFN0cmluZyhiLmNvbXBhbnkpLnRyaW0oKSA6ICcnLFxuICAgICAgICB3ZWJzaXRlOlxuICAgICAgICAgIGIud2Vic2l0ZSAhPSBudWxsICYmIFN0cmluZyhiLndlYnNpdGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKGIud2Vic2l0ZSkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgICBib290aElEOiBiLmJvb3RoSWQgPz8gYi5ib290aElEID8/IG51bGwsXG4gICAgICAgIGJvb3RoVGl0bGU6IGIuYm9vdGhUaXRsZSAhPSBudWxsID8gU3RyaW5nKGIuYm9vdGhUaXRsZSkudHJpbSgpIDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgICAgICAvKiogQm9vdGggVVJMIHNsdWcgZm9yIHJvdXRpbmcgdG8gZGV0YWlsIHBhZ2UgKGUuZy4gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOnVybCkuICovXG4gICAgICAgIHVybDogdXJsU2x1ZyAhPSBudWxsID8gU3RyaW5nKHVybFNsdWcpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGxvZ29VcmwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIHJlc3VsdHMgaW50byB0aGUgc2FtZSBzaGFwZSBhcyBhdHRlbmRlZSBjYXJkcyAoZm9yIHJldXNlIG9mIGF0dGVuZGVlIGRlc2lnbikuXG4gICAqL1xuICBtYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aXZlcykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gcmVwcmVzZW50YXRpdmVzLm1hcCgocjogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaXJzdCA9IHIuZmlyc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoci5maXJzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgICAgY29uc3QgbGFzdCA9IHIubGFzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhyLmxhc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IG5hbWUgPSBbZmlyc3QsIGxhc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgJyc7XG4gICAgICBjb25zdCB1c2VySWQgPSByLnVzZXJJZCAhPSBudWxsICYmIFN0cmluZyhyLnVzZXJJZCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyhyLnVzZXJJZCkudHJpbSgpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY29tcGFueTpcbiAgICAgICAgICByLmNvbXBhbnkgIT0gbnVsbCAmJiBTdHJpbmcoci5jb21wYW55KS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBqb2JUaXRsZTpcbiAgICAgICAgICByLmpvYlRpdGxlICE9IG51bGwgJiYgU3RyaW5nKHIuam9iVGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuam9iVGl0bGUpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBwaG90bzpcbiAgICAgICAgICByLnBob3RvUGF0aCAhPSBudWxsICYmIFN0cmluZyhyLnBob3RvUGF0aCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5waG90b1BhdGgpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICBpbnRlcmVzdHM6IG51bGwsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIHIuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoci5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHVzZXJWaWRlb3NNb2RlbDogbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZ2V0X2V2ZW50X3Nlc3Npb25zX3YyIHBsYWluLXRleHQgY29udGVudCBpbnRvIHNlc3Npb24gb2JqZWN0cyBmb3IgY2FyZHMuXG4gICAqIEZvcm1hdDogXCJGb3VuZCBOIHNlc3Npb25zOlxcbjEuIDx0aXRsZT5cXG4gICAtIFRpbWU6IFN0YXJ0OiAuLi4sIEVuZDogLi4uLCBUaW1lWm9uZTogLi4uXFxuICAgLSBSb29tOiAuLi5cXG4gICAtIFR5cGU6IC4uLlxcbjIuIC4uLlwiXG4gICAqL1xuICBwYXJzZVNlc3Npb25Db250ZW50VjIoY29udGVudDogc3RyaW5nKTogYW55W10ge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcbiAgICBjb25zdCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAvLyBTcGxpdCBpbnRvIGJsb2NrcyBieSBcIjEuIFwiLCBcIjIuIFwiLCBldGMuIChudW1iZXIgKyBkb3QgKyBzcGFjZSBhdCBsaW5lIHN0YXJ0KVxuICAgIGNvbnN0IGJsb2NrUmVnZXggPSAvXFxuXFxkK1xcLlxccysvO1xuICAgIGNvbnN0IHBhcnRzID0gY29udGVudC5zcGxpdChibG9ja1JlZ2V4KTtcbiAgICAvLyBGaXJzdCBwYXJ0IG1heSBiZSBcIkZvdW5kIE4gc2Vzc2lvbnM6XCIgb3Igc2ltaWxhcjsgc2tpcCBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHNlc3Npb24gdGl0bGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBibG9jayA9IHBhcnRzW2ldLnRyaW0oKTtcbiAgICAgIGlmICghYmxvY2spIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbGluZXMgPSBibG9ja1xuICAgICAgICAuc3BsaXQoL1xcbi8pXG4gICAgICAgIC5tYXAoKGwpID0+IGwudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgY29uc3QgdGl0bGUgPSBsaW5lc1swXSB8fCAnJztcbiAgICAgIGlmICghdGl0bGUgfHwgL15Gb3VuZFxccytcXGQrXFxzK3Nlc3Npb25zL2kudGVzdCh0aXRsZSkpIGNvbnRpbnVlO1xuICAgICAgbGV0IGRhdGVUaW1lUmFuZ2UgPSAnJztcbiAgICAgIGxldCByb29tTmFtZSA9ICcnO1xuICAgICAgbGV0IHNlc3Npb25UeXBlID0gJyc7XG4gICAgICBsZXQgdGltZVpvbmUgPSAnJztcbiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgbGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2pdO1xuICAgICAgICBjb25zdCB0aW1lTWF0Y2ggPSBsaW5lLm1hdGNoKC9UaW1lOlxccyooLispL2kpO1xuICAgICAgICBpZiAodGltZU1hdGNoKSB7XG4gICAgICAgICAgZGF0ZVRpbWVSYW5nZSA9IHRpbWVNYXRjaFsxXS50cmltKCk7XG4gICAgICAgICAgY29uc3QgdHpNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goL1RpbWVab25lOlxccyooW14sXFxuXSspL2kpO1xuICAgICAgICAgIGlmICh0ek1hdGNoKSB0aW1lWm9uZSA9IHR6TWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb21NYXRjaCA9IGxpbmUubWF0Y2goL1Jvb206XFxzKiguKykvaSk7XG4gICAgICAgIGlmIChyb29tTWF0Y2gpIHtcbiAgICAgICAgICByb29tTmFtZSA9IHJvb21NYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZU1hdGNoID0gbGluZS5tYXRjaCgvVHlwZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHR5cGVNYXRjaCkge1xuICAgICAgICAgIHNlc3Npb25UeXBlID0gdHlwZU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ekxpbmVNYXRjaCA9IGxpbmUubWF0Y2goL1RpbWVab25lOlxccyooLispL2kpO1xuICAgICAgICBpZiAodHpMaW5lTWF0Y2ggJiYgIXRpbWVab25lKSB0aW1lWm9uZSA9IHR6TGluZU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHNlc3Npb25zLnB1c2goe1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgcm9vbU5hbWU6IHJvb21OYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0ZVRpbWVSYW5nZTogZGF0ZVRpbWVSYW5nZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHNlc3Npb25UeXBlOiBzZXNzaW9uVHlwZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHNlc3Npb25Sb2xlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb25zO1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNlc3Npb25DYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNlc3Npb25DYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNFU1NJT05fQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU0VTU0lPTl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlQXR0ZW5kZWVDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LmF0dGVuZGVlQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuQVRURU5ERUVfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuQVRURU5ERUVfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNwZWFrZXJDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNwZWFrZXJDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNwZWFrZXJDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNQRUFLRVJfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU1BFQUtFUl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlU3BvbnNvckNhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uc3BvbnNvckNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuU1BPTlNPUl9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5TUE9OU09SX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVCb290aFJlcENhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uYm9vdGhSZXBDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZEJvb3RoUmVwQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5CT09USF9SRVBfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGV4cGFuZFNlc3Npb25DYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRBdHRlbmRlZUNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kU3BlYWtlckNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZFNwZWFrZXJDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZFNwb25zb3JDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTcG9uc29yQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRCb290aFJlcENhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciBzZXNzaW9uIHR5cGUgb24gY2FyZHM6IFwiU2Vzc2lvbiB0eXBlXCIgd2hlbiBpc1VuRXZlbnQsIGVsc2UgXCJNZWV0aW5nIHR5cGVcIi5cbiAgICovXG4gIGdldFNlc3Npb25UeXBlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1VuRXZlbnRcbiAgICA/IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01lZXRpbmcgdHlwZScpIHx8ICdNZWV0aW5nIHR5cGUnXG4gICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdTZXNzaW9uIHR5cGUnKSB8fCAnU2Vzc2lvbiB0eXBlJ1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBKb2luL1dhdGNoIHJvbGUgYnV0dG9ucyBmcm9tIHNlc3Npb24uc2Vzc2lvblJvbGVzIGZvciBzZXNzaW9uIGNhcmRzLlxuICAgKiBXaGVuIGlzVW5FdmVudCBpcyBmYWxzZSwgcmV0dXJucyBzaW5nbGUgXCJXYXRjaFwiIGJ1dHRvbiAoc2FtZSBhcyB0ZW1wbGF0ZTIpLiBXaGVuIHRydWUsIHJldHVybnMgSm9pbi9XYXRjaCBmcm9tIHNlc3Npb25Sb2xlcy5cbiAgICovXG4gIGdldFNlc3Npb25Sb2xlQnV0dG9ucyhzZXNzaW9uQ2FyZDogYW55KTogeyBhY3Rpb246IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10ge1xuICAgIGlmICh0aGlzLmlzVW5FdmVudCA9PT0gZmFsc2UgJiYgc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246ICdqb2luJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5nZXRUcmFuc2xhdGlvbignV2F0Y2gnKSB8fCAnV2F0Y2gnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgcmF3ID0gc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LnNlc3Npb25Sb2xlcztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3KSB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgY29uc3Qgcm9sZXM6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gICAgZm9yIChjb25zdCByIG9mIHJhdykge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByICE9IG51bGwgJiYgci5zZXNzaW9uUm9sZU5hbWVcbiAgICAgICAgICA/IFN0cmluZyhyLnNlc3Npb25Sb2xlTmFtZSkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IFN0cmluZyhyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChuYW1lID09PSAnam9pbicgfHwgbmFtZSA9PT0gJ3dhdGNoJykge1xuICAgICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgICAgbmFtZSA9PT0gJ2pvaW4nXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ0pvaW4nKSB8fCAnSm9pbidcbiAgICAgICAgICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignV2F0Y2gnKSB8fCAnV2F0Y2gnO1xuICAgICAgICByb2xlcy5wdXNoKHsgYWN0aW9uOiBuYW1lLCBsYWJlbCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvbGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHNlc3Npb24gaXMgb24tZGVtYW5kIChjbGFzc2lmaWNhdGlvbklkID09PSBlQ2xhc3NpZmljYXRpb25UeXBlLk9uRGVtYW5kKS5cbiAgICogV2hlbiB0cnVlLCBKb2luL1dhdGNoIGFyZSBhbHdheXMgYWN0aW9uYWJsZSBhbmQgY2FyZCB1c2VzIE9uRGVtYW5kIGRlc2lnbi5cbiAgICovXG4gIGlzU2Vzc2lvbk9uZGVtYW5kKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uY2xhc3NpZmljYXRpb25JZCA/PyBzZXNzaW9uQ2FyZD8uY2xhc3NpZmljYXRpb25JZDtcbiAgICBpZiAoaWQgPT0gbnVsbCB8fCBpZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gU3RyaW5nKGlkKSA9PT0gZUNsYXNzaWZpY2F0aW9uVHlwZS5PbkRlbWFuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIEpvaW4vV2F0Y2ggYWN0aW9uIGlzIHBvc3NpYmxlIChzYW1lIGxvZ2ljIGFzIGFwcCB0ZW1wbGF0ZTgpLlxuICAgKiBBY3Rpb24gaXMgYWxsb3dlZCB3aGVuOiBvbi1kZW1hbmQgc2Vzc2lvbiBPUiBpc0J1dHRvbkFjdGl2YXRlZCAoc2Vzc2lvbiBoYXMgc3RhcnRlZCkuXG4gICAqL1xuICBjYW5QZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZXNzaW9uQ2FyZD8uc2Vzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uQ2FyZC5zZXNzaW9uO1xuICAgIGlmICh0aGlzLmlzU2Vzc2lvbk9uZGVtYW5kKHNlc3Npb25DYXJkKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICEhcy5pc0J1dHRvbkFjdGl2YXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGxvZ2ljIGFzIGFwcCB0ZW1wbGF0ZTg6IGRlbGF5IGluIG1pbnV0ZXMgKHNjaGVkdWxlZCBzdGFydCAtIGFjdHVhbCBzdGFydCkuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIGVpdGhlciBkYXRlIG1pc3Npbmc7ID4gMCB3aGVuIG1lZXRpbmcgaXMgZGVsYXllZC5cbiAgICovXG4gIGdldE1lZXRpbmdEZWxheU1pbnV0ZXMoc2Vzc2lvbkNhcmQ6IGFueSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBzLmRhdGVUaW1lUmFuZ2U/LnN0YXJ0O1xuICAgIGNvbnN0IGFjdHVhbFN0YXJ0ID0gcy5hY3R1YWxEYXRlVGltZVJhbmdlPy5zdGFydDtcbiAgICBpZiAoIXN0YXJ0RGF0ZSB8fCAhYWN0dWFsU3RhcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpZmZNcyA9XG4gICAgICAgIG5ldyBEYXRlKHN0YXJ0RGF0ZSkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYWN0dWFsU3RhcnQpLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmZNcyAvICgxMDAwICogNjApKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBtZWV0aW5nIGlzIGRlbGF5ZWQgKHNhbWUgY29uZGl0aW9uIGFzIHRlbXBsYXRlODogZGVsYXkgbWludXRlcyA+IDAsIG5vdCBvbi1kZW1hbmQsIGJ1dHRvbiBub3QgYWN0aXZhdGVkKS4gKi9cbiAgaXNNZWV0aW5nRGVsYXllZChzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVsYXkgPSB0aGlzLmdldE1lZXRpbmdEZWxheU1pbnV0ZXMoc2Vzc2lvbkNhcmQpO1xuICAgIGlmIChkZWxheSA9PSBudWxsIHx8IGRlbGF5IDw9IDApIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LmlzQnV0dG9uQWN0aXZhdGVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvblNlc3Npb25DYXJkQWN0aW9uKFxuICAgIHNlc3Npb25DYXJkOiBhbnksXG4gICAgcm9sZTogeyBhY3Rpb246IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXNlc3Npb25DYXJkPy5zZXNzaW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNVbkV2ZW50ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5lbWl0KHtcbiAgICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgICBhY3Rpb246IHJvbGUuYWN0aW9uLFxuICAgICAgICBzZXNzaW9uOiBzZXNzaW9uQ2FyZC5zZXNzaW9uLFxuICAgICAgICBzZXNzaW9uQ2FyZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luL3dhdGNoIGF0IHRoZSBzdGFydGluZyB0aW1lJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbi93YXRjaCBhdCB0aGUgc3RhcnRpbmcgdGltZSc7XG4gICAgICB0aGlzLnNlc3Npb25BY3Rpb25CbG9ja2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICB0eXBlOiAnc2Vzc2lvbicsXG4gICAgICBhY3Rpb246IHJvbGUuYWN0aW9uLFxuICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgIHNlc3Npb25DYXJkLFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuU29ja2V0cygpIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnTGlzdGVuIFNvY2tldCcpO1xuICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2VcbiAgICAgIC5nZXRVc2VyU3BlY2lmaWNOb3RpZmljYXRpb24oKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIGxpc3RlblNvY2tldHMgcmVjZWl2ZWQnLCB7XG4gICAgICAgICAgICBoYXNPdGhlckZpZWxkczogISFyZXM/Lm0/Lk90aGVyRmllbGRzLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiByZXM/Lm0/Lk90aGVyRmllbGRzPy5tZXNzYWdlX2lkLFxuICAgICAgICAgICAgaGFzQW5zd2VyOiAhIXJlcz8ubT8uT3RoZXJGaWVsZHM/LmFuc3dlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBDaGVjayBpZiBPdGhlckZpZWxkcyBleGlzdHMgaW4gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgaWYgKHJlcz8ubT8uT3RoZXJGaWVsZHM/LndvcmtmbG93X2lkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gV29ya2Zsb3cgcHJvZ3Jlc3MgdXBkYXRlJyxcbiAgICAgICAgICAgICAgcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZCxcbiAgICAgICAgICAgICAgdGltZV9zdGFtcCxcbiAgICAgICAgICAgIH0gPSByZXM/Lm0/Lk90aGVyRmllbGRzO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID0gcGVyY2VudGFnZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uID0gYWN0aW9uX25hbWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGV4ID0gdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChhKSA9PiBhLk5hbWUgPT0gY3VycmVudF9hY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9uc1thY3Rpb25JbmRleF1bJ091dHB1dCddID1cbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdW1xuICAgICAgICAgICAgICAgICdJbnNlcnRUaW1lU3RhbXAnXG4gICAgICAgICAgICAgIF0gPSBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIHRpbWVfc3RhbXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQWN0aW9uIHdpdGggbmFtZSAke2FjdGlvbl9uYW1lfSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID1cbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID09IDEwMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydXb3JrZmxvd0V4ZWN1dGlvbklkJ10gPVxuICAgICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZDtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckZpZWxkcyA9IHJlcy5tLk90aGVyRmllbGRzO1xuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXphYmxlID0gb3RoZXJGaWVsZHMuc2VyaWFsaXphYmxlX3RvX3JldHVybjtcblxuICAgICAgICAgICAgLy8gU2Vzc2lvbiBjYXJkczogZXZlbnQgc2Vzc2lvbnMgdG9vbHMgKEpTT04gb3IgcGxhaW4gdGV4dClcbiAgICAgICAgICAgIGNvbnN0IGlzU2Vzc2lvblRvb2wgPVxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X2ludGVyZXN0JyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV90cmFjaycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfdXBjb21pbmdfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X215X2FnZW5kYSc7XG4gICAgICAgICAgICBpZiAoaXNTZXNzaW9uVG9vbCkge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIgJiYgdHlwZW9mIGNvbnRlbnRTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSBwYXJzZWQ/LnNlc3Npb25zID8/IFtdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHYyIHBsYWluIHRleHQ6IFwiRm91bmQgMiBzZXNzaW9uczpcXG4xLiBUaXRsZVxcbiAgIC0gVGltZTogU3RhcnQ6IC4uLiBFbmQ6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cIlxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNlc3Npb25fY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXNzaW9uX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25DYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gTm8gc2Vzc2lvbiBjYXJkcyBwdXNoZWQ6IGZhbGwgdGhyb3VnaCB0byBub3JtYWwgT3RoZXJGaWVsZHMgaGFuZGxpbmcgc28gYW5zd2VyIGlzIGRpc3BsYXllZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBdHRlbmRlZSBjYXJkczogdG9vbCBnZXRfZXZlbnRfYXR0ZW5kZWVzIChvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIGF0dGVuZGVlczsgZWxzZSBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2F0dGVuZGVlcycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRlbmRlZXMgPSBwYXJzZWQ/LmF0dGVuZGVlcyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgYXR0ZW5kZWVfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdHRlbmRlZV9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYXR0ZW5kZWVzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogYXR0ZW5kZWVzIGVtcHR5IChlLmcuIHRvdGFsQ291bnQ6IDApOiBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGxpa2UgXCJJIGNvdWxkbid0IGZpbmQgYW55IGF0dGVuZGVlcy4uLlwiIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlICovXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNwZWFrZXIgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X3NwZWFrZXJzIChzYW1lIGhhbmRsaW5nIGFzIGF0dGVuZGVlczsgb25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcGVha2VycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVha2VycyA9IHBhcnNlZD8uc3BlYWtlcnMgPz8gcGFyc2VkPy5zcGVha2VyID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BlYWtlcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWFrZXJDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfc3BlYWtlcnMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiBzcGVha2VycyBlbXB0eTogZmFsbCB0aHJvdWdoIHNvIGFuc3dlciBpcyBzaG93biBhcyBub3JtYWwgQUkgbWVzc2FnZSAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTcG9uc29yIGNhcmRzOiB0b29sIGdldF9ldmVudF9zcG9uc29ycyAob25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcG9uc29ycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcG9uc29ycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcG9uc29ycyA9IHBhcnNlZD8uc3BvbnNvcnMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29ycyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcG9uc29yX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9zcG9uc29ycyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJvb3RoIGNhcmRzOiB0b29sIGdldF9ldmVudF9ib290aHMgKHJldXNlIHNwb25zb3IgY2FyZCBkZXNpZ247IG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgYm9vdGhzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2Jvb3RocycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBib290aHMgPSBwYXJzZWQ/LmJvb3RocyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BvbnNvcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYm9vdGhzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQm9vdGggcmVwcmVzZW50YXRpdmUgY2FyZHM6IHRvb2wgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyAoc2FtZSBkZXNpZ24gYXMgYXR0ZW5kZWUgY2FyZHMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aXZlcyA9IHBhcnNlZD8ucmVwcmVzZW50YXRpdmVzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBib290aF9yZXBfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib290aF9yZXBfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIGJvb3RoUmVwQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9kZXRhaWxzJykge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICBhbnN3ZXIsXG4gICAgICAgICAgICAgIHdlYl9yZXN1bHRzLFxuICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0cyxcbiAgICAgICAgICAgICAgZ3JhcGhzLFxuICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIH0gPSBvdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFByb2Nlc3NpbmcgT3RoZXJGaWVsZHMnLCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBoYXNBbnN3ZXI6ICEhYW5zd2VyLFxuICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICB3ZWJSZXN1bHRzQ291bnQ6IHdlYl9yZXN1bHRzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NvdW50OiBzZWFyY2hfcmVzdWx0cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hhdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2cuZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09IG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gTmV3IEFJIG1lc3NhZ2UgZnJvbSBzb2NrZXQnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBjaGF0TG9nTGVuZ3RoOiB0aGlzLmNoYXRMb2cubGVuZ3RoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjdXJyZW50Q2hhdE1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBVcGRhdGluZyBleGlzdGluZyBtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGZpZWxkcyBiYXNlZCBvbiB0aGVpciBwcmVzZW5jZVxuICAgICAgICAgICAgaWYgKHNlYXJjaF9yZXN1bHRzICYmIEFycmF5LmlzQXJyYXkoc2VhcmNoX3Jlc3VsdHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIHNlYXJjaF9yZXN1bHRzJywgc2VhcmNoX3Jlc3VsdHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc2VhcmNoVGVybXMgPSBzZWFyY2hfcmVzdWx0cztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2ViX3Jlc3VsdHMgJiYgQXJyYXkuaXNBcnJheSh3ZWJfcmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gd2ViX3Jlc3VsdHMnLFxuICAgICAgICAgICAgICAgIHdlYl9yZXN1bHRzPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgd2ViX3Jlc3VsdHMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zb3VyY2VzTGlzdCA9IHdlYl9yZXN1bHRzO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZGlzcGxheWVkU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgwLCAzKTsgLy8gRmlyc3QgMyBjYXJkc1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVtYWluaW5nU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgzKTsgLy8gUmVtYWluaW5nIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBSZWNlaXZlZCBhbnN3ZXIsIHVwZGF0aW5nIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGFuc3dlclByZXZpZXc6IGFuc3dlcj8uc3Vic3RyaW5nPy4oMCwgMTAwKSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlcik7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZ3JhcGhzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBncmFwaHMnLCBncmFwaHM/Lmxlbmd0aCwgZ3JhcGhzKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmdyYXBocyA9IGdyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhlY3V0aW9uX2dyYXBocyAmJiBBcnJheS5pc0FycmF5KGV4ZWN1dGlvbl9ncmFwaHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIGV4ZWN1dGlvbl9ncmFwaHMnLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZXhlY3V0aW9uR3JhcGhzID0gZXhlY3V0aW9uX2dyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gc3VnZ2VzdGlvbnMnLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5yZWxhdGVkTGlzdEl0ZW1zID0gc3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBvbmxpbmUgc2VhcmNoIHRlcm1zIGFzIG5lZWRlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgYW55IG90aGVyIGZpZWxkcyBhbmQgdGhlaXIgcHJvY2Vzc2luZyBoZXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignT3RoZXJGaWVsZHMgaXMgbWlzc2luZyBpbiB0aGUgcmVzcG9uc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHNvY2tldCcsIGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldEFuZExpc3RlbigpIHt9XG4gIGhhbmRsZUV2ZW50KGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd3ZWJyZXN1bHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JhcGgnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgLy90aGlzLnNvY2tldFNlcnZpY2UuY2xvc2UoKTtcbiAgfVxuICBjaGFuZ2VUZW1wZXJhdHVyZShuZXdUZW1wZXJhdHVyZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMudGVtcGVyYXR1cmUgPSBuZXdUZW1wZXJhdHVyZTtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhpdmVncHQtY2hhdC1ib3Qtd3JhcHBlcicpO1xuICAgIC8vIFJlbW92ZSBleGlzdGluZyB0aGVtZSBjbGFzc2VzIGZyb20gYm9keVxuICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2NyZWF0aXZlJywgJ2JhbGFuY2VkJywgJ3ByZWNpc2UnKTtcblxuICAgIHN3aXRjaCAobmV3VGVtcGVyYXR1cmUpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnY3JlYXRpdmUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2JhbGFuY2VkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdwcmVjaXNlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25TdGFydEFnYWluKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdGFydEFnYWluID0gZmFsc2U7XG4gICAgdGhpcy5jaGF0TG9nID0gW107XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG5cbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICB9KTtcbiAgICB0aGlzLmFyY2hpZXZlTWVzc2FnZXMoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFyY2hpZXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3QvY2xlYXItaGlzdG9yeS8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICB0cmlnZ2VyU3VwcG9ydCgpIHtcbiAgICB0aGlzLm9wZW5TdXBwb3J0LmVtaXQoKTtcbiAgfVxuICBmZXRjaEJvdENvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJvdE5hbWUgPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlcy5OYW1lKTtcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgPSByZXMuR3JlZXRpbmdcbiAgICAgICAgICA/ICh0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShyZXMuR3JlZXRpbmcpIGFzIGFueSlcbiAgICAgICAgICA6ICcnO1xuXG4gICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzID0gcmVzPy5OZWdhdGl2ZVJlc3BvbnNlcz8ubGVuZ3RoXG4gICAgICAgICAgPyByZXMuTmVnYXRpdmVSZXNwb25zZXNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICBgV2UgYXJlIHNvcnJ5IHdlJ3ZlIG5vdCBiZWVuIGFibGUgdG8gYW5zd2VyIHlvdXIgcXVlc3Rpb25gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgdGhpcy5xdWlja1Byb21wdHMgPSByZXMuUXVpY2tQcm9tcHRzO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZzogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQ2hhdEhpc3RvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKTtcbiAgICB0aGlzLmNvblNlc3Npb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0U2Vzc2lvbktleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbktleX0/c2Vzc2lvbl9pZD0ke3RoaXMuY29uU2Vzc2lvbktleX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yPGFueT4oJ2ZldGNoQ29udmVyc2F0aW9uJykpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3I8VD4ob3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHJlc3VsdD86IFQpIHtcbiAgICByZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybiBvZihyZXN1bHQgYXMgVCk7XG4gICAgfTtcbiAgfVxuICAvLyBmZXRjaENoYXRIaXN0b3J5KCkge1xuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gIC8vICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAvLyAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAvLyAgIH0pO1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHBcbiAgLy8gICAgIC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fWAsIHsgaGVhZGVycyB9KVxuICAvLyAgICAgLnBpcGUoXG4gIC8vICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgLy8gICAgICAgfSksXG4gIC8vICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6ICcsIGVycm9yKTtcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgLy8gICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gIC8vICAgICAgIH0pXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLyoqIFB1c2ggYSBzdGFuZGFyZCBBSSBtZXNzYWdlIGZyb20gaGlzdG9yeSAoc291cmNlcywgZ3JhcGhzLCBldGMuKS4gVXNlZCB3aGVuIG5vdCBjb252ZXJ0aW5nIHRvIHNlc3Npb25fY2FyZHMuICovXG4gIHByaXZhdGUgcHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZXNMaXN0ID0gY2hhdC5XZWJMaW5rcyB8fCBbXTtcbiAgICBjb25zdCBkaXNwbGF5ZWRTb3VyY2VzID0gKGNoYXQuV2ViTGlua3MgfHwgW10pLnNsaWNlKDAsIDMpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NvdXJjZXMgPSAoY2hhdC5XZWJMaW5rcyB8fCBbXSkuc2xpY2UoMyk7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dCksXG4gICAgICBleGVjdXRpb25HcmFwaHM6IGNoYXQuRXhlY3V0aW9uR3JhcGhzLFxuICAgICAgZ3JhcGhzOiBjaGF0LkdyYXBocyxcbiAgICAgIHNlYXJjaFRlcm1zOiBjaGF0LlNlYXJjaFRlcm1zLFxuICAgICAgc291cmNlc0xpc3Q6IHNvdXJjZXNMaXN0LFxuICAgICAgZGlzcGxheWVkU291cmNlczogZGlzcGxheWVkU291cmNlcyxcbiAgICAgIHJlbWFpbmluZ1NvdXJjZXM6IHJlbWFpbmluZ1NvdXJjZXMsXG4gICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICB9KTtcbiAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIG1hcENoYXRIaXN0b3J5KGNoYXRzOiBhbnkpIHtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5ncmVldGluZ01zZyxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICB9KTtcbiAgICBpZiAoY2hhdHMgJiYgY2hhdHM/Lk1lc3NhZ2VzPy5sZW5ndGgpIHtcbiAgICAgIGNoYXRzPy5NZXNzYWdlcy5mb3JFYWNoKChjaGF0OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoYXQuVHlwZSA9PSAndXNlcicpIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIFdvcmtmbG93RXhlY3V0aW9uSWQ6IGNoYXQuV29ya2Zsb3dFeGVjdXRpb25JZCxcbiAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXQuVHlwZSA9PSAnYWknKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBzZXNzaW9uIHRvb2xzLCBzaG93IHNlc3Npb24gY2FyZHMgaW5zdGVhZCBvZiBwbGFpbiB0ZXh0XG4gICAgICAgICAgY29uc3QgdG9vbE5hbWUgPSBjaGF0LnRvb2xyZXN1bHRzPy50b29sX25hbWU7XG4gICAgICAgICAgY29uc3QgaXNTZXNzaW9uVG9vbCA9XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zX3YyJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfaW50ZXJlc3QnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV90cmFjaycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3NwZWFrZXJfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF91cGNvbWluZ19zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X215X2FnZW5kYSc7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNTZXNzaW9uVG9vbCAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICBsZXQgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBzZXNzaW9ucyA9IHBhcnNlZD8uc2Vzc2lvbnMgPz8gW107XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHNlc3Npb25zID0gdGhpcy5wYXJzZVNlc3Npb25Db250ZW50VjIoY29udGVudFN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9ucyk7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKG1hcHBlZCk7XG4gICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Nlc3Npb25fY2FyZHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgIHNlc3Npb25DYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfYXR0ZW5kZWVzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X2F0dGVuZGVlcywgc2hvdyBhdHRlbmRlZSBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dGVuZGVlcyA9IHBhcnNlZD8uYXR0ZW5kZWVzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEF0dGVuZGVlc1RvQ2FyZERhdGEoYXR0ZW5kZWVzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdHRlbmRlZV9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIGF0dGVuZGVlQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc3BlYWtlcnMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfc3BlYWtlcnMsIHNob3cgc3BlYWtlciBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHNwZWFrZXJzID0gcGFyc2VkPy5zcGVha2VycyA/PyBwYXJzZWQ/LnNwZWFrZXIgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BlYWtlckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nwb25zb3JzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X3Nwb25zb3JzLCBzaG93IHNwb25zb3IgY2FyZHMgb24gaW5pdGlhbCBoaXN0b3J5IGxvYWRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCBzcG9uc29ycyA9IHBhcnNlZD8uc3BvbnNvcnMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BvbnNvcnNUb0NhcmREYXRhKHNwb25zb3JzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X2Jvb3RocycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9ib290aHMsIHNob3cgYm9vdGggY2FyZHMgdXNpbmcgc3BvbnNvciBjYXJkIGRlc2lnblxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IGJvb3RocyA9IHBhcnNlZD8uYm9vdGhzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3Roc1RvQ2FyZERhdGEoYm9vdGhzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ib290aF9yZXByZXNlbnRhdGl2ZXMsIHNob3cgYm9vdGggcmVwIGNhcmRzIChhdHRlbmRlZSBkZXNpZ24pXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVwcmVzZW50YXRpdmVzID0gcGFyc2VkPy5yZXByZXNlbnRhdGl2ZXMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb3RoX3JlcF9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIGJvb3RoUmVwQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm9jZXNzTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgaWYgKCFtZXNzYWdlIHx8ICEobWVzc2FnZT8ubGVuZ3RoID4gMCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygnaGVyZSBpcyBteSBtZXNzYWdlJylcbiAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlKTtcblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gL1xcWyhbXltdKyldXFwoKFteKV0rKVxcKS9nO1xuICAgIGNvbnN0IHVybFJlZ2V4ID0gLyg/PCFocmVmPVwiKVxcYmh0dHBzPzpcXC9cXC9cXFMrKD88IVsuLF0pL2dpO1xuXG4gICAgaWYgKG1hcmtkb3duTGlua1JlZ2V4LnRlc3QobWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgIG1hcmtkb3duTGlua1JlZ2V4LFxuICAgICAgICAnPGEgaHJlZj1cIiQyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JDE8L2E+JyxcbiAgICAgICk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdTYW5pdGl6ZWQgbWVzc2FnZTogJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XG4gICAgfVxuXG4gICAgaWYgKHVybFJlZ2V4LnRlc3QobWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgIHVybFJlZ2V4LFxuICAgICAgICAnPGEgaHJlZj1cIiQmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JCY8L2E+JyxcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgdG8gSFRNTCBoZWFkZXJzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXigjezEsNn0pXFxzKyguKikkL2dtLCAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGA8aCR7bGV2ZWx9PiR7dGV4dH08L2gke2xldmVsfT5gO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgY29uc3Qgc2FuaXRpemVkTWVzc2FnZSA9IHRoaXMuc2FuaXRpemVIdG1sKG1lc3NhZ2UpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRNZXNzYWdlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGNvbnN0IGZlZWRiYWNrTGlua3MgPVxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZlZWRiYWNrLWxpbmsnKTtcbiAgICBmZWVkYmFja0xpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJyksXG4gICAgICApO1xuICAgIH0pO1xuICAgIC8vIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpKSB7XG4gICAgLy8gICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgIC8vICAgICAucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrLWxpbmsnKVxuICAgIC8vICAgICAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJykpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNhbml0aXplSHRtbChodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG5cbiAgb25GZWVkYmFja0NsaWNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZlZWRiYWNrRXZlbnQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gICAgdGhpcy5vbkNsb3NlRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgc2VuZE1lc3NhZ2VXaXRoVGlsZShwcm9tcHQ6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXQgPSBwcm9tcHQ7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gIH1cbiAgaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gIGZldGNoRGF0YShtc2cgPSBudWxsKSB7XG4gICAgdGhpcy5pbnB1dCA9IG1zZyB8fCB0aGlzLmlucHV0Py50cmltKCk7XG4gICAgdGhpcy5tc2cgPSB0aGlzLmlucHV0O1xuICAgIGlmICghdGhpcy5pbnB1dCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG5cbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0aGlzLmlucHV0KSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnaGlkZGVuJzsgLy8gUmVzZXQgdGhlIGhlaWdodFxuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDYycHhgO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuXG4gICAgdGhpcy5tYWtlQXNrUmVxdWVzdCh0aGlzLmlucHV0LCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXkpO1xuICB9XG4gIGZldGNoRGF0YUZvcihtc2csIGNoYXQpIHtcbiAgICBjb25zdCBpbnB1dE1zZyA9IG1zZz8udHJpbSgpO1xuICAgIGlmICghaW5wdXRNc2cgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hhdFNvY2tldCgpO1xuICAgIHRyeSB7XG4gICAgICBjaGF0LnJlbGF0ZWRMaXN0SXRlbXMgPSBbXTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShpbnB1dE1zZyksXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuXG4gICAgdGhpcy5tYWtlQXNrUmVxdWVzdChpbnB1dE1zZywgdGhpcy5hZ2VudHMsIHRoaXMuY29udmVyc2F0aW9uS2V5LCBtc2csIGNoYXQpO1xuICB9XG4gIGZldGNoU21hbGxUYWxrKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3Qvc21hbGwtdGFsay8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcblxuICAgIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHNtYWxsVGFsazogc3RyaW5nIH0+KHVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGZldGNoaW5nIHNtYWxsIHRhbGs6JywgZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnNtYWxsVGFsaykge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKHJlc3BvbnNlLnNtYWxsVGFsayksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAyO1xuICAgICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICByZWFkQWxsQ2h1bmtzID0gKHN0cmVhbTogYW55KSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIGNvbnN0IGFsbFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmVhZGVyLmNsb3NlZC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVhZGluZyBzdHJlYW06ICcsIGVycik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHN0YXJ0OiAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBwdW1wKGNvbnRyb2xsZXI6IGFueSwgcmVhZGVyOiBhbnksIGFsbFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSkge1xuICAgIHJlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGxhc3RJdGVtID0gdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGxhc3RJdGVtLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNoYXRMb2cucG9wKCk7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGxhc3RJdGVtKTtcbiAgICAgICAgaWYgKGFsbFN1Z2dlc3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnc3VnZ2VzdGlvbnMnLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IGFsbFN1Z2dlc3Rpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnNob3dTdGFydEFnYWluID0gdHJ1ZTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmZldGNoU21hbGxUYWxrKCk7XG4gICAgICAgIC8vIH0sMTAwMClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGVjb2RlZENodW5rID0gdGhpcy5kZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICB0aGlzLmFpUmVzcG9uc2UgKz0gZGVjb2RlZENodW5rO1xuICAgICAgaWYgKGxhc3RJdGVtLnR5cGUgPT09ICdhaScpIHtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNNYXRjaCA9IHRoaXMuYWlSZXNwb25zZS5tYXRjaCgvPHN1Zz4oLio/KTxcXC9zdWc+L2cpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnNNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zTWF0Y2guZm9yRWFjaCgobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9IHRoaXMuYWlSZXNwb25zZS5yZXBsYWNlKG1hdGNoLCAnJyk7XG4gICAgICAgICAgICBhbGxTdWdnZXN0aW9ucy5wdXNoKG1hdGNoPy5yZXBsYWNlKC88XFwvP3N1Zz4vZywgJycpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLmFpUmVzcG9uc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcblxuICAgICAgICBsZXQgYWlGb3JtYXR0ZWREYXRhOiBhbnk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uICcpO1xuICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIDInKTtcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YSA9IEpTT04ucGFyc2UodGhpcy5haVJlc3BvbnNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiBkb25lJyk7XG5cbiAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YSAmJiBhaUZvcm1hdHRlZERhdGE/LnNlY3Rpb25faWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAnY29tcGFueV9zZWFyY2gnIHx8XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAndXNlcl9zZWFyY2gnIHx8XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAnaW5kdXN0cnlfY29tcGFueV9zZWFyY2gnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLm15VXBjb21pbmdTZXNzaW9uQWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BlYWtlcklkcyA9IFtdO1xuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/LmZvckVhY2goKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgc3BlYWtlcklkcyA9IFsuLi5zcGVha2VySWRzLCAuLi5zZXNzaW9uLnNwZWFrZXJzXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoc3BlYWtlcklkcz8ubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgdGhpcy5nZXRTcGVha2Vyc0J5U3RhZmZJZHMoc3BlYWtlcklkcykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5hZGRUb015QWdlbmRhQWN0aW9uICYmXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkczogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5jb25uZWN0T3JGb2xsb3dBY3Rpb24pIHtcbiAgICAgICAgICAgIGxldCB1c2Vyc0xlbiA9IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodXNlcnNMZW4gPiAxKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiAnb3Blbl9uZXR3b3JraW5nX2RyYXdlcicsXG4gICAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJzTGVuID09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGNvbm5ldFVzZXJJZHM6IFthaUZvcm1hdHRlZERhdGEuY29udGVudFswXS51c2VySWRdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLmlzX29wZW5fcGFnZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UgKz1cbiAgICAgICAgICAgICAgICAnXFxuXFxuJyArICc8YSBpZD1cImNsb3NlQm90Tm93XCI+Q2xpY2sgSGVyZTwvYT4gdG8gc2VlIHJlc3VsdHMuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICBhY3Rpb246IGFpRm9ybWF0dGVkRGF0YSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRDbG9zZUJvdENsaWNrRXZlbnQoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuYWlSZXNwb25zZSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuXG4gICAgICAvLyBFbnF1ZXVlIHRoZSBuZXh0IGRhdGEgY2h1bmsgaW50byBvdXIgdGFyZ2V0IHN0cmVhbVxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcbiAgICAgIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1Ym1pdEZlZWRiYWNrKGZsYWc6IGJvb2xlYW4sIG1lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcblxuICAgIHRoaXMuZmVlZGJhY2tEb25lID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb24vY29QaWxvdC8ke3RoaXMuYm90SWR9L2NvbnZlcnNhdGlvbi8ke2NvbnZlcnNhdGlvbl9pZH0vaGVscGZ1bC1yZXNwb25zZWA7XG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgYXBpS2V5OiAnQ29udmVyc2F0aW9uX1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VJZDogbWVzc2FnZS5faWQsIGlzSGVscGZ1bDogZmxhZyB9KSxcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChmbGFnKSB7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICB0aGlzLnRodW1ic1VwTWVzc2FnZSB8fFxuICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignTWF5IEkgYXNzaXN0IHlvdSB3aXRoIGFueXRoaW5nIGVsc2UnKSxcbiAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UoXG4gICAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXNbdGhpcy50aHVtYnNEb3duTXNnSW5kZXhdLFxuICAgICAgICApLFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0TGluazg4Jyk7XG4gICAgICAgIGlmIChzdXBwb3J0TGluaykge1xuICAgICAgICAgIHN1cHBvcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50cmlnZ2VyU3VwcG9ydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChuZXcgbGluZSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBDYWxsIHlvdXIgc3VibWl0IGZ1bmN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBsYXN0IEFJIG1lc3NhZ2UgaW4gY2hhdExvZzsgLTEgaWYgbm9uZS4gKi9cbiAgZ2V0IGxhc3RBaU1lc3NhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGogPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIGlmICh0aGlzLmNoYXRMb2dbal0/LnR5cGUgPT09ICdhaScpIHJldHVybiBqO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBoYW5kbGVVcENsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayh0cnVlLCB0aGlzLmNoYXRMb2dbaWR4XSk7XG4gICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG5cbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCkge1xuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaGFuZGxlRG93bkNsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSByZXR1cm47XG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayhmYWxzZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQpXG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcbiAgfVxuICAvLyBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAvLyAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAvLyAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gIC8vICAgY29uc29sZS5sb2coJ2NvbnRlbnRUb0NvcHknKTtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250ZW50VG9Db3B5KTtcbiAgLy8gICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50VG9Db3B5KS50aGVuKCgpID0+IHtcbiAgLy8gICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGNvcGllZFxuICAvLyAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAvLyAgIH0pO1xuICAvLyB9XG4gIGNvcHlUZXh0KGlkLCBpbmRleCkge1xuICAgIC8vIEdldCB0aGUgdGV4dCBlbGVtZW50XG4gICAgdmFyIHRleHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IHRleHRhcmVhIGVsZW1lbnQgdG8gY29weSB0aGUgdGV4dFxuICAgIHZhciB0ZW1wVGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRlbXBUZXh0QXJlYS52YWx1ZSA9IHRleHRFbGVtZW50LmlubmVyVGV4dDtcblxuICAgIC8vIEFwcGVuZCB0aGUgdGV4dGFyZWEgdG8gdGhlIGJvZHkgKG5lY2Vzc2FyeSBmb3IgdGhlIGV4ZWNDb21tYW5kIHRvIHdvcmspXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluc2lkZSB0aGUgdGV4dGFyZWFcbiAgICB0ZW1wVGV4dEFyZWEuc2VsZWN0KCk7XG5cbiAgICAvLyBDb3B5IHRoZSB0ZXh0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBUZXh0QXJlYSk7XG5cbiAgICAvLyBPcHRpb25hbGx5LCB5b3UgY2FuIGFsZXJ0IHRoZSB1c2VyIG9yIGNoYW5nZSB0aGUgYnV0dG9uIHRleHQgdG8gaW5kaWNhdGUgdGhlIGNvcHkgd2FzIHN1Y2Nlc3NmdWxcbiAgICAvLyBhbGVydCgnVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuXG4gICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICB9XG4gIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XG4gICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXG4gICAgY29uc3QgY29udGVudFRvQ29weSA9IHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZTtcbiAgICBjb25zdCByZXN1dGx0ID0gdGhpcy5jb3B5VGV4dCgnbWVzc2FnZVRleHRfJyArIGluZGV4LCBpbmRleCk7XG4gIH1cblxuICBzYW5pdGl6ZUhUTUwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIGNvbnRlbnRcbiAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4gb2YgdGhlIGJvZHkgb2YgdGhlIHBhcnNlZCBkb2N1bWVudCB0byB0aGUgZnJhZ21lbnRcbiAgICBBcnJheS5mcm9tKGRvYy5ib2R5LmNoaWxkTm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkaXYgZWxlbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIEhUTUxcbiAgICBjb25zdCBzaW1wbGlmaWVkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2ltcGxpZmllZERpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cbiAgICAvLyBSZW1vdmUgY29tcGxleCB0YWdzIG9yIGF0dHJpYnV0ZXMgYXMgbmVlZGVkXG4gICAgLy8gRXhhbXBsZTogcmVtb3ZlIHNjcmlwdHNcbiAgICBzaW1wbGlmaWVkRGl2XG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JylcbiAgICAgIC5mb3JFYWNoKChzY3JpcHQpID0+IHNjcmlwdC5yZW1vdmUoKSk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHNpbXBsaWZpZWQgSFRNTCBhcyBhIHN0cmluZ1xuICAgIHJldHVybiBzaW1wbGlmaWVkRGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIGN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yOiBhbnkgPSAnJztcbiAgY3VycmVudEluZGV4Rm9yRWRpdG9yOiBhbnkgPSAtMTtcbiAgaGFuZGxlRWRpdG9yQ2xpY2soaW5kZXg6IGFueSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSAtMSkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICcnLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gaW5kZXgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciArPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbE9uTmV3TWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRNYWluLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIGlmIChjb3VudGVyKysgPiA1KSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB9LCA1KTtcbiAgfVxuXG4gIGZvY3VzT25UZXh0YXJlYSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgY29uc29sZS5pbmZvKCdpbmNvbWluZyBhY3Rpb24gZnJvbSB0aGUgY2hhdGJvdCBBSScpO1xuICAgIGNvbnNvbGUuaW5mbyhhY3Rpb24pO1xuXG4gICAgaWYgKGFjdGlvbj8uY29udGVudCkge1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgZHJhd2VyIGlzIGluaXRpYWxseSBvcGVuIGFuZCBhcHBseSBvdmVyZmxvdyBoaWRkZW4gdG8gYm9keSBpZiBzb1xuICAgIGlmICh0aGlzLmRyYXdlci5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHRvIGNoYW5nZXMgaW4gdGhlIGRyYXdlciBiZWluZyBvcGVuZWQgb3IgY2xvc2VkXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUJvZHlPdmVyZmxvdygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IC8vIEZvY3VzIG9uIHRoZSB0ZXh0YXJlYVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCb2R5T3ZlcmZsb3coKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJzQnlTdGFmZklkcyhpZHM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnlbXSB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy9nZXQtYnktc3RhZmYtaWRzYDtcbiAgICBjb25zdCBjbGVhbklkcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KChpZHMgfHwgW10pLm1hcCgoeCkgPT4gU3RyaW5nKHggPz8gJycpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pKSxcbiAgICApO1xuICAgIGlmIChjbGVhbklkcy5sZW5ndGggPT09IDApIHJldHVybiBvZihudWxsKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KHVybCwgY2xlYW5JZHMsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgdGFwKChkYXRhOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKHNwZWFrZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHNwZWFrZXI/LmlkID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3BlYWtlcnNbaWRdID0gc3BlYWtlcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3BlYWtlcnM6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25JZCwgYWN0aW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5uZXh0KHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENsb3NlQm90Q2xpY2tFdmVudCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2Nsb3NlQm90Tm93Jyk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUJvdC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc01vYmlsZUJyb3dzZXIoKSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChcbiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgKTtcbiAgfVxuXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XG4gICAgICBjb25uZWN0OiAhdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCksXG4gICAgICB1c2VySWQsXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBnaXZlbiB1c2VySWQgaGFzIGEgcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3Qgc2VudCAoc2hvdyBcIlJlcXVlc3QgU2VudFwiIGRpc2FibGVkKS4gKi9cbiAgY2hlY2tQZW5kaW5nU2VudFJlcXVlc3QodXNlcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKHVzZXJJZCA9PSBudWxsIHx8IHVzZXJJZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzPy5sZW5ndGhcbiAgICAgID8gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzXG4gICAgICA6IHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICAgIHJldHVybiAhIXBlbmRpbmc/LmZpbmQoKGE6IGFueSkgPT4gYSA9PSB1c2VySWQpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBjYW4gYmUgZm9sbG93ZWQgKHNob3cgXCJDb25uZWN0XCIgYnV0dG9uKS4gTm90IGNvbm5lY3RlZCBhbmQgbm8gcGVuZGluZyBzZW50IHJlcXVlc3QuICovXG4gIGNhbkZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNhblVuZm9sbG93VXNlcihhdHRlbmRlZSkgfHwgdGhpcy5jaGVja1BlbmRpbmdTZW50UmVxdWVzdCh1aWQpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBpcyBhbHJlYWR5IGNvbm5lY3RlZCAoc2hvdyBcIkRpc2Nvbm5lY3RcIiBidXR0b24pLiAqL1xuICBjYW5VbmZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbm5lY3Rpb25zTGlzdD8ubGVuZ3RoXG4gICAgICA/IHRoaXMuY29ubmVjdGlvbnNMaXN0XG4gICAgICA6IHRoaXMubXlDb25uZWN0aW9ucztcbiAgICByZXR1cm4gISFsaXN0Py5maW5kKChjOiBhbnkpID0+IChjLnVzZXJJZCA/PyBjLmlkKSA9PSB1aWQpO1xuICB9XG5cbiAgY2FuQ29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gIShcbiAgICAgIHRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpIHx8XG4gICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5maW5kKChhKSA9PiBhID09IHVzZXJJZClcbiAgICApO1xuICB9XG5cbiAgY2FuRGlzY29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5teUNvbm5lY3Rpb25zLmZpbmQoKGNvbm4pID0+IGNvbm4udXNlcklkID09IHVzZXJJZCk7XG4gIH1cblxuICBmZXRjaFBlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS9jb25uZWN0aW9uLXJlcXVlc3RzL2F1dG9nZW4vcGVuZGluZy1zZW50LXJlcXVlc3RzP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBmZXRjaE15Q29ubmVjdGlvbnMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnMvYXV0b2dlbj91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfSxcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5teUNvbm5lY3Rpb25zID0gcmVzO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGFnZW50czogYW55O1xuICBzZWxlY3RlZEFnZW50cyA9IFtdO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAvLyBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmFnZW50cykgdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50cz8uZm9yRWFjaCgoYWdlbnQpID0+IChhZ2VudC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BZ2VudENoYW5nZShhZ2VudDogYW55KTogdm9pZCB7XG4gICAgLy9hZ2VudC5zZWxlY3RlZCA9ICFhZ2VudC5zZWxlY3RlZDtcbiAgICAvL2NvbnNvbGUubG9nKGFnZW50KTtcbiAgICBsZXQgYWdlbnRGb3VuZCA9IHRoaXMuYWdlbnRzLmZpbHRlcigocCkgPT4gcC5pZCA9PSBhZ2VudC5pZCk7XG4gICAgaWYgKGFnZW50Rm91bmQgJiYgYWdlbnRGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICBhZ2VudEZvdW5kWzBdLnNlbGVjdGVkID0gIWFnZW50Rm91bmRbMF0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFnZW50cz8uZXZlcnkoKGFnZW50KSA9PiAhYWdlbnQuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25IZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBZ2VudHMgPSB0aGlzLmFnZW50cz8uZmlsdGVyKChhZ2VudCkgPT4gYWdlbnQuc2VsZWN0ZWQpO1xuICAgIGlmICghc2VsZWN0ZWRBZ2VudHMpIHtcbiAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50cyAmJiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50cyBTZWxlY3RlZGBcbiAgICAgICAgICA6IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZmV0Y2hBZ2VudHNfaHR0cCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29QaWxvdC8ke3RoaXMuYm90SWR9L2FjdGl2ZS1hZ2VudHNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHt9LCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWdlbnRzID0gcmVzLm1hcCgoYWdlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5hZ2VudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuICBpc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgZG9jdW1lbnRDb250ZW50OiBhbnk7XG5cbiAgY29udmVyc2F0aW9uSWQ6IGFueTtcbiAgaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG5cbiAgZmV0Y2hDb250ZW50X2h0dHAoKSB7XG4gICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKCdBUEkgY2FsbCBmdW5jdGlvbicpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uX2lkO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uRG9jdW1lbnRzP2NvbnZlcnNhdGlvbklkPSR7Y29udmVyc2F0aW9uX2lkfSZib3RJZD0ke3RoaXMuYm90SWR9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6ICdXSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuaXNEb2NJbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50Q29udGVudCA9IHJlcztcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2V0IEFQSSBjYWxsbGVkIHN1Y2Nlc3MnKTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWcgREo6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NvbnRlbnRMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvcj8uc3RhdHVzID09IDQwNCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXNoJyk7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQWdlbnRzKCkge1xuICAgIHRoaXMuZmV0Y2hBZ2VudHNfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZmV0Y2hFZGl0b3JDb250ZW50KCkge1xuICAgIHRoaXMuZmV0Y2hDb250ZW50X2h0dHAoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vIGV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zXG4gIHByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShtYXJrZG93bjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYSBjdXN0b20gcmVuZGVyZXIgdG8gbW9kaWZ5IDxhPiB0YWdzXG4gICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcblxuICAgICAgLy8gQ3VzdG9taXplIGFuY2hvciB0YWdzIHRvIGluY2x1ZGUgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIHJlbmRlcmVyLmxpbmsgPSAoaHJlZjogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHtocmVmfVwiIHRpdGxlPVwiJHtcbiAgICAgICAgICB0aXRsZSB8fCAnJ1xuICAgICAgICB9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHt0ZXh0fTwvYT5gO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIG1hcmtkb3duIGNvbnRlbnQgdG8gSFRNTCB1c2luZyBtYXJrZWQgd2l0aCB0aGUgY3VzdG9tIHJlbmRlcmVyXG4gICAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBtYXJrZWQucGFyc2UobWFya2Rvd24sIHsgcmVuZGVyZXI6IHJlbmRlcmVyIH0pO1xuXG4gICAgICAvLyBTYW5pdGl6ZSB0aGUgcGFyc2VkIEhUTUwgdXNpbmcgQW5ndWxhcidzIERvbVNhbml0aXplclxuICAgICAgY29uc3Qgc2FuaXRpemVkSHRtbCA9XG4gICAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKG1hcmtkb3duQ29udGVudCk7XG5cbiAgICAgIC8vIFJldHVybiB0aGUgc2FmZSBIVE1MIGNvbnRlbnQgZm9yIGRpc3BsYXlcbiAgICAgIHJldHVybiBzYW5pdGl6ZWRIdG1sO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIG1hcmtkb3duOicsIGVycm9yKTtcbiAgICAgIHJldHVybiAnJzsgLy8gUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBvciBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHlcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlSHRtbChtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW1hcmtkb3duIHx8ICEobWFya2Rvd24ubGVuZ3RoID4gMCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lucHV0IE1hcmtkb3duIGlzIG51bGwgb3IgZW1wdHknKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgKCMjIyBvciAjIykgdG8gPHN0cm9uZz4gZm9yIGJvbGQgaGVhZGluZ3NcbiAgICBsZXQgaHRtbCA9IG1hcmtkb3duLnJlcGxhY2UoXG4gICAgICAvXigjezEsNn0pXFxzKyguKikkL2dtLFxuICAgICAgKG1hdGNoLCBoYXNoZXMsIHRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGV2ZWwgPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gYDxoMz48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2gzPmA7XG4gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IDQpIHtcbiAgICAgICAgICByZXR1cm4gYDxoND48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2g0PmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3Ryb25nPiR7dGV4dH08L3N0cm9uZz5gO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBjb2RlIGJsb2NrcyB3aXRoIGxhbmd1YWdlIHRvIHByZWZvcm1hdHRlZCBIVE1MXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYGBgKFxcdyspP1xcbihbXFxzXFxTXSo/KWBgYC9nLCAobWF0Y2gsIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWRDb2RlID0gdGhpcy5lc2NhcGVIdG1sKGNvZGUpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5nIHx8ICdwbGFpbnRleHQnO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IGJ1dHRvbiBmb3IgdGhlIGNvZGUgYmxvY2tcbiAgICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNvcHktYnV0dG9uXCIgY2xhc3M9XCJjb3B5LWJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ1xcYCR7ZXNjYXBlZENvZGV9XFxgJylcIj4ke3RoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgJ0NvcHknLFxuICAgICAgICApfTwvYnV0dG9uPlxuICAgICAgICA8cHJlIGNsYXNzPVwiY29kZV9ibG9jayBkaWZmXCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0ke2xhbmd1YWdlfVwiPiR7ZXNjYXBlZENvZGV9PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgaW5saW5lIGNvZGUgKHdyYXBwZWQgaW4gYGJhY2t0aWNrc2ApIHRvIGlubGluZSA8Y29kZT4gdGFnc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGJvbGQgdG8gSFRNTCA8c3Ryb25nPlxuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IG51bWJlcmVkIGxpc3RzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxcZCtcXC5cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBidWxsZXQgcG9pbnQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFwtXFxzKyguKikkL2dtLCAnPGxpPiQxPC9saT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gbGlua3MgdG8gSFRNTCBsaW5rc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoXG4gICAgICAvXFxbKFteXFxdXSspXVxcKChbXildKylcXCkvZyxcbiAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IG5ldyBsaW5lcyB0byA8YnI+IHRhZ3MgZm9yIHBhcmFncmFwaHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgZm9yIGNvZGUgYmxvY2tzXG4gIGVzY2FwZUh0bWwoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29kZVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29kZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIGlzQ29sbGFwc2VkRm9yR3JhcGggPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JGR3JhcGggPSBmYWxzZTtcbiAgdG9nZ2xlQ29sbGFwc2UoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbGxhcHNlR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JHcmFwaDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgdG9nZ2xlQ29sbGFwc2VGR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckZHcmFwaCA9ICF0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICAvLyAgIFtcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiQUkgTmV3cyBKYW51YXJ5IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJFYWNoIG1vbnRoLCB3ZSBjb21waWxlIHNpZ25pZmljYW50IG5ld3MsIHRyZW5kcywgYW5kIGhhcHBlbmluZ3MgaW4gQUksIHByb3ZpZGluZyBkZXRhaWxlZCBzdW1tYXJpZXMgd2l0aCBrZXkgcG9pbnRzIGluIGJ1bGxldCBmb3JtIGZvciBjb25jaXNlIHlldCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWphbnVhcnktMjAyNC9cIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIlRvcCBBSSBOZXdzLCBKYW51YXJ5IDIwMjQgLSBFdmVyeXBpeGVsIEpvdXJuYWxcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkluIHRoaXMgbW9udGhseSByb3VuZHVwLCB3ZSBzcG90bGlnaHQgdGhlIHRvcCBBSSBuZXdzIHN0b3JpZXMgZnJvbSBKYW51YXJ5LCBpbmNsdWRpbmcgdGhlIE9wZW5BSSB2cy4gVGhlIE5ldyBZb3JrIFRpbWVzIExhd3N1aXQuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL2pvdXJuYWwuZXZlcnlwaXhlbC5jb20vdG9wLWFpLW5ld3MtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEp1bHkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIlRoaXMgcGFnZSBmZWF0dXJlcyBBSSBOZXdzIGZvciBKdWx5IDIwMjQsIGhpZ2hsaWdodGluZyBzaWduaWZpY2FudCBldmVudHMgc3VjaCBhcyBDYW52YSBhY3F1aXJpbmcgTGVvbmFyZG8gQUkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtanVseS0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlL1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiSmFudWFyeSBuZXdzIHJvdW5kdXA6IFdoYXQncyBuZXcgaW4gdGhlIHdvcmxkIG9mIEFJPyAtIFBsdXJhbHNpZ2h0XCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJPcGVuQUnigJlzIG5ldyBHUFQgc3RvcmUsIGJ1c2luZXNzLXJlYWR5IENoYXRHUFQgcGxhbnMsIGFuZCBhIHByZWRpY3RlZCByaXNlIGluIEFJLXBvd2VyZWQgY3liZXJjcmltZS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vd3d3LnBsdXJhbHNpZ2h0LmNvbS9yZXNvdXJjZXMvYmxvZy9kYXRhL2FpLXRoaXMtbW9udGgtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEF1Z3VzdCAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEF1Z3VzdCAyMDI0LCB3aXRoIGhpZ2hsaWdodHMgc3VjaCBhcyBOdmlkaWEgZGVsYXlpbmcgdGhlIOKAnEJsYWNrd2VsbOKAnSBCMjAwIEFJIGNoaXBzIGRlbGl2ZXJ5LlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWF1Z3VzdC0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlLWR1cGxpY2F0ZS9cIlxuICAvLyAgIH1cbiAgLy8gXVxuICBkYXRlVGltZSA9IHsgbm93OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgLy8gRXh0cmFjdHMgdGhlIGRvbWFpbiBmcm9tIGEgVVJMXG4gIGdldERvbWFpbk5hbWUodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGhvc3RuYW1lIH0gPSBuZXcgVVJMKHVybCk7XG4gICAgICByZXR1cm4gaG9zdG5hbWUucmVwbGFjZSgvXnd3d1xcLi8sICcnKTsgLy8gUmVtb3ZlICd3d3cuJyBpZiBwcmVzZW50XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlcyB0aGUgZmF2aWNvbiBVUkxcbiAgZ2V0RmF2aWNvblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5nZXREb21haW5OYW1lKHVybCk7XG4gICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL3MyL2Zhdmljb25zP3N6PTEyOCZkb21haW49JHtkb21haW59YDtcbiAgfVxuICBjdXJyZW50U291cmNlc0xpc3Q6IGFueSA9IFtdO1xuICBvbkNhcmRDbGljayhzb3VyY2VzKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U291cmNlc0xpc3QgPSBzb3VyY2VzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIub3BlbigpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBpc1Nob3dFZGl0b3JCdXR0b24gPSB0cnVlO1xuXG4gIG9wZW5PdXRlckVkaXRvcigpIHtcbiAgICB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2VFZGl0b3IoKSB7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLmNsb3NlKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG5cbiAgb25DbG9zZVNvdXJjZSgpIHtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgIHRoaXMub25EcmF3ZXJDbG9zZWQoKTtcbiAgfVxuICBvbkRyYXdlckNsb3NlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgICAgLy8gVXNlIG5nQ2xhc3MgdG8gZHluYW1pY2FsbHkgYXBwbHkgdGhlIGNsYXNzXG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICB9LCA4MDApO1xuICB9XG4gIGlzRHJhd2VyT3BlbiA9IHRydWU7XG5cbiAgdG9nZ2xlRHJhd2VyKHRvZG8pIHtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRvZG87XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpO1xuICB9XG4gIHVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKSB7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5pc0RyYXdlck9wZW4gPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cbiAgfVxuICBvcGVuTGlua0luTmV3VGFiKGxpbms6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5vcGVuKGxpbmssICdfYmxhbmsnKTtcbiAgfVxuICBhZGp1c3RUZXh0YXJlYUhlaWdodChldmVudDogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFByZXZlbnRzIGEgbmV3IGxpbmUgZnJvbSBiZWluZyBhZGRlZFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIGNvbnN0IHRleHRhcmVhID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgLy8gRW5zdXJlIHRoZSBoZWlnaHQgZG9lc24ndCBleGNlZWQgdGhlIG1heC1oZWlnaHQgc2V0IGluIENTU1xuICAgIGlmICh0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgPiAxNTApIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAxNTBweGA7IC8vIEFkanVzdCBoZWlnaHQgdG8gbWF0Y2ggY29udGVudFxuICAgICAgdGV4dGFyZWEuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nOyAvLyBFbmFibGUgc2Nyb2xsaW5nIGlmIGNvbnRlbnQgZXhjZWVkcyA0MDBweFxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJzsgLy8gSGlkZSBzY3JvbGxiYXIgaWYgY29udGVudCBpcyB3aXRoaW4gbGltaXRzXG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlV29ya2Zsb3dzKHZhbHVlID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5jaGVja0ZvckNvcDI5Qm90SWQoKSkge1xuICAgICAgdGhpcy5ib3RTZXJ2aWNlLmdldFdvcmtmbG93c0J5T3JnSWQodGhpcy5vcmdJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcmdXb3JrZmxvd3MgPSByZXM7XG4gICAgICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSB2YWx1ZSA9PSBudWxsID8gIXRoaXMuaXNXb3JrZmxvd09wZW4gOiB2YWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JrZmxvd09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIC8vIENyZWF0ZSBmb3JtIGNvbnRyb2xzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYVxuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/LlRyaWdnZXI/LklucHV0U2NoZW1hKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBmb3JtQ29udHJvbHNbaW5wdXQuSW5wdXRJZF0gPSBbXG4gICAgICAgICAgaW5wdXQuVmFsdWUgfHwgJycsXG4gICAgICAgICAgaW5wdXQuUmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGZvcm1cbiAgICB0aGlzLndvcmtmbG93Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTZWxlY3RlZCh3b3JrZmxvdykge1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IHdvcmtmbG93O1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IHRydWU7XG4gIH1cblxuICBvbldvcmtmbG93U3VibWl0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RBbGxDaGF0Jyk7XG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSk7XG5cbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucHJlcGFyZUh0bWwoXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNYXJrZG93bihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIHVwZGF0ZSBsYXN0IHR3byBjaGF0TG9nIGVudHJpZXMsIHNldCBzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXIgPSBmYWxzZVxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyJ10gPVxuICAgICAgICAgIGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDJdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIG1lc3NhZ2U6IGlucHV0LFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhpbnB1dCk7XG5cbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb24gPVxuICAgICAgICAnRXhlY3V0aW5nICcgKyB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9uc1swXS5OYW1lO1xuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHtcbiAgICAgICAgQWN0aW9uczogdGhpcy5zZWxlY3RlZFdvcmtmbG93LkFjdGlvbnMsXG4gICAgICAgIElucHV0czogdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICAgIHdvcmtmbG93SW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgV29ya2Zsb3dOYW1lOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscztcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBleGVjdXRlIHRoZSBhc2sgZW5kcG9pbnQgd2l0aCB3b3JrZmxvdyBpbnB1dFxuICAgICAgdGhpcy5tYWtlQXNrUmVxdWVzdChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHRoaXMuYWdlbnRzLFxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbktleSxcbiAgICAgICAgJycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1snX2lkJ10sXG4gICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueSxcbiAgKTogdm9pZCB7XG4gICAgdmFyIHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHVzZXJfcXVlc3Rpb246IGlucHV0TXNnLFxuICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXG4gICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXG4gICAgICBtZXNzYWdlX2lkOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2VuZXJhdGVLZXkoKSxcbiAgICAgIHNlc3Npb25faWQ6IHRoaXMuY29uU2Vzc2lvbktleSxcbiAgICAgIGFnZW50czogYWdlbnRzPy5maWx0ZXIoKHApID0+IHAuc2VsZWN0ZWQpLm1hcCgocCkgPT4gcC5pZCkgPz8gW10sXG4gICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgZmlyc3RfbmFtZTogdGhpcy5maXJzdE5hbWUsXG4gICAgICBsYXN0X25hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgfTtcblxuICAgIGlmICh3b3JrZmxvd0lkKSB7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pZCddID0gd29ya2Zsb3dJZDtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lucHV0cyddID0gd29ya2Zsb3dfaW5wdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyB0aGlzLnMyN1Rva2VuLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIGV2ZW50VXJsOiB0aGlzLmV2ZW50VXJsLFxuICAgICAgZXZlbnRUb2tlbjogdGhpcy5ldmVudFRva2VuLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy53b3Jrc3BhY2VUb2tlbikge1xuICAgICAgaGVhZGVyc1snd29ya3NwYWNlVG9rZW4nXSA9IHRoaXMud29ya3NwYWNlVG9rZW47XG4gICAgfVxuXG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgIHRoaXMuaXM0MDEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuLmVtaXQoKTtcblxuICAgICAgICAgIC8vIElmIGBtc2dgIGFuZCBgY2hhdGAgZXhpc3QsIGhhbmRsZSB0aGVtXG4gICAgICAgICAgaWYgKG1zZyAmJiBjaGF0KSB7XG4gICAgICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgICAgIHRoaXMuY2hhdCA9IGNoYXQ7XG4gICAgICAgICAgICB0aGlzLmlzRmV0Y2hEYXRhRm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcmVzcG9uc2UgaGFuZGxpbmcgaWYgbmVlZGVkXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbWFrZUFza1JlcXVlc3RvbGQoXG4gICAgaW5wdXRNc2c6IHN0cmluZyxcbiAgICBhZ2VudHM6IGFueVtdLFxuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gICAgbXNnPzogYW55LFxuICAgIGNoYXQ/OiBhbnksXG4gICAgd29ya2Zsb3dJZD86IHN0cmluZyxcbiAgICB3b3JrZmxvd19pbnB1dHM/OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICB1c2VyX3F1ZXN0aW9uOiBpbnB1dE1zZyxcbiAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcklkLFxuICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxuICAgICAgbWVzc2FnZV9pZDogdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdlbmVyYXRlS2V5KCksXG4gICAgICBhZ2VudHM6IGFnZW50cz8uZmlsdGVyKChwKSA9PiBwLnNlbGVjdGVkKS5tYXAoKHApID0+IHAuaWQpID8/IFtdLFxuICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGZpcnN0X25hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdF9uYW1lOiB0aGlzLmxhc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAod29ya2Zsb3dJZCkge1xuICAgICAgYm9keVsnd29ya2Zsb3dfaWQnXSA9IHdvcmtmbG93SWQ7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pbnB1dHMnXSA9IHdvcmtmbG93X2lucHV0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCB7IGhlYWRlcnMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAvLyBBZGRpdGlvbmFsIHJlc3BvbnNlIGhhbmRsaW5nIGlmIG5lZWRlZFxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2VuZXJhdGVNYXJrZG93bih0aXRsZSwgb2JqKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZG93biB3aXRoIHRoZSB0aXRsZVxuICAgIGxldCBtYXJrZG93biA9IGAjIyAke3RpdGxlfVxcbmA7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG9iamVjdCBhbmQgYXBwZW5kIHRoZSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgdmFyIGtleV9sYWJlbCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZpbmQoXG4gICAgICAgICAgKGlucHV0KSA9PiBpbnB1dC5JbnB1dElkID09PSBrZXksXG4gICAgICAgICk/LkxhYmVsIHx8IGtleTtcbiAgICAgIG1hcmtkb3duICs9IGAtICoqJHtrZXlfbGFiZWx9Kio6ICR7dmFsdWV9XFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Rvd247XG4gIH1cblxuICBzaG93V29ya2Zsb3dIaXN0b3J5RGV0YWlscyh3b3JrZmxvd19pZCkge1xuICAgIGlmICghd29ya2Zsb3dfaWQpIHtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dFeGVjdXRpb25CeUlkKHdvcmtmbG93X2lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMuQWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHJlcy5BY3Rpb25zKSkge1xuICAgICAgICByZXMuQWN0aW9ucyA9IHJlcy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5JbnNlcnRUaW1lU3RhbXApIHtcbiAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICAgICAgICBhY3Rpb24uSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICByZXMuSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgKTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gcmVzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gZmFsc2U7XG4gIH1cblxuICBvYmplY3RUb0FycmF5KG9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBvYmpba2V5XSB9KSk7XG4gIH1cblxuICBzdGFydE5ld0NvbnZlcnNhdGlvbigpIHtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgdHJ1ZSk7XG4gICAgdGhpcy5jaGF0TG9nID0gW3RoaXMuY2hhdExvZ1swXV07XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgfSwgMjAwKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuc3BlZWNoQ29uZmlnID0gU3BlZWNoU0RLLlNwZWVjaENvbmZpZy5mcm9tQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgdG9rZW4sXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICApO1xuICAgIGNvbnN0IGF1ZGlvQ29uZmlnID0gU3BlZWNoU0RLLkF1ZGlvQ29uZmlnLmZyb21EZWZhdWx0TWljcm9waG9uZUlucHV0KCk7XG4gICAgdGhpcy5yZWNvZ25pemVyID0gbmV3IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyKFxuICAgICAgdGhpcy5zcGVlY2hDb25maWcsXG4gICAgICBhdWRpb0NvbmZpZyxcbiAgICApO1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6aW5nID0gKHMsIGUpID0+IHtcbiAgICAgIGlmIChlLnJlc3VsdC5yZWFzb24gPT09IFNwZWVjaFNESy5SZXN1bHRSZWFzb24uUmVjb2duaXppbmdTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemluZzogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6ZWQgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemVkU3BlZWNoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBlLnJlc3VsdC50ZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVjb2duaXplZDogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlY29yZGluZygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLmNhbmNlbGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhbmNlbGVkOiAnLCBlLmVycm9yRGV0YWlscyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5zZXNzaW9uU3RvcHBlZCA9IChzLCBlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnU2Vzc2lvbiBzdG9wcGVkLicpO1xuICAgICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSAhdGhpcy5pc1JlY29yZGluZztcblxuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICB0aGlzLnN0YXJ0UmVjb2duaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUmVjb2duaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFJlY29nbml0aW9uKCkge1xuICAgIHRoaXMucmVjb2duaXplci5zdGFydENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBzdG9wUmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICB9XG5cbiAgY2hlY2tGb3JDb3AyOUJvdElkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvdElkID09ICc2NmZhM2YyNzZjNWQ3MWUyNzE3YmZlYTgnIHx8XG4gICAgICB0aGlzLmJvdElkID09ICc2NzE2MzM1NDU2NTJkZDc4ZWZlYzg0OGQnXG4gICAgKTtcbiAgfVxuXG4gIGdldExhdGVzdFRpbWUodGltZSk6IHN0cmluZyB7XG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgIH0pOyAvLyByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiAnc2hvcnRUaW1lJyBmb3JtYXRcbiAgfVxuXG4gIC8qKiBVc2VkIGJ5IHRoZSB2b2ljZSBtb2RhbCB3aGVuIG9wZW5lZCBmcm9tIHRoaXMgZHJhd2VyLiAqL1xuICB2b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQ6IHN0cmluZyA9ICcnO1xuXG4gIG9wZW5Wb2ljZU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID1cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID8/XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlKSA/P1xuICAgICAgJyc7XG4gICAgdGhpcy52b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICB0aGlzLnNldHVwVm9pY2VUcmFuc2NyaXB0cygpO1xuXG4gICAgLy8gQ2xvc2UgZXhpc3Rpbmcgb3ZlcmxheSBpZiBhbnlcbiAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBWb2ljZU1vZGFsQ29uZmlnID0ge1xuICAgICAgYXBpVXJsOiB0aGlzLmVudmlyb25tZW50Py5CQVNFX1VSTCA/PyAnJyxcbiAgICAgIHRva2VuOiB0aGlzLnMyN1Rva2VuID8/ICcnLFxuICAgICAgYm90SWQ6IHRoaXMuYm90SWQgPz8gJycsXG4gICAgICBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFwaUtleTogdGhpcy5hcGlLZXkgPz8gJycsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4gPz8gJycsXG4gICAgICBldmVudFVybDogdGhpcy5ldmVudFVybCA/PyAnJyxcbiAgICAgIGRvbWFpbkF1dGhvcml0eTogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA/PyAncHJvZC1saXRlJyxcbiAgICAgIGFnZW50TmFtZTogdGhpcy5ib3ROYW1lIHx8ICdBSSBBc3Npc3RhbnQnLFxuICAgICAgYWdlbnRSb2xlOiB0aGlzLmJvdFNraWxscyB8fCAnQUkgQWdlbnQgU3BlY2lhbGlzdCcsXG4gICAgICBhZ2VudEF2YXRhcjogdGhpcy5ib3RJY29uLFxuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9zZVZvaWNlTW9kYWwoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoXG4gICAgICBbXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssIHVzZVZhbHVlOiBjbG9zZUNhbGxiYWNrIH0sXG4gICAgICBdLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICApO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmdsb2JhbCgpXG4gICAgICAgIC5ib3R0b20oJzAnKVxuICAgICAgICAucmlnaHQoJzAnKVxuICAgICAgICAubGVmdCgnMCcpXG4gICAgICAgIC50b3AoJzAnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICBWb2ljZUFnZW50TW9kYWxDb21wb25lbnQsXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICBpbmplY3RvcixcbiAgICApO1xuICAgIG92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG4gICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG92ZXJsYXlSZWY7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbG9zZVZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmlzVm9pY2VNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFJlbG9hZCBjaGF0IGhpc3Rvcnkgd2hlbiB2b2ljZSBtb2RhbCBjbG9zZXMgKHNhbWUgYXMgaW5pdGlhbCBsb2FkKVxuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuZmV0Y2hDaGF0SGlzdG9yeSgpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3RvcnkgYWZ0ZXIgdm9pY2UgbW9kYWwgY2xvc2U6JyxcbiAgICAgICAgICBlcnIsXG4gICAgICAgICk7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBzaG93IGdyZWV0aW5nIHNvIGNoYXQgaXMgbm90IGVtcHR5XG4gICAgICAgIGlmICh0aGlzLmNoYXRMb2cubGVuZ3RoID09PSAwICYmIHRoaXMuZ3JlZXRpbmdNc2cpIHtcbiAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHsgTWVzc2FnZXM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwVm9pY2VUcmFuc2NyaXB0cygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIHVzZXIgdHJhbnNjcmlwdHNcbiAgICBjb25zdCB1c2VyU3ViID0gdGhpcy52b2ljZUFnZW50U2VydmljZS51c2VyVHJhbnNjcmlwdCQuc3Vic2NyaWJlKFxuICAgICAgKHRyYW5zY3JpcHQpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zY3JpcHQuZmluYWwgJiYgdHJhbnNjcmlwdC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2UgdG8gY2hhdFxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRyYW5zY3JpcHQudGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBib3QgdHJhbnNjcmlwdHNcbiAgICBjb25zdCBib3RTdWIgPSB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmJvdFRyYW5zY3JpcHQkLnN1YnNjcmliZShcbiAgICAgICh0cmFuc2NyaXB0KSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2NyaXB0ICYmIHRyYW5zY3JpcHQudHJpbSgpKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBtZXNzYWdlIGlzIGZyb20gYm90LCB1cGRhdGUgaXQsIG90aGVyd2lzZSBhZGQgbmV3XG4gICAgICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS50eXBlID09PSAnYWknKSB7XG4gICAgICAgICAgICBsYXN0TWVzc2FnZS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCksXG4gICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLnB1c2godXNlclN1YiwgYm90U3ViKTtcbiAgfVxufVxuXG5leHBvcnQgeyBWb2ljZU1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcbiJdfQ==
|