@sunbird-cb/cbp-ai 0.1.103 → 0.1.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/generate-course-recommendation/generate-course-recommendation.component.mjs +8 -3
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +57 -44
- package/fesm2022/sunbird-cb-cbp-ai.mjs +63 -45
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.104.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.103.tgz +0 -0
|
@@ -364,7 +364,7 @@ export class GenerateCourseRecommendationComponent {
|
|
|
364
364
|
}
|
|
365
365
|
filterData(searchText) {
|
|
366
366
|
const filter = searchText.trim().toLowerCase();
|
|
367
|
-
const filtered = this.
|
|
367
|
+
const filtered = this.getAllAvailableCourses().filter(item => {
|
|
368
368
|
const stringified = this.flattenObjectToString(item).toLowerCase();
|
|
369
369
|
return stringified.includes(filter);
|
|
370
370
|
});
|
|
@@ -640,7 +640,12 @@ export class GenerateCourseRecommendationComponent {
|
|
|
640
640
|
identifiersArr.push(item?.identifier);
|
|
641
641
|
});
|
|
642
642
|
const identifiersKey = [...identifiersArr].sort().join(',');
|
|
643
|
-
|
|
643
|
+
// Re-fetch whenever the identifier set changes, or when any course object is missing
|
|
644
|
+
// the enriched fields (eg. after getUserCourse/getSuggestedCourse replace items with
|
|
645
|
+
// fresh objects from the server that haven't been enriched yet, even if the identifiers
|
|
646
|
+
// are unchanged from the last enrichment call).
|
|
647
|
+
const needsEnrichment = sortedCourses.some((item) => item?.identifier && item.course === undefined);
|
|
648
|
+
if (identifiersArr.length && (identifiersKey !== this.lastEnrichedIdentifiersKey || needsEnrichment)) {
|
|
644
649
|
this.lastEnrichedIdentifiersKey = identifiersKey;
|
|
645
650
|
this.sharedService.getAdditionalParameterforSuggestedCourses(identifiersArr).subscribe((response) => {
|
|
646
651
|
if (response && response.result && response.result.content && response.result.content.length) {
|
|
@@ -2093,4 +2098,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2093
2098
|
</div>
|
|
2094
2099
|
`, styles: [".confirmation-dialog-container{padding:0}.dialog-header{display:flex;align-items:center;gap:12px;padding:24px 24px 16px;border-bottom:1px solid #e0e0e0}.warning-icon{font-size:24px;width:24px;height:24px;color:#ff9800}h2{margin:0;font-size:18px;font-weight:600;color:#333}.dialog-content{padding:24px}.main-message{font-size:16px;color:#333;margin:0 0 12px;line-height:1.5}.sub-message{font-size:14px;color:#666;margin:0;font-weight:500}.dialog-actions{padding:16px 24px 24px;gap:12px;justify-content:flex-end}.cancel-btn{color:#666}.confirm-btn{display:flex;align-items:center;gap:8px;.mat-icon{font-size:18px;width:18px;height:18px;margin:0}}\n"] }]
|
|
2095
2100
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }]; } });
|
|
2096
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBcUIsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9uSCxNQUFNLE9BQU8scUNBQXFDO0lBb0JoRCxZQUFtQixTQUE4RCxFQUMvQyxJQUFTLEVBQVMsYUFBNEIs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UyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQVhVLDRCQUE0QjttR0FBNUIsNEJBQTRCLHNFQWhHN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzs0RkFzRVUsNEJBQTRCO2tCQWxHeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsWUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBBZGRDb3Vyc2VDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtY291cnNlL2FkZC1jb3Vyc2UuY29tcG9uZW50JztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQgeyBjb25jYXQsIGludGVydmFsLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlV2hpbGUsIHRhcCwgY2F0Y2hFcnJvciwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgcGxhbkRhdGE6IGFueVxuICBsb2FkaW5nID0gZmFsc2VcbiAgZGF0YUxvYWRlZCA9IGZhbHNlIC8vIFRyYWNrIGlmIGluaXRpYWwgZGF0YSBoYXMgYmVlbiBsb2FkZWRcbiAgaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZSAvLyBUcmFjayByZWdlbmVyYXRpb24gd2l0aCBwcm9ncmVzcyBsb2FkaW5nXG4gIHJlY29tbWVuZGVkX2NvdXJzZV9pZCA9ICcnXG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBmb3IgY291cnNlIGdlbmVyYXRpb25cbiAgY3VycmVudFByb2Nlc3NpbmdTdGFnZTogc3RyaW5nID0gJyc7XG4gIHByb2dyZXNzUGVyY2VudGFnZTogbnVtYmVyID0gMDtcbiAgcHJvY2Vzc2luZ1N0YWdlcyA9IFtcbiAgICAnQW5hbHl6aW5nIHJvbGVzIGFuZCByZXNwb25zaWJpbGl0aWVzLi4uJyxcbiAgICAnRGV0YWlsaW5nIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzLi4uJyxcbiAgICAnUHJlcGFyaW5nIGlHT1QgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgcHVibGljIGNvdXJzZSBzdWdnZXN0aW9ucy4uLicsXG4gICAgJ0NvbXB1dGluZyBjb21wcmVoZW5zaXZlIGdhcCBhbmFseXNpcy4uLicsXG4gICAgJ0ZpbmFsaXppbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHBsYW4uLi4nXG4gIF07XG4gIHN0YWdlU3RhcnRUaW1lOiBudW1iZXIgPSAwO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8R2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICB9XG4gIHNlYXJjaFRleHQgPSAnJ1xuICBmaWx0ZXJkQ291cnNlczogYW55ID0gW11cbiAgb3JpZ2luYWxEYXRhOiBhbnkgPSBbXVxuICBzZWxlY3RGaWx0ZXJDb3Vyc2VzOiBhbnkgPSBbXVxuICBzdWdnZXN0ZWRDb3Vyc2VzOiBhbnkgPSBbXSAvLyBUcmFjayBpR09UIHN1Z2dlc3RlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgdXNlckFkZGVkQ291cnNlczogYW55ID0gW10gLy8gVHJhY2sgdXNlci1hZGRlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgbW9kZSA9ICdhZGQnXG4gIGNicF9wbGFuX2lkID0gJydcbiAgZXhwYW5kZWRDb21wZXRlbmNpZXM6IGFueSA9IHt9OyAvLyBUcmFjayBleHBhbmRlZCBzdGF0ZSBmb3IgZWFjaCBjb3Vyc2UgYW5kIGNvbXBldGVuY3kgdHlwZVxuICBvdXRlclRhYkFjdGl2ZUluZGV4ID0gMFxuICBpbm5lclRhYkFjdGl2ZUluZGV4ID0gMFxuICBvdXRlclRhYkFjdGl2ZVRleHQgPSAnYWxsJ1xuICBpbm5lclRhYkFjdGl2ZVRleHQgPSAnYWxsJ1xuICBzZWxlY3RlZENhdGVnb3J5ID0gJ2FsbCc7XG4gIGNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIG92ZXJhbGxDb3ZlcmFnZTogYW55ID0gMFxuICBiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IDBcbiAgYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzID0gMFxuICBiZWhhdmlvcmFsQ292ZXJhZ2U6IGFueSA9IDBcbiAgZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIGZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA9IDBcbiAgZnVuY3Rpb25hbENvdmVyYWdlOiBhbnkgPSAwXG4gIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIGRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID0gMFxuICBkb21haW5Db3ZlcmFnZTogYW55ID0gMFxuICBjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXVxuICBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXVxuICBtZW51SXRlbXMgPSBbXG4gICAgeyBrZXk6ICdhbGwnLCBsYWJlbDogJ0FsbCBDYXRlZ29yaWVzJyB9LFxuICAgIHsga2V5OiAnYmVoYXZpb3JhbCcsIGxhYmVsOiAnQmVoYXZpb3VyYWwnIH0sXG4gICAgeyBrZXk6ICdmdW5jdGlvbmFsJywgbGFiZWw6ICdGdW5jdGlvbmFsJyB9LFxuICAgIHsga2V5OiAnZG9tYWluJywgbGFiZWw6ICdEb21haW4nIH1cbiAgXTtcbiAgYmVoYXZpb3VyYWxOb3RNYXRjaGVkID0gW11cbiAgZnVuY3Rpb25hbE5vdE1hdGNoZWQgPSBbXVxuICBkb21haW5Ob3RNYXRjaGVkID0gW11cbiAgc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnXG4gIG9yaWdpbmFsRmlsdGVyZWRDb3Vyc2VzID0gW11cbiAgaXNSZWdlbmVyYXRpbmcgPSBmYWxzZVxuICBpc1BERkRvd25sb2FkID0gZmFsc2VcbiAgYmVoYXZpb3VyYWxNYXRjaGVkID0gW11cbiAgZnVuY3Rpb25hbE1hdGNoZWQgPSBbXVxuICBkb21haW5NYXRjaGVkID0gW11cbiAgZmlsdGVyRm9ybSE6IEZvcm1Hcm91cDtcbiAgY29tcGV0ZW5jaWVzVHlwZSA9IFsnQWxsJywgJ0JlaGF2aW91cmFsJywgJ0Z1bmN0aW9uYWwnLCAnRG9tYWluJ11cbiAgcmF0aW5ncyA9IFsnNC41IGFuZCBhYm92ZScsICc0LjAgYW5kIGFib3ZlJywgJzMuNSBhbmQgYWJvdmUnLCAnMi41IGFuZCBhYm92ZScsICcxIGFuZCBhYm92ZSddO1xuICBsYW5ndWFnZXMgPSBbJ0VuZ2xpc2gnLCAnSGluZGknLCAnVGFtaWwnLCAnS2FubmFkYScsICdUZWx1Z3UnLCAnTWFsYXlhbGFtJywgJ0Fzc2FtZXNlJywgJ0JlbmdhbGknLCAnR3VqYXJhdGknLCAnTWFyYXRoaScsICdPZGlhJywgJ1B1bmphYmknLCAnS29ua2FuaScsICdCb2RvJywgJ0RvZ3JpJywgJ0thc2htaXJpJywgJ01haXRoaWxpJywgJ01hbmlwdXJpJywgJ05lcGFsaScsICdTYW5za3JpdCcsICdTYW50YWxpJywgJ1NpbmRoaScsICdVcmR1J107XG4gIGR1cmF0aW9ucyA9IFsnPCAxIEhvdXInLCAnMS01IEhvdXJzJywgJzUrIEhvdXJzJ107XG4gIHByb3ZpZGVycyA9IFtdO1xuICBmaWx0ZXJlZENvbXBldGVuY3kgPSBbLi4udGhpcy5jb21wZXRlbmNpZXNUeXBlXTtcbiAgZmlsdGVyZWRSYXRpbmdzID0gWy4uLnRoaXMucmF0aW5nc107XG4gIGZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgZmlsdGVyZWREdXJhdGlvbnMgPSBbLi4udGhpcy5kdXJhdGlvbnNdO1xuICBmaWx0ZXJlZFByb3ZpZGVycyA9IFsuLi50aGlzLnByb3ZpZGVyc107XG4gIGZ1bGxDb3Vyc2VMaXN0ID0gW11cbiAgLy8gU2VsZWN0ZWQgZmlsdGVyc1xuICBzZWxlY3RlZENvbXBldGVuY3kgPSAnQWxsJztcbiAgc2VsZWN0ZWRSYXRpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWREdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkUHJvdmlkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBmaXJzdEFwaVJlc3BvbnNlOiBhbnkgPSBudWxsXG4gIGV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RFbnJpY2hlZElkZW50aWZpZXJzS2V5ID0gJyc7IC8vIEd1YXJkcyBkdXBsaWNhdGUgY2FsbHMgdG8gdGhlIGNvdXJzZSBzdWdnZXN0aW9ucyBBUElcbiAgc2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuZ2FwQW5hbHlzaXNTdGF0cygpXG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb21wZXRlbmN5OiBbW11dLFxuICAgICAgcmF0aW5nOiBbW11dLFxuICAgICAgbGFuZ3VhZ2U6IFtbXV0sXG4gICAgICBkdXJhdGlvbjogW1tdXSxcbiAgICAgIHByb3ZpZGVyOiBbW11dXG4gICAgfSk7XG4gICAgdGhpcy5sb2FkQ29tcG9uZW50RGF0YSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlYXJjaFRleHQnLCB2YWx1ZSlcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZVxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZpbHRlckRhdGEodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG4gICAgLy8gIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZpbHRlckRhdGEodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIHNlbGVjdGVkRmlsdGVyQ291cnNlcyhldmVudCwgaXRlbSkge1xuICAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50KVxuICAgIGNvbnNvbGUubG9nKCdpdGVtJywgaXRlbSlcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpIDwgMCkge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5maW5kSW5kZXgoXG4gICAgICAgIGNvbnRyb2wgPT4gY29udHJvbCA9PT0gaXRlbS5pZGVudGlmaWVyXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzJywgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzKVxuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgc2F2ZUNvdXJzZXMoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnBsYW5EYXRhJywgdGhpcy5wbGFuRGF0YSlcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicm9sZV9tYXBwaW5nX2lkXCI6IHRoaXMucGxhbkRhdGEuaWQsXG4gICAgICBcInJlY29tbWVuZGVkX2NvdXJzZV9pZFwiOiB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCxcbiAgICAgIFwiY291cnNlX2lkZW50aWZpZXJzXCI6IHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlc1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygncmVxQm9keSwgJywgcmVxQm9keSlcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkJykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNhdmVDb3Vyc2UocmVxQm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZXMgU2F2ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2JwX3BsYW5faWQpIHtcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnVwZGF0ZUNvdXJzZShyZXFCb2R5LCB0aGlzLmNicF9wbGFuX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBVcGRhdGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgICAvLyBIYW5kbGUgNDA5IENvbmZsaWN0IGhlcmVcbiAgICAgICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBjYnBfcGxhbl9pZCBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NicF9wbGFuX2lkIGlzIG5vdCBhdmFpbGFibGUgZm9yIHVwZGF0ZSBvcGVyYXRpb24nKTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gdXBkYXRlIGNvdXJzZXM6IG1pc3NpbmcgcGxhbiBJRCcsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgZ2V0Q291cnNlcygpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICB0aGlzLmNicF9wbGFuX2lkID0gcmVzPy5pZFxuICAgICAgICBpZiAocmVzICYmIHJlcz8uc2VsZWN0ZWRfY291cnNlcyAmJiByZXM/LnNlbGVjdGVkX2NvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubW9kZSA9ICdlZGl0J1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzPy5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaChyZXMuc2VsZWN0ZWRfY291cnNlc1tpXT8uaWRlbnRpZmllcilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH1cblxuXG4gICAgfSlcbiAgfVxuICBnZXRTdWdnZXN0ZWRDb3Vyc2UoKSB7XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFN1Z2dlc3RlZENvdXJzZXMocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRTdWdnZXN0ZWRDb3Vyc2VzIHJlcycsIHJlcylcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICAvLyBTdG9yZSBzdWdnZXN0ZWQgY291cnNlcyBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9IFsuLi5yZXNdO1xuXG4gICAgICAgIC8vIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgdG8gaW5jbHVkZSBhbGwgY291cnNlIHR5cGVzXG4gICAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkQ291cnNlcygpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgc3VnZ2VzdGVkIGNvdXJzZXMgYXJlIGFkZGVkXG4gICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKVxuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VuYXV0aG9yaXplZCBhY2Nlc3MgLSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byBsb2dpbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEhhbmRsZSBvdGhlciBlcnJvcnMgZ3JhY2VmdWxseVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHN1Z2dlc3RlZCBjb3Vyc2VzJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG5cbiAgZ2V0VXNlckNvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFVzZXJDb3Vyc2UgQVBJIHJlc3BvbnNlOicsIHJlcylcbiAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgZmlsdGVyZENvdXJzZXMgYmVmb3JlIGFkZGluZyB1c2VyIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcylcblxuICAgICAgICAvLyBTdG9yZSB1c2VyLWFkZGVkIGNvdXJzZXMgc2VwYXJhdGVseSAocmVzZXQgdG8gYXZvaWQgZHVwbGljYXRlcylcbiAgICAgICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzID0gWy4uLnJlc107XG5cbiAgICAgICAgLy8gUHJvY2VzcyB1c2VyLWFkZGVkIGNvdXJzZXMgdG8gZW5zdXJlIHByb3BlciBzdHJ1Y3R1cmVcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB1c2VyQ291cnNlID0gcmVzW2ldO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBVc2VyIGNvdXJzZSAke2l9IGNvbXBldGVuY2llczpgLCB1c2VyQ291cnNlLmNvbXBldGVuY2llcyk7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdXNlci1hZGRlZCBjb3Vyc2VzIGhhdmUgdGhlIGV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZGlzcGxheVxuICAgICAgICAgIGlmICh1c2VyQ291cnNlICYmICF1c2VyQ291cnNlLmNvdXJzZV90eXBlKSB7XG4gICAgICAgICAgICB1c2VyQ291cnNlLmNvdXJzZV90eXBlID0gJ1VzZXIgQWRkZWQnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFkZCBpZGVudGlmaWVyIGlmIG1pc3NpbmcgKG5lZWRlZCBmb3IgY291cnNlIHNlbGVjdGlvbiBsb2dpYylcbiAgICAgICAgICBpZiAodXNlckNvdXJzZSAmJiAhdXNlckNvdXJzZS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB1c2VyQ291cnNlLmlkZW50aWZpZXIgPSB1c2VyQ291cnNlLmlkIHx8IGB1c2VyX2NvdXJzZV8ke2l9XyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgdG8gaW5jbHVkZSBhbGwgY291cnNlIHR5cGVzXG4gICAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkQ291cnNlcygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXJkQ291cnNlcyBhZnRlciBhZGRpbmcgdXNlciBjb3Vyc2VzOicsIHRoaXMuZmlsdGVyZENvdXJzZXMpO1xuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG5cbiAgY2hlY2tJZkNvdXJzZUV4aXN0cyhpdGVtKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZVxuICAgIGlmICh0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMuaW5kZXhPZihpdGVtPy5pZGVudGlmaWVyKSA+IC0xKSB7XG4gICAgICBmbGFnID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmxhZ1xuICB9XG5cbiAgc2VsZWN0QWxsQ291cnNlcyhldmVudCkge1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnB1c2godGhpcy5maWx0ZXJkQ291cnNlc1tpXS5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMgPSBbXVxuXG4gICAgfVxuICAgIGlmICh0aGlzLmNicF9wbGFuX2lkKSB7XG4gICAgICB0aGlzLm1vZGUgPSAndXBkYXRlJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGUgPSAnYWRkJ1xuICAgIH1cblxuXG4gIH1cbiAgZ2V0U2VjdG9ycyhzZWN0b3IpIHtcbiAgICBpZiAoc2VjdG9yICYmIHNlY3Rvci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlY3RvcikgPyBzZWN0b3Iuam9pbignLyAnKSA6ICcnXG4gICAgfVxuXG4gIH1cblxuICBmaWx0ZXJEYXRhKHNlYXJjaFRleHQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzZWFyY2hUZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZCA9IHRoaXMuZmxhdHRlbk9iamVjdFRvU3RyaW5nKGl0ZW0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RyaW5naWZpZWQuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnNvcnRDb3Vyc2VzQnlDYXRlZ29yeUFuZFJlbGV2YW5jeShmaWx0ZXJlZCk7XG4gIH1cblxuICBmbGF0dGVuT2JqZWN0VG9TdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgdmFsO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHRoaXMuZmxhdHRlbk9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3VnZ2VzdE1vcmVDb3Vyc2VzKCkge1xuICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICBjb25zdCBkaWFsb2dSZWZOZXcgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMTAwcHgnLFxuICAgICAgZGF0YTogeyByZWNvbW1lbmRlZF9jb3Vyc2VfaWQ6IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkLCByb2xlX21hcHBpbmdfaWQ6IHRoaXMucGxhbkRhdGEuaWQgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmTmV3LmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbihlbGVtZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGUgQ291cnNlIFJlY29tbWVuZGF0aW9uIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQgPSBlbGVtZW50XG4gICAgY29uc29sZS5sb2coJ0VkaXQgUm9sZSBNYXBwaW5nIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyBOYXZpZ2F0ZSBvciBvcGVuIG1vZGFsXG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oR2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgICAgZGF0YTogZWxlbWVudCxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmogJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeSAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcih0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gcmVzXG4gICAgICAgICAgICAvLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHJlcztcbiAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygndGhpcy5kYXRhU291cmNlJyx0aGlzLmRhdGFTb3VyY2UpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGluZGV4KTogYW55W10ge1xuICAgIGNvbnN0IGNvdXJzZSA9IHRoaXMuZmlsdGVyZENvdXJzZXNbaW5kZXhdO1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gY291cnNlIGZvdW5kIGF0IGluZGV4ICR7aW5kZXh9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgLy8gQUkgUmVjb21tZW5kZWQgJiBQdWJsaWMgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llcydcbiAgICAvLyBNYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXNfdjYnXG4gICAgLy8gVXNlciBBZGRlZCBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzJ1xuICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICBpZiAoY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgLy8gIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIHVzaW5nICdjb21wZXRlbmNpZXMnIHByb3BlcnR5OmAsIGNvbXBldGVuY2llcyk7XG4gICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSB1c2luZyAnY29tcGV0ZW5jaWVzX3Y2JyBwcm9wZXJ0eTpgLCBjb21wZXRlbmNpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSBoYXMgbm8gdmFsaWQgY29tcGV0ZW5jaWVzIHByb3BlcnR5OmAsIHtcbiAgICAgIC8vICAgaGFzQ29tcGV0ZW5jaWVzOiAhIWNvdXJzZS5jb21wZXRlbmNpZXMsXG4gICAgICAvLyAgIGNvbXBldGVuY2llc1R5cGU6IHR5cGVvZiBjb3Vyc2UuY29tcGV0ZW5jaWVzLFxuICAgICAgLy8gICBoYXNDb21wZXRlbmNpZXNWNjogISFjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2LFxuICAgICAgLy8gICBjb21wZXRlbmNpZXNWNlR5cGU6IHR5cGVvZiBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2LFxuICAgICAgLy8gICBjb3Vyc2VLZXlzOiBPYmplY3Qua2V5cyhjb3Vyc2UpXG4gICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGV0ZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKGBObyBjb21wZXRlbmNpZXMgZm91bmQgZm9yIGNvdXJzZSAke2luZGV4fSBhbmQgdHlwZSAke3R5cGV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIGZvciBjb21wYXJpc29uIChjYXNlLWluc2Vuc2l0aXZlICsgaGFuZGxlIHNwZWxsaW5nIHZhcmlhdGlvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgY29uc3QgbWF0Y2hlZENvbXBldGVuY2llcyA9IGNvbXBldGVuY2llcy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoIWMgfHwgIWMuY29tcGV0ZW5jeUFyZWFOYW1lKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJbnZhbGlkIGNvbXBldGVuY3kgc3RydWN0dXJlIGluIGNvdXJzZSAke2luZGV4fTpgLCBjKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wZXRlbmN5QXJlYSA9IGMuY29tcGV0ZW5jeUFyZWFOYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAvLyBIYW5kbGUgYm90aCBcImJlaGF2aW9yYWxcIiBhbmQgXCJiZWhhdmlvdXJhbFwiIHNwZWxsaW5nc1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3VyYWwnIHx8IG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3JhbCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3JhbCcgfHwgY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvdXJhbCc7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvdGhlciB0eXBlcywgZG8gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uXG4gICAgICByZXR1cm4gY29tcGV0ZW5jeUFyZWEgPT09IG5vcm1hbGl6ZWRUeXBlO1xuICAgIH0pO1xuXG4gICAgLy8gY29uc29sZS5sb2coYEZvdW5kICR7bWF0Y2hlZENvbXBldGVuY2llcy5sZW5ndGh9IGNvbXBldGVuY2llcyBvZiB0eXBlICR7dHlwZX0gZm9yIGNvdXJzZSAke2luZGV4fTpgLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgICByZXR1cm4gbWF0Y2hlZENvbXBldGVuY2llcztcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5QmVodmlvdXJhbFR5cGUoaW5kZXgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdXJzZSA9IHRoaXMuZmlsdGVyZENvdXJzZXNbaW5kZXhdO1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzXG4gICAgICAuZmlsdGVyKGMgPT4gYyAmJiAoYy5jb21wZXRlbmN5QXJlYU5hbWUgPT09ICdCZWhhdmlvcmFsJyB8fCBjLmNvbXBldGVuY3lBcmVhTmFtZSA9PT0gJ0JlaGF2aW91cmFsJykpXG4gICAgICAubWFwKGMgPT4gYCR7Yy5jb21wZXRlbmN5VGhlbWVOYW1lIHx8ICcnfSAtICR7Yy5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIHx8ICcnfWApXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGdldERpc3BsYXllZENvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcGV0ZW5jaWVzID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpO1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcblxuICAgIGlmICh0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0pIHtcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBldGVuY2llcy5zbGljZSgwLCAyKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldID0gIXRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XTtcbiAgfVxuXG4gIGlzRXhwYW5kZWQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxuICBoYXNNb3JlVGhhblR3byh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aCA+IDI7XG4gIH1cblxuICBnZXRSZW1haW5pbmdDb3VudCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuICAgIHJldHVybiB0b3RhbENvdW50IC0gMjtcbiAgfVxuXG4gIG9uT3V0ZXJUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vdXRlclRhYkFjdGl2ZUluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLm91dGVyVGFiQWN0aXZlVGV4dCA9IGV2ZW50LnRhYi50ZXh0TGFiZWxcbiAgICBjb25zb2xlLmxvZygnT3V0ZXIgVGFiIEluZGV4OicsIGV2ZW50LmluZGV4KTtcbiAgICBjb25zb2xlLmxvZygnT3V0ZXIgVGFiIExhYmVsOicsIGV2ZW50LnRhYi50ZXh0TGFiZWwpO1xuICAgIGlmIChldmVudC5pbmRleCA9PT0gMSkge1xuICAgICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKClcbiAgICB9XG4gICAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XG4gICAgICAvLyB0aGlzLmdldENvdXJzZXMoKVxuICAgICAgLy8gdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgdGhpcy5nZXRVc2VyQ291cnNlKClcbiAgICB9XG4gIH1cblxuICBvbklubmVyVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQgPSBldmVudC50YWIudGV4dExhYmVsXG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyID0gJyc7IC8vIFJlc2V0IHRoZW1lIGZpbHRlciB3aGVuIHN3aXRjaGluZyB0YWJzXG4gICAgY29uc29sZS5sb2coJ0lubmVyIFRhYiBJbmRleDonLCBldmVudC5pbmRleCk7XG4gICAgY29uc29sZS5sb2coJ0lubmVyIFRhYiBMYWJlbDonLCBldmVudC50YWIudGV4dExhYmVsKTtcbiAgICBsZXQgdGFiSW5kZXggPSBldmVudC5pbmRleFxuICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gW11cblxuICAgIC8vIEdldCBhbGwgYXZhaWxhYmxlIGNvdXJzZXMgKG9yaWdpbmFsICsgc3VnZ2VzdGVkICsgdXNlciBhZGRlZClcbiAgICBjb25zdCBhbGxBdmFpbGFibGVDb3Vyc2VzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cblxuXG4gICAgc3dpdGNoICh0YWJJbmRleCkge1xuICAgICAgY2FzZSAwOiAvLyBBbGxcbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IGFsbEF2YWlsYWJsZUNvdXJzZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOiAvLyBCZWhhdmlvcmFsXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLnNvcnRDb3Vyc2VzQnlSZWxldmFuY3kodGhpcy5iZWhhdmlvcmFsRmlsdGVyKGFsbEF2YWlsYWJsZUNvdXJzZXMpKTtcbiAgICAgICAgdGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSB0aGlzLmJlaGF2aW9yYWxDb21wZXRlbmN5RmlsdGVyKHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6IC8vIEZ1bmN0aW9uYWxcbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuc29ydENvdXJzZXNCeVJlbGV2YW5jeSh0aGlzLmZ1bmN0aW9uYWxGaWx0ZXIoYWxsQXZhaWxhYmxlQ291cnNlcykpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lGaWx0ZXIodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzogLy8gRG9tYWluXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLnNvcnRDb3Vyc2VzQnlSZWxldmFuY3kodGhpcy5kb21haW5GaWx0ZXIoYWxsQXZhaWxhYmxlQ291cnNlcykpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuZG9tYWluQ29tcGV0ZW5jeUZpbHRlcih0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5JywgdGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkpXG4gIH1cblxuICBnZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCkge1xuICAgIC8vIFN0YXJ0IHdpdGggb3JpZ2luYWwgZGF0YSAoQUkgcmVjb21tZW5kZWQgY291cnNlcylcbiAgICBjb25zdCBhbGxDb3Vyc2VzID0gWy4uLnRoaXMub3JpZ2luYWxEYXRhXTtcbiAgICBjb25zdCBzZWVuSWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBUcmFjayBvcmlnaW5hbCBjb3Vyc2UgaWRlbnRpZmllcnNcbiAgICB0aGlzLm9yaWdpbmFsRGF0YS5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICBpZiAoY291cnNlLmlkZW50aWZpZXIpIHNlZW5JZGVudGlmaWVycy5hZGQoY291cnNlLmlkZW50aWZpZXIpO1xuICAgICAgaWYgKGNvdXJzZS5pZCkgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2UuaWQpO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIHN1Z2dlc3RlZCBjb3Vyc2VzIChpR09UIHBsYXRmb3JtIGNvdXJzZXMpXG4gICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIGNvbnN0IGNvdXJzZUlkID0gY291cnNlLmlkZW50aWZpZXIgfHwgY291cnNlLmlkO1xuICAgICAgaWYgKGNvdXJzZUlkICYmICFzZWVuSWRlbnRpZmllcnMuaGFzKGNvdXJzZUlkKSkge1xuICAgICAgICBhbGxDb3Vyc2VzLnB1c2goY291cnNlKTtcbiAgICAgICAgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2VJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdXNlci1hZGRlZCBjb3Vyc2VzXG4gICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIGNvbnN0IGNvdXJzZUlkID0gY291cnNlLmlkZW50aWZpZXIgfHwgY291cnNlLmlkO1xuICAgICAgaWYgKGNvdXJzZUlkICYmICFzZWVuSWRlbnRpZmllcnMuaGFzKGNvdXJzZUlkKSkge1xuICAgICAgICAvLyBFbnN1cmUgdXNlci1hZGRlZCBjb3Vyc2VzIGhhdmUgcHJvcGVyIHN0cnVjdHVyZVxuICAgICAgICBpZiAoIWNvdXJzZS5jb3Vyc2VfdHlwZSkge1xuICAgICAgICAgIGNvdXJzZS5jb3Vyc2VfdHlwZSA9ICdVc2VyIEFkZGVkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvdXJzZS5pZGVudGlmaWVyICYmIGNvdXJzZS5pZCkge1xuICAgICAgICAgIGNvdXJzZS5pZGVudGlmaWVyID0gY291cnNlLmlkO1xuICAgICAgICB9XG4gICAgICAgIGFsbENvdXJzZXMucHVzaChjb3Vyc2UpO1xuICAgICAgICBzZWVuSWRlbnRpZmllcnMuYWRkKGNvdXJzZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdnZXRBbGxBdmFpbGFibGVDb3Vyc2VzIGJyZWFrZG93bjonLCB7XG4gICAgICBvcmlnaW5hbERhdGE6IHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCxcbiAgICAgIHN1Z2dlc3RlZENvdXJzZXM6IHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGgsXG4gICAgICB1c2VyQWRkZWRDb3Vyc2VzOiB0aGlzLnVzZXJBZGRlZENvdXJzZXMubGVuZ3RoLFxuICAgICAgdG90YWxBdmFpbGFibGU6IGFsbENvdXJzZXMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnYWxsQ291cnNlcy0tJywgYWxsQ291cnNlcylcbiAgICBhbGxDb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0ub3JnYW5pc2F0aW9uICYmIGl0ZW0ub3JnYW5pc2F0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZFByb3ZpZGVycy5pbmRleE9mKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKSA8IDApIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLnB1c2goaXRlbS5vcmdhbmlzYXRpb25bMF0pXG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc3Qgc29ydGVkQ291cnNlcyA9IHRoaXMuc29ydENvdXJzZXNCeUNhdGVnb3J5QW5kUmVsZXZhbmN5KGFsbENvdXJzZXMpXG4gICAgdGhpcy5mdWxsQ291cnNlTGlzdCA9IHNvcnRlZENvdXJzZXNcbiAgICBsZXQgaWRlbnRpZmllcnNBcnIgPSBbXVxuICAgIHNvcnRlZENvdXJzZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZGVudGlmaWVyc0Fyci5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgfSlcbiAgY29uc3QgaWRlbnRpZmllcnNLZXkgPSBbLi4uaWRlbnRpZmllcnNBcnJdLnNvcnQoKS5qb2luKCcsJylcbiAgICBpZiAoaWRlbnRpZmllcnNBcnIubGVuZ3RoICYmIGlkZW50aWZpZXJzS2V5ICE9PSB0aGlzLmxhc3RFbnJpY2hlZElkZW50aWZpZXJzS2V5KSB7XG4gICAgICB0aGlzLmxhc3RFbnJpY2hlZElkZW50aWZpZXJzS2V5ID0gaWRlbnRpZmllcnNLZXlcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0QWRkaXRpb25hbFBhcmFtZXRlcmZvclN1Z2dlc3RlZENvdXJzZXMoaWRlbnRpZmllcnNBcnIpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZnVsbENvdXJzZUxpc3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZ1bGxDb3Vyc2VMaXN0W2pdWydpZGVudGlmaWVyJ10gPT09IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydpZGVudGlmaWVyJ10pIHtcbiAgICAgICAgICAgICAgdGhpcy5mdWxsQ291cnNlTGlzdFtqXVsnbGFuZ3VhZ2UnXSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydsYW5ndWFnZSddXG4gICAgICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2F2Z1JhdGluZyddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2F2Z1JhdGluZyddXG4gICAgICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2NvdXJzZSddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ25hbWUnXVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRlZENvdXJzZXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZWJ1aWxkIGZpbHRlcmRDb3Vyc2VzIGFycmF5IHdpdGggYWxsIGF2YWlsYWJsZSBjb3Vyc2UgdHlwZXNcbiAgICogVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgYXBwbGljYXRpb25cbiAgICovXG4gIHJlYnVpbGRGaWx0ZXJlZENvdXJzZXMoKSB7XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuc29ydENvdXJzZXNCeUNhdGVnb3J5QW5kUmVsZXZhbmN5KHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpKTtcblxuICAgIGNvbnNvbGUubG9nKCdSZWJ1aWx0IGZpbHRlcmRDb3Vyc2VzIHdpdGggYWxsIGNvdXJzZSB0eXBlczonLCB7XG4gICAgICB0b3RhbDogdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGgsXG4gICAgICBicmVha2Rvd246IHtcbiAgICAgICAgb3JpZ2luYWw6IHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCxcbiAgICAgICAgc3VnZ2VzdGVkOiB0aGlzLnN1Z2dlc3RlZENvdXJzZXMubGVuZ3RoLFxuICAgICAgICB1c2VyQWRkZWQ6IHRoaXMudXNlckFkZGVkQ291cnNlcy5sZW5ndGhcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNvcnRDb3Vyc2VzQnlSZWxldmFuY3koY291cnNlczogYW55W10gPSBbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gWy4uLmNvdXJzZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFTY29yZSA9IHRoaXMubm9ybWFsaXplUmVsZXZhbmN5KGE/LnJlbGV2YW5jeSlcbiAgICAgIGNvbnN0IGJTY29yZSA9IHRoaXMubm9ybWFsaXplUmVsZXZhbmN5KGI/LnJlbGV2YW5jeSlcbiAgICAgIHJldHVybiBiU2NvcmUgLSBhU2NvcmVcbiAgICB9KVxuICB9XG5cbiAgc29ydENvdXJzZXNCeUNhdGVnb3J5QW5kUmVsZXZhbmN5KGNvdXJzZXM6IGFueVtdID0gW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIFsuLi5jb3Vyc2VzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBjYXRlZ29yeVByaW9yaXR5ID0geyBkb21haW46IDEsIGZ1bmN0aW9uYWw6IDIsIGJlaGF2aW9yYWw6IDMsIG90aGVyOiA0IH07XG4gICAgICBjb25zdCBhUHJpb3JpdHkgPSBjYXRlZ29yeVByaW9yaXR5W3RoaXMuZ2V0Q291cnNlQ2F0ZWdvcnkoYSldIHx8IDQ7XG4gICAgICBjb25zdCBiUHJpb3JpdHkgPSBjYXRlZ29yeVByaW9yaXR5W3RoaXMuZ2V0Q291cnNlQ2F0ZWdvcnkoYildIHx8IDQ7XG5cbiAgICAgIGlmIChhUHJpb3JpdHkgIT09IGJQcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gYVByaW9yaXR5IC0gYlByaW9yaXR5O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVSZWxldmFuY3koYj8ucmVsZXZhbmN5KSAtIHRoaXMubm9ybWFsaXplUmVsZXZhbmN5KGE/LnJlbGV2YW5jeSk7XG4gICAgfSlcbiAgfVxuXG4gIGdldENvdXJzZUNhdGVnb3J5KGNvdXJzZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21wZXRlbmNpZXMgPSBbXG4gICAgICAuLi4oY291cnNlPy5jb21wZXRlbmNpZXMgfHwgW10pLFxuICAgICAgLi4uKGNvdXJzZT8uY29tcGV0ZW5jaWVzX3Y2IHx8IFtdKVxuICAgIF07XG5cbiAgICBjb25zdCBjYXRlZ29yaWVzID0gbmV3IFNldChcbiAgICAgIGNvbXBldGVuY2llc1xuICAgICAgICAubWFwKChjOiBhbnkpID0+IHRoaXMubm9ybWFsaXplQ29tcGV0ZW5jeShjPy5jb21wZXRlbmN5QXJlYU5hbWUpKVxuICAgICAgICAuZmlsdGVyKChjOiBzdHJpbmcpID0+IGMpXG4gICAgKTtcblxuICAgIGlmIChjYXRlZ29yaWVzLmhhcygnZG9tYWluJykpIHJldHVybiAnZG9tYWluJztcbiAgICBpZiAoY2F0ZWdvcmllcy5oYXMoJ2Z1bmN0aW9uYWwnKSkgcmV0dXJuICdmdW5jdGlvbmFsJztcbiAgICBpZiAoY2F0ZWdvcmllcy5oYXMoJ2JlaGF2aW9yYWwnKSkgcmV0dXJuICdiZWhhdmlvcmFsJztcblxuICAgIHJldHVybiAnb3RoZXInO1xuICB9XG5cbiAgbm9ybWFsaXplUmVsZXZhbmN5KHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUudHJpbSgpKVxuICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogLUluZmluaXR5XG4gICAgfVxuXG4gICAgcmV0dXJuIC1JbmZpbml0eVxuICB9XG5cbiAgYmVoYXZpb3JhbEZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmICgoYz8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHx8IGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2JlaGF2aW91cmFsJykpO1xuICAgIH0pO1xuICB9XG5cbiAgYmVoYXZpb3JhbENvbXBldGVuY3lGaWx0ZXIoZGF0YTogYW55W10pOiBzdHJpbmdbXSB7XG4gICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgY29uc3QgYmVoYXZpb3JhbFRoZW1lcyA9IGRhdGFcbiAgICAgIC5maWx0ZXIoaXRlbSA9PlxuICAgICAgICBpdGVtPy50eXBlICYmXG4gICAgICAgIFsnYmVoYXZpb3JhbCcsICdiZWhhdmlvdXJhbCddLmluY2x1ZGVzKGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgLm1hcChpdGVtID0+IHRoaXMuZm9ybWF0VGhlbWVXaXRoU3ViVGhlbWUoaXRlbT8udGhlbWUsIGl0ZW0/LnN1Yl90aGVtZSkpXG4gICAgICAuZmlsdGVyKCh0aGVtZSk6IHRoZW1lIGlzIHN0cmluZyA9PiBCb29sZWFuKHRoZW1lKSk7IC8vIEVuc3VyZXMgdHlwZSBzYWZldHlcblxuICAgIGNvbnN0IHVuaXF1ZUJlaGF2aW9yYWxUaGVtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoYmVoYXZpb3JhbFRoZW1lcykpO1xuXG4gICAgY29uc29sZS5sb2codW5pcXVlQmVoYXZpb3JhbFRoZW1lcyk7XG4gICAgcmV0dXJuIHVuaXF1ZUJlaGF2aW9yYWxUaGVtZXM7XG4gIH1cblxuICBmdW5jdGlvbmFsQ29tcGV0ZW5jeUZpbHRlcihkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgZnVuY3Rpb25hbFRoZW1lcyA9IGRhdGFcbiAgICAgIC5maWx0ZXIoaXRlbSA9PlxuICAgICAgICBpdGVtPy50eXBlICYmXG4gICAgICAgIFsnZnVuY3Rpb25hbCddLmluY2x1ZGVzKGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgLm1hcChpdGVtID0+IHRoaXMuZm9ybWF0VGhlbWVXaXRoU3ViVGhlbWUoaXRlbT8udGhlbWUsIGl0ZW0/LnN1Yl90aGVtZSkpXG4gICAgICAuZmlsdGVyKCh0aGVtZSk6IHRoZW1lIGlzIHN0cmluZyA9PiBCb29sZWFuKHRoZW1lKSk7IC8vIEVuc3VyZXMgdHlwZSBzYWZldHlcblxuICAgIGNvbnN0IHVuaXF1ZUZ1bmN0aW9uYWxUaGVtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZnVuY3Rpb25hbFRoZW1lcykpO1xuXG4gICAgY29uc29sZS5sb2codW5pcXVlRnVuY3Rpb25hbFRoZW1lcyk7XG4gICAgcmV0dXJuIHVuaXF1ZUZ1bmN0aW9uYWxUaGVtZXM7XG5cbiAgICAvLyBjb25zb2xlLmxvZyh1bmlxdWVDb21wZXRlbmN5QXJlYU5hbWVzKTtcbiAgfVxuXG4gIGRvbWFpbkNvbXBldGVuY3lGaWx0ZXIoZGF0YTogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGRvbWFpblRoZW1lcyA9IGRhdGFcbiAgICAgIC5maWx0ZXIoaXRlbSA9PlxuICAgICAgICBpdGVtPy50eXBlICYmXG4gICAgICAgIFsnZG9tYWluJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gdGhpcy5mb3JtYXRUaGVtZVdpdGhTdWJUaGVtZShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKSlcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlRG9tYWluVGhlbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRvbWFpblRoZW1lcykpO1xuXG4gICAgY29uc29sZS5sb2codW5pcXVlRG9tYWluVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlRG9tYWluVGhlbWVzO1xuXG4gICAgLy8gY29uc29sZS5sb2codW5pcXVlQ29tcGV0ZW5jeUFyZWFOYW1lcyk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uYWxGaWx0ZXIoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcy5zb21lKGMgPT4gYyAmJiBjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdmdW5jdGlvbmFsJyk7XG4gICAgfSk7XG4gIH1cblxuICBkb21haW5GaWx0ZXIoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcy5zb21lKGMgPT4gYyAmJiBjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdkb21haW4nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdhcEFuYWx5c2lzU3RhdHMoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMucGxhbkRhdGEnLCB0aGlzLnBsYW5EYXRhKVxuXG4gICAgLy8gQWx3YXlzIHVzZSBBTEwgY29tcGV0ZW5jaWVzIGZvciBjYWxjdWxhdGluZyBvdmVyYWxsIHN0YXRzXG4gICAgY29uc3QgYWxsQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXM7XG5cbiAgICAvLyBGaWx0ZXIgZm9yIGNhdGVnb3J5LXNwZWNpZmljIGNhbGN1bGF0aW9uc1xuICAgIGxldCBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzOiBhbnkgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcztcbiAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJykge1xuICAgICAgY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5zZWxlY3RlZENhdGVnb3J5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH1cblxuICAgIC8vIENvdW50IEFMTCBjb21wZXRlbmNpZXMgYnkgY2F0ZWdvcnkgKG5vdCBqdXN0IGZpbHRlcmVkIG9uZXMpXG4gICAgY29uc3QgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkgPSB7IHRvdGFsOiBhbGxDb21wZXRlbmNpZXMubGVuZ3RoLCBiZWhhdmlvdXJhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH1cblxuICAgIC8vIElNUE9SVEFOVDogVXNlIGFsbCBhdmFpbGFibGUgY291cnNlcyBmb3IgY29uc2lzdGVudCBjb3ZlcmFnZSBjYWxjdWxhdGlvblxuICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHdoYXQncyBhdmFpbGFibGUgaW4gdGhlIEZpbHRlciBCeSBDb21wZXRlbmN5IHNlY3Rpb25cbiAgICBjb25zdCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMgPSBbXVxuICAgIGNvbnN0IGFsbEF2YWlsYWJsZUNvdXJzZXNGb3JTdGF0cyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuXG4gICAgYWxsQXZhaWxhYmxlQ291cnNlc0ZvclN0YXRzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICBjb21wZXRlbmNpZXMuZm9yRWFjaCgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIGFsbENvdXJzZUNvbXBldGVuY2llcy5wdXNoKGxpc3QpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdhbGxDb21wZXRlbmNpZXMnLCBhbGxDb21wZXRlbmNpZXMpXG4gICAgY29uc29sZS5sb2coJ2NhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMnLCBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzKVxuICAgIGNvbnNvbGUubG9nKCdhbGxDb3Vyc2VDb21wZXRlbmNpZXMnLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpXG5cbiAgICAvLyBDb3VudCBhbGwgY29tcGV0ZW5jaWVzIGJ5IHR5cGUgZm9yIHByb3BlciB0b3RhbHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbENvbXBldGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcGV0ZW5jeVR5cGUgPSBhbGxDb21wZXRlbmNpZXNbaV1bJ3R5cGUnXT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb21wZXRlbmN5ICR7aX06IHR5cGU9XCIke2NvbXBldGVuY3lUeXBlfVwiLCBkYXRhOmAsIGFsbENvbXBldGVuY2llc1tpXSk7XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHwgY29tcGV0ZW5jeVR5cGUgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgICBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnYmVoYXZpb3VyYWwnXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddICsgMVxuICAgICAgfVxuICAgICAgaWYgKGNvbXBldGVuY3lUeXBlID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgICAgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydmdW5jdGlvbmFsJ10gKyAxXG4gICAgICB9XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdkb21haW4nKSB7XG4gICAgICAgIG1hc3Rlckxpc3RCeUNhdGVnb3J5Wydkb21haW4nXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5Wydkb21haW4nXSArIDFcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21hc3Rlckxpc3RCeUNhdGVnb3J5IGFmdGVyIGNvdW50aW5nOicsIG1hc3Rlckxpc3RCeUNhdGVnb3J5KVxuXG4gICAgLy8gR2V0IG1hdGNoaW5nIHJlc3VsdHMgZm9yIEFMTCBjb21wZXRlbmNpZXMgKGZvciBvdmVyYWxsIGNvdmVyYWdlKVxuICAgIGNvbnN0IG92ZXJhbGxSZXN1bHQgPSB0aGlzLmdldE1hdGNoZWRDb21wZXRlbmN5U3RhdHMoYWxsQ29tcGV0ZW5jaWVzLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpO1xuXG4gICAgLy8gR2V0IG1hdGNoaW5nIHJlc3VsdHMgZm9yIGNhdGVnb3J5LXNwZWNpZmljIGNvbXBldGVuY2llcyAoZm9yIGZpbHRlcmVkIHZpZXcpXG4gICAgY29uc3QgY2F0ZWdvcnlSZXN1bHQgPSB0aGlzLmdldE1hdGNoZWRDb21wZXRlbmN5U3RhdHMoY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcywgYWxsQ291cnNlQ29tcGV0ZW5jaWVzKTtcblxuICAgIC8vIFNldCBjb21wZXRlbmN5Q292ZXJlZENvdW50IGJhc2VkIG9uIHNlbGVjdGVkIGNhdGVnb3J5IChmb3IgdGhlIGZpbHRlcmVkIG51bWJlcnMpXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCcpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ3RvdGFsJ107XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2JlaGF2aW9yYWwnXSB8fCAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IGNhdGVnb3J5UmVzdWx0WydmdW5jdGlvbmFsJ10gfHwgMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IGNhdGVnb3J5UmVzdWx0Wydkb21haW4nXSB8fCAwO1xuICAgIH1cblxuICAgIC8vIElNUE9SVEFOVDogT3ZlcmFsbCBDb3ZlcmFnZSBzaG91bGQgQUxXQVlTIGJlIGJhc2VkIG9uIEFMTCBjb21wZXRlbmNpZXMsIG5vdCBmaWx0ZXJlZFxuICAgIGxldCB0b3RhbENvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgLy8gQWx3YXlzIHVzZSB0b3RhbCBjb3VudFxuICAgIGxldCBvdmVyYWxsQ292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsndG90YWwnXTsgLy8gQWx3YXlzIHVzZSBvdmVyYWxsIHJlc3VsdHNcbiAgICBsZXQgbWF0aFJvdW5kID0gTWF0aC5yb3VuZCgob3ZlcmFsbENvdmVyZWRDb3VudCAvIHRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMClcbiAgICB0aGlzLm92ZXJhbGxDb3ZlcmFnZSA9IGAke21hdGhSb3VuZH0lYFxuXG4gICAgY29uc29sZS5sb2coJ092ZXJhbGwgQ292ZXJhZ2UgQ2FsY3VsYXRpb246Jywge1xuICAgICAgdG90YWxDb21wZXRlbmNpZXM6IHRvdGFsQ29tcGV0ZW5jaWVzLFxuICAgICAgb3ZlcmFsbENvdmVyZWRDb3VudDogb3ZlcmFsbENvdmVyZWRDb3VudCxcbiAgICAgIG92ZXJhbGxDb3ZlcmFnZTogdGhpcy5vdmVyYWxsQ292ZXJhZ2UsXG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnksXG4gICAgICBjb21wZXRlbmN5Q292ZXJlZENvdW50OiB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnRcbiAgICB9KTtcblxuICAgIC8vIEFsd2F5cyBjYWxjdWxhdGUgYWxsIGNhdGVnb3J5LXNwZWNpZmljIG1ldHJpY3MgcmVnYXJkbGVzcyBvZiBzZWxlY3RlZCBjYXRlZ29yeVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgZGF0YSBpcyBhdmFpbGFibGUgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgLy8gVXNlIG92ZXJhbGxSZXN1bHQgZm9yIGNvbnNpc3RlbnQgY2FsY3VsYXRpb25zIGFjcm9zcyBhbGwgY2F0ZWdvcmllc1xuICAgIHRoaXMuYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0WydiZWhhdmlvcmFsJ10gfHwgMDtcbiAgICB0aGlzLmJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcyA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddO1xuICAgIGxldCBiZWhhdmlvcmFsTWF0aFJvdW5kID0gdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMgPiAwID8gTWF0aC5yb3VuZCgodGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMCkgOiAwO1xuICAgIHRoaXMuYmVoYXZpb3JhbENvdmVyYWdlID0gYCR7YmVoYXZpb3JhbE1hdGhSb3VuZH0lYDtcblxuICAgIHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0WydmdW5jdGlvbmFsJ10gfHwgMDtcbiAgICB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydmdW5jdGlvbmFsJ107XG4gICAgbGV0IGZ1bmN0aW9uYWxNYXRoUm91bmQgPSB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA+IDAgPyBNYXRoLnJvdW5kKCh0aGlzLmZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5mdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5mdW5jdGlvbmFsQ292ZXJhZ2UgPSBgJHtmdW5jdGlvbmFsTWF0aFJvdW5kfSVgO1xuXG4gICAgdGhpcy5kb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsnZG9tYWluJ10gfHwgMDtcbiAgICB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddO1xuICAgIGxldCBkb21haW5NYXRoUm91bmQgPSB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID4gMCA/IE1hdGgucm91bmQoKHRoaXMuZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5kb21haW5Db3ZlcmFnZSA9IGAke2RvbWFpbk1hdGhSb3VuZH0lYDtcblxuICAgIGNvbnNvbGUubG9nKCdBbGwgY2F0ZWdvcnkgbWV0cmljcyBjYWxjdWxhdGVkOicsIHtcbiAgICAgIGJlaGF2aW9yYWw6IHsgY292ZXJlZDogdGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5iZWhhdmlvcmFsQ292ZXJhZ2UgfSxcbiAgICAgIGZ1bmN0aW9uYWw6IHsgY292ZXJlZDogdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5mdW5jdGlvbmFsQ292ZXJhZ2UgfSxcbiAgICAgIGRvbWFpbjogeyBjb3ZlcmVkOiB0aGlzLmRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQsIHRvdGFsOiB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5kb21haW5Db3ZlcmFnZSB9LFxuICAgICAgb3ZlcmFsbDogeyBjb3ZlcmVkOiBvdmVyYWxsQ292ZXJlZENvdW50LCB0b3RhbDogdG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLm92ZXJhbGxDb3ZlcmFnZSB9LFxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogdGhpcy5zZWxlY3RlZENhdGVnb3J5LFxuICAgICAgY29tcGV0ZW5jeUNvdmVyZWRDb3VudEZvckNhdGVnb3J5OiB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnRcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnT3ZlcmFsbCBSZXN1bHQ6Jywgb3ZlcmFsbFJlc3VsdCk7XG4gICAgY29uc29sZS5sb2coJ0NhdGVnb3J5IFJlc3VsdDonLCBjYXRlZ29yeVJlc3VsdCk7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5JywgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkpXG4gICAgdGhpcy5iZWhhdmlvdXJhbE5vdE1hdGNoZWQgPSB0aGlzLmdldENvbXBldGVuY3lCeUNhdGVnb3J5Tm90TWF0Y2hpbmcoJ2JlaGF2aW9yYWwnKVxuICAgIHRoaXMuZnVuY3Rpb25hbE5vdE1hdGNoZWQgPSB0aGlzLmdldENvbXBldGVuY3lCeUNhdGVnb3J5Tm90TWF0Y2hpbmcoJ2Z1bmN0aW9uYWwnKVxuICAgIHRoaXMuZG9tYWluTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnZG9tYWluJylcblxuICAgIHRoaXMuZ2V0QmVoYXZpb3VyYWxNYXRjaGVkKClcbiAgICB0aGlzLmdldEZ1bmN0aW9uYWxNYXRjaGVkKClcbiAgICB0aGlzLmdldERvbWFpbk1hdGNoZWQoKVxuICB9XG5cbiAgZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhwcmltYXJ5QXJyYXk6IGFueVtdLCBzZWNvbmRhcnlBcnJheTogYW55W10pIHtcbiAgICAvLyBDb252ZXJ0IGJvdGggYXJyYXlzIHRvIGVuc3VyZSBjb25zaXN0ZW50IGNhc2luZ1xuICAgIGNvbnN0IGNvdW50czogYW55ID0ge1xuICAgICAgYmVoYXZpb3JhbDogMCxcbiAgICAgIGZ1bmN0aW9uYWw6IDAsXG4gICAgICBkb21haW46IDAsXG4gICAgICB0b3RhbDogMFxuICAgIH07XG5cbiAgICAvLyBDbGVhciB0aGUgY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5IGFycmF5IGZvciBmcmVzaCBjYWxjdWxhdGlvblxuICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5ID0gW107XG5cbiAgICAvLyBTZXQgdG8ga2VlcCB0cmFjayBvZiB1bmlxdWUgbWF0Y2hlc1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByaW1hcnkgb2YgcHJpbWFyeUFycmF5KSB7XG4gICAgICBjb25zdCB0eXBlS2V5ID0gcHJpbWFyeS50eXBlPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHRoZW1lS2V5ID0gcHJpbWFyeS50aGVtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCBzdWJUaGVtZUtleSA9IHByaW1hcnkuc3ViX3RoZW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgbGV0IGlzTWF0Y2hlZCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IHNlY29uZGFyeSBvZiBzZWNvbmRhcnlBcnJheSkge1xuICAgICAgICAvLyBOb3JtYWxpemUgc2Vjb25kYXJ5IGtleXNcbiAgICAgICAgbGV0IHNlY1R5cGUgPSBzZWNvbmRhcnk/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGxldCBzZWNUaGVtZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeVRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGxldCBzZWNTdWJUaGVtZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeVN1YlRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgLy8gRml4IGZvciBkYXRhIGluY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKHNlY1R5cGUgPT09ICdiZWhhdmlvdXJhbCcpIHNlY1R5cGUgPSAnYmVoYXZpb3JhbCc7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVuaXF1ZSBtYXRjaCBrZXkgZm9yIHByaW1hcnkgY29tcGV0ZW5jeVxuICAgICAgICBjb25zdCBtYXRjaEtleSA9IGAke3R5cGVLZXl9fCR7dGhlbWVLZXl9fCR7c3ViVGhlbWVLZXl9YDtcblxuICAgICAgICAvLyBFbmhhbmNlZCBjcm9zcy1tYXRjaGluZyBsb2dpYyBhcyByZXF1ZXN0ZWQ6XG4gICAgICAgIC8vIDEuIFJvbGUgbWFwcGluZyBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgLy8gMi4gUm9sZSBtYXBwaW5nIFN1YiBUaGVtZSB2cyBDb3Vyc2UgU3ViIFRoZW1lICBcbiAgICAgICAgLy8gMy4gUm9sZSBtYXBwaW5nIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWVcbiAgICAgICAgLy8gNC4gUm9sZSBtYXBwaW5nIFN1YiBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgY29uc3QgdGhlbWVUb1RoZW1lTWF0Y2ggPSB0aGVtZUtleSA9PT0gc2VjVGhlbWU7XG4gICAgICAgIGNvbnN0IHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoID0gc3ViVGhlbWVLZXkgPT09IHNlY1N1YlRoZW1lO1xuICAgICAgICBjb25zdCB0aGVtZVRvU3ViVGhlbWVNYXRjaCA9IHRoZW1lS2V5ID09PSBzZWNTdWJUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1RoZW1lTWF0Y2ggPSBzdWJUaGVtZUtleSA9PT0gc2VjVGhlbWU7XG5cbiAgICAgICAgbGV0IG1hdGNoVHlwZSA9ICcnO1xuICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0eXBlS2V5ID09PSBzZWNUeXBlICYmICFzZWVuLmhhcyhtYXRjaEtleSkpIHtcbiAgICAgICAgICBpZiAodGhlbWVUb1RoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdUaGVtZS10by1UaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVtZVRvU3ViVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVN1YlRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3ViVGhlbWVUb1RoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1UaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV06YCwge1xuICAgICAgICAgICAgcm9sZU1hcHBpbmc6IHsgdHlwZTogdHlwZUtleSwgdGhlbWU6IHRoZW1lS2V5LCBzdWJUaGVtZTogc3ViVGhlbWVLZXkgfSxcbiAgICAgICAgICAgIGNvdXJzZTogeyB0eXBlOiBzZWNUeXBlLCB0aGVtZTogc2VjVGhlbWUsIHN1YlRoZW1lOiBzZWNTdWJUaGVtZSB9LFxuICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFN0b3JlIG1hdGNoZWQgY29tcGV0ZW5jeSBpbmZvIGZvciBsYXRlciB1c2VcbiAgICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgICAgb2JqW3R5cGVLZXldID0gW3RoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleSh0aGVtZUtleSwgc3ViVGhlbWVLZXkpXTtcbiAgICAgICAgICB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeS5wdXNoKG9iaik7XG4gICAgICAgICAgc2Vlbi5hZGQobWF0Y2hLZXkpO1xuICAgICAgICAgIG1hdGNoZWRDb21wZXRlbmNpZXMuYWRkKHRoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleSh0aGVtZUtleSwgc3ViVGhlbWVLZXkpKTtcbiAgICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKGNvdW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlS2V5KSkge1xuICAgICAgICAgICAgY291bnRzW3R5cGVLZXldKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvdW50c1t0eXBlS2V5XSA9IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY291bnRzLnRvdGFsKys7XG4gICAgICAgICAgYnJlYWs7IC8vIFN0b3AgbG9va2luZyBmb3IgbWF0Y2hlcyBmb3IgdGhpcyBwcmltYXJ5IGNvbXBldGVuY3lcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cbiAgZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZyhjYXRlZ29yeVR5cGUpIHtcbiAgICAvLyBHZXQgYWxsIGNvbXBldGVuY2llcyBmb3IgdGhlIGdpdmVuIGNhdGVnb3J5IGZyb20gcm9sZSBtYXBwaW5nXG4gICAgbGV0IGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzW2ldWyd0eXBlJ10/LnRvTG93ZXJDYXNlKCkgPT09IGNhdGVnb3J5VHlwZT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBhbGxDYXRlZ29yeUNvbXBldGVuY2llcy5wdXNoKFxuICAgICAgICAgIHRoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleShcbiAgICAgICAgICAgIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzW2ldWyd0aGVtZSddLFxuICAgICAgICAgICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3N1Yl90aGVtZSddXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBtYXRjaGVkIGNvbXBldGVuY2llcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIGNvdXJzZXNcbiAgICBsZXQgbWF0Y2hlZENvbXBldGVuY2llcyA9IFtdO1xuICAgIGNvbnNvbGUubG9nKCdjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnknLCB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV1bY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5W2ldJywgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV0pXG4gICAgICAgIC8vIEV4dHJhY3QgbWF0Y2hlZCB0aGVtZXMgZnJvbSBjb3Vyc2UgY29tcGV0ZW5jaWVzXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5W2ldW2NhdGVnb3J5VHlwZT8udG9Mb3dlckNhc2UoKV0uZm9yRWFjaCh0aGVtZSA9PiB7XG4gICAgICAgICAgaWYgKHRoZW1lKSB7XG4gICAgICAgICAgICBtYXRjaGVkQ29tcGV0ZW5jaWVzLnB1c2godGhlbWUudG9Mb3dlckNhc2UoKS50cmltKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW5oYW5jZWQgbWF0Y2hpbmc6IGNoZWNrIGJvdGggdGhlbWUgYW5kIHN1YnRoZW1lIGZyb20gY291cnNlcyBhZ2FpbnN0IEZSQUMgY29tcGV0ZW5jaWVzXG4gICAgLy8gSU1QT1JUQU5UOiBVc2UgYWxsIGF2YWlsYWJsZSBjb3Vyc2VzIGZvciBjb25zaXN0ZW50IGNvdmVyYWdlIGNhbGN1bGF0aW9uXG4gICAgY29uc3QgYWxsQ291cnNlc0Zvck1hdGNoaW5nID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cbiAgICBhbGxDb3Vyc2VzRm9yTWF0Y2hpbmcuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChjb3Vyc2UgJiYgY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIGNvbXBldGVuY2llcy5mb3JFYWNoKChjb21wOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHNlY1R5cGUgPSBjb21wPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICBpZiAoc2VjVHlwZSA9PT0gJ2JlaGF2aW91cmFsJykgc2VjVHlwZSA9ICdiZWhhdmlvcmFsJztcblxuICAgICAgICBpZiAoc2VjVHlwZSA9PT0gY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY29uc3QgY291cnNlVGhlbWUgPSBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGNvdXJzZVN1YlRoZW1lID0gY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBGUkFDIGNvbXBldGVuY3kgbWF0Y2hlcyB0aGlzIGNvdXJzZSBjb21wZXRlbmN5XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnJhY0NvbXAgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llc1tpXTtcbiAgICAgICAgICAgIGlmIChmcmFjQ29tcFsndHlwZSddPy50b0xvd2VyQ2FzZSgpID09PSBjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZnJhY1RoZW1lID0gZnJhY0NvbXBbJ3RoZW1lJ10/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgICAgICBjb25zdCBmcmFjU3ViVGhlbWUgPSBmcmFjQ29tcFsnc3ViX3RoZW1lJ10/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAgICAgICAgIC8vIEVuaGFuY2VkIGNyb3NzLW1hdGNoaW5nIGxvZ2ljIChzYW1lIGFzIGluIGdldE1hdGNoZWRDb21wZXRlbmN5U3RhdHMpOlxuICAgICAgICAgICAgICAvLyAxLiBDb3Vyc2UgVGhlbWUgdnMgRlJBQyBUaGVtZVxuICAgICAgICAgICAgICAvLyAyLiBDb3Vyc2UgU3ViIFRoZW1lIHZzIEZSQUMgU3ViIFRoZW1lICBcbiAgICAgICAgICAgICAgLy8gMy4gQ291cnNlIFRoZW1lIHZzIEZSQUMgU3ViIFRoZW1lXG4gICAgICAgICAgICAgIC8vIDQuIENvdXJzZSBTdWIgVGhlbWUgdnMgRlJBQyBUaGVtZVxuICAgICAgICAgICAgICBjb25zdCBjb3Vyc2VUaGVtZVRvRnJhY1RoZW1lID0gY291cnNlVGhlbWUgPT09IGZyYWNUaGVtZTtcbiAgICAgICAgICAgICAgY29uc3QgY291cnNlU3ViVGhlbWVUb0ZyYWNTdWJUaGVtZSA9IGNvdXJzZVN1YlRoZW1lID09PSBmcmFjU3ViVGhlbWU7XG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVRoZW1lVG9GcmFjU3ViVGhlbWUgPSBjb3Vyc2VUaGVtZSA9PT0gZnJhY1N1YlRoZW1lO1xuICAgICAgICAgICAgICBjb25zdCBjb3Vyc2VTdWJUaGVtZVRvRnJhY1RoZW1lID0gY291cnNlU3ViVGhlbWUgPT09IGZyYWNUaGVtZTtcblxuICAgICAgICAgICAgICBpZiAoY291cnNlVGhlbWVUb0ZyYWNUaGVtZSB8fCBjb3Vyc2VTdWJUaGVtZVRvRnJhY1N1YlRoZW1lIHx8XG4gICAgICAgICAgICAgICAgY291cnNlVGhlbWVUb0ZyYWNTdWJUaGVtZSB8fCBjb3Vyc2VTdWJUaGVtZVRvRnJhY1RoZW1lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hUeXBlID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZVRoZW1lVG9GcmFjVGhlbWUpIG1hdGNoVHlwZSA9ICdDb3Vyc2VUaGVtZS10by1GUkFDVGhlbWUnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdXJzZVN1YlRoZW1lVG9GcmFjU3ViVGhlbWUpIG1hdGNoVHlwZSA9ICdDb3Vyc2VTdWJUaGVtZS10by1GUkFDU3ViVGhlbWUnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdXJzZVRoZW1lVG9GcmFjU3ViVGhlbWUpIG1hdGNoVHlwZSA9ICdDb3Vyc2VUaGVtZS10by1GUkFDU3ViVGhlbWUnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdXJzZVN1YlRoZW1lVG9GcmFjVGhlbWUpIG1hdGNoVHlwZSA9ICdDb3Vyc2VTdWJUaGVtZS10by1GUkFDVGhlbWUnO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKchSBDT01QRVRFTkNZIE1BVENIIEZPVU5EIFske21hdGNoVHlwZX1dIGZvciAke2NhdGVnb3J5VHlwZX06YCwge1xuICAgICAgICAgICAgICAgICAgY291cnNlOiB7IHRoZW1lOiBjb3Vyc2VUaGVtZSwgc3ViVGhlbWU6IGNvdXJzZVN1YlRoZW1lIH0sXG4gICAgICAgICAgICAgICAgICBmcmFjOiB7IHRoZW1lOiBmcmFjVGhlbWUsIHN1YlRoZW1lOiBmcmFjU3ViVGhlbWUgfSxcbiAgICAgICAgICAgICAgICAgIG1hdGNoVHlwZTogbWF0Y2hUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBtYXRjaGVkQ29tcGV0ZW5jaWVzLnB1c2godGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KGZyYWNUaGVtZSwgZnJhY1N1YlRoZW1lKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZvdW5kIGEgbWF0Y2gsIG1vdmUgdG8gbmV4dCBjb3Vyc2UgY29tcGV0ZW5jeVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIGZyb20gbWF0Y2hlZCBjb21wZXRlbmNpZXNcbiAgICBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gWy4uLm5ldyBTZXQobWF0Y2hlZENvbXBldGVuY2llcyldO1xuXG4gICAgY29uc29sZS5sb2coYFxcbj09PSAke2NhdGVnb3J5VHlwZS50b1VwcGVyQ2FzZSgpfSBDT01QRVRFTkNZIE1BVENISU5HID09PWApO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBBbGwgRlJBQyBjb21wZXRlbmNpZXM6YCwgYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMpO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBNYXRjaGVkIGZyb20gY291cnNlczpgLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgICBjb25zb2xlLmxvZyhgJHtjYXRlZ29yeVR5cGV9IC0gTWF0Y2ggcmF0ZTogJHttYXRjaGVkQ29tcGV0ZW5jaWVzLmxlbmd0aH0vJHthbGxDYXRlZ29yeUNvbXBldGVuY2llcy5sZW5ndGh9ICgke01hdGgucm91bmQoKG1hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RoIC8gYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMubGVuZ3RoKSAqIDEwMCl9JSlgKTtcblxuICAgIC8vIFJldHVybiB1bm1hdGNoZWQgY29tcGV0ZW5jaWVzICh0aG9zZSBpbiByb2xlIG1hcHBpbmcgYnV0IG5vdCBjb3ZlcmVkIGJ5IGNvdXJzZXMpXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZVN0cmluZ0FycmF5cyhhbGxDYXRlZ29yeUNvbXBldGVuY2llcywgbWF0Y2hlZENvbXBldGVuY2llcyk7XG4gIH1cblxuICBjb21wYXJlU3RyaW5nQXJyYXlzKGFycjE6IHN0cmluZ1tdLCBhcnIyOiBzdHJpbmdbXSkge1xuICAgIGNvbnNvbGUubG9nKCdBbGwgY29tcGV0ZW5jaWVzIGluIGNhdGVnb3J5OicsIGFycjEpO1xuICAgIGNvbnNvbGUubG9nKCdNYXRjaGVkIGNvbXBldGVuY2llcyBmcm9tIGNvdXJzZXM6JywgYXJyMik7XG5cbiAgICAvLyBSZXR1cm4gaXRlbXMgaW4gYXJyMSB0aGF0IGFyZSBOT1QgaW4gYXJyMiAodW5tYXRjaGVkIGNvbXBldGVuY2llcylcbiAgICBjb25zdCB1bm1hdGNoZWQgPSBhcnIxLmZpbHRlcihpdGVtID0+ICFhcnIyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICBjb25zb2xlLmxvZygnVW5tYXRjaGVkIGNvbXBldGVuY2llczonLCB1bm1hdGNoZWQpO1xuXG4gICAgcmV0dXJuIHVubWF0Y2hlZDtcbiAgfVxuXG4gIGFkZENvdXJzZShtaXNzaW5nQ29tcGV0ZW5jeT86IHN0cmluZywgY29tcGV0ZW5jeVR5cGU/OiBzdHJpbmcpIHtcbiAgICBsZXQgZGlhbG9nRGF0YSA9IHsgLi4udGhpcy5wbGFuRGF0YSB9O1xuXG4gICAgLy8gSWYgY29tcGV0ZW5jeSBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCwgYWRkIHRoZW0gdG8gdGhlIGRpYWxvZyBkYXRhXG4gICAgaWYgKG1pc3NpbmdDb21wZXRlbmN5ICYmIGNvbXBldGVuY3lUeXBlKSB7XG4gICAgICBjb25zdCB7IHRoZW1lLCBzdWJUaGVtZSB9ID0gdGhpcy5wYXJzZVRoZW1lQW5kU3ViVGhlbWUobWlzc2luZ0NvbXBldGVuY3kpO1xuXG4gICAgICBkaWFsb2dEYXRhLnByZWZpbGxDb21wZXRlbmN5ID0ge1xuICAgICAgICB0eXBlOiBjb21wZXRlbmN5VHlwZSxcbiAgICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgICBzdWJUaGVtZTogc3ViVGhlbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRDb3Vyc2VDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIGFkZGVkIHN1Y2Nlc3NmdWxseSEgUmVmcmVzaGluZyBkYXRhLi4uJyk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB1c2VyIGNvdXJzZXMgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgY291cnNlXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggZ2FwIGFuYWx5c2lzIHdpdGggdGhlIGxhdGVzdCBkYXRhXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2FwIGFuYWx5c2lzIHJlZnJlc2hlZCBhZnRlciBjb3Vyc2UgYWRkaXRpb24nKTtcbiAgICAgICAgfSwgNTAwKTsgLy8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIGRhdGEgaXMgbG9hZGVkXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZSh0aGVtZUl0ZW0pIHtcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSB0aGVtZUl0ZW07XG4gICAgY29uc3QgeyB0aGVtZSwgc3ViVGhlbWUgfSA9IHRoaXMucGFyc2VUaGVtZUFuZFN1YlRoZW1lKHRoZW1lSXRlbSB8fCAnJyk7XG4gICAgbGV0IHRoZW1lTmFtZSA9IHRoZW1lO1xuICAgIGxldCBzdWJUaGVtZU5hbWUgPSBzdWJUaGVtZTtcblxuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJpbmcgYnkgdGhlbWU6JywgdGhlbWVOYW1lLCAnc3ViVGhlbWU6Jywgc3ViVGhlbWVOYW1lLCAnVGFiIGluZGV4OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCk7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29tcGV0ZW5jeSB0eXBlIGJhc2VkIG9uIHRoZSBhY3RpdmUgdGFiXG4gICAgbGV0IGNvbXBldGVuY3lUeXBlID0gJyc7XG4gICAgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMSkge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnYmVoYXZpb3JhbCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDIpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ2Z1bmN0aW9uYWwnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAzKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdkb21haW4nO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgYXZhaWxhYmxlIGNvdXJzZXMgdXNpbmcgdGhlIGhlbHBlciBtZXRob2RcbiAgICBjb25zdCBhbGxBdmFpbGFibGVDb3Vyc2VzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG4gICAgY29uc29sZS5sb2coJ1RvdGFsIGNvdXJzZXMgdG8gZmlsdGVyIGZyb206JywgYWxsQXZhaWxhYmxlQ291cnNlcy5sZW5ndGgpO1xuXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IGFsbEF2YWlsYWJsZUNvdXJzZXMuZmlsdGVyKGNvdXJzZSA9PiB7XG4gICAgICBpZiAoIWNvdXJzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICAgIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wZXRlbmNpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEZpbHRlciBieSBjb21wZXRlbmN5IHR5cGUgYW5kIHRoZW1lL3N1YnRoZW1lXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoY29tcCA9PiB7XG4gICAgICAgIGlmICghY29tcCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIENoZWNrIGNvbXBldGVuY3kgdHlwZSBtYXRjaGVzIGN1cnJlbnQgdGFiXG4gICAgICAgIGxldCBjb21wVHlwZSA9IGNvbXA/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGNvbXBUeXBlID09PSAnYmVoYXZpb3VyYWwnKSBjb21wVHlwZSA9ICdiZWhhdmlvcmFsJzsgLy8gTm9ybWFsaXplIHNwZWxsaW5nXG5cbiAgICAgICAgaWYgKGNvbXBUeXBlICE9PSBjb21wZXRlbmN5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIENoZWNrIGNyb3NzLW1hdGNoaW5nIGxpa2UgZ2FwIGFuYWx5c2lzOiB0aGVtZSB2cyBzdWJ0aGVtZSBhbmQgc3VidGhlbWUgdnMgdGhlbWVcbiAgICAgICAgY29uc3QgY29tcFRoZW1lID0gY29tcD8uY29tcGV0ZW5jeVRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKT8udHJpbSgpO1xuICAgICAgICBjb25zdCBjb21wU3ViVGhlbWUgPSBjb21wPy5jb21wZXRlbmN5U3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaFRoZW1lID0gdGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBzZWFyY2hTdWJUaGVtZSA9IHN1YlRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAvLyBFbmhhbmNlZCBjcm9zcy1tYXRjaGluZyBsb2dpYyBsaWtlIGdhcCBhbmFseXNpczpcbiAgICAgICAgLy8gMS4gU2VsZWN0ZWQgVGhlbWUgdnMgQ291cnNlIFRoZW1lXG4gICAgICAgIC8vIDIuIFNlbGVjdGVkIFN1YiBUaGVtZSB2cyBDb3Vyc2UgU3ViIFRoZW1lICBcbiAgICAgICAgLy8gMy4gU2VsZWN0ZWQgVGhlbWUgdnMgQ291cnNlIFN1YiBUaGVtZVxuICAgICAgICAvLyA0LiBTZWxlY3RlZCBTdWIgVGhlbWUgdnMgQ291cnNlIFRoZW1lXG4gICAgICAgIGNvbnN0IHRoZW1lVG9UaGVtZU1hdGNoID0gc2VhcmNoVGhlbWUgJiYgY29tcFRoZW1lID09PSBzZWFyY2hUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2ggPSBzZWFyY2hTdWJUaGVtZSAmJiBjb21wU3ViVGhlbWUgPT09IHNlYXJjaFN1YlRoZW1lO1xuICAgICAgICBjb25zdCB0aGVtZVRvU3ViVGhlbWVNYXRjaCA9IHNlYXJjaFRoZW1lICYmIGNvbXBTdWJUaGVtZSA9PT0gc2VhcmNoVGhlbWU7XG4gICAgICAgIGNvbnN0IHN1YlRoZW1lVG9UaGVtZU1hdGNoID0gc2VhcmNoU3ViVGhlbWUgJiYgY29tcFRoZW1lID09PSBzZWFyY2hTdWJUaGVtZTtcblxuICAgICAgICBjb25zdCBpc01hdGNoID0gdGhlbWVUb1RoZW1lTWF0Y2ggfHwgc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2ggfHwgdGhlbWVUb1N1YlRoZW1lTWF0Y2ggfHwgc3ViVGhlbWVUb1RoZW1lTWF0Y2g7XG5cbiAgICAgICAgLy8gTG9nIG1hdGNoZXMgZm9yIGRlYnVnZ2luZyAoc2ltaWxhciB0byBnYXAgYW5hbHlzaXMpXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgbGV0IG1hdGNoVHlwZSA9ICcnO1xuICAgICAgICAgIGlmICh0aGVtZVRvVGhlbWVNYXRjaCkgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVRoZW1lJztcbiAgICAgICAgICBlbHNlIGlmIChzdWJUaGVtZVRvU3ViVGhlbWVNYXRjaCkgbWF0Y2hUeXBlID0gJ1N1YlRoZW1lLXRvLVN1YlRoZW1lJztcbiAgICAgICAgICBlbHNlIGlmICh0aGVtZVRvU3ViVGhlbWVNYXRjaCkgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVN1YlRoZW1lJztcbiAgICAgICAgICBlbHNlIGlmIChzdWJUaGVtZVRvVGhlbWVNYXRjaCkgbWF0Y2hUeXBlID0gJ1N1YlRoZW1lLXRvLVRoZW1lJztcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgRklMVEVSIE1BVENIIEZPVU5EIFske21hdGNoVHlwZX1dOmAsIHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiB7IHRoZW1lOiBzZWFyY2hUaGVtZSwgc3ViVGhlbWU6IHNlYXJjaFN1YlRoZW1lIH0sXG4gICAgICAgICAgICBjb3Vyc2U6IHsgdHlwZTogY29tcFR5cGUsIHRoZW1lOiBjb21wVGhlbWUsIHN1YlRoZW1lOiBjb21wU3ViVGhlbWUgfSxcbiAgICAgICAgICAgIG1hdGNoVHlwZTogbWF0Y2hUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBpZiBhbnkgb2YgdGhlIGNyb3NzLW1hdGNoaW5nIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgICAgICByZXR1cm4gaXNNYXRjaDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ0ZpbHRlcmVkIGNvdXJzZXMgZm9yIHRoZW1lOicsIHRoZW1lTmFtZSwgJ0NvdW50OicsIHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoKTtcbiAgICBjb25zb2xlLmxvZygnRmlsdGVyZWQgY291cnNlczonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzLm1hcChjID0+IGMubmFtZSB8fCBjLmNvdXJzZSkpO1xuICB9XG5cbiAgY2xlYXJUaGVtZUZpbHRlcigpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSAnJztcbiAgICAvLyBSZXNldCB0byBjYXRlZ29yeSBmaWx0ZXJlZCBjb3Vyc2VzIGJ5IGNhbGxpbmcgdGhlIHRhYiBjaGFuZ2UgbWV0aG9kXG4gICAgdGhpcy5vbklubmVyVGFiQ2hhbmdlKHtcbiAgICAgIGluZGV4OiB0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXgsXG4gICAgICB0YWI6IHsgdGV4dExhYmVsOiB0aGlzLmlubmVyVGFiQWN0aXZlVGV4dCB9XG4gICAgfSBhcyBhbnkpO1xuICAgIGNvbnNvbGUubG9nKCdUaGVtZSBmaWx0ZXIgY2xlYXJlZCwgc2hvd2luZyBhbGwgY291cnNlcyBmb3IgY2F0ZWdvcnk6JywgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQpO1xuICB9XG5cbiAgaXNUaGVtZVNlbGVjdGVkKHRoZW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyID09PSB0aGVtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY291cnNlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRoZW1lIGZpbHRlciB3aXRoIHByZWZpbGxlZCBjb21wZXRlbmN5IGRhdGFcbiAgICovXG4gIGFkZENvdXJzZUZvclNlbGVjdGVkVGhlbWUoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gdGhlbWUgc2VsZWN0ZWQgZm9yIGFkZGluZyBjb3Vyc2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRoZW1lLCBzdWJUaGVtZSB9ID0gdGhpcy5wYXJzZVRoZW1lQW5kU3ViVGhlbWUodGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyKTtcblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb21wZXRlbmN5IHR5cGUgYmFzZWQgb24gdGhlIGFjdGl2ZSB0YWJcbiAgICAvLyBNYXAgdGhlIHRhYiBsYWJlbHMgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSBBZGRDb3Vyc2VDb21wb25lbnRcbiAgICBsZXQgY29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAxKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdCZWhhdmlvcmFsJzsgLy8gVGFiIGxhYmVsIGlzIFwiYmVoYXZpb3VyYWxcIlxuICAgIH0gZWxzZSBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAyKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdGdW5jdGlvbmFsJzsgLy8gVGFiIGxhYmVsIGlzIFwiZnVuY3Rpb25hbFwiXG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDMpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0RvbWFpbic7IC8vIFRhYiBsYWJlbCBpcyBcImRvbWFpblwiXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1RhYiBtYXBwaW5nIC0gaW5uZXJUYWJBY3RpdmVJbmRleDonLCB0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXgsXG4gICAgICAnaW5uZXJUYWJBY3RpdmVUZXh0OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVUZXh0LFxuICAgICAgJ21hcHBlZCBjb21wZXRlbmN5VHlwZTonLCBjb21wZXRlbmN5VHlwZSk7XG5cbiAgICBjb25zb2xlLmxvZygnQWRkaW5nIGNvdXJzZSBmb3IgbWlzc2luZyBjb21wZXRlbmN5OicsIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlLFxuICAgICAgdGhlbWUsXG4gICAgICBzdWJUaGVtZSxcbiAgICAgIHNlbGVjdGVkVGhlbWVGaWx0ZXI6IHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlclxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGRpYWxvZyBkYXRhIHdpdGggcHJlZmlsbGVkIGNvbXBldGVuY3kgaW5mb3JtYXRpb25cbiAgICBsZXQgZGlhbG9nRGF0YSA9IHsgLi4udGhpcy5wbGFuRGF0YSB9O1xuICAgIGRpYWxvZ0RhdGEucHJlZmlsbENvbXBldGVuY3kgPSB7XG4gICAgICB0eXBlOiBjb21wZXRlbmN5VHlwZSxcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHN1YlRoZW1lOiBzdWJUaGVtZSB8fCAnJyAvLyBJbmNsdWRlIHN1Yi10aGVtZSBpZiBhdmFpbGFibGVcbiAgICB9O1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRDb3Vyc2VDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JyxcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NvdXJzZSBhZGRlZCBzdWNjZXNzZnVsbHkgZm9yIGNvbXBldGVuY3khIFJlZnJlc2hpbmcgZGF0YS4uLicpO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggdXNlciBjb3Vyc2VzIHRvIGluY2x1ZGUgdGhlIG5ld2x5IGFkZGVkIGNvdXJzZVxuICAgICAgICB0aGlzLmdldFVzZXJDb3Vyc2UoKTtcblxuICAgICAgICAvLyBVcGRhdGUgZ2FwIGFuYWx5c2lzIGFmdGVyIGNvdXJzZSBhZGRpdGlvblxuICAgICAgICB0aGlzLnVwZGF0ZUdhcEFuYWx5c2lzQWZ0ZXJDb3Vyc2VzVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXREdXJhdGlvbih0aW1lOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRTZXJ2aWNlLmNvbnZlcnQodGltZSk7XG4gIH1cblxuXG4gIGdldEJlaGF2aW91cmFsTWF0Y2hlZCgpIHtcbiAgICB0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZCA9IFtdXG4gICAgY29uc29sZS5sb2coJ3RoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzJywgdGhpcy5wbGFuRGF0YSlcbiAgICBjb25zb2xlLmxvZygndGhpcy5iZWhhdmlvdXJhbE5vdE1hdGNoZWQnLCB0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZClcbiAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBldGVuY3lLZXkgPSB0aGlzLmdldFRoZW1lU3ViVGhlbWVLZXkoaXRlbT8udGhlbWUsIGl0ZW0/LnN1Yl90aGVtZSk7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtPy50eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgdGhpcy5iZWhhdmlvdXJhbE5vdE1hdGNoZWQuaW5kZXhPZihjb21wZXRlbmN5S2V5KSA8IDApIHtcbiAgICAgICAgdGhpcy5iZWhhdmlvdXJhbE1hdGNoZWQucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zb2xlLmxvZygndGhpcy5iZWhhdmlvdXJhbE1hdGNoZWQtLScsIHRoaXMuYmVoYXZpb3VyYWxNYXRjaGVkKVxuICB9XG5cbiAgZ2V0RnVuY3Rpb25hbE1hdGNoZWQoKSB7XG4gICAgdGhpcy5mdW5jdGlvbmFsTWF0Y2hlZCA9IFtdXG4gICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wZXRlbmN5S2V5ID0gdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KGl0ZW0/LnRoZW1lLCBpdGVtPy5zdWJfdGhlbWUpO1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8udHlwZSA9PT0gJ0Z1bmN0aW9uYWwnICYmIHRoaXMuZnVuY3Rpb25hbE5vdE1hdGNoZWQuaW5kZXhPZihjb21wZXRlbmN5S2V5KSA8IDApIHtcbiAgICAgICAgdGhpcy5mdW5jdGlvbmFsTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbmFsTWF0Y2hlZFxuICB9XG5cbiAgZ2V0RG9tYWluTWF0Y2hlZCgpIHtcbiAgICB0aGlzLmRvbWFpbk1hdGNoZWQgPSBbXVxuICAgIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY29tcGV0ZW5jeUtleSA9IHRoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKTtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0/LnR5cGUgPT09ICdEb21haW4nICYmIHRoaXMuZG9tYWluTm90TWF0Y2hlZC5pbmRleE9mKGNvbXBldGVuY3lLZXkpIDwgMCkge1xuICAgICAgICB0aGlzLmRvbWFpbk1hdGNoZWQucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc29sZS5sb2coJ3RoaXMuZG9tYWluTWF0Y2hlZC0tJywgdGhpcy5kb21haW5NYXRjaGVkKVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUaGVtZVdpdGhTdWJUaGVtZSh0aGVtZTogYW55LCBzdWJUaGVtZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkVGhlbWUgPSAodGhlbWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTdWJUaGVtZSA9IChzdWJUaGVtZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG5cbiAgICBpZiAobm9ybWFsaXplZFRoZW1lICYmIG5vcm1hbGl6ZWRTdWJUaGVtZSkge1xuICAgICAgcmV0dXJuIGAke25vcm1hbGl6ZWRUaGVtZX0gLSAke25vcm1hbGl6ZWRTdWJUaGVtZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkVGhlbWUgfHwgbm9ybWFsaXplZFN1YlRoZW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUaGVtZVN1YlRoZW1lS2V5KHRoZW1lOiBhbnksIHN1YlRoZW1lOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdFRoZW1lV2l0aFN1YlRoZW1lKHRoZW1lLCBzdWJUaGVtZSkudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVGhlbWVBbmRTdWJUaGVtZSh2YWx1ZTogc3RyaW5nKTogeyB0aGVtZTogc3RyaW5nOyBzdWJUaGVtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHRleHQgPSAodmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgcmV0dXJuIHsgdGhlbWU6ICcnLCBzdWJUaGVtZTogJycgfTtcbiAgICB9XG5cbiAgICBpZiAodGV4dC5pbmNsdWRlcygnIC0gJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGV4dC5zcGxpdCgnIC0gJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aGVtZTogKHBhcnRzLnNoaWZ0KCkgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgc3ViVGhlbWU6IHBhcnRzLmpvaW4oJyAtICcpLnRyaW0oKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGV4dC5pbmNsdWRlcygnLScpKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoJy0nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVtZTogcGFydHNbMF0udHJpbSgpLFxuICAgICAgICAgIHN1YlRoZW1lOiBwYXJ0c1sxXS50cmltKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB0aGVtZTogdGV4dCwgc3ViVGhlbWU6ICcnIH07XG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICB0aGlzLmlzUERGRG93bmxvYWQgPSB0cnVlXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIFdhaXQgZm9yIGltYWdlcyB0byBsb2FkXG4gICAgY29uc3QgaW1hZ2VzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oaW1hZ2VzKS5tYXAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGltZy5jb21wbGV0ZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaW1nLm9ubG9hZCA9IHJlc29sdmUpO1xuICAgIH0pO1xuXG4gICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgbWFyZ2luOiAwLjIwLFxuICAgICAgICBmaWxlbmFtZTogJ0dhcCBBbmFseXNpcy5wZGYnLFxuICAgICAgICBpbWFnZTogeyB0eXBlOiAnanBlZycsIHF1YWxpdHk6IDAuOTggfSxcbiAgICAgICAgaHRtbDJjYW52YXM6IHtcbiAgICAgICAgICBzY2FsZTogMixcbiAgICAgICAgICB1c2VDT1JTOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbFk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIGpzUERGOiB7XG4gICAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgICBmb3JtYXQ6ICdhNCcsXG4gICAgICAgICAgb3JpZW50YXRpb246ICdwb3J0cmFpdCdcbiAgICAgICAgfSxcbiAgICAgICAgcGFnZWJyZWFrOiB7XG4gICAgICAgICAgbW9kZTogWydjc3MnLCAnbGVnYWN5J10sXG4gICAgICAgICAgYmVmb3JlOiAnLnBhZ2UtYnJlYWsnLFxuICAgICAgICAgIGF2b2lkOiBbJy5uby1icmVhayddXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGh0bWwycGRmKCkuZnJvbShlbGVtZW50KS5zZXQob3B0aW9ucykuc2F2ZSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1BERkRvd25sb2FkID0gZmFsc2VcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LCAzMDAwKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcmVkaXJlY3RUb1RvYyhpdGVtKSB7XG4gICAgaWYgKGl0ZW0/LnB1YmxpY19saW5rKSB7XG4gICAgICB3aW5kb3cub3BlbihpdGVtPy5wdWJsaWNfbGluaywgJ19ibGFuaycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB1cmwgPSBgaHR0cHM6Ly9wb3J0YWwuaWdvdGthcm1heW9naS5nb3YuaW4vYXBwL3RvYy8ke2l0ZW0/LmlkZW50aWZpZXJ9L292ZXJ2aWV3P2BcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgaW5pdGlhbCBkYXRhIGxvYWRcbiAgICovXG4gIGluaXRpYWxpemVHYXBBbmFseXNpc1N0YXRzKCkge1xuICAgIC8vIFNldCBhIHNtYWxsIHRpbWVvdXQgdG8gZW5zdXJlIGFsbCBhc3luYyBvcGVyYXRpb25zIGNvbXBsZXRlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJkQ291cnNlcyAmJiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZ2FwIGFuYWx5c2lzIHN0YXRzIGFmdGVyIGNvdXJzZXMgYXJlIHVwZGF0ZWQgKGxpa2Ugc3VnZ2VzdGVkIGNvdXJzZXMgYWRkZWQpXG4gICAqL1xuICB1cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpIHtcbiAgICAvLyBEb24ndCBtb2RpZnkgb3JpZ2luYWxEYXRhIC0gaXQgc2hvdWxkIHJlbWFpbiBhcyBBSSByZWNvbW1lbmRlZCBjb3Vyc2VzIG9ubHlcbiAgICAvLyBUaGUgZ2FwIGFuYWx5c2lzIGFscmVhZHkgcHJvcGVybHkgaW5jbHVkZXMgYWxsIGNvdXJzZSB0eXBlc1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgZ2FwIGFuYWx5c2lzIHN0YXRzXG4gICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZSBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGJ5IGRlbGV0aW5nIGV4aXN0aW5nIHJlY29tbWVuZGF0aW9ucyBhbmQgZ2VuZXJhdGluZyBuZXcgb25lc1xuICAgKi9cbiAgYXN5bmMgcmVnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucygpIHtcbiAgICBpZiAodGhpcy5pc1JlZ2VuZXJhdGluZykge1xuICAgICAgcmV0dXJuOyAvLyBQcmV2ZW50IG11bHRpcGxlIHNpbXVsdGFuZW91cyByZWdlbmVyYXRpb25zXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpO1xuXG4gICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb24uLi4nKTtcblxuICAgICAgLy8gU2V0IHJlZ2VuZXJhdGlvbiBwcm9ncmVzcyBzdGF0ZVxuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTsgLy8gSGlkZSBtYWluIGNvbnRlbnQgZHVyaW5nIHJlZ2VuZXJhdGlvblxuXG4gICAgICAvLyBTdGVwIDE6IERlbGV0ZSBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zXG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucygpO1xuXG4gICAgICAvLyBTdGVwIDI6IEdlbmVyYXRlIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlTmV3Q291cnNlUmVjb21tZW5kYXRpb25zKCk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmVmcmVzaCB0aGUgY3VycmVudCBkYXRhXG4gICAgICB0aGlzLnJlZnJlc2hDb21wb25lbnQoKTtcblxuICAgICAgY29uc29sZS5sb2coJ0NvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBTaG93IHN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIHJlZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnLCAnQ2xvc2UnLCB7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ3N1Y2Nlc3Mtc25hY2tiYXInXVxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb246JywgZXJyb3IpO1xuXG4gICAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2VcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIHJlZ2VuZXJhdGUgY291cnNlIHJlY29tbWVuZGF0aW9ucy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnQ2xvc2UnLCB7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2Vycm9yLXNuYWNrYmFyJ11cbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlOyAvLyBFbnN1cmUgbWFpbiBjb250ZW50IGlzIHNob3duIGFmdGVyIHJlZ2VuZXJhdGlvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2cgZm9yIHJlZ2VuZXJhdGUgYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHNob3dDb25maXJtYXRpb25EaWFsb2coKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgYSBjdXN0b20gY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWdlbmVyYXRlQ29uZmlybWF0aW9uRGlhbG9nLCB7XG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxuICAgICAgICBwYW5lbENsYXNzOiAncmVnZW5lcmF0ZS1jb25maXJtYXRpb24tZGlhbG9nJyxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0ID09PSB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGZvciB0aGUgY3VycmVudCByb2xlIG1hcHBpbmdcbiAgICovXG4gIHByaXZhdGUgZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJvbGVNYXBJZCA9IHRoaXMucGxhbkRhdGE/LmlkO1xuXG4gICAgICBpZiAoIXJvbGVNYXBJZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdSb2xlIG1hcHBpbmcgSUQgbm90IGZvdW5kJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKCdEZWxldGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGZvciByb2xlIG1hcHBpbmc6Jywgcm9sZU1hcElkKTtcblxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlTWFwSWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnM6JywgZXJyb3IpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGR1cmluZyByZWdlbmVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVOZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGluZyBuZXcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicpO1xuICAgIHJldHVybiB0aGlzLmdldFJlY29tbWVuZGVkQ291cnNlRm9yUmVnZW5lcmF0aW9uKHRoaXMucGxhbkRhdGEuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VkIGNvdXJzZSBnZW5lcmF0aW9uIHNwZWNpZmljYWxseSBmb3IgcmVnZW5lcmF0aW9uIHdpdGggcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRSZWNvbW1lbmRlZENvdXJzZUZvclJlZ2VuZXJhdGlvbihyb2xlX21hcHBpbmdfaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNpbXVsYXRpb24gZm9yIHJlZ2VuZXJhdGlvblxuICAgICAgdGhpcy5zdGFydFJlZ2VuZXJhdGl2ZVByb2dyZXNzaXZlTG9hZGluZygpO1xuXG4gICAgICAvLyBNYWtlIHRoZSBhY3R1YWwgQVBJIGNhbGxcbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICAvLyAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gICAgIC8vIFN0b3AgcHJvZ3Jlc3NpdmUgbG9hZGluZyBhbmQgc2hvdyBjb21wbGV0aW9uXG4gICAgICAvLyAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlOyAvLyBUaGlzIHdpbGwgc3RvcCB0aGUgaW50ZXJ2YWxcbiAgICAgIC8vICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyByZWdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgLy8gICAgIC8vIENsZWFyIHRoZSBsb2FkaW5nIHN0YXRlIGFmdGVyIHNob3dpbmcgY29tcGxldGlvblxuICAgICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAvLyAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIC8vICAgICB9LCAyMDAwKTtcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgLy8gICAgIC8vIFN0b3AgcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICAgICAgLy8gICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICAgIC8vICAgICAvLyBIYW5kbGUgc3BlY2lmaWMgZXJyb3IgY2FzZXNcbiAgICAgIC8vICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDkgfHwgZXJyb3IuZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIC8vICAgICAgIC8vIENvdXJzZSByZWNvbW1lbmRhdGlvbnMgYWxyZWFkeSBleGlzdCAtIHRoaXMgaXMgbm9ybWFsXG4gICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIHJlY29tbWVuZGF0aW9ucyBhbHJlYWR5IGV4aXN0LCBsb2FkaW5nIGV4aXN0aW5nIGRhdGEuLi4nKTtcblxuICAgICAgLy8gICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRpbmcgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgIC8vICAgICAgIC8vIFRyeSB0byBnZXQgZXhpc3RpbmcgZGF0YVxuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIC8vICAgICAgICAgbmV4dDogKGV4aXN0aW5nUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2Vzc2Z1bGx5IGxvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zJyk7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgICAgICAgIHJlc29sdmUoZXhpc3RpbmdSZXNwb25zZSk7XG4gICAgICAvLyAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAvLyAgICAgICAgIH0sXG4gICAgICAvLyAgICAgICAgIGVycm9yOiAobG9hZEVycm9yKSA9PiB7XG4gICAgICAvLyAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uczonLCBsb2FkRXJyb3IpO1xuICAgICAgLy8gICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgICAgICByZWplY3QobG9hZEVycm9yKTtcbiAgICAgIC8vICAgICAgICAgfVxuICAgICAgLy8gICAgICAgfSk7XG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb24gcmVnZW5lcmF0aW9uOicsIGVycm9yKTtcbiAgICAgIC8vICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0dlbmVyYXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgIGludGVydmFsKDUwMDApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUGFzcyBlcnJvciB0aHJvdWdoIG9ic2VydmFibGUgc28gcG9sbGluZyBsb2dpYyBjYW4gaW5zcGVjdCBpdFxuICAgICAgICAgICAgICAgIHJldHVybiBvZih7IGVycm9yIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG5cbiAgICAgICAgICB0YXAocmVzID0+IGNvbnNvbGUubG9nKFwiUG9sbGluZyByZXN1bHQ6XCIsIHJlcykpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICog4qyH77iPIFNUT1AgUE9MTElORyBvbmx5IHdoZW46XG4gICAgICAgICAgICogLSBTVUNDRVNTIOKGkiByZXMuc3RhdHVzID09PSBDT01QTEVURURcbiAgICAgICAgICAgKiAtIEVSUk9SIOKGkiBjb25mbGljdCAvIGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGFrZVdoaWxlKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdDT01QTEVURUQnKSByZXR1cm4gZmFsc2U7ICAgICAgIC8vIFN0b3BcbiAgICAgICAgICAgIGlmIChyZXM/LmVycm9yPy5zdGF0dXMgPT09IDQwOSkgcmV0dXJuIGZhbHNlOyAgICAgICAgLy8gU3RvcFxuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3I/LmVycm9yPy5kZXRhaWw/LmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSByZXR1cm4gZmFsc2U7IC8vIFN0b3BcbiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHBvbGxpbmdcbiAgICAgICAgICB9LCB0cnVlKSAvLyBpbmNsdWRlIGZpbmFsIGVtaXNzaW9uXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBTVUNDRVNTIENBU0UgKHN0YXR1cyBDT01QTEVURUQpXG4gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgcmVnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgfSwgMjAwMCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBFUlJPUiBDQVNFICg0MDkgLyBhbHJlYWR5IGV4aXN0cylcbiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIGlmIChyZXM/LmVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzLmVycm9yO1xuXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOSB8fCBlcnJvcj8uZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdMb2FkaW5nIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChleGlzdGluZ0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdMb2FkZWQgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucyBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShleGlzdGluZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbG9hZEVycm9yID0+IHJlamVjdChsb2FkRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvKiogQW55IG90aGVyIGVycm9yIOKGkiBzdG9wICYgcmVqZWN0ICovXG4gICAgICAgICAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgKiAgU1RJTEwgUFJPQ0VTU0lORyAoa2VlcCBwb2xsaW5nKVxuICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gTWF0aC5taW4odGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgKyAxMCwgOTUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ1N0aWxsIHByb2Nlc3NpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiBlcnIgPT4gcmVqZWN0KGVycilcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBtZXRob2RzIGZvciByZWdlbmVyYXRpb25cbiAgc3RhcnRSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZUxvYWRpbmcoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzWzBdO1xuICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnNpbXVsYXRlUmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVTdGFnZXMoKTtcbiAgfVxuXG4gIHNpbXVsYXRlUmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVTdGFnZXMoKSB7XG4gICAgbGV0IGN1cnJlbnRTdGFnZUluZGV4ID0gMDtcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gNjAwMDA7IC8vIDYwIHNlY29uZHMgZXN0aW1hdGVkIGR1cmF0aW9uXG4gICAgY29uc3Qgc3RhZ2VJbnRlcnZhbCA9IHRvdGFsRHVyYXRpb24gLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIC8vIFN0b3AgaWYgcmVnZW5lcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICBpZiAoIXRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHRoaXMuc3RhZ2VTdGFydFRpbWU7XG4gICAgICBjb25zdCBjdXJyZW50U3RhZ2VQcm9ncmVzcyA9IChlbGFwc2VkICUgc3RhZ2VJbnRlcnZhbCkgLyBzdGFnZUludGVydmFsO1xuICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IE1hdGgubWluKE1hdGguZmxvb3IoZWxhcHNlZCAvIHN0YWdlSW50ZXJ2YWwpLCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGFnZSBpZiBuZWVkZWRcbiAgICAgIGlmIChzdGFnZUluZGV4ICE9PSBjdXJyZW50U3RhZ2VJbmRleCAmJiBzdGFnZUluZGV4IDwgdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkge1xuICAgICAgICBjdXJyZW50U3RhZ2VJbmRleCA9IHN0YWdlSW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9IHRoaXMucHJvY2Vzc2luZ1N0YWdlc1tzdGFnZUluZGV4XTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG92ZXJhbGwgcHJvZ3Jlc3MgKGVhY2ggc3RhZ2UgaXMgd29ydGggfjE2LjY3JSlcbiAgICAgIGNvbnN0IGJhc2VQcm9ncmVzcyA9IChzdGFnZUluZGV4IC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICBjb25zdCBzdGFnZVByb2dyZXNzID0gKGN1cnJlbnRTdGFnZVByb2dyZXNzIC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IE1hdGgubWluKE1hdGgucm91bmQoYmFzZVByb2dyZXNzICsgc3RhZ2VQcm9ncmVzcyksIDk1KTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjb21wb25lbnQgZGF0YSBhZnRlciByZWdlbmVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaENvbXBvbmVudCgpIHtcbiAgICBjb25zb2xlLmxvZygnUmVmcmVzaGluZyBjb21wb25lbnQgZGF0YS4uLicpO1xuXG4gICAgLy8gUmVzZXQgYWxsIGZpbHRlcnMgYW5kIHNlbGVjdGlvbnNcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSAnJztcbiAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gW107XG4gICAgdGhpcy5vcmlnaW5hbEZpbHRlcmVkQ291cnNlcyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9IFtdO1xuICAgIHRoaXMudXNlckFkZGVkQ291cnNlcyA9IFtdO1xuICAgIHRoaXMubGFzdEVucmljaGVkSWRlbnRpZmllcnNLZXkgPSAnJztcblxuICAgIC8vIFJlc2V0IHRhYiBzdGF0ZXNcbiAgICB0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPSAwO1xuICAgIHRoaXMub3V0ZXJUYWJBY3RpdmVJbmRleCA9IDA7XG5cbiAgICAvLyBDYWxsIHRoZSBkYXRhIGxvYWRpbmcgbWV0aG9kcyBkaXJlY3RseSB0byBhdm9pZCByZXNldHRpbmcgZGF0YUxvYWRlZFxuICAgIHRoaXMubG9hZENvbXBvbmVudERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbXBvbmVudCBkYXRhIChzZXBhcmF0ZWQgZnJvbSBuZ09uSW5pdCBmb3IgcmV1c2UpXG4gICAqL1xuICBwcml2YXRlIGxvYWRDb21wb25lbnREYXRhKCkge1xuICAgIHRoaXMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VXaXRoUHJvZ3Jlc3ModGhpcy5wbGFuRGF0YS5pZCkudGhlbigocmVzKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSByZXMuaWRcbiAgICAgIGxldCBhbGxDb3VyZXMgPSBbXVxuICAgICAgaWYgKHJlcyAmJiByZXMuZmlsdGVyZWRfY291cnNlcyAmJiByZXMuZmlsdGVyZWRfY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzPy5maWx0ZXJlZF9jb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbT8ucmVsZXZhbmN5ID49IDc1KSB7XG4gICAgICAgICAgICBhbGxDb3VyZXMucHVzaChpdGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSB0aGlzLnNvcnRDb3Vyc2VzQnlSZWxldmFuY3koYWxsQ291cmVzKVxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5zb3J0Q291cnNlc0J5UmVsZXZhbmN5KGFsbENvdXJlcylcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgdGhpcy5nZXRDb3Vyc2VzKClcbiAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgY291cnNlcyBhcmUgbG9hZGVkXG4gICAgICB0aGlzLmluaXRpYWxpemVHYXBBbmFseXNpc1N0YXRzKClcbiAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpXG5cbiAgICAgIC8vIE1hcmsgZGF0YSBhcyBsb2FkZWQgYWZ0ZXIgYWxsIGluaXRpYWwgb3BlcmF0aW9uc1xuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVjb21tZW5kZWQgY291cnNlczonLCBlcnJvcik7XG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1VuYXV0aG9yaXplZCBhY2Nlc3MgLSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byBsb2dpbicpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkge1xuICAgICAgICAvLyBEb24ndCBsb2cgZXJyb3IgZm9yIDQwOSAoYWxyZWFkeSBleGlzdHMpIGFzIGl0J3MgaGFuZGxlZCBpbiB0aGUgbWV0aG9kXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMnKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcmsgZGF0YSBhcyBsb2FkZWQgZXZlbiBpZiB0aGVyZSdzIGFuIGVycm9yIHRvIHNob3cgdGhlIGRpYWxvZyBjb250ZW50XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBtZXRob2RzIGZvciBjb3Vyc2UgZ2VuZXJhdGlvblxuICBzdGFydFByb2dyZXNzaXZlTG9hZGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuc2ltdWxhdGVQcm9ncmVzc2l2ZVN0YWdlcygpO1xuICB9XG5cbiAgc2ltdWxhdGVQcm9ncmVzc2l2ZVN0YWdlcygpIHtcbiAgICBsZXQgY3VycmVudFN0YWdlSW5kZXggPSAwO1xuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSA2MDAwMDsgLy8gNjAgc2Vjb25kcyBlc3RpbWF0ZWQgZHVyYXRpb25cbiAgICBjb25zdCBzdGFnZUludGVydmFsID0gdG90YWxEdXJhdGlvbiAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGg7XG5cbiAgICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxhcHNlZCA9IERhdGUubm93KCkgLSB0aGlzLnN0YWdlU3RhcnRUaW1lO1xuICAgICAgY29uc3QgY3VycmVudFN0YWdlUHJvZ3Jlc3MgPSAoZWxhcHNlZCAlIHN0YWdlSW50ZXJ2YWwpIC8gc3RhZ2VJbnRlcnZhbDtcbiAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSBNYXRoLm1pbihNYXRoLmZsb29yKGVsYXBzZWQgLyBzdGFnZUludGVydmFsKSwgdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAvLyBVcGRhdGUgc3RhZ2UgaWYgbmVlZGVkXG4gICAgICBpZiAoc3RhZ2VJbmRleCAhPT0gY3VycmVudFN0YWdlSW5kZXggJiYgc3RhZ2VJbmRleCA8IHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpIHtcbiAgICAgICAgY3VycmVudFN0YWdlSW5kZXggPSBzdGFnZUluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbc3RhZ2VJbmRleF07XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBvdmVyYWxsIHByb2dyZXNzIChlYWNoIHN0YWdlIGlzIHdvcnRoIH4xNi42NyUpXG4gICAgICBjb25zdCBiYXNlUHJvZ3Jlc3MgPSAoc3RhZ2VJbmRleCAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpICogMTAwO1xuICAgICAgY29uc3Qgc3RhZ2VQcm9ncmVzcyA9IChjdXJyZW50U3RhZ2VQcm9ncmVzcyAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpICogMTAwO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSBNYXRoLm1pbihNYXRoLnJvdW5kKGJhc2VQcm9ncmVzcyArIHN0YWdlUHJvZ3Jlc3MpLCA5NSk7XG5cbiAgICAgIC8vIENsZWFyIGludGVydmFsIHdoZW4gbG9hZGluZyBzdG9wc1xuICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8vIEVuaGFuY2VkIGNvdXJzZSBnZW5lcmF0aW9uIHdpdGggcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICBnZXRSZWNvbW1lbmRlZENvdXJzZVdpdGhQcm9ncmVzcyhyb2xlX21hcHBpbmdfaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdHZW5lcmF0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAzMDtcblxuICAgICAgdGhpcy5zdGFydFByb2dyZXNzaXZlTG9hZGluZygpO1xuXG4gICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICBjb25jYXQoXG4gICAgICAgIG9mKG51bGwpLCAgICAgICAgICAvLyBpbW1lZGlhdGUgY2FsbFxuICAgICAgICBpbnRlcnZhbCg1MDAwKSAgICAgLy8gcG9sbCBldmVyeSA1IHNlY1xuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIHRhcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RBcGlSZXNwb25zZSAmJiAhdGhpcy5leGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQpIHtcbiAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNfZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ0ZpcnN0IHJlY29tbWVuZGF0aW9uIHJlc3BvbnNlOicsXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIHRha2VXaGlsZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAvLyBzdG9wIHBvbGxpbmcgaWYgZXhpc3RpbmcgcmVjb21tZW5kYXRpb25zIGZvdW5kXG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzICE9PSAnQ09NUExFVEVEJztcblxuICAgICAgICAgIH0sIHRydWUpLFxuXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcblxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgLy8gRVhJU1RJTkcgUkVDT01NRU5EQVRJT05TXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0QXBpUmVzcG9uc2U/LmlzX2V4aXN0aW5nICYmIHRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kKSB7XG5cbiAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgICAgICBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogJ2dlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zJyAgICAgICAgICAgICAgICAgLy8gaW5kZXggZm9yIFVJIHJlbW92YWxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMocm9sZV9tYXBwaW5nX2lkKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcblxuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VXaXRoUHJvZ3Jlc3Mocm9sZV9tYXBwaW5nX2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmRldGFpbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGRlbGV0ZSByZWNvbW1lbmRhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZmlyc3RBcGlSZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8vIENPTVBMRVRFRFxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcblxuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPVxuICAgICAgICAgICAgICAgICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgIH0sIDIwMDApO1xuXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICAgICAnUmVjb21tZW5kYXRpb25zIHJlYWR5IScsXG4gICAgICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdlbmVyYXRlIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuJyxcbiAgICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoe1xuICAgICAgY29tcGV0ZW5jeTogW10sXG4gICAgICByYXRpbmc6IFtdLFxuICAgICAgbGFuZ3VhZ2U6IFtdLFxuICAgICAgZHVyYXRpb246IFtdLFxuICAgICAgcHJvdmlkZXI6IFtdXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBmaWx0ZXJlZCBkcm9wZG93biBsaXN0c1xuICAgIHRoaXMuZmlsdGVyZWRDb21wZXRlbmN5ID0gWy4uLnRoaXMuY29tcGV0ZW5jaWVzVHlwZV07XG4gICAgdGhpcy5maWx0ZXJlZFJhdGluZ3MgPSBbLi4udGhpcy5yYXRpbmdzXTtcbiAgICB0aGlzLmZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgICB0aGlzLmZpbHRlcmVkRHVyYXRpb25zID0gWy4uLnRoaXMuZHVyYXRpb25zXTtcbiAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzID0gWy4uLnRoaXMucHJvdmlkZXJzXTtcblxuICAgIC8vIFJlc2V0IGNvdXJzZSBsaXN0XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IFsuLi50aGlzLmZ1bGxDb3Vyc2VMaXN0XTtcbiAgICAvLyB0aGlzLmZ1bGxDb3Vyc2VMaXN0LmZvckVhY2goKGl0ZW0pPT57XG4gICAgLy8gICBpZihpdGVtICYmIGl0ZW0ub3JnYW5pc2F0aW9uICYmIGl0ZW0ub3JnYW5pc2F0aW9uLmxlbmd0aCkge1xuICAgIC8vICAgICBpZih0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLmluZGV4T2YoaXRlbS5vcmdhbmlzYXRpb25bMF0pIDwgMCkge1xuICAgIC8vICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMucHVzaChpdGVtLm9yZ2FuaXNhdGlvblswXSlcbiAgICAvLyAgICAgfVxuXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgICB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKVxuICB9XG5cbiAgZmlsdGVyTGlzdCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21wZXRlbmN5JzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbXBldGVuY3kgPSB0aGlzLmNvbXBldGVuY2llc1R5cGUuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhdGluZyc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRSYXRpbmdzID0gdGhpcy5yYXRpbmdzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYW5ndWFnZSc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRMYW5ndWFnZXMgPSB0aGlzLmxhbmd1YWdlcy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZHVyYXRpb24nOlxuICAgICAgICB0aGlzLmZpbHRlcmVkRHVyYXRpb25zID0gdGhpcy5kdXJhdGlvbnMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Byb3ZpZGVyJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycyA9IHRoaXMucHJvdmlkZXJzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplQ29tcGV0ZW5jeSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdiA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodiA9PT0gJ2FsbCcpIHJldHVybiAnYWxsJztcbiAgICBpZiAodi5pbmNsdWRlcygnYmVoYXZpb3VyYWwnKSB8fCB2LmluY2x1ZGVzKCdiZWhhdmlvcmFsJykpIHJldHVybiAnYmVoYXZpb3JhbCc7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ2Z1bmN0aW9uYWwnKSkgcmV0dXJuICdmdW5jdGlvbmFsJztcbiAgICBpZiAodi5pbmNsdWRlcygnZG9tYWluJykpIHJldHVybiAnZG9tYWluJztcblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBjb21wZXRlbmN5ID0gW10sXG4gICAgICByYXRpbmcgPSBbXSxcbiAgICAgIGxhbmd1YWdlID0gW10sXG4gICAgICBkdXJhdGlvbiA9IFtdLFxuICAgICAgcHJvdmlkZXIgPSBbXVxuICAgIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG5cbiAgICBjb25zb2xlLmxvZygndGhpcy5mdWxsQ291cnNlTGlzdC0tJywgdGhpcy5mdWxsQ291cnNlTGlzdClcblxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZ1bGxDb3Vyc2VMaXN0LmZpbHRlcihjb3Vyc2UgPT4ge1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIENvbXBldGVuY3kgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgY291cnNlQ29tcGV0ZW5jaWVzID0gW1xuICAgICAgICAuLi4oY291cnNlLmNvbXBldGVuY2llcyB8fCBbXSksXG4gICAgICAgIC4uLihjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2IHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRDb21wZXRlbmNpZXMgPSBjb21wZXRlbmN5XG4gICAgICAgIC5tYXAoKGM6IHN0cmluZykgPT4gdGhpcy5ub3JtYWxpemVDb21wZXRlbmN5KGMpKVxuICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gJycpO1xuXG4gICAgICBjb25zdCBjb21wZXRlbmN5TWF0Y2ggPVxuICAgICAgICBzZWxlY3RlZENvbXBldGVuY2llcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgc2VsZWN0ZWRDb21wZXRlbmNpZXMuaW5jbHVkZXMoJ2FsbCcpIHx8XG4gICAgICAgIGNvdXJzZUNvbXBldGVuY2llcy5zb21lKChjOiBhbnkpID0+XG4gICAgICAgICAgc2VsZWN0ZWRDb21wZXRlbmNpZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUNvbXBldGVuY3koYy5jb21wZXRlbmN5QXJlYU5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIFJhdGluZyAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCByYXRpbmdNYXRjaCA9XG4gICAgICAgIHJhdGluZy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5tYXRjaFJhdGluZyhjb3Vyc2UsIHJhdGluZyk7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgbGFuZ3VhZ2VNYXRjaCA9XG4gICAgICAgIGxhbmd1YWdlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBsYW5ndWFnZS5zb21lKChsOiBzdHJpbmcpID0+XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlID09PSBsIHx8XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlPy5pbmNsdWRlcz8uKGwpIHx8XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlPy5bMF0/LmluY2x1ZGVzPy4obClcbiAgICAgICAgKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBEdXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBkdXJhdGlvbk1hdGNoID1cbiAgICAgICAgZHVyYXRpb24ubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHRoaXMubWF0Y2hEdXJhdGlvbihjb3Vyc2UuZHVyYXRpb24sIGR1cmF0aW9uKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBQcm92aWRlciAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBwcm92aWRlck1hdGNoID1cbiAgICAgICAgcHJvdmlkZXIubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHByb3ZpZGVyLnNvbWUoKHA6IHN0cmluZykgPT5cbiAgICAgICAgICBjb3Vyc2Uub3JnYW5pc2F0aW9uPy5pbmNsdWRlcyhwKVxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBjb21wZXRlbmN5TWF0Y2ggJiZcbiAgICAgICAgcmF0aW5nTWF0Y2ggJiZcbiAgICAgICAgbGFuZ3VhZ2VNYXRjaCAmJlxuICAgICAgICBkdXJhdGlvbk1hdGNoICYmXG4gICAgICAgIHByb3ZpZGVyTWF0Y2hcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5zb3J0Q291cnNlc0J5Q2F0ZWdvcnlBbmRSZWxldmFuY3kodGhpcy5maWx0ZXJkQ291cnNlcyk7XG4gIH1cblxuICBtYXRjaFJhdGluZyhjb3Vyc2U6IGFueSwgc2VsZWN0ZWRSYXRpbmdzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghc2VsZWN0ZWRSYXRpbmdzIHx8IHNlbGVjdGVkUmF0aW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBubyBmaWx0ZXIgc2VsZWN0ZWQg4oaSIG1hdGNoIGV2ZXJ5dGhpbmdcbiAgICB9XG5cbiAgICBsZXQgcmF0aW5nID0gbnVsbDtcblxuICAgIC8vIDHvuI/ig6MgVXNlIGF2Z1JhdGluZyBpZiBhdmFpbGFibGVcbiAgICBpZiAoY291cnNlLmF2Z1JhdGluZyAhPSBudWxsICYmICFpc05hTihjb3Vyc2UuYXZnUmF0aW5nKSkge1xuICAgICAgcmF0aW5nID0gTnVtYmVyKGNvdXJzZS5hdmdSYXRpbmcpO1xuICAgIH1cbiAgICAvLyAy77iP4oOjIE1hcCByZWxldmFuY3kgaWYgYXZnUmF0aW5nIG1pc3NpbmdcbiAgICBlbHNlIGlmIChjb3Vyc2UucmVsZXZhbmN5ICE9IG51bGwgJiYgIWlzTmFOKGNvdXJzZS5yZWxldmFuY3kpKSB7XG4gICAgICBjb25zdCByZWwgPSBOdW1iZXIoY291cnNlLnJlbGV2YW5jeSk7XG4gICAgICBpZiAocmVsID49IDkwKSByYXRpbmcgPSA0LjU7XG4gICAgICBlbHNlIGlmIChyZWwgPj0gODApIHJhdGluZyA9IDQuMDtcbiAgICAgIGVsc2UgaWYgKHJlbCA+PSA3MCkgcmF0aW5nID0gMy41O1xuICAgICAgZWxzZSBpZiAocmVsID49IDUwKSByYXRpbmcgPSAyLjU7XG4gICAgICBlbHNlIHJhdGluZyA9IDEuMDtcbiAgICB9XG5cbiAgICAvLyAz77iP4oOjIE5vIHVzYWJsZSByYXRpbmcg4oaSIGV4Y2x1ZGVcbiAgICBpZiAocmF0aW5nID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyA077iP4oOjIE1hdGNoIHNlbGVjdGVkIHJhdGluZyByYW5nZXNcbiAgICByZXR1cm4gc2VsZWN0ZWRSYXRpbmdzLnNvbWUociA9PiB7XG4gICAgICBzd2l0Y2ggKHIpIHtcbiAgICAgICAgY2FzZSAnNC41IGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gNC41O1xuICAgICAgICBjYXNlICc0LjAgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSA0LjA7XG4gICAgICAgIGNhc2UgJzMuNSBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDMuNTtcbiAgICAgICAgY2FzZSAnMi41IGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gMi41O1xuICAgICAgICBjYXNlICcxIGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gMS4wO1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG1hdGNoRHVyYXRpb24oZHVyYXRpb25JblNlY29uZHM6IG51bWJlciB8IHN0cmluZywgc2VsZWN0ZWRSYW5nZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaG91cnMgPSBOdW1iZXIoZHVyYXRpb25JblNlY29uZHMpIC8gMzYwMDtcblxuICAgIHJldHVybiBzZWxlY3RlZFJhbmdlcy5zb21lKHJhbmdlID0+IHtcbiAgICAgIHN3aXRjaCAocmFuZ2UpIHtcbiAgICAgICAgY2FzZSAnPCAxIEhvdXInOlxuICAgICAgICAgIHJldHVybiBob3VycyA8IDE7XG4gICAgICAgIGNhc2UgJzEtNSBIb3Vycyc6XG4gICAgICAgICAgcmV0dXJuIGhvdXJzID49IDEgJiYgaG91cnMgPD0gNTtcbiAgICAgICAgY2FzZSAnNSsgSG91cnMnOlxuICAgICAgICAgIHJldHVybiBob3VycyA+IDU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gQ29uZmlybWF0aW9uIERpYWxvZyBDb21wb25lbnRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JlZ2VuZXJhdGUtY29uZmlybWF0aW9uLWRpYWxvZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1kaWFsb2ctY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3YXJuaW5nLWljb25cIj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmVnZW5lcmF0ZSBDb3Vyc2UgUmVjb21tZW5kYXRpb25zPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj5cbiAgICAgICAgICBUaGlzIHdpbGwgZGVsZXRlIGFsbCBjdXJyZW50IGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgYW5kIGdlbmVyYXRlIG5ldyBvbmVzIGJhc2VkIG9uIHRoZSBsYXRlc3Qgcm9sZSBtYXBwaW5nLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic3ViLW1lc3NhZ2VcIj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgXG4gICAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwiZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbkNhbmNlbCgpXCIgY2xhc3M9XCJjYW5jZWwtYnRuXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiIGNsYXNzPVwiY29uZmlybS1idG5cIj5cbiAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAgWWVzLCBSZWdlbmVyYXRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAuY29uZmlybWF0aW9uLWRpYWxvZy1jb250YWluZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gICAgXG4gICAgLmRpYWxvZy1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBwYWRkaW5nOiAyNHB4IDI0cHggMTZweCAyNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgfVxuICAgIFxuICAgIC53YXJuaW5nLWljb24ge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBjb2xvcjogI2ZmOTgwMDtcbiAgICB9XG4gICAgXG4gICAgaDIge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgIH1cbiAgICBcbiAgICAuZGlhbG9nLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogMjRweDtcbiAgICB9XG4gICAgXG4gICAgLm1haW4tbWVzc2FnZSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMztcbiAgICAgIG1hcmdpbjogMCAwIDEycHggMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgfVxuICAgIFxuICAgIC5zdWItbWVzc2FnZSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuICAgIFxuICAgIC5kaWFsb2ctYWN0aW9ucyB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDI0cHggMjRweCAyNHB4O1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICB9XG4gICAgXG4gICAgLmNhbmNlbC1idG4ge1xuICAgICAgY29sb3I6ICM2NjY7XG4gICAgfVxuICAgIFxuICAgIC5jb25maXJtLWJ0biB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2VuZXJhdGVDb25maXJtYXRpb25EaWFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UmVnZW5lcmF0ZUNvbmZpcm1hdGlvbkRpYWxvZz5cbiAgKSB7IH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XG4gIH1cblxuICBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gSW5pdGlhbCBMb2FkaW5nIFNjcmVlbiAoZm9yIGluaXRpYWwgbG9hZCBhbmQgcmVnZW5lcmF0aW9uKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtbG9hZGluZy1jb250YWluZXJcIiAqbmdJZj1cIiFkYXRhTG9hZGVkIHx8IGlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHQgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgKGlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID8gJ1JlZ2VuZXJhdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJyA6ICdMb2FkaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWRldGFpbHNcIiAqbmdJZj1cInByb2dyZXNzUGVyY2VudGFnZSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwicHJvZ3Jlc3NQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBwcm9ncmVzc1BlcmNlbnRhZ2UgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGltZS1lc3RpbWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBjb3Vyc2UgZ2VuZXJhdGlvbiBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAxLTIgbWludXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCIgKm5nSWY9XCJkYXRhTG9hZGVkICYmICFpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlNhdmUgQ291cnNlcyAoPHNwYW4+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5vcmdOYW1lfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIFwiPi8ge3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19PC9zcGFuPjwvc3Bhbj4pPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWdlbmVyYXRlLWJ0blwiIChjbGljayk9XCJyZWdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVnZW5lcmF0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNSZWdlbmVyYXRpbmdcIj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNSZWdlbmVyYXRpbmdcIiBkaWFtZXRlcj1cIjIwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpc1JlZ2VuZXJhdGluZyA/ICdSZWdlbmVyYXRpbmcuLi4nIDogJ1JlZ2VuZXJhdGUgUmVjb21tZW5kYXRpb25zJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXIgbXQtNFwiPlxuICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uT3V0ZXJUYWJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRmlyc3QgTWFpbiBUYWIgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJjb3Vyc2UgcmVjb21tZW5kYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBOZXN0ZWQgVGFicyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LXRhYi1ncm91cCAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25Jbm5lclRhYkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImFsbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImJlaGF2aW91cmFsXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiZnVuY3Rpb25hbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImRvbWFpblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD4gLS0+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTZWNvbmQgTWFpbiBUYWIgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJnYXAgYW5hbHlzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8cD5HYXAgYW5hbHlzaXMgY29udGVudCBnb2VzIGhlcmU8L3A+IC0tPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIGNsYXNzPVwiZmlsdGVycy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLW1hcHBpbmctY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm91dGVyVGFiQWN0aXZlSW5kZXggPT09IDAgJiYgKGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDAgfHwgaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMSB8fCBpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAyIHx8IGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDMgKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWltcHJvdmVkIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlYXJjaCBDb3Vyc2VzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXItY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VhcmNoLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2lucHV0LWNvbXBhY3RcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhcHBseUZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvdXJzZXNcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IENvbXBldGVuY3k8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmNvbXBldGVuY3k/Lmxlbmd0aCA/ICcnIDogJ0NvbXBldGVuY3knIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvbXBldGVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2NvbXBldGVuY3knKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkQ29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IFJhdGluZzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLnJhdGluZz8ubGVuZ3RoID8gJycgOiAnUmF0aW5nJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFJlYXRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdyYXRpbmcnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkUmF0aW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1pbXByb3ZlZC1zZWMtMiBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBMYW5ndWFnZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmxhbmd1YWdlPy5sZW5ndGggPyAnJyA6ICdMYW5ndWFnZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIExhbmd1YWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnbGFuZ3VhZ2UnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkTGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IER1cmF0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUuZHVyYXRpb24/Lmxlbmd0aCA/ICcnIDogJ0R1cmF0aW9uJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImR1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2R1cmF0aW9uJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZER1cmF0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBQcm92aWRlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLnByb3ZpZGVyPy5sZW5ndGggPyAnJyA6ICdQcm92aWRlcicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdwcm92aWRlcicpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRQcm92aWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDQ1cHg7bWFyZ2luLWxlZnQ6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIlJlc2V0IEFsbCBGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVycygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTZweDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJlZCBDb3Vyc2UgQ291bnQgOiB7e2ZpbHRlcmRDb3Vyc2VzPy5sZW5ndGh9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNSBzdWItaGVhZGluZyBzZWxlY3QtYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiZmFsc2VcIiAoY2hhbmdlKT1cInNlbGVjdEFsbENvdXJzZXMoJGV2ZW50KVwiPlNlbGVjdCBBbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlczwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwLWNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQWRkIE1vcmUgQ291cnNlIEZyb20gaUdPVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VnZ2VzdE1vcmVDb3Vyc2VzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwic2VsZWN0RmlsdGVyQ291cnNlcz8ubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RGaWx0ZXJDb3Vyc2VzPy5sZW5ndGggPiAwID8gJ2J0bi1hY3RpdmUnIDogJ2J0bi1kaXNhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgW3ZhbHVlXT1cIm1vZGUgPT09ICdhZGQnID8gJ1NhdmUgQ291cnNlcycgOiAnVXBkYXRlIENvdXJzZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlQ291cnNlcygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lci1jb250YWluZXIgbXQtMlwiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXItbWVzc2FnZSBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5EaXNjbGFpbWVyOjwvc3Ryb25nPiBQbGVhc2UgdmVyaWZ5IHRoZSBwdWJsaWMgY291cnNlIFVSTCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBwbGFuLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA+IDAgPyAnY291cnNlLWxpc3QtY29udGFpbmVyLWZsZXgnOidjb3Vyc2UtbGlzdC1jb250YWluZXItcmlnaHQtZmxleCcgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMCA/ICdsZWZ0LXBhbmVsJzonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPT09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIGluIEJlaGF2aW91cmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aGVtZS1maWx0ZXItY29udHJvbHMgbWItMlwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYXItZmlsdGVyLWJ0blwiIChjbGljayk9XCJjbGVhclRoZW1lRmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+IENsZWFyIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWxpc3QtaXRlbSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdGhlbWUnOiBpc1RoZW1lU2VsZWN0ZWQoaXRlbSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgaW4gRnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlbWUtZmlsdGVyLWNvbnRyb2xzIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFyLWZpbHRlci1idG5cIiAoY2xpY2spPVwiY2xlYXJUaGVtZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPiBDbGVhciBGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZmlsdGVyT25Db21wZXRlbmN5VGhlbWUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS1saXN0LWl0ZW0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLXRoZW1lJzogaXNUaGVtZVNlbGVjdGVkKGl0ZW0pfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPT09IDNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIGluIERvbWFpbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlbWUtZmlsdGVyLWNvbnRyb2xzIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFyLWZpbHRlci1idG5cIiAoY2xpY2spPVwiY2xlYXJUaGVtZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPiBDbGVhciBGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZmlsdGVyT25Db21wZXRlbmN5VGhlbWUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWxpc3QtaXRlbSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC10aGVtZSc6IGlzVGhlbWVTZWxlY3RlZChpdGVtKX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMCA/ICdyaWdodC1wYW5lbCc6J3JpZ2h0LXBhbmVsLWZsZXgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIENvdXJzZSBGb3VuZCBNZXNzYWdlIGluIFJpZ2h0IFBhbmVsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1mb3VuZC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb3Vyc2UtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaF9vZmY8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Tm8gQ291cnNlcyBGb3VuZDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBjb3Vyc2VzIGZvdW5kIGZvciB0aGUgc2VsZWN0ZWQgdGhlbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3NlbGVjdGVkVGhlbWVGaWx0ZXJ9fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPldvdWxkIHlvdSBsaWtlIHRvIGFkZCBhIGNvdXJzZSBmb3IgdGhpcyBjb21wZXRlbmN5PzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWdnZXN0LWNvdXJzZS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb3Vyc2VGb3JTZWxlY3RlZFRoZW1lKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvdXJzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ291cnNlcyBMaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJkQ291cnNlcztsZXQgaT1pbmRleFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJjaGVja0lmQ291cnNlRXhpc3RzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0ZWRGaWx0ZXJDb3Vyc2VzKCRldmVudCwgaXRlbSlcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2NvdXJzZS5zdmdcIj48L3NwYW4+Jm5ic3A7PHNwYW4+Q291cnNlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5yYXRpb25hbGVcIj5BSSBSZWNvbW1lbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uaXNfcHVibGljXCI+IC0gUHVibGljPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0/LmlzX3B1YmxpY1wiPiAtIGlHT1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtPy5yYXRpb25hbGVcIj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiAhaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiBpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpYy10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtPy5yYXRpb25hbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmF5LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS10aXRsZSBtdC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9Ub2MoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uY291cnNlXCI+e3tpdGVtPy5jb3Vyc2V9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJpdGVtPy5uYW1lXCI+e3tpdGVtPy5uYW1lfX0qKioqPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDtcIiAoY2xpY2spPVwicmVkaXJlY3RUb1RvYyhpdGVtKVwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMThweFwiIHdpZHRoPVwiMThweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9yZWRpcmVjdC5wbmdcIiAvPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtZGVzYyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlXCI+e3tpdGVtPy5yYXRpb25hbGV9fTwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LmRlc2NyaXB0aW9uXCI+e3tpdGVtPy5kZXNjcmlwdGlvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3VyYWwnLGkpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+QmVoYXZpb3VyYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnQmVoYXZpb3VyYWwnLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnQmVoYXZpb3VyYWwnLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0JlaGF2aW91cmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5GdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJmdW5jdGlvbmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdGdW5jdGlvbmFsJyxpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdGdW5jdGlvbmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRnVuY3Rpb25hbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdEb21haW4nLGkpXCIgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0RvbWFpbicsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0RvbWFpbicsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRG9tYWluJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlbGV2YW5jeSBhbmQgRHVyYXRpb24gc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWZvb3RlclwiICpuZ0lmPVwiaXRlbT8ucmVsZXZhbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj57e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LXBpbGwtZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeVwiPkR1cmF0aW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uZHVyYXRpb25cIj57e2dldER1cmF0aW9uKGl0ZW0/LmR1cmF0aW9uKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEoaXRlbT8uZHVyYXRpb24pXCI+Ti9BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBHZW5lcmFsIE5vIERhdGEgTWVzc2FnZSAob25seSB3aGVuIG5vIHRoZW1lIGZpbHRlciBpcyBhY3RpdmUpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzdWItaGVhZGluZ1wiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aCA9PT0gMCAmJiAhc2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm8gRGF0YSBGb3VuZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtbWFwcGluZy1jb250YWluZXJcIiAqbmdJZj1cIm91dGVyVGFiQWN0aXZlSW5kZXggPT09IDFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZ2FwLWFuYWx5c2lzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bmxvYWQtcGRmIG10LTQgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWRcIiAoY2xpY2spPVwiZG93bmxvYWRQREYoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJpc1BERkRvd25sb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBkZi1oZWFkaW5nXCI+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5uYW1lfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgXCI+X3t7cGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWV9fV9HYXBfQW5hbHlzaXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHZoLTEwMFwiIFtuZ0NsYXNzXT1cImlzUERGRG93bmxvYWQgPyAnbXQtNCc6JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNpZGViYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBwLTMgYmctbGlnaHQgYm9yZGVyLWVuZFwiIHN0eWxlPVwid2lkdGg6IDI1MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi00XCI+QW5hbHl6ZSBieSBDYXRlZ29yeTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMiB0ZXh0LXN0YXJ0IG1lbnUtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gaXRlbS5rZXlcIiAoY2xpY2spPVwic2VsZWN0Q2F0ZWdvcnkoaXRlbS5rZXkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBncmF5LWJnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sYWJlbCBzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgQ292ZXJlZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCI+e3tjb21wZXRlbmN5Q292ZXJlZENvdW50fX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBncmF5LWJnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sYWJlbCBzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnXCI+VG90YWwgQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlRvdGFsIEJlaGF2aW91cmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+VG90YWwgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+VG90YWwgRG9tYWluIENvbXBldGVuY2llczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXN9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Z1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkb21haW5Ub3RhbENvbXBldGVuY2llc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZ3JlZW4tYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPk92ZXJhbGwgQ292ZXJhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3VyYWwgQ292ZXJhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb3ZlcmFnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWxcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+RG9tYWluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdmVyYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdmVyYWxsQ292ZXJhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2JlaGF2aW9yYWxDb3ZlcmFnZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZnVuY3Rpb25hbENvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RvbWFpbkNvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWxsLWNhdGVnb3J5LWxpc3RcIiBbbmdTd2l0Y2hdPVwic2VsZWN0ZWRDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2FsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+QWxsIENhdGVnb3JpZXM8L2g0PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IEJlaGF2aW91cmFsIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGJlaGF2aW91cmFsIGNvbXBldGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmVoYXZpb3VyYWxOb3RNYXRjaGVkICYmIGJlaGF2aW91cmFsTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmVoYXZpb3VyYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBGdW5jdGlvbmFsIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGZ1bmN0aW9uYWwgY29tcGV0ZW5jaWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmdW5jdGlvbmFsTm90TWF0Y2hlZCAmJiBmdW5jdGlvbmFsTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtIHwgdGl0bGVjYXNlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZTwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgRG9tYWluIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGRvbWFpbiBjb21wZXRlbmNpZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbk5vdE1hdGNoZWQgJiYgZG9tYWluTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RG9tYWluPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZTwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgbWVzc2FnZSB3aGVuIGFsbCBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIighYmVoYXZpb3VyYWxOb3RNYXRjaGVkIHx8IGJlaGF2aW91cmFsTm90TWF0Y2hlZC5sZW5ndGggPT09IDApICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFmdW5jdGlvbmFsTm90TWF0Y2hlZCB8fCBmdW5jdGlvbmFsTm90TWF0Y2hlZC5sZW5ndGggPT09IDApICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFkb21haW5Ob3RNYXRjaGVkIHx8IGRvbWFpbk5vdE1hdGNoZWQubGVuZ3RoID09PSAwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tZ2Fwcy1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdWNjZXNzLWljb25cIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkV4Y2VsbGVudCEgQWxsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5BbGwgcmVxdWlyZWQgY29tcGV0ZW5jaWVzIGhhdmUgYmVlbiBhZGRyZXNzZWQgYnkgdGhlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlcy48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2JlaGF2aW9yYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkJlaGF2aW91cmFsPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiYmVoYXZpb3JhbENvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmVoYXZpb3VyYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW19fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ldyBDb3Vyc2UgPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiYmVoYXZpb3JhbENvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBiZWhhdmlvcmFsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjb3Vyc2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5GdW5jdGlvbmFsPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZnVuY3Rpb25hbENvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXcgQ291cnNlPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZnVuY3Rpb25hbENvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBmdW5jdGlvbmFsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjb3Vyc2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkRvbWFpbjwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbkNvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RG9tYWluPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXcgQ291cnNlIDwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbkNvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBkb21haW4gY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBsZWFzZSBzZWxlY3QgYSBjYXRlZ29yeS48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IDwhLS0gQ2xvc2UgbWFpbi1jb250ZW50IGRpdiAtLT5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuPGRpdiBbaGlkZGVuXT1cIiFpc1BERkRvd25sb2FkXCIgY2xhc3M9XCJnYXAtYW5hbHlzaXMtcGRmLWNvbnRhaW5lclwiICNwZGZDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJnYXAtYW5hbHlzaXMtcGRmLWhlYWRlclwiPlxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMva2FybWF5b2dpTG9nby1taW4ucG5nXCIgYWx0PVwiS2FybWF5b2dpIEJoYXJhdCBMb2dvXCIgY2xhc3M9XCJsb2dvXCIgLz5cbiAgICAgIDxoMT48c3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZSdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8uZGVwYXJ0bWVudF9uYW1lPy5uYW1lfX08L3NwYW4+IFxuICAgICAgICA8c3BhbiAqbmdJZj1cInNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5J1wiPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8ubmFtZX19PC9zcGFuPiAgIFxuICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIFwiPi8ge3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+PC9oMT5cbiAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj5BIGRldGFpbGVkIGJyZWFrZG93biBvZiBjb21wZXRlbmNpZXMgR2FwIEFuYWx5c2lzPC9wPlxuICAgICBcbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc25hcHNob3RcIj5cbiAgICAgIDxoMj5Db21wZXRlbmN5IFNuYXBzaG90PC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzbmFwc2hvdC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGUtd3JhcHBlclwiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJwcm9ncmVzcy1yaW5nXCIgd2lkdGg9XCIxMjBcIiBoZWlnaHQ9XCIxMjBcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwcm9ncmVzcy1yaW5nLWJnXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNTJcIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInByb2dyZXNzLXJpbmctY2lyY2xlXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNTJcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXRleHRcIj57e292ZXJhbGxDb3ZlcmFnZX19PGJyIC8+PHNwYW4+T3ZlcmFsbCBDb3ZlcmFnZTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDwhLS0gVG90YWwgQ29tcGV0ZW5jaWVzIEJveCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1ib3hcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+VG90YWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGh9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIFByb2dyZXNzIEJhcnMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0IGJlaGF2aW9yYWxcIj5CZWhhdmlvdXJhbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdmVyZWQtdGV4dFwiPnt7YmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7YmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzfX0gQ292ZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbCBiZWhhdmlvcmFsXCIgW3N0eWxlLndpZHRoLiVdPVwiKGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dCBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdmVyZWQtdGV4dFwiPnt7ZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7ZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzfX0gQ292ZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbCBmdW5jdGlvbmFsXCIgW3N0eWxlLndpZHRoLiVdPVwiKGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dCBkb21haW5cIj5Eb21haW48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3ZlcmVkLXRleHRcIj57e2RvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7ZG9tYWluVG90YWxDb21wZXRlbmNpZXN9fSBDb3ZlcmVkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1maWxsIGRvbWFpblwiIFtzdHlsZS53aWR0aC4lXT1cIihkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50IC8gZG9tYWluVG90YWxDb21wZXRlbmNpZXMpICogMTAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImdhcC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgIDxoMj5EZXRhaWxlZCBDb21wZXRlbmN5IEFuYWx5c2lzPC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYXAtYm94XCI+XG4gICAgICAgIEJyaWRnZSBZb3VyIENvbXBldGVuY2llcyBHYXBcbiAgICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPkhlcmUgYXJlIHt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQpfX0ga2V5IGFyZWFzIGZvciBkZXZlbG9wbWVudC48L3A+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nIG1iLTRcIj5cbiAgICAgICAgPHA+R2FwIHRvIEFkZHJlc3MgPHNwYW4gKm5nSWY9XCIodGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQpKSA+IDBcIj4oe3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCl9fSk8L3NwYW4+PC9wPlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGJlaGF2aW9yYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiZWhhdmlvdXJhbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgJm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBiZWhhdmlvcmFsXCI+QmVoYXZpb3VyYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGZ1bmN0aW9uYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgJm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBkb21haW5cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5Ob3RNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgIDwhLS0gUHJvamVjdCBNYW5hZ2VtZW50ICAtLT5cbiAgICAgICAgICAmbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGRvbWFpblwiPkRvbWFpbjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZyBtYi00XCI+XG4gICAgICAgIDxwPkNvdmVyZWQgQ29tcGV0ZW5jaWVzIDxzcGFuPih7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW91cmFsTm90TWF0Y2hlZD8ubGVuZ3RoICsgZnVuY3Rpb25hbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGRvbWFpbk5vdE1hdGNoZWQ/Lmxlbmd0aCl9fSk8L3NwYW4+PC9wPiAgICAgICAgXG4gICAgIDwvZGl2PlxuICAgICA8ZGl2IGNsYXNzPVwiZ2FwLXNlY3Rpb24gbWItNFwiPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyZWVuLWJnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsIG1iLTJcIj5cbiAgICAgICAgICAgICAgICBDb25ncmF0dWxhdGlvbnMhXG4gICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwPllvdSBoYXZlIHN1Y2Nlc3NmdWxseSBjb3ZlcmVkIDwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+e3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvdXJhbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGZ1bmN0aW9uYWxOb3RNYXRjaGVkPy5sZW5ndGggKyBkb21haW5Ob3RNYXRjaGVkPy5sZW5ndGgpfX0ga2V5IGNvbXBldGVuY2llcywgZm9ybWluZyBhIHN0cm9uZyBwcm9mZXNzaW9uYWwgZm91bmRhdGlvbi48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBiZWhhdmlvcmFsXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbT8udGhlbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICB7e2l0ZW0/LnN1Yl90aGVtZX19Jm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBiZWhhdmlvcmFsXCI+QmVoYXZpb3VyYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGZ1bmN0aW9uYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0/LnRoZW1lIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICB7e2l0ZW0/LnN1Yl90aGVtZX19Jm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBkb21haW5cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5NYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbT8udGhlbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICA8IS0tIFByb2plY3QgTWFuYWdlbWVudCAgLS0+XG4gICAgICAgICAge3tpdGVtPy5zdWJfdGhlbWV9fSZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgZG9tYWluXCI+RG9tYWluPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdhcC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgICAgPGgyPlJlY29tbWVuZGVkIENvdXJzZXM8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8YXBwLWdhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UgW3BsYW5EYXRhXT1cInBsYW5EYXRhXCI+PC9hcHAtZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZT5cbjwvZGl2PlxuICBcblxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmcgJiYgZGF0YUxvYWRlZCAmJiAhaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3NcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb24gZ2VuZXJhdGlvbi4uLicgfX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIiAqbmdJZj1cInByb2dyZXNzUGVyY2VudGFnZSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwicHJvZ3Jlc3NQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBwcm9ncmVzc1BlcmNlbnRhZ2UgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0aW1lLWVzdGltYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBjb3Vyc2UgZ2VuZXJhdGlvbiBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAxLTIgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
2101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBcUIsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9uSCxNQUFNLE9BQU8scUNBQXFDO0lBb0JoRCxZQUFtQixTQUE4RCxFQUMvQyxJQUFTLEVBQVMsYUFBNEIs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LEVBQUU7O0FBK3lFNUMsZ0NBQWdDO0FBbUdoQyxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ1MsU0FBcUQ7UUFBckQsY0FBUyxHQUFULFNBQVMsQ0FBNEM7SUFDMUQsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBWFUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsc0VBaEc3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQ7OzRGQXNFVSw0QkFBNEI7a0JBbEd4QyxTQUFTOytCQUNFLGdDQUFnQyxZQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBTdWdnZXN0TW9yZUNvdXJzZXNDb21wb25lbnQgfSBmcm9tICcuLi9zdWdnZXN0LW1vcmUtY291cnNlcy9zdWdnZXN0LW1vcmUtY291cnNlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IEFkZENvdXJzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1jb3Vyc2UvYWRkLWNvdXJzZS5jb21wb25lbnQnO1xuaW1wb3J0IGh0bWwycGRmIGZyb20gJ2h0bWwycGRmLmpzJztcbmltcG9ydCB7IGNvbmNhdCwgaW50ZXJ2YWwsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwLCBjYXRjaEVycm9yLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQge1xuICBAVmlld0NoaWxkKCdwZGZDb250ZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBkZkNvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBwbGFuRGF0YTogYW55XG4gIGxvYWRpbmcgPSBmYWxzZVxuICBkYXRhTG9hZGVkID0gZmFsc2UgLy8gVHJhY2sgaWYgaW5pdGlhbCBkYXRhIGhhcyBiZWVuIGxvYWRlZFxuICBpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlIC8vIFRyYWNrIHJlZ2VuZXJhdGlvbiB3aXRoIHByb2dyZXNzIGxvYWRpbmdcbiAgcmVjb21tZW5kZWRfY291cnNlX2lkID0gJydcblxuICAvLyBQcm9ncmVzc2l2ZSBsb2FkaW5nIGZvciBjb3Vyc2UgZ2VuZXJhdGlvblxuICBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlOiBzdHJpbmcgPSAnJztcbiAgcHJvZ3Jlc3NQZXJjZW50YWdlOiBudW1iZXIgPSAwO1xuICBwcm9jZXNzaW5nU3RhZ2VzID0gW1xuICAgICdBbmFseXppbmcgcm9sZXMgYW5kIHJlc3BvbnNpYmlsaXRpZXMuLi4nLFxuICAgICdEZXRhaWxpbmcgY29tcGV0ZW5jeSByZXF1aXJlbWVudHMuLi4nLFxuICAgICdQcmVwYXJpbmcgaUdPVCBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJyxcbiAgICAnR2VuZXJhdGluZyBwdWJsaWMgY291cnNlIHN1Z2dlc3Rpb25zLi4uJyxcbiAgICAnQ29tcHV0aW5nIGNvbXByZWhlbnNpdmUgZ2FwIGFuYWx5c2lzLi4uJyxcbiAgICAnRmluYWxpemluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb24gcGxhbi4uLidcbiAgXTtcbiAgc3RhZ2VTdGFydFRpbWU6IG51bWJlciA9IDA7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxHZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSwgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhXG4gIH1cbiAgc2VhcmNoVGV4dCA9ICcnXG4gIGZpbHRlcmRDb3Vyc2VzOiBhbnkgPSBbXVxuICBvcmlnaW5hbERhdGE6IGFueSA9IFtdXG4gIHNlbGVjdEZpbHRlckNvdXJzZXM6IGFueSA9IFtdXG4gIHN1Z2dlc3RlZENvdXJzZXM6IGFueSA9IFtdIC8vIFRyYWNrIGlHT1Qgc3VnZ2VzdGVkIGNvdXJzZXMgc2VwYXJhdGVseVxuICB1c2VyQWRkZWRDb3Vyc2VzOiBhbnkgPSBbXSAvLyBUcmFjayB1c2VyLWFkZGVkIGNvdXJzZXMgc2VwYXJhdGVseVxuICBtb2RlID0gJ2FkZCdcbiAgY2JwX3BsYW5faWQgPSAnJ1xuICBleHBhbmRlZENvbXBldGVuY2llczogYW55ID0ge307IC8vIFRyYWNrIGV4cGFuZGVkIHN0YXRlIGZvciBlYWNoIGNvdXJzZSBhbmQgY29tcGV0ZW5jeSB0eXBlXG4gIG91dGVyVGFiQWN0aXZlSW5kZXggPSAwXG4gIGlubmVyVGFiQWN0aXZlSW5kZXggPSAwXG4gIG91dGVyVGFiQWN0aXZlVGV4dCA9ICdhbGwnXG4gIGlubmVyVGFiQWN0aXZlVGV4dCA9ICdhbGwnXG4gIHNlbGVjdGVkQ2F0ZWdvcnkgPSAnYWxsJztcbiAgY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IDBcbiAgb3ZlcmFsbENvdmVyYWdlOiBhbnkgPSAwXG4gIGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ID0gMFxuICBiZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMgPSAwXG4gIGJlaGF2aW9yYWxDb3ZlcmFnZTogYW55ID0gMFxuICBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IDBcbiAgZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzID0gMFxuICBmdW5jdGlvbmFsQ292ZXJhZ2U6IGFueSA9IDBcbiAgZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IDBcbiAgZG9tYWluVG90YWxDb21wZXRlbmNpZXMgPSAwXG4gIGRvbWFpbkNvdmVyYWdlOiBhbnkgPSAwXG4gIGNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeSA9IFtdXG4gIGNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IFtdXG4gIG1lbnVJdGVtcyA9IFtcbiAgICB7IGtleTogJ2FsbCcsIGxhYmVsOiAnQWxsIENhdGVnb3JpZXMnIH0sXG4gICAgeyBrZXk6ICdiZWhhdmlvcmFsJywgbGFiZWw6ICdCZWhhdmlvdXJhbCcgfSxcbiAgICB7IGtleTogJ2Z1bmN0aW9uYWwnLCBsYWJlbDogJ0Z1bmN0aW9uYWwnIH0sXG4gICAgeyBrZXk6ICdkb21haW4nLCBsYWJlbDogJ0RvbWFpbicgfVxuICBdO1xuICBiZWhhdmlvdXJhbE5vdE1hdGNoZWQgPSBbXVxuICBmdW5jdGlvbmFsTm90TWF0Y2hlZCA9IFtdXG4gIGRvbWFpbk5vdE1hdGNoZWQgPSBbXVxuICBzZWxlY3RlZFRoZW1lRmlsdGVyID0gJydcbiAgb3JpZ2luYWxGaWx0ZXJlZENvdXJzZXMgPSBbXVxuICBpc1JlZ2VuZXJhdGluZyA9IGZhbHNlXG4gIGlzUERGRG93bmxvYWQgPSBmYWxzZVxuICBiZWhhdmlvdXJhbE1hdGNoZWQgPSBbXVxuICBmdW5jdGlvbmFsTWF0Y2hlZCA9IFtdXG4gIGRvbWFpbk1hdGNoZWQgPSBbXVxuICBmaWx0ZXJGb3JtITogRm9ybUdyb3VwO1xuICBjb21wZXRlbmNpZXNUeXBlID0gWydBbGwnLCAnQmVoYXZpb3VyYWwnLCAnRnVuY3Rpb25hbCcsICdEb21haW4nXVxuICByYXRpbmdzID0gWyc0LjUgYW5kIGFib3ZlJywgJzQuMCBhbmQgYWJvdmUnLCAnMy41IGFuZCBhYm92ZScsICcyLjUgYW5kIGFib3ZlJywgJzEgYW5kIGFib3ZlJ107XG4gIGxhbmd1YWdlcyA9IFsnRW5nbGlzaCcsICdIaW5kaScsICdUYW1pbCcsICdLYW5uYWRhJywgJ1RlbHVndScsICdNYWxheWFsYW0nLCAnQXNzYW1lc2UnLCAnQmVuZ2FsaScsICdHdWphcmF0aScsICdNYXJhdGhpJywgJ09kaWEnLCAnUHVuamFiaScsICdLb25rYW5pJywgJ0JvZG8nLCAnRG9ncmknLCAnS2FzaG1pcmknLCAnTWFpdGhpbGknLCAnTWFuaXB1cmknLCAnTmVwYWxpJywgJ1NhbnNrcml0JywgJ1NhbnRhbGknLCAnU2luZGhpJywgJ1VyZHUnXTtcbiAgZHVyYXRpb25zID0gWyc8IDEgSG91cicsICcxLTUgSG91cnMnLCAnNSsgSG91cnMnXTtcbiAgcHJvdmlkZXJzID0gW107XG4gIGZpbHRlcmVkQ29tcGV0ZW5jeSA9IFsuLi50aGlzLmNvbXBldGVuY2llc1R5cGVdO1xuICBmaWx0ZXJlZFJhdGluZ3MgPSBbLi4udGhpcy5yYXRpbmdzXTtcbiAgZmlsdGVyZWRMYW5ndWFnZXMgPSBbLi4udGhpcy5sYW5ndWFnZXNdO1xuICBmaWx0ZXJlZER1cmF0aW9ucyA9IFsuLi50aGlzLmR1cmF0aW9uc107XG4gIGZpbHRlcmVkUHJvdmlkZXJzID0gWy4uLnRoaXMucHJvdmlkZXJzXTtcbiAgZnVsbENvdXJzZUxpc3QgPSBbXVxuICAvLyBTZWxlY3RlZCBmaWx0ZXJzXG4gIHNlbGVjdGVkQ29tcGV0ZW5jeSA9ICdBbGwnO1xuICBzZWxlY3RlZFJhdGluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZER1cmF0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRQcm92aWRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZpcnN0QXBpUmVzcG9uc2U6IGFueSA9IG51bGxcbiAgZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdEVucmljaGVkSWRlbnRpZmllcnNLZXkgPSAnJzsgLy8gR3VhcmRzIGR1cGxpY2F0ZSBjYWxscyB0byB0aGUgY291cnNlIHN1Z2dlc3Rpb25zIEFQSVxuICBzZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKClcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbXBldGVuY3k6IFtbXV0sXG4gICAgICByYXRpbmc6IFtbXV0sXG4gICAgICBsYW5ndWFnZTogW1tdXSxcbiAgICAgIGR1cmF0aW9uOiBbW11dLFxuICAgICAgcHJvdmlkZXI6IFtbXV1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRDb21wb25lbnREYXRhKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuc2VhcmNoVGV4dCcsIHZhbHVlKVxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgc2VhcmNoRGF0YSgpIHtcbiAgICAvLyAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgc2VsZWN0ZWRGaWx0ZXJDb3Vyc2VzKGV2ZW50LCBpdGVtKSB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXG4gICAgY29uc29sZS5sb2coJ2l0ZW0nLCBpdGVtKVxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmluZGV4T2YoaXRlbT8uaWRlbnRpZmllcikgPCAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmZpbmRJbmRleChcbiAgICAgICAgY29udHJvbCA9PiBjb250cm9sID09PSBpdGVtLmlkZW50aWZpZXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMnLCB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMpXG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBzYXZlQ291cnNlcygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgY29uc29sZS5sb2coJ3RoaXMucGxhbkRhdGEnLCB0aGlzLnBsYW5EYXRhKVxuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyb2xlX21hcHBpbmdfaWRcIjogdGhpcy5wbGFuRGF0YS5pZCxcbiAgICAgIFwicmVjb21tZW5kZWRfY291cnNlX2lkXCI6IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkLFxuICAgICAgXCJjb3Vyc2VfaWRlbnRpZmllcnNcIjogdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdyZXFCb2R5LCAnLCByZXFCb2R5KVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhZGQnKSB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2F2ZUNvdXJzZShyZXFCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jYnBfcGxhbl9pZCkge1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlQ291cnNlKHJlcUJvZHksIHRoaXMuY2JwX3BsYW5faWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2VzIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIGNicF9wbGFuX2lkIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5lcnJvcignY2JwX3BsYW5faWQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdXBkYXRlIG9wZXJhdGlvbicpO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byB1cGRhdGUgY291cnNlczogbWlzc2luZyBwbGFuIElEJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxuICBnZXRDb3Vyc2VzKCkge1xuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICAgIHRoaXMuY2JwX3BsYW5faWQgPSByZXM/LmlkXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5zZWxlY3RlZF9jb3Vyc2VzICYmIHJlcz8uc2VsZWN0ZWRfY291cnNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5tb2RlID0gJ2VkaXQnXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXM/LnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5wdXNoKHJlcy5zZWxlY3RlZF9jb3Vyc2VzW2ldPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG4gIGdldFN1Z2dlc3RlZENvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN1Z2dlc3RlZENvdXJzZXMgcmVzJywgcmVzKVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgIC8vIFN0b3JlIHN1Z2dlc3RlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gWy4uLnJlc107XG5cbiAgICAgICAgLy8gUmVidWlsZCBmaWx0ZXJkQ291cnNlcyB0byBpbmNsdWRlIGFsbCBjb3Vyc2UgdHlwZXNcbiAgICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRDb3Vyc2VzKCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGdhcCBhbmFseXNpcyBzdGF0cyBhZnRlciBzdWdnZXN0ZWQgY291cnNlcyBhcmUgYWRkZWRcbiAgICAgICAgdGhpcy51cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpXG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVW5hdXRob3JpemVkIGFjY2VzcyAtIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIGxvZ2luJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSGFuZGxlIG90aGVyIGVycm9ycyBncmFjZWZ1bGx5XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc3VnZ2VzdGVkIGNvdXJzZXMnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG5cblxuICAgIH0pXG4gIH1cblxuICBnZXRVc2VyQ291cnNlKCkge1xuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZygnZ2V0VXNlckNvdXJzZSBBUEkgcmVzcG9uc2U6JywgcmVzKVxuICAgICAgICBjb25zb2xlLmxvZygnQ3VycmVudCBmaWx0ZXJkQ291cnNlcyBiZWZvcmUgYWRkaW5nIHVzZXIgY291cnNlczonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuXG4gICAgICAgIC8vIFN0b3JlIHVzZXItYWRkZWQgY291cnNlcyBzZXBhcmF0ZWx5IChyZXNldCB0byBhdm9pZCBkdXBsaWNhdGVzKVxuICAgICAgICB0aGlzLnVzZXJBZGRlZENvdXJzZXMgPSBbLi4ucmVzXTtcblxuICAgICAgICAvLyBQcm9jZXNzIHVzZXItYWRkZWQgY291cnNlcyB0byBlbnN1cmUgcHJvcGVyIHN0cnVjdHVyZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHVzZXJDb3Vyc2UgPSByZXNbaV07XG4gICAgICAgICAgY29uc29sZS5sb2coYFVzZXIgY291cnNlICR7aX0gY29tcGV0ZW5jaWVzOmAsIHVzZXJDb3Vyc2UuY29tcGV0ZW5jaWVzKTtcblxuICAgICAgICAgIC8vIEVuc3VyZSB1c2VyLWFkZGVkIGNvdXJzZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkaXNwbGF5XG4gICAgICAgICAgaWYgKHVzZXJDb3Vyc2UgJiYgIXVzZXJDb3Vyc2UuY291cnNlX3R5cGUpIHtcbiAgICAgICAgICAgIHVzZXJDb3Vyc2UuY291cnNlX3R5cGUgPSAnVXNlciBBZGRlZCc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGlkZW50aWZpZXIgaWYgbWlzc2luZyAobmVlZGVkIGZvciBjb3Vyc2Ugc2VsZWN0aW9uIGxvZ2ljKVxuICAgICAgICAgIGlmICh1c2VyQ291cnNlICYmICF1c2VyQ291cnNlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHVzZXJDb3Vyc2UuaWRlbnRpZmllciA9IHVzZXJDb3Vyc2UuaWQgfHwgYHVzZXJfY291cnNlXyR7aX1fJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVidWlsZCBmaWx0ZXJkQ291cnNlcyB0byBpbmNsdWRlIGFsbCBjb3Vyc2UgdHlwZXNcbiAgICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRDb3Vyc2VzKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2ZpbHRlcmRDb3Vyc2VzIGFmdGVyIGFkZGluZyB1c2VyIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcyk7XG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvLyBIYW5kbGUgNDA5IENvbmZsaWN0IGhlcmVcbiAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG5cblxuICAgIH0pXG4gIH1cblxuICBjaGVja0lmQ291cnNlRXhpc3RzKGl0ZW0pIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEpIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmbGFnXG4gIH1cblxuICBzZWxlY3RBbGxDb3Vyc2VzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaCh0aGlzLmZpbHRlcmRDb3Vyc2VzW2ldLmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyA9IFtdXG5cbiAgICB9XG4gICAgaWYgKHRoaXMuY2JwX3BsYW5faWQpIHtcbiAgICAgIHRoaXMubW9kZSA9ICd1cGRhdGUnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9ICdhZGQnXG4gICAgfVxuXG5cbiAgfVxuICBnZXRTZWN0b3JzKHNlY3Rvcikge1xuICAgIGlmIChzZWN0b3IgJiYgc2VjdG9yLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2VjdG9yKSA/IHNlY3Rvci5qb2luKCcvICcpIDogJydcbiAgICB9XG5cbiAgfVxuXG4gIGZpbHRlckRhdGEoc2VhcmNoVGV4dDogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlciA9IHNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcoaXRlbSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZmllZC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc29ydENvdXJzZXNCeUNhdGVnb3J5QW5kUmVsZXZhbmN5KGZpbHRlcmVkKTtcbiAgfVxuXG4gIGZsYXR0ZW5PYmplY3RUb1N0cmluZyhvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXN1bHQgKz0gJyAnICsgdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB2YWw7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHRoaXMuZmxhdHRlbk9iamVjdFRvU3RyaW5nKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQgKz0gJyAnICsgdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdWdnZXN0TW9yZUNvdXJzZXMoKSB7XG4gICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgIGNvbnN0IGRpYWxvZ1JlZk5ldyA9IHRoaXMuZGlhbG9nLm9wZW4oU3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzExMDBweCcsXG4gICAgICBkYXRhOiB7IHJlY29tbWVuZGVkX2NvdXJzZV9pZDogdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQsIHJvbGVfbWFwcGluZ19pZDogdGhpcy5wbGFuRGF0YS5pZCB9LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWZOZXcuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICB0aGlzLmdldFN1Z2dlc3RlZENvdXJzZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFN1Z2dlc3RlZENvdXJzZSgpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKGVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmF0ZSBDb3Vyc2UgUmVjb21tZW5kYXRpb24gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIC8vIHRoaXMuYWN0aXZlUm93RWxlbWVudCA9IGVsZW1lbnRcbiAgICBjb25zb2xlLmxvZygnRWRpdCBSb2xlIE1hcHBpbmcgY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIC8vIE5hdmlnYXRlIG9yIG9wZW4gbW9kYWxcbiAgICBjb25zb2xlLmxvZygnVmlldyBDQlAgUGxhbiBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihHZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiBlbGVtZW50LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaiAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5ICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWQpIHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlLmRhdGEgPSByZXNcbiAgICAgICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gcmVzO1xuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCd0aGlzLmRhdGFTb3VyY2UnLHRoaXMuZGF0YVNvdXJjZSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGU6IHN0cmluZywgaW5kZXgpOiBhbnlbXSB7XG4gICAgY29uc3QgY291cnNlID0gdGhpcy5maWx0ZXJkQ291cnNlc1tpbmRleF07XG4gICAgaWYgKCFjb3Vyc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBjb3Vyc2UgZm91bmQgYXQgaW5kZXggJHtpbmRleH1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAvLyBBSSBSZWNvbW1lbmRlZCAmIFB1YmxpYyBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzJ1xuICAgIC8vIE1hbnVhbGx5IFN1Z2dlc3RlZCAtIGlHT1QgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llc192NidcbiAgICAvLyBVc2VyIEFkZGVkIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXMnXG4gICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgICAvLyAgY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgdXNpbmcgJ2NvbXBldGVuY2llcycgcHJvcGVydHk6YCwgY29tcGV0ZW5jaWVzKTtcbiAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIHVzaW5nICdjb21wZXRlbmNpZXNfdjYnIHByb3BlcnR5OmAsIGNvbXBldGVuY2llcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIGhhcyBubyB2YWxpZCBjb21wZXRlbmNpZXMgcHJvcGVydHk6YCwge1xuICAgICAgLy8gICBoYXNDb21wZXRlbmNpZXM6ICEhY291cnNlLmNvbXBldGVuY2llcyxcbiAgICAgIC8vICAgY29tcGV0ZW5jaWVzVHlwZTogdHlwZW9mIGNvdXJzZS5jb21wZXRlbmNpZXMsXG4gICAgICAvLyAgIGhhc0NvbXBldGVuY2llc1Y2OiAhIWNvdXJzZS5jb21wZXRlbmNpZXNfdjYsXG4gICAgICAvLyAgIGNvbXBldGVuY2llc1Y2VHlwZTogdHlwZW9mIGNvdXJzZS5jb21wZXRlbmNpZXNfdjYsXG4gICAgICAvLyAgIGNvdXJzZUtleXM6IE9iamVjdC5rZXlzKGNvdXJzZSlcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIGlmIChjb21wZXRlbmNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyAgY29uc29sZS5sb2coYE5vIGNvbXBldGVuY2llcyBmb3VuZCBmb3IgY291cnNlICR7aW5kZXh9IGFuZCB0eXBlICR7dHlwZX1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgZm9yIGNvbXBhcmlzb24gKGNhc2UtaW5zZW5zaXRpdmUgKyBoYW5kbGUgc3BlbGxpbmcgdmFyaWF0aW9ucylcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gY29tcGV0ZW5jaWVzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmICghYyB8fCAhYy5jb21wZXRlbmN5QXJlYU5hbWUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYEludmFsaWQgY29tcGV0ZW5jeSBzdHJ1Y3R1cmUgaW4gY291cnNlICR7aW5kZXh9OmAsIGMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBldGVuY3lBcmVhID0gYy5jb21wZXRlbmN5QXJlYU5hbWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIC8vIEhhbmRsZSBib3RoIFwiYmVoYXZpb3JhbFwiIGFuZCBcImJlaGF2aW91cmFsXCIgc3BlbGxpbmdzXG4gICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHwgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgICByZXR1cm4gY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvcmFsJyB8fCBjb21wZXRlbmN5QXJlYSA9PT0gJ2JlaGF2aW91cmFsJztcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG90aGVyIHR5cGVzLCBkbyBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb25cbiAgICAgIHJldHVybiBjb21wZXRlbmN5QXJlYSA9PT0gbm9ybWFsaXplZFR5cGU7XG4gICAgfSk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgRm91bmQgJHttYXRjaGVkQ29tcGV0ZW5jaWVzLmxlbmd0aH0gY29tcGV0ZW5jaWVzIG9mIHR5cGUgJHt0eXBlfSBmb3IgY291cnNlICR7aW5kZXh9OmAsIG1hdGNoZWRDb21wZXRlbmNpZXMpO1xuICAgIHJldHVybiBtYXRjaGVkQ29tcGV0ZW5jaWVzO1xuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlCZWh2aW91cmFsVHlwZShpbmRleCk6IHN0cmluZyB7XG4gICAgY29uc3QgY291cnNlID0gdGhpcy5maWx0ZXJkQ291cnNlc1tpbmRleF07XG4gICAgaWYgKCFjb3Vyc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICB9XG5cbiAgICBpZiAoY29tcGV0ZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wZXRlbmNpZXNcbiAgICAgIC5maWx0ZXIoYyA9PiBjICYmIChjLmNvbXBldGVuY3lBcmVhTmFtZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IGMuY29tcGV0ZW5jeUFyZWFOYW1lID09PSAnQmVoYXZpb3VyYWwnKSlcbiAgICAgIC5tYXAoYyA9PiBgJHtjLmNvbXBldGVuY3lUaGVtZU5hbWUgfHwgJyd9IC0gJHtjLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfHwgJyd9YClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueVtdIHtcbiAgICBjb25zdCBjb21wZXRlbmNpZXMgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCk7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSkge1xuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNsaWNlKDAsIDIpO1xuICB9XG5cbiAgdG9nZ2xlQ29tcGV0ZW5jaWVzKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcbiAgICB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gPSAhdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldO1xuICB9XG5cbiAgaXNFeHBhbmRlZCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSB8fCBmYWxzZTtcbiAgfVxuXG4gIGhhc01vcmVUaGFuVHdvKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoID4gMjtcbiAgfVxuXG4gIGdldFJlbWFpbmluZ0NvdW50KHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KS5sZW5ndGg7XG4gICAgcmV0dXJuIHRvdGFsQ291bnQgLSAyO1xuICB9XG5cbiAgb25PdXRlclRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm91dGVyVGFiQWN0aXZlSW5kZXggPSBldmVudC5pbmRleFxuICAgIHRoaXMub3V0ZXJUYWJBY3RpdmVUZXh0ID0gZXZlbnQudGFiLnRleHRMYWJlbFxuICAgIGNvbnNvbGUubG9nKCdPdXRlciBUYWIgSW5kZXg6JywgZXZlbnQuaW5kZXgpO1xuICAgIGNvbnNvbGUubG9nKCdPdXRlciBUYWIgTGFiZWw6JywgZXZlbnQudGFiLnRleHRMYWJlbCk7XG4gICAgaWYgKGV2ZW50LmluZGV4ID09PSAxKSB7XG4gICAgICB0aGlzLmdhcEFuYWx5c2lzU3RhdHMoKVxuICAgIH1cbiAgICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcbiAgICAgIC8vIHRoaXMuZ2V0Q291cnNlcygpXG4gICAgICAvLyB0aGlzLmdldFN1Z2dlc3RlZENvdXJzZSgpXG4gICAgICB0aGlzLmdldFVzZXJDb3Vyc2UoKVxuICAgIH1cbiAgfVxuXG4gIG9uSW5uZXJUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLmlubmVyVGFiQWN0aXZlVGV4dCA9IGV2ZW50LnRhYi50ZXh0TGFiZWxcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSAnJzsgLy8gUmVzZXQgdGhlbWUgZmlsdGVyIHdoZW4gc3dpdGNoaW5nIHRhYnNcbiAgICBjb25zb2xlLmxvZygnSW5uZXIgVGFiIEluZGV4OicsIGV2ZW50LmluZGV4KTtcbiAgICBjb25zb2xlLmxvZygnSW5uZXIgVGFiIExhYmVsOicsIGV2ZW50LnRhYi50ZXh0TGFiZWwpO1xuICAgIGxldCB0YWJJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXVxuXG4gICAgLy8gR2V0IGFsbCBhdmFpbGFibGUgY291cnNlcyAob3JpZ2luYWwgKyBzdWdnZXN0ZWQgKyB1c2VyIGFkZGVkKVxuICAgIGNvbnN0IGFsbEF2YWlsYWJsZUNvdXJzZXMgPSB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKTtcblxuXG5cbiAgICBzd2l0Y2ggKHRhYkluZGV4KSB7XG4gICAgICBjYXNlIDA6IC8vIEFsbFxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQXZhaWxhYmxlQ291cnNlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6IC8vIEJlaGF2aW9yYWxcbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuc29ydENvdXJzZXNCeVJlbGV2YW5jeSh0aGlzLmJlaGF2aW9yYWxGaWx0ZXIoYWxsQXZhaWxhYmxlQ291cnNlcykpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuYmVoYXZpb3JhbENvbXBldGVuY3lGaWx0ZXIodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjogLy8gRnVuY3Rpb25hbFxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5zb3J0Q291cnNlc0J5UmVsZXZhbmN5KHRoaXMuZnVuY3Rpb25hbEZpbHRlcihhbGxBdmFpbGFibGVDb3Vyc2VzKSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUZpbHRlcih0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOiAvLyBEb21haW5cbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuc29ydENvdXJzZXNCeVJlbGV2YW5jeSh0aGlzLmRvbWFpbkZpbHRlcihhbGxBdmFpbGFibGVDb3Vyc2VzKSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gdGhpcy5kb21haW5Db21wZXRlbmN5RmlsdGVyKHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmRDb3Vyc2VzJywgdGhpcy5maWx0ZXJkQ291cnNlcylcbiAgICBjb25zb2xlLmxvZygndGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnknLCB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSlcbiAgfVxuXG4gIGdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKSB7XG4gICAgLy8gU3RhcnQgd2l0aCBvcmlnaW5hbCBkYXRhIChBSSByZWNvbW1lbmRlZCBjb3Vyc2VzKVxuICAgIGNvbnN0IGFsbENvdXJzZXMgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdO1xuICAgIGNvbnN0IHNlZW5JZGVudGlmaWVycyA9IG5ldyBTZXQoKTtcblxuICAgIC8vIFRyYWNrIG9yaWdpbmFsIGNvdXJzZSBpZGVudGlmaWVyc1xuICAgIHRoaXMub3JpZ2luYWxEYXRhLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIGlmIChjb3Vyc2UuaWRlbnRpZmllcikgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2UuaWRlbnRpZmllcik7XG4gICAgICBpZiAoY291cnNlLmlkKSBzZWVuSWRlbnRpZmllcnMuYWRkKGNvdXJzZS5pZCk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgc3VnZ2VzdGVkIGNvdXJzZXMgKGlHT1QgcGxhdGZvcm0gY291cnNlcylcbiAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgY29uc3QgY291cnNlSWQgPSBjb3Vyc2UuaWRlbnRpZmllciB8fCBjb3Vyc2UuaWQ7XG4gICAgICBpZiAoY291cnNlSWQgJiYgIXNlZW5JZGVudGlmaWVycy5oYXMoY291cnNlSWQpKSB7XG4gICAgICAgIGFsbENvdXJzZXMucHVzaChjb3Vyc2UpO1xuICAgICAgICBzZWVuSWRlbnRpZmllcnMuYWRkKGNvdXJzZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCB1c2VyLWFkZGVkIGNvdXJzZXNcbiAgICB0aGlzLnVzZXJBZGRlZENvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgY29uc3QgY291cnNlSWQgPSBjb3Vyc2UuaWRlbnRpZmllciB8fCBjb3Vyc2UuaWQ7XG4gICAgICBpZiAoY291cnNlSWQgJiYgIXNlZW5JZGVudGlmaWVycy5oYXMoY291cnNlSWQpKSB7XG4gICAgICAgIC8vIEVuc3VyZSB1c2VyLWFkZGVkIGNvdXJzZXMgaGF2ZSBwcm9wZXIgc3RydWN0dXJlXG4gICAgICAgIGlmICghY291cnNlLmNvdXJzZV90eXBlKSB7XG4gICAgICAgICAgY291cnNlLmNvdXJzZV90eXBlID0gJ1VzZXIgQWRkZWQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY291cnNlLmlkZW50aWZpZXIgJiYgY291cnNlLmlkKSB7XG4gICAgICAgICAgY291cnNlLmlkZW50aWZpZXIgPSBjb3Vyc2UuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgYWxsQ291cnNlcy5wdXNoKGNvdXJzZSk7XG4gICAgICAgIHNlZW5JZGVudGlmaWVycy5hZGQoY291cnNlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ2dldEFsbEF2YWlsYWJsZUNvdXJzZXMgYnJlYWtkb3duOicsIHtcbiAgICAgIG9yaWdpbmFsRGF0YTogdGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoLFxuICAgICAgc3VnZ2VzdGVkQ291cnNlczogdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgIHVzZXJBZGRlZENvdXJzZXM6IHRoaXMudXNlckFkZGVkQ291cnNlcy5sZW5ndGgsXG4gICAgICB0b3RhbEF2YWlsYWJsZTogYWxsQ291cnNlcy5sZW5ndGhcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdhbGxDb3Vyc2VzLS0nLCBhbGxDb3Vyc2VzKVxuICAgIGFsbENvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5vcmdhbmlzYXRpb24gJiYgaXRlbS5vcmdhbmlzYXRpb24ubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLmluZGV4T2YoaXRlbS5vcmdhbmlzYXRpb25bMF0pIDwgMCkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMucHVzaChpdGVtLm9yZ2FuaXNhdGlvblswXSlcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBzb3J0ZWRDb3Vyc2VzID0gdGhpcy5zb3J0Q291cnNlc0J5Q2F0ZWdvcnlBbmRSZWxldmFuY3koYWxsQ291cnNlcylcbiAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0ID0gc29ydGVkQ291cnNlc1xuICAgIGxldCBpZGVudGlmaWVyc0FyciA9IFtdXG4gICAgc29ydGVkQ291cnNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlkZW50aWZpZXJzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICB9KVxuICBjb25zdCBpZGVudGlmaWVyc0tleSA9IFsuLi5pZGVudGlmaWVyc0Fycl0uc29ydCgpLmpvaW4oJywnKVxuICAgIC8vIFJlLWZldGNoIHdoZW5ldmVyIHRoZSBpZGVudGlmaWVyIHNldCBjaGFuZ2VzLCBvciB3aGVuIGFueSBjb3Vyc2Ugb2JqZWN0IGlzIG1pc3NpbmdcbiAgICAvLyB0aGUgZW5yaWNoZWQgZmllbGRzIChlZy4gYWZ0ZXIgZ2V0VXNlckNvdXJzZS9nZXRTdWdnZXN0ZWRDb3Vyc2UgcmVwbGFjZSBpdGVtcyB3aXRoXG4gICAgLy8gZnJlc2ggb2JqZWN0cyBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBoYXZlbid0IGJlZW4gZW5yaWNoZWQgeWV0LCBldmVuIGlmIHRoZSBpZGVudGlmaWVyc1xuICAgIC8vIGFyZSB1bmNoYW5nZWQgZnJvbSB0aGUgbGFzdCBlbnJpY2htZW50IGNhbGwpLlxuICAgIGNvbnN0IG5lZWRzRW5yaWNobWVudCA9IHNvcnRlZENvdXJzZXMuc29tZSgoaXRlbSkgPT4gaXRlbT8uaWRlbnRpZmllciAmJiBpdGVtLmNvdXJzZSA9PT0gdW5kZWZpbmVkKVxuICAgIGlmIChpZGVudGlmaWVyc0Fyci5sZW5ndGggJiYgKGlkZW50aWZpZXJzS2V5ICE9PSB0aGlzLmxhc3RFbnJpY2hlZElkZW50aWZpZXJzS2V5IHx8IG5lZWRzRW5yaWNobWVudCkpIHtcbiAgICAgIHRoaXMubGFzdEVucmljaGVkSWRlbnRpZmllcnNLZXkgPSBpZGVudGlmaWVyc0tleVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVyc0Fycikuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5yZXN1bHQuY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mdWxsQ291cnNlTGlzdC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2lkZW50aWZpZXInXSA9PT0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2lkZW50aWZpZXInXSkge1xuICAgICAgICAgICAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0W2pdWydsYW5ndWFnZSddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2xhbmd1YWdlJ11cbiAgICAgICAgICAgICAgdGhpcy5mdWxsQ291cnNlTGlzdFtqXVsnYXZnUmF0aW5nJ10gPSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnYXZnUmF0aW5nJ11cbiAgICAgICAgICAgICAgdGhpcy5mdWxsQ291cnNlTGlzdFtqXVsnY291cnNlJ10gPSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnbmFtZSddXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gc29ydGVkQ291cnNlcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgYXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIGNvdXJzZSB0eXBlc1xuICAgKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBhcHBsaWNhdGlvblxuICAgKi9cbiAgcmVidWlsZEZpbHRlcmVkQ291cnNlcygpIHtcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5zb3J0Q291cnNlc0J5Q2F0ZWdvcnlBbmRSZWxldmFuY3kodGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCkpO1xuXG4gICAgY29uc29sZS5sb2coJ1JlYnVpbHQgZmlsdGVyZENvdXJzZXMgd2l0aCBhbGwgY291cnNlIHR5cGVzOicsIHtcbiAgICAgIHRvdGFsOiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgIGJyZWFrZG93bjoge1xuICAgICAgICBvcmlnaW5hbDogdGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoLFxuICAgICAgICBzdWdnZXN0ZWQ6IHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGgsXG4gICAgICAgIHVzZXJBZGRlZDogdGhpcy51c2VyQWRkZWRDb3Vyc2VzLmxlbmd0aFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ydENvdXJzZXNCeVJlbGV2YW5jeShjb3Vyc2VzOiBhbnlbXSA9IFtdKTogYW55W10ge1xuICAgIHJldHVybiBbLi4uY291cnNlc10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYVNjb3JlID0gdGhpcy5ub3JtYWxpemVSZWxldmFuY3koYT8ucmVsZXZhbmN5KVxuICAgICAgY29uc3QgYlNjb3JlID0gdGhpcy5ub3JtYWxpemVSZWxldmFuY3koYj8ucmVsZXZhbmN5KVxuICAgICAgcmV0dXJuIGJTY29yZSAtIGFTY29yZVxuICAgIH0pXG4gIH1cblxuICBzb3J0Q291cnNlc0J5Q2F0ZWdvcnlBbmRSZWxldmFuY3koY291cnNlczogYW55W10gPSBbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gWy4uLmNvdXJzZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5UHJpb3JpdHkgPSB7IGRvbWFpbjogMSwgZnVuY3Rpb25hbDogMiwgYmVoYXZpb3JhbDogMywgb3RoZXI6IDQgfTtcbiAgICAgIGNvbnN0IGFQcmlvcml0eSA9IGNhdGVnb3J5UHJpb3JpdHlbdGhpcy5nZXRDb3Vyc2VDYXRlZ29yeShhKV0gfHwgNDtcbiAgICAgIGNvbnN0IGJQcmlvcml0eSA9IGNhdGVnb3J5UHJpb3JpdHlbdGhpcy5nZXRDb3Vyc2VDYXRlZ29yeShiKV0gfHwgNDtcblxuICAgICAgaWYgKGFQcmlvcml0eSAhPT0gYlByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiBhUHJpb3JpdHkgLSBiUHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVJlbGV2YW5jeShiPy5yZWxldmFuY3kpIC0gdGhpcy5ub3JtYWxpemVSZWxldmFuY3koYT8ucmVsZXZhbmN5KTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q291cnNlQ2F0ZWdvcnkoY291cnNlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IFtcbiAgICAgIC4uLihjb3Vyc2U/LmNvbXBldGVuY2llcyB8fCBbXSksXG4gICAgICAuLi4oY291cnNlPy5jb21wZXRlbmNpZXNfdjYgfHwgW10pXG4gICAgXTtcblxuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBuZXcgU2V0KFxuICAgICAgY29tcGV0ZW5jaWVzXG4gICAgICAgIC5tYXAoKGM6IGFueSkgPT4gdGhpcy5ub3JtYWxpemVDb21wZXRlbmN5KGM/LmNvbXBldGVuY3lBcmVhTmFtZSkpXG4gICAgICAgIC5maWx0ZXIoKGM6IHN0cmluZykgPT4gYylcbiAgICApO1xuXG4gICAgaWYgKGNhdGVnb3JpZXMuaGFzKCdkb21haW4nKSkgcmV0dXJuICdkb21haW4nO1xuICAgIGlmIChjYXRlZ29yaWVzLmhhcygnZnVuY3Rpb25hbCcpKSByZXR1cm4gJ2Z1bmN0aW9uYWwnO1xuICAgIGlmIChjYXRlZ29yaWVzLmhhcygnYmVoYXZpb3JhbCcpKSByZXR1cm4gJ2JlaGF2aW9yYWwnO1xuXG4gICAgcmV0dXJuICdvdGhlcic7XG4gIH1cblxuICBub3JtYWxpemVSZWxldmFuY3kodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZS50cmltKCkpXG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiAtSW5maW5pdHlcbiAgICB9XG5cbiAgICByZXR1cm4gLUluZmluaXR5XG4gIH1cblxuICBiZWhhdmlvcmFsRmlsdGVyKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICAgIGlmIChpdGVtLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXMuc29tZShjID0+IGMgJiYgKChjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWhhdmlvcmFsJykgfHwgYz8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3VyYWwnKSk7XG4gICAgfSk7XG4gIH1cblxuICBiZWhhdmlvcmFsQ29tcGV0ZW5jeUZpbHRlcihkYXRhOiBhbnlbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zb2xlLmxvZygnZGF0YS0tJywgZGF0YSlcbiAgICBjb25zdCBiZWhhdmlvcmFsVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydiZWhhdmlvcmFsJywgJ2JlaGF2aW91cmFsJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gdGhpcy5mb3JtYXRUaGVtZVdpdGhTdWJUaGVtZShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKSlcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlQmVoYXZpb3JhbFRoZW1lcyA9IEFycmF5LmZyb20obmV3IFNldChiZWhhdmlvcmFsVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVCZWhhdmlvcmFsVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlQmVoYXZpb3JhbFRoZW1lcztcbiAgfVxuXG4gIGZ1bmN0aW9uYWxDb21wZXRlbmN5RmlsdGVyKGRhdGE6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBmdW5jdGlvbmFsVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydmdW5jdGlvbmFsJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gdGhpcy5mb3JtYXRUaGVtZVdpdGhTdWJUaGVtZShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKSlcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlRnVuY3Rpb25hbFRoZW1lcyA9IEFycmF5LmZyb20obmV3IFNldChmdW5jdGlvbmFsVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVGdW5jdGlvbmFsVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlRnVuY3Rpb25hbFRoZW1lcztcblxuICAgIC8vIGNvbnNvbGUubG9nKHVuaXF1ZUNvbXBldGVuY3lBcmVhTmFtZXMpO1xuICB9XG5cbiAgZG9tYWluQ29tcGV0ZW5jeUZpbHRlcihkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgZG9tYWluVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydkb21haW4nXS5pbmNsdWRlcyhpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmZvcm1hdFRoZW1lV2l0aFN1YlRoZW1lKGl0ZW0/LnRoZW1lLCBpdGVtPy5zdWJfdGhlbWUpKVxuICAgICAgLmZpbHRlcigodGhlbWUpOiB0aGVtZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih0aGVtZSkpOyAvLyBFbnN1cmVzIHR5cGUgc2FmZXR5XG5cbiAgICBjb25zdCB1bmlxdWVEb21haW5UaGVtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZG9tYWluVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVEb21haW5UaGVtZXMpO1xuICAgIHJldHVybiB1bmlxdWVEb21haW5UaGVtZXM7XG5cbiAgICAvLyBjb25zb2xlLmxvZyh1bmlxdWVDb21wZXRlbmN5QXJlYU5hbWVzKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb25hbEZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmIGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2Z1bmN0aW9uYWwnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvbWFpbkZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmIGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2RvbWFpbicpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2FwQW5hbHlzaXNTdGF0cygpIHtcbiAgICBjb25zb2xlLmxvZygndGhpcy5wbGFuRGF0YScsIHRoaXMucGxhbkRhdGEpXG5cbiAgICAvLyBBbHdheXMgdXNlIEFMTCBjb21wZXRlbmNpZXMgZm9yIGNhbGN1bGF0aW5nIG92ZXJhbGwgc3RhdHNcbiAgICBjb25zdCBhbGxDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcztcblxuICAgIC8vIEZpbHRlciBmb3IgY2F0ZWdvcnktc3BlY2lmaWMgY2FsY3VsYXRpb25zXG4gICAgbGV0IGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXM6IGFueSA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSk7XG4gICAgfVxuXG4gICAgLy8gQ291bnQgQUxMIGNvbXBldGVuY2llcyBieSBjYXRlZ29yeSAobm90IGp1c3QgZmlsdGVyZWQgb25lcylcbiAgICBjb25zdCBtYXN0ZXJMaXN0QnlDYXRlZ29yeSA9IHsgdG90YWw6IGFsbENvbXBldGVuY2llcy5sZW5ndGgsIGJlaGF2aW91cmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBVc2UgYWxsIGF2YWlsYWJsZSBjb3Vyc2VzIGZvciBjb25zaXN0ZW50IGNvdmVyYWdlIGNhbGN1bGF0aW9uXG4gICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggd2hhdCdzIGF2YWlsYWJsZSBpbiB0aGUgRmlsdGVyIEJ5IENvbXBldGVuY3kgc2VjdGlvblxuICAgIGNvbnN0IGFsbENvdXJzZUNvbXBldGVuY2llcyA9IFtdXG4gICAgY29uc3QgYWxsQXZhaWxhYmxlQ291cnNlc0ZvclN0YXRzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cbiAgICBhbGxBdmFpbGFibGVDb3Vyc2VzRm9yU3RhdHMuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChjb3Vyc2UgJiYgY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIGNvbXBldGVuY2llcy5mb3JFYWNoKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgYWxsQ291cnNlQ29tcGV0ZW5jaWVzLnB1c2gobGlzdClcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ2FsbENvbXBldGVuY2llcycsIGFsbENvbXBldGVuY2llcylcbiAgICBjb25zb2xlLmxvZygnY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcycsIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMpXG4gICAgY29uc29sZS5sb2coJ2FsbENvdXJzZUNvbXBldGVuY2llcycsIGFsbENvdXJzZUNvbXBldGVuY2llcylcblxuICAgIC8vIENvdW50IGFsbCBjb21wZXRlbmNpZXMgYnkgdHlwZSBmb3IgcHJvcGVyIHRvdGFsc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsQ29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb21wZXRlbmN5VHlwZSA9IGFsbENvbXBldGVuY2llc1tpXVsndHlwZSddPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc29sZS5sb2coYENvbXBldGVuY3kgJHtpfTogdHlwZT1cIiR7Y29tcGV0ZW5jeVR5cGV9XCIsIGRhdGE6YCwgYWxsQ29tcGV0ZW5jaWVzW2ldKTtcbiAgICAgIGlmIChjb21wZXRlbmN5VHlwZSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBjb21wZXRlbmN5VHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICAgIG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2JlaGF2aW91cmFsJ10gKyAxXG4gICAgICB9XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdmdW5jdGlvbmFsJykge1xuICAgICAgICBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnZnVuY3Rpb25hbCddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXSArIDFcbiAgICAgIH1cbiAgICAgIGlmIChjb21wZXRlbmN5VHlwZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgICAgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddICsgMVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkgYWZ0ZXIgY291bnRpbmc6JywgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkpXG5cbiAgICAvLyBHZXQgbWF0Y2hpbmcgcmVzdWx0cyBmb3IgQUxMIGNvbXBldGVuY2llcyAoZm9yIG92ZXJhbGwgY292ZXJhZ2UpXG4gICAgY29uc3Qgb3ZlcmFsbFJlc3VsdCA9IHRoaXMuZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhhbGxDb21wZXRlbmNpZXMsIGFsbENvdXJzZUNvbXBldGVuY2llcyk7XG5cbiAgICAvLyBHZXQgbWF0Y2hpbmcgcmVzdWx0cyBmb3IgY2F0ZWdvcnktc3BlY2lmaWMgY29tcGV0ZW5jaWVzIChmb3IgZmlsdGVyZWQgdmlldylcbiAgICBjb25zdCBjYXRlZ29yeVJlc3VsdCA9IHRoaXMuZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpO1xuXG4gICAgLy8gU2V0IGNvbXBldGVuY3lDb3ZlcmVkQ291bnQgYmFzZWQgb24gc2VsZWN0ZWQgY2F0ZWdvcnkgKGZvciB0aGUgZmlsdGVyZWQgbnVtYmVycylcbiAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsndG90YWwnXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBjYXRlZ29yeVJlc3VsdFsnYmVoYXZpb3JhbCddIHx8IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2Z1bmN0aW9uYWwnXSB8fCAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2RvbWFpbiddIHx8IDA7XG4gICAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBPdmVyYWxsIENvdmVyYWdlIHNob3VsZCBBTFdBWVMgYmUgYmFzZWQgb24gQUxMIGNvbXBldGVuY2llcywgbm90IGZpbHRlcmVkXG4gICAgbGV0IHRvdGFsQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubGVuZ3RoOyAvLyBBbHdheXMgdXNlIHRvdGFsIGNvdW50XG4gICAgbGV0IG92ZXJhbGxDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0Wyd0b3RhbCddOyAvLyBBbHdheXMgdXNlIG92ZXJhbGwgcmVzdWx0c1xuICAgIGxldCBtYXRoUm91bmQgPSBNYXRoLnJvdW5kKChvdmVyYWxsQ292ZXJlZENvdW50IC8gdG90YWxDb21wZXRlbmNpZXMpICogMTAwKVxuICAgIHRoaXMub3ZlcmFsbENvdmVyYWdlID0gYCR7bWF0aFJvdW5kfSVgXG5cbiAgICBjb25zb2xlLmxvZygnT3ZlcmFsbCBDb3ZlcmFnZSBDYWxjdWxhdGlvbjonLCB7XG4gICAgICB0b3RhbENvbXBldGVuY2llczogdG90YWxDb21wZXRlbmNpZXMsXG4gICAgICBvdmVyYWxsQ292ZXJlZENvdW50OiBvdmVyYWxsQ292ZXJlZENvdW50LFxuICAgICAgb3ZlcmFsbENvdmVyYWdlOiB0aGlzLm92ZXJhbGxDb3ZlcmFnZSxcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSxcbiAgICAgIGNvbXBldGVuY3lDb3ZlcmVkQ291bnQ6IHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudFxuICAgIH0pO1xuXG4gICAgLy8gQWx3YXlzIGNhbGN1bGF0ZSBhbGwgY2F0ZWdvcnktc3BlY2lmaWMgbWV0cmljcyByZWdhcmRsZXNzIG9mIHNlbGVjdGVkIGNhdGVnb3J5XG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBkYXRhIGlzIGF2YWlsYWJsZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAvLyBVc2Ugb3ZlcmFsbFJlc3VsdCBmb3IgY29uc2lzdGVudCBjYWxjdWxhdGlvbnMgYWNyb3NzIGFsbCBjYXRlZ29yaWVzXG4gICAgdGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ2JlaGF2aW9yYWwnXSB8fCAwO1xuICAgIHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2JlaGF2aW91cmFsJ107XG4gICAgbGV0IGJlaGF2aW9yYWxNYXRoUm91bmQgPSB0aGlzLmJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcyA+IDAgPyBNYXRoLnJvdW5kKCh0aGlzLmJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5iZWhhdmlvcmFsQ292ZXJhZ2UgPSBgJHtiZWhhdmlvcmFsTWF0aFJvdW5kfSVgO1xuXG4gICAgdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ2Z1bmN0aW9uYWwnXSB8fCAwO1xuICAgIHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXTtcbiAgICBsZXQgZnVuY3Rpb25hbE1hdGhSb3VuZCA9IHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzID4gMCA/IE1hdGgucm91bmQoKHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgLyB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcykgKiAxMDApIDogMDtcbiAgICB0aGlzLmZ1bmN0aW9uYWxDb3ZlcmFnZSA9IGAke2Z1bmN0aW9uYWxNYXRoUm91bmR9JWA7XG5cbiAgICB0aGlzLmRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0Wydkb21haW4nXSB8fCAwO1xuICAgIHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMgPSBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnZG9tYWluJ107XG4gICAgbGV0IGRvbWFpbk1hdGhSb3VuZCA9IHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMgPiAwID8gTWF0aC5yb3VuZCgodGhpcy5kb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5kb21haW5Ub3RhbENvbXBldGVuY2llcykgKiAxMDApIDogMDtcbiAgICB0aGlzLmRvbWFpbkNvdmVyYWdlID0gYCR7ZG9tYWluTWF0aFJvdW5kfSVgO1xuXG4gICAgY29uc29sZS5sb2coJ0FsbCBjYXRlZ29yeSBtZXRyaWNzIGNhbGN1bGF0ZWQ6Jywge1xuICAgICAgYmVoYXZpb3JhbDogeyBjb3ZlcmVkOiB0aGlzLmJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50LCB0b3RhbDogdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmJlaGF2aW9yYWxDb3ZlcmFnZSB9LFxuICAgICAgZnVuY3Rpb25hbDogeyBjb3ZlcmVkOiB0aGlzLmZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50LCB0b3RhbDogdGhpcy5mdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmZ1bmN0aW9uYWxDb3ZlcmFnZSB9LFxuICAgICAgZG9tYWluOiB7IGNvdmVyZWQ6IHRoaXMuZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmRvbWFpbkNvdmVyYWdlIH0sXG4gICAgICBvdmVyYWxsOiB7IGNvdmVyZWQ6IG92ZXJhbGxDb3ZlcmVkQ291bnQsIHRvdGFsOiB0b3RhbENvbXBldGVuY2llcywgY292ZXJhZ2U6IHRoaXMub3ZlcmFsbENvdmVyYWdlIH0sXG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnksXG4gICAgICBjb21wZXRlbmN5Q292ZXJlZENvdW50Rm9yQ2F0ZWdvcnk6IHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdPdmVyYWxsIFJlc3VsdDonLCBvdmVyYWxsUmVzdWx0KTtcbiAgICBjb25zb2xlLmxvZygnQ2F0ZWdvcnkgUmVzdWx0OicsIGNhdGVnb3J5UmVzdWx0KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnknLCB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeSlcbiAgICB0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnYmVoYXZpb3JhbCcpXG4gICAgdGhpcy5mdW5jdGlvbmFsTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnZnVuY3Rpb25hbCcpXG4gICAgdGhpcy5kb21haW5Ob3RNYXRjaGVkID0gdGhpcy5nZXRDb21wZXRlbmN5QnlDYXRlZ29yeU5vdE1hdGNoaW5nKCdkb21haW4nKVxuXG4gICAgdGhpcy5nZXRCZWhhdmlvdXJhbE1hdGNoZWQoKVxuICAgIHRoaXMuZ2V0RnVuY3Rpb25hbE1hdGNoZWQoKVxuICAgIHRoaXMuZ2V0RG9tYWluTWF0Y2hlZCgpXG4gIH1cblxuICBnZXRNYXRjaGVkQ29tcGV0ZW5jeVN0YXRzKHByaW1hcnlBcnJheTogYW55W10sIHNlY29uZGFyeUFycmF5OiBhbnlbXSkge1xuICAgIC8vIENvbnZlcnQgYm90aCBhcnJheXMgdG8gZW5zdXJlIGNvbnNpc3RlbnQgY2FzaW5nXG4gICAgY29uc3QgY291bnRzOiBhbnkgPSB7XG4gICAgICBiZWhhdmlvcmFsOiAwLFxuICAgICAgZnVuY3Rpb25hbDogMCxcbiAgICAgIGRvbWFpbjogMCxcbiAgICAgIHRvdGFsOiAwXG4gICAgfTtcblxuICAgIC8vIENsZWFyIHRoZSBjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgYXJyYXkgZm9yIGZyZXNoIGNhbGN1bGF0aW9uXG4gICAgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXTtcblxuICAgIC8vIFNldCB0byBrZWVwIHRyYWNrIG9mIHVuaXF1ZSBtYXRjaGVzXG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IG1hdGNoZWRDb21wZXRlbmNpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgcHJpbWFyeSBvZiBwcmltYXJ5QXJyYXkpIHtcbiAgICAgIGNvbnN0IHR5cGVLZXkgPSBwcmltYXJ5LnR5cGU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdGhlbWVLZXkgPSBwcmltYXJ5LnRoZW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHN1YlRoZW1lS2V5ID0gcHJpbWFyeS5zdWJfdGhlbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICBsZXQgaXNNYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5IG9mIHNlY29uZGFyeUFycmF5KSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBzZWNvbmRhcnkga2V5c1xuICAgICAgICBsZXQgc2VjVHlwZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgbGV0IHNlY1RoZW1lID0gc2Vjb25kYXJ5Py5jb21wZXRlbmN5VGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgbGV0IHNlY1N1YlRoZW1lID0gc2Vjb25kYXJ5Py5jb21wZXRlbmN5U3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgICAvLyBGaXggZm9yIGRhdGEgaW5jb25zaXN0ZW5jeVxuICAgICAgICBpZiAoc2VjVHlwZSA9PT0gJ2JlaGF2aW91cmFsJykgc2VjVHlwZSA9ICdiZWhhdmlvcmFsJztcblxuICAgICAgICAvLyBDcmVhdGUgdW5pcXVlIG1hdGNoIGtleSBmb3IgcHJpbWFyeSBjb21wZXRlbmN5XG4gICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gYCR7dHlwZUtleX18JHt0aGVtZUtleX18JHtzdWJUaGVtZUtleX1gO1xuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNyb3NzLW1hdGNoaW5nIGxvZ2ljIGFzIHJlcXVlc3RlZDpcbiAgICAgICAgLy8gMS4gUm9sZSBtYXBwaW5nIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICAvLyAyLiBSb2xlIG1hcHBpbmcgU3ViIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWUgIFxuICAgICAgICAvLyAzLiBSb2xlIG1hcHBpbmcgVGhlbWUgdnMgQ291cnNlIFN1YiBUaGVtZVxuICAgICAgICAvLyA0LiBSb2xlIG1hcHBpbmcgU3ViIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICBjb25zdCB0aGVtZVRvVGhlbWVNYXRjaCA9IHRoZW1lS2V5ID09PSBzZWNUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2ggPSBzdWJUaGVtZUtleSA9PT0gc2VjU3ViVGhlbWU7XG4gICAgICAgIGNvbnN0IHRoZW1lVG9TdWJUaGVtZU1hdGNoID0gdGhlbWVLZXkgPT09IHNlY1N1YlRoZW1lO1xuICAgICAgICBjb25zdCBzdWJUaGVtZVRvVGhlbWVNYXRjaCA9IHN1YlRoZW1lS2V5ID09PSBzZWNUaGVtZTtcblxuICAgICAgICBsZXQgbWF0Y2hUeXBlID0gJyc7XG4gICAgICAgIGxldCBpc01hdGNoID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHR5cGVLZXkgPT09IHNlY1R5cGUgJiYgIXNlZW4uaGFzKG1hdGNoS2V5KSkge1xuICAgICAgICAgIGlmICh0aGVtZVRvVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1TdWJUaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW1lVG9TdWJUaGVtZU1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdWJUaGVtZVRvVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1N1YlRoZW1lLXRvLVRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKchSBNQVRDSCBGT1VORCBbJHttYXRjaFR5cGV9XTpgLCB7XG4gICAgICAgICAgICByb2xlTWFwcGluZzogeyB0eXBlOiB0eXBlS2V5LCB0aGVtZTogdGhlbWVLZXksIHN1YlRoZW1lOiBzdWJUaGVtZUtleSB9LFxuICAgICAgICAgICAgY291cnNlOiB7IHR5cGU6IHNlY1R5cGUsIHRoZW1lOiBzZWNUaGVtZSwgc3ViVGhlbWU6IHNlY1N1YlRoZW1lIH0sXG4gICAgICAgICAgICBtYXRjaFR5cGU6IG1hdGNoVHlwZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gU3RvcmUgbWF0Y2hlZCBjb21wZXRlbmN5IGluZm8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgICBvYmpbdHlwZUtleV0gPSBbdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KHRoZW1lS2V5LCBzdWJUaGVtZUtleSldO1xuICAgICAgICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5LnB1c2gob2JqKTtcbiAgICAgICAgICBzZWVuLmFkZChtYXRjaEtleSk7XG4gICAgICAgICAgbWF0Y2hlZENvbXBldGVuY2llcy5hZGQodGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KHRoZW1lS2V5LCBzdWJUaGVtZUtleSkpO1xuICAgICAgICAgIGlzTWF0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoY291bnRzLmhhc093blByb3BlcnR5KHR5cGVLZXkpKSB7XG4gICAgICAgICAgICBjb3VudHNbdHlwZUtleV0rKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRzW3R5cGVLZXldID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb3VudHMudG90YWwrKztcbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBsb29raW5nIGZvciBtYXRjaGVzIGZvciB0aGlzIHByaW1hcnkgY29tcGV0ZW5jeVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50cztcbiAgfVxuICBnZXRDb21wZXRlbmN5QnlDYXRlZ29yeU5vdE1hdGNoaW5nKGNhdGVnb3J5VHlwZSkge1xuICAgIC8vIEdldCBhbGwgY29tcGV0ZW5jaWVzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSByb2xlIG1hcHBpbmdcbiAgICBsZXQgYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3R5cGUnXT8udG9Mb3dlckNhc2UoKSA9PT0gY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLnB1c2goXG4gICAgICAgICAgdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KFxuICAgICAgICAgICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3RoZW1lJ10sXG4gICAgICAgICAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llc1tpXVsnc3ViX3RoZW1lJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IG1hdGNoZWQgY29tcGV0ZW5jaWVzIGZvciB0aGlzIGNhdGVnb3J5IGZyb20gY291cnNlc1xuICAgIGxldCBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gW107XG4gICAgY29uc29sZS5sb2coJ2NvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeScsIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeVtpXVtjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV0nLCB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeVtpXSlcbiAgICAgICAgLy8gRXh0cmFjdCBtYXRjaGVkIHRoZW1lcyBmcm9tIGNvdXJzZSBjb21wZXRlbmNpZXNcbiAgICAgICAgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV1bY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpXS5mb3JFYWNoKHRoZW1lID0+IHtcbiAgICAgICAgICBpZiAodGhlbWUpIHtcbiAgICAgICAgICAgIG1hdGNoZWRDb21wZXRlbmNpZXMucHVzaCh0aGVtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBtYXRjaGluZzogY2hlY2sgYm90aCB0aGVtZSBhbmQgc3VidGhlbWUgZnJvbSBjb3Vyc2VzIGFnYWluc3QgRlJBQyBjb21wZXRlbmNpZXNcbiAgICAvLyBJTVBPUlRBTlQ6IFVzZSBhbGwgYXZhaWxhYmxlIGNvdXJzZXMgZm9yIGNvbnNpc3RlbnQgY292ZXJhZ2UgY2FsY3VsYXRpb25cbiAgICBjb25zdCBhbGxDb3Vyc2VzRm9yTWF0Y2hpbmcgPSB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKTtcblxuICAgIGFsbENvdXJzZXNGb3JNYXRjaGluZy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICAgIGlmIChjb3Vyc2UgJiYgY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgY29tcGV0ZW5jaWVzLmZvckVhY2goKGNvbXA6IGFueSkgPT4ge1xuICAgICAgICBsZXQgc2VjVHlwZSA9IGNvbXA/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGlmIChzZWNUeXBlID09PSAnYmVoYXZpb3VyYWwnKSBzZWNUeXBlID0gJ2JlaGF2aW9yYWwnO1xuXG4gICAgICAgIGlmIChzZWNUeXBlID09PSBjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb25zdCBjb3Vyc2VUaGVtZSA9IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgY291cnNlU3ViVGhlbWUgPSBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IEZSQUMgY29tcGV0ZW5jeSBtYXRjaGVzIHRoaXMgY291cnNlIGNvbXBldGVuY3lcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFjQ29tcCA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzW2ldO1xuICAgICAgICAgICAgaWYgKGZyYWNDb21wWyd0eXBlJ10/LnRvTG93ZXJDYXNlKCkgPT09IGNhdGVnb3J5VHlwZT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICBjb25zdCBmcmFjVGhlbWUgPSBmcmFjQ29tcFsndGhlbWUnXT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGZyYWNTdWJUaGVtZSA9IGZyYWNDb21wWydzdWJfdGhlbWUnXT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgLy8gRW5oYW5jZWQgY3Jvc3MtbWF0Y2hpbmcgbG9naWMgKHNhbWUgYXMgaW4gZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyk6XG4gICAgICAgICAgICAgIC8vIDEuIENvdXJzZSBUaGVtZSB2cyBGUkFDIFRoZW1lXG4gICAgICAgICAgICAgIC8vIDIuIENvdXJzZSBTdWIgVGhlbWUgdnMgRlJBQyBTdWIgVGhlbWUgIFxuICAgICAgICAgICAgICAvLyAzLiBDb3Vyc2UgVGhlbWUgdnMgRlJBQyBTdWIgVGhlbWVcbiAgICAgICAgICAgICAgLy8gNC4gQ291cnNlIFN1YiBUaGVtZSB2cyBGUkFDIFRoZW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVRoZW1lVG9GcmFjVGhlbWUgPSBjb3Vyc2VUaGVtZSA9PT0gZnJhY1RoZW1lO1xuICAgICAgICAgICAgICBjb25zdCBjb3Vyc2VTdWJUaGVtZVRvRnJhY1N1YlRoZW1lID0gY291cnNlU3ViVGhlbWUgPT09IGZyYWNTdWJUaGVtZTtcbiAgICAgICAgICAgICAgY29uc3QgY291cnNlVGhlbWVUb0ZyYWNTdWJUaGVtZSA9IGNvdXJzZVRoZW1lID09PSBmcmFjU3ViVGhlbWU7XG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVN1YlRoZW1lVG9GcmFjVGhlbWUgPSBjb3Vyc2VTdWJUaGVtZSA9PT0gZnJhY1RoZW1lO1xuXG4gICAgICAgICAgICAgIGlmIChjb3Vyc2VUaGVtZVRvRnJhY1RoZW1lIHx8IGNvdXJzZVN1YlRoZW1lVG9GcmFjU3ViVGhlbWUgfHxcbiAgICAgICAgICAgICAgICBjb3Vyc2VUaGVtZVRvRnJhY1N1YlRoZW1lIHx8IGNvdXJzZVN1YlRoZW1lVG9GcmFjVGhlbWUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtYXRjaFR5cGUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY291cnNlVGhlbWVUb0ZyYWNUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVRoZW1lLXRvLUZSQUNUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlU3ViVGhlbWVUb0ZyYWNTdWJUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVN1YlRoZW1lLXRvLUZSQUNTdWJUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlVGhlbWVUb0ZyYWNTdWJUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVRoZW1lLXRvLUZSQUNTdWJUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlU3ViVGhlbWVUb0ZyYWNUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVN1YlRoZW1lLXRvLUZSQUNUaGVtZSc7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyFIENPTVBFVEVOQ1kgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV0gZm9yICR7Y2F0ZWdvcnlUeXBlfTpgLCB7XG4gICAgICAgICAgICAgICAgICBjb3Vyc2U6IHsgdGhlbWU6IGNvdXJzZVRoZW1lLCBzdWJUaGVtZTogY291cnNlU3ViVGhlbWUgfSxcbiAgICAgICAgICAgICAgICAgIGZyYWM6IHsgdGhlbWU6IGZyYWNUaGVtZSwgc3ViVGhlbWU6IGZyYWNTdWJUaGVtZSB9LFxuICAgICAgICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1hdGNoZWRDb21wZXRlbmNpZXMucHVzaCh0aGlzLmdldFRoZW1lU3ViVGhlbWVLZXkoZnJhY1RoZW1lLCBmcmFjU3ViVGhlbWUpKTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gRm91bmQgYSBtYXRjaCwgbW92ZSB0byBuZXh0IGNvdXJzZSBjb21wZXRlbmN5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBtYXRjaGVkIGNvbXBldGVuY2llc1xuICAgIG1hdGNoZWRDb21wZXRlbmNpZXMgPSBbLi4ubmV3IFNldChtYXRjaGVkQ29tcGV0ZW5jaWVzKV07XG5cbiAgICBjb25zb2xlLmxvZyhgXFxuPT09ICR7Y2F0ZWdvcnlUeXBlLnRvVXBwZXJDYXNlKCl9IENPTVBFVEVOQ1kgTUFUQ0hJTkcgPT09YCk7XG4gICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnlUeXBlfSAtIEFsbCBGUkFDIGNvbXBldGVuY2llczpgLCBhbGxDYXRlZ29yeUNvbXBldGVuY2llcyk7XG4gICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnlUeXBlfSAtIE1hdGNoZWQgZnJvbSBjb3Vyc2VzOmAsIG1hdGNoZWRDb21wZXRlbmNpZXMpO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBNYXRjaCByYXRlOiAke21hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RofS8ke2FsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLmxlbmd0aH0gKCR7TWF0aC5yb3VuZCgobWF0Y2hlZENvbXBldGVuY2llcy5sZW5ndGggLyBhbGxDYXRlZ29yeUNvbXBldGVuY2llcy5sZW5ndGgpICogMTAwKX0lKWApO1xuXG4gICAgLy8gUmV0dXJuIHVubWF0Y2hlZCBjb21wZXRlbmNpZXMgKHRob3NlIGluIHJvbGUgbWFwcGluZyBidXQgbm90IGNvdmVyZWQgYnkgY291cnNlcylcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlU3RyaW5nQXJyYXlzKGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgfVxuXG4gIGNvbXBhcmVTdHJpbmdBcnJheXMoYXJyMTogc3RyaW5nW10sIGFycjI6IHN0cmluZ1tdKSB7XG4gICAgY29uc29sZS5sb2coJ0FsbCBjb21wZXRlbmNpZXMgaW4gY2F0ZWdvcnk6JywgYXJyMSk7XG4gICAgY29uc29sZS5sb2coJ01hdGNoZWQgY29tcGV0ZW5jaWVzIGZyb20gY291cnNlczonLCBhcnIyKTtcblxuICAgIC8vIFJldHVybiBpdGVtcyBpbiBhcnIxIHRoYXQgYXJlIE5PVCBpbiBhcnIyICh1bm1hdGNoZWQgY29tcGV0ZW5jaWVzKVxuICAgIGNvbnN0IHVubWF0Y2hlZCA9IGFycjEuZmlsdGVyKGl0ZW0gPT4gIWFycjIuaW5jbHVkZXMoaXRlbSkpO1xuICAgIGNvbnNvbGUubG9nKCdVbm1hdGNoZWQgY29tcGV0ZW5jaWVzOicsIHVubWF0Y2hlZCk7XG5cbiAgICByZXR1cm4gdW5tYXRjaGVkO1xuICB9XG5cbiAgYWRkQ291cnNlKG1pc3NpbmdDb21wZXRlbmN5Pzogc3RyaW5nLCBjb21wZXRlbmN5VHlwZT86IHN0cmluZykge1xuICAgIGxldCBkaWFsb2dEYXRhID0geyAuLi50aGlzLnBsYW5EYXRhIH07XG5cbiAgICAvLyBJZiBjb21wZXRlbmN5IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCBhZGQgdGhlbSB0byB0aGUgZGlhbG9nIGRhdGFcbiAgICBpZiAobWlzc2luZ0NvbXBldGVuY3kgJiYgY29tcGV0ZW5jeVR5cGUpIHtcbiAgICAgIGNvbnN0IHsgdGhlbWUsIHN1YlRoZW1lIH0gPSB0aGlzLnBhcnNlVGhlbWVBbmRTdWJUaGVtZShtaXNzaW5nQ29tcGV0ZW5jeSk7XG5cbiAgICAgIGRpYWxvZ0RhdGEucHJlZmlsbENvbXBldGVuY3kgPSB7XG4gICAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIHN1YlRoZW1lOiBzdWJUaGVtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZENvdXJzZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgYWRkZWQgc3VjY2Vzc2Z1bGx5ISBSZWZyZXNoaW5nIGRhdGEuLi4nKTtcblxuICAgICAgICAvLyBSZWZyZXNoIHVzZXIgY291cnNlcyB0byBpbmNsdWRlIHRoZSBuZXdseSBhZGRlZCBjb3Vyc2VcbiAgICAgICAgdGhpcy5nZXRVc2VyQ291cnNlKCk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBnYXAgYW5hbHlzaXMgd2l0aCB0aGUgbGF0ZXN0IGRhdGFcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHYXAgYW5hbHlzaXMgcmVmcmVzaGVkIGFmdGVyIGNvdXJzZSBhZGRpdGlvbicpO1xuICAgICAgICB9LCA1MDApOyAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgZGF0YSBpcyBsb2FkZWRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZpbHRlck9uQ29tcGV0ZW5jeVRoZW1lKHRoZW1lSXRlbSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9IHRoZW1lSXRlbTtcbiAgICBjb25zdCB7IHRoZW1lLCBzdWJUaGVtZSB9ID0gdGhpcy5wYXJzZVRoZW1lQW5kU3ViVGhlbWUodGhlbWVJdGVtIHx8ICcnKTtcbiAgICBsZXQgdGhlbWVOYW1lID0gdGhlbWU7XG4gICAgbGV0IHN1YlRoZW1lTmFtZSA9IHN1YlRoZW1lO1xuXG4gICAgY29uc29sZS5sb2coJ0ZpbHRlcmluZyBieSB0aGVtZTonLCB0aGVtZU5hbWUsICdzdWJUaGVtZTonLCBzdWJUaGVtZU5hbWUsICdUYWIgaW5kZXg6JywgdGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4KTtcblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb21wZXRlbmN5IHR5cGUgYmFzZWQgb24gdGhlIGFjdGl2ZSB0YWJcbiAgICBsZXQgY29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAxKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdiZWhhdmlvcmFsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMikge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnZnVuY3Rpb25hbCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDMpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ2RvbWFpbic7XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCBhdmFpbGFibGUgY291cnNlcyB1c2luZyB0aGUgaGVscGVyIG1ldGhvZFxuICAgIGNvbnN0IGFsbEF2YWlsYWJsZUNvdXJzZXMgPSB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKTtcbiAgICBjb25zb2xlLmxvZygnVG90YWwgY291cnNlcyB0byBmaWx0ZXIgZnJvbTonLCBhbGxBdmFpbGFibGVDb3Vyc2VzLmxlbmd0aCk7XG5cbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQXZhaWxhYmxlQ291cnNlcy5maWx0ZXIoY291cnNlID0+IHtcbiAgICAgIGlmICghY291cnNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gRmlsdGVyIGJ5IGNvbXBldGVuY3kgdHlwZSBhbmQgdGhlbWUvc3VidGhlbWVcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXMuc29tZShjb21wID0+IHtcbiAgICAgICAgaWYgKCFjb21wKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGV0ZW5jeSB0eXBlIG1hdGNoZXMgY3VycmVudCB0YWJcbiAgICAgICAgbGV0IGNvbXBUeXBlID0gY29tcD8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoY29tcFR5cGUgPT09ICdiZWhhdmlvdXJhbCcpIGNvbXBUeXBlID0gJ2JlaGF2aW9yYWwnOyAvLyBOb3JtYWxpemUgc3BlbGxpbmdcblxuICAgICAgICBpZiAoY29tcFR5cGUgIT09IGNvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgY3Jvc3MtbWF0Y2hpbmcgbGlrZSBnYXAgYW5hbHlzaXM6IHRoZW1lIHZzIHN1YnRoZW1lIGFuZCBzdWJ0aGVtZSB2cyB0aGVtZVxuICAgICAgICBjb25zdCBjb21wVGhlbWUgPSBjb21wPy5jb21wZXRlbmN5VGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG4gICAgICAgIGNvbnN0IGNvbXBTdWJUaGVtZSA9IGNvbXA/LmNvbXBldGVuY3lTdWJUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoVGhlbWUgPSB0aGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNyb3NzLW1hdGNoaW5nIGxvZ2ljIGxpa2UgZ2FwIGFuYWx5c2lzOlxuICAgICAgICAvLyAxLiBTZWxlY3RlZCBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgLy8gMi4gU2VsZWN0ZWQgU3ViIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWUgIFxuICAgICAgICAvLyAzLiBTZWxlY3RlZCBUaGVtZSB2cyBDb3Vyc2UgU3ViIFRoZW1lXG4gICAgICAgIC8vIDQuIFNlbGVjdGVkIFN1YiBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgY29uc3QgdGhlbWVUb1RoZW1lTWF0Y2ggPSBzZWFyY2hUaGVtZSAmJiBjb21wVGhlbWUgPT09IHNlYXJjaFRoZW1lO1xuICAgICAgICBjb25zdCBzdWJUaGVtZVRvU3ViVGhlbWVNYXRjaCA9IHNlYXJjaFN1YlRoZW1lICYmIGNvbXBTdWJUaGVtZSA9PT0gc2VhcmNoU3ViVGhlbWU7XG4gICAgICAgIGNvbnN0IHRoZW1lVG9TdWJUaGVtZU1hdGNoID0gc2VhcmNoVGhlbWUgJiYgY29tcFN1YlRoZW1lID09PSBzZWFyY2hUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1RoZW1lTWF0Y2ggPSBzZWFyY2hTdWJUaGVtZSAmJiBjb21wVGhlbWUgPT09IHNlYXJjaFN1YlRoZW1lO1xuXG4gICAgICAgIGNvbnN0IGlzTWF0Y2ggPSB0aGVtZVRvVGhlbWVNYXRjaCB8fCBzdWJUaGVtZVRvU3ViVGhlbWVNYXRjaCB8fCB0aGVtZVRvU3ViVGhlbWVNYXRjaCB8fCBzdWJUaGVtZVRvVGhlbWVNYXRjaDtcblxuICAgICAgICAvLyBMb2cgbWF0Y2hlcyBmb3IgZGVidWdnaW5nIChzaW1pbGFyIHRvIGdhcCBhbmFseXNpcylcbiAgICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgICBsZXQgbWF0Y2hUeXBlID0gJyc7XG4gICAgICAgICAgaWYgKHRoZW1lVG9UaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHRoZW1lVG9TdWJUaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHN1YlRoZW1lVG9UaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tVGhlbWUnO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coYOKchSBGSUxURVIgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV06YCwge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHsgdGhlbWU6IHNlYXJjaFRoZW1lLCBzdWJUaGVtZTogc2VhcmNoU3ViVGhlbWUgfSxcbiAgICAgICAgICAgIGNvdXJzZTogeyB0eXBlOiBjb21wVHlwZSwgdGhlbWU6IGNvbXBUaGVtZSwgc3ViVGhlbWU6IGNvbXBTdWJUaGVtZSB9LFxuICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGlmIGFueSBvZiB0aGUgY3Jvc3MtbWF0Y2hpbmcgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgICAgIHJldHVybiBpc01hdGNoO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsdGVyZWQgY291cnNlcyBmb3IgdGhlbWU6JywgdGhlbWVOYW1lLCAnQ291bnQ6JywgdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGgpO1xuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJlZCBjb3Vyc2VzOicsIHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKGMgPT4gYy5uYW1lIHx8IGMuY291cnNlKSk7XG4gIH1cblxuICBjbGVhclRoZW1lRmlsdGVyKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnO1xuICAgIC8vIFJlc2V0IHRvIGNhdGVnb3J5IGZpbHRlcmVkIGNvdXJzZXMgYnkgY2FsbGluZyB0aGUgdGFiIGNoYW5nZSBtZXRob2RcbiAgICB0aGlzLm9uSW5uZXJUYWJDaGFuZ2Uoe1xuICAgICAgaW5kZXg6IHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCxcbiAgICAgIHRhYjogeyB0ZXh0TGFiZWw6IHRoaXMuaW5uZXJUYWJBY3RpdmVUZXh0IH1cbiAgICB9IGFzIGFueSk7XG4gICAgY29uc29sZS5sb2coJ1RoZW1lIGZpbHRlciBjbGVhcmVkLCBzaG93aW5nIGFsbCBjb3Vyc2VzIGZvciBjYXRlZ29yeTonLCB0aGlzLmlubmVyVGFiQWN0aXZlVGV4dCk7XG4gIH1cblxuICBpc1RoZW1lU2VsZWN0ZWQodGhlbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPT09IHRoZW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjb3Vyc2UgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgZmlsdGVyIHdpdGggcHJlZmlsbGVkIGNvbXBldGVuY3kgZGF0YVxuICAgKi9cbiAgYWRkQ291cnNlRm9yU2VsZWN0ZWRUaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0aGVtZSBzZWxlY3RlZCBmb3IgYWRkaW5nIGNvdXJzZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGhlbWUsIHN1YlRoZW1lIH0gPSB0aGlzLnBhcnNlVGhlbWVBbmRTdWJUaGVtZSh0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIpO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbXBldGVuY3kgdHlwZSBiYXNlZCBvbiB0aGUgYWN0aXZlIHRhYlxuICAgIC8vIE1hcCB0aGUgdGFiIGxhYmVscyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IEFkZENvdXJzZUNvbXBvbmVudFxuICAgIGxldCBjb21wZXRlbmN5VHlwZSA9ICcnO1xuICAgIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDEpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0JlaGF2aW9yYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJiZWhhdmlvdXJhbFwiXG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDIpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0Z1bmN0aW9uYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJmdW5jdGlvbmFsXCJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMykge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJzsgLy8gVGFiIGxhYmVsIGlzIFwiZG9tYWluXCJcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVGFiIG1hcHBpbmcgLSBpbm5lclRhYkFjdGl2ZUluZGV4OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCxcbiAgICAgICdpbm5lclRhYkFjdGl2ZVRleHQ6JywgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQsXG4gICAgICAnbWFwcGVkIGNvbXBldGVuY3lUeXBlOicsIGNvbXBldGVuY3lUeXBlKTtcblxuICAgIGNvbnNvbGUubG9nKCdBZGRpbmcgY291cnNlIGZvciBtaXNzaW5nIGNvbXBldGVuY3k6Jywge1xuICAgICAgY29tcGV0ZW5jeVR5cGUsXG4gICAgICB0aGVtZSxcbiAgICAgIHN1YlRoZW1lLFxuICAgICAgc2VsZWN0ZWRUaGVtZUZpbHRlcjogdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGRhdGEgd2l0aCBwcmVmaWxsZWQgY29tcGV0ZW5jeSBpbmZvcm1hdGlvblxuICAgIGxldCBkaWFsb2dEYXRhID0geyAuLi50aGlzLnBsYW5EYXRhIH07XG4gICAgZGlhbG9nRGF0YS5wcmVmaWxsQ29tcGV0ZW5jeSA9IHtcbiAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgc3ViVGhlbWU6IHN1YlRoZW1lIHx8ICcnIC8vIEluY2x1ZGUgc3ViLXRoZW1lIGlmIGF2YWlsYWJsZVxuICAgIH07XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZENvdXJzZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIGFkZGVkIHN1Y2Nlc3NmdWxseSBmb3IgY29tcGV0ZW5jeSEgUmVmcmVzaGluZyBkYXRhLi4uJyk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB1c2VyIGNvdXJzZXMgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgY291cnNlXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBnYXAgYW5hbHlzaXMgYWZ0ZXIgY291cnNlIGFkZGl0aW9uXG4gICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldER1cmF0aW9uKHRpbWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuY29udmVydCh0aW1lKTtcbiAgfVxuXG5cbiAgZ2V0QmVoYXZpb3VyYWxNYXRjaGVkKCkge1xuICAgIHRoaXMuYmVoYXZpb3VyYWxNYXRjaGVkID0gW11cbiAgICBjb25zb2xlLmxvZygndGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMnLCB0aGlzLnBsYW5EYXRhKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZCcsIHRoaXMuYmVoYXZpb3VyYWxOb3RNYXRjaGVkKVxuICAgIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY29tcGV0ZW5jeUtleSA9IHRoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKTtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0/LnR5cGUgPT09ICdCZWhhdmlvcmFsJyAmJiB0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZC5pbmRleE9mKGNvbXBldGVuY3lLZXkpIDwgMCkge1xuICAgICAgICB0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC0tJywgdGhpcy5iZWhhdmlvdXJhbE1hdGNoZWQpXG4gIH1cblxuICBnZXRGdW5jdGlvbmFsTWF0Y2hlZCgpIHtcbiAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkID0gW11cbiAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBldGVuY3lLZXkgPSB0aGlzLmdldFRoZW1lU3ViVGhlbWVLZXkoaXRlbT8udGhlbWUsIGl0ZW0/LnN1Yl90aGVtZSk7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtPy50eXBlID09PSAnRnVuY3Rpb25hbCcgJiYgdGhpcy5mdW5jdGlvbmFsTm90TWF0Y2hlZC5pbmRleE9mKGNvbXBldGVuY3lLZXkpIDwgMCkge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkXG4gIH1cblxuICBnZXREb21haW5NYXRjaGVkKCkge1xuICAgIHRoaXMuZG9tYWluTWF0Y2hlZCA9IFtdXG4gICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wZXRlbmN5S2V5ID0gdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KGl0ZW0/LnRoZW1lLCBpdGVtPy5zdWJfdGhlbWUpO1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8udHlwZSA9PT0gJ0RvbWFpbicgJiYgdGhpcy5kb21haW5Ob3RNYXRjaGVkLmluZGV4T2YoY29tcGV0ZW5jeUtleSkgPCAwKSB7XG4gICAgICAgIHRoaXMuZG9tYWluTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zb2xlLmxvZygndGhpcy5kb21haW5NYXRjaGVkLS0nLCB0aGlzLmRvbWFpbk1hdGNoZWQpXG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRoZW1lV2l0aFN1YlRoZW1lKHRoZW1lOiBhbnksIHN1YlRoZW1lOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUaGVtZSA9ICh0aGVtZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFN1YlRoZW1lID0gKHN1YlRoZW1lIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblxuICAgIGlmIChub3JtYWxpemVkVGhlbWUgJiYgbm9ybWFsaXplZFN1YlRoZW1lKSB7XG4gICAgICByZXR1cm4gYCR7bm9ybWFsaXplZFRoZW1lfSAtICR7bm9ybWFsaXplZFN1YlRoZW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRUaGVtZSB8fCBub3JtYWxpemVkU3ViVGhlbWU7XG4gIH1cblxuICBwcml2YXRlIGdldFRoZW1lU3ViVGhlbWVLZXkodGhlbWU6IGFueSwgc3ViVGhlbWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGhlbWVXaXRoU3ViVGhlbWUodGhlbWUsIHN1YlRoZW1lKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaGVtZUFuZFN1YlRoZW1lKHZhbHVlOiBzdHJpbmcpOiB7IHRoZW1lOiBzdHJpbmc7IHN1YlRoZW1lOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdGV4dCA9ICh2YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4geyB0aGVtZTogJycsIHN1YlRoZW1lOiAnJyB9O1xuICAgIH1cblxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCcgLSAnKSkge1xuICAgICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KCcgLSAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRoZW1lOiAocGFydHMuc2hpZnQoKSB8fCAnJykudHJpbSgpLFxuICAgICAgICBzdWJUaGVtZTogcGFydHMuam9pbignIC0gJykudHJpbSgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCctJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRoZW1lOiBwYXJ0c1swXS50cmltKCksXG4gICAgICAgICAgc3ViVGhlbWU6IHBhcnRzWzFdLnRyaW0oKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHRoZW1lOiB0ZXh0LCBzdWJUaGVtZTogJycgfTtcbiAgfVxuXG4gIGRvd25sb2FkUERGKCkge1xuICAgIHRoaXMuaXNQREZEb3dubG9hZCA9IHRydWVcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gV2FpdCBmb3IgaW1hZ2VzIHRvIGxvYWRcbiAgICBjb25zdCBpbWFnZXMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgIGNvbnN0IHByb21pc2VzID0gQXJyYXkuZnJvbShpbWFnZXMpLm1hcCgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaW1nLmNvbXBsZXRlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBpbWcub25sb2FkID0gcmVzb2x2ZSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBtYXJnaW46IDAuMjAsXG4gICAgICAgIGZpbGVuYW1lOiAnR2FwIEFuYWx5c2lzLnBkZicsXG4gICAgICAgIGltYWdlOiB7IHR5cGU6ICdqcGVnJywgcXVhbGl0eTogMC45OCB9LFxuICAgICAgICBodG1sMmNhbnZhczoge1xuICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgIHVzZUNPUlM6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsWTogMCxcbiAgICAgICAgfSxcbiAgICAgICAganNQREY6IHtcbiAgICAgICAgICB1bml0OiAnaW4nLFxuICAgICAgICAgIGZvcm1hdDogJ2E0JyxcbiAgICAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgICAgICB9LFxuICAgICAgICBwYWdlYnJlYWs6IHtcbiAgICAgICAgICBtb2RlOiBbJ2NzcycsICdsZWdhY3knXSxcbiAgICAgICAgICBiZWZvcmU6ICcucGFnZS1icmVhaycsXG4gICAgICAgICAgYXZvaWQ6IFsnLm5vLWJyZWFrJ11cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaHRtbDJwZGYoKS5mcm9tKGVsZW1lbnQpLnNldChvcHRpb25zKS5zYXZlKClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzUERGRG93bmxvYWQgPSBmYWxzZVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sIDMwMDApO1xuICAgIH0pO1xuICB9XG5cblxuICByZWRpcmVjdFRvVG9jKGl0ZW0pIHtcbiAgICBpZiAoaXRlbT8ucHVibGljX2xpbmspIHtcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0/LnB1YmxpY19saW5rLCAnX2JsYW5rJylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVybCA9IGBodHRwczovL3BvcnRhbC5pZ290a2FybWF5b2dpLmdvdi5pbi9hcHAvdG9jLyR7aXRlbT8uaWRlbnRpZmllcn0vb3ZlcnZpZXc/YFxuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJylcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGdhcCBhbmFseXNpcyBzdGF0cyBhZnRlciBpbml0aWFsIGRhdGEgbG9hZFxuICAgKi9cbiAgaW5pdGlhbGl6ZUdhcEFuYWx5c2lzU3RhdHMoKSB7XG4gICAgLy8gU2V0IGEgc21hbGwgdGltZW91dCB0byBlbnN1cmUgYWxsIGFzeW5jIG9wZXJhdGlvbnMgY29tcGxldGVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmRDb3Vyc2VzICYmIHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdhcEFuYWx5c2lzU3RhdHMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgY291cnNlcyBhcmUgdXBkYXRlZCAobGlrZSBzdWdnZXN0ZWQgY291cnNlcyBhZGRlZClcbiAgICovXG4gIHVwZGF0ZUdhcEFuYWx5c2lzQWZ0ZXJDb3Vyc2VzVXBkYXRlKCkge1xuICAgIC8vIERvbid0IG1vZGlmeSBvcmlnaW5hbERhdGEgLSBpdCBzaG91bGQgcmVtYWluIGFzIEFJIHJlY29tbWVuZGVkIGNvdXJzZXMgb25seVxuICAgIC8vIFRoZSBnYXAgYW5hbHlzaXMgYWxyZWFkeSBwcm9wZXJseSBpbmNsdWRlcyBhbGwgY291cnNlIHR5cGVzXG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHNcbiAgICB0aGlzLmdhcEFuYWx5c2lzU3RhdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgYnkgZGVsZXRpbmcgZXhpc3RpbmcgcmVjb21tZW5kYXRpb25zIGFuZCBnZW5lcmF0aW5nIG5ldyBvbmVzXG4gICAqL1xuICBhc3luYyByZWdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCkge1xuICAgIGlmICh0aGlzLmlzUmVnZW5lcmF0aW5nKSB7XG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHJlZ2VuZXJhdGlvbnNcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZyA9IHRydWU7XG5cbiAgICAgIC8vIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybWF0aW9uRGlhbG9nKCk7XG5cbiAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTZXQgcmVnZW5lcmF0aW9uIHByb2dyZXNzIHN0YXRlXG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlOyAvLyBIaWRlIG1haW4gY29udGVudCBkdXJpbmcgcmVnZW5lcmF0aW9uXG5cbiAgICAgIC8vIFN0ZXAgMTogRGVsZXRlIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnNcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCk7XG5cbiAgICAgIC8vIFN0ZXAgMjogR2VuZXJhdGUgbmV3IGNvdXJzZSByZWNvbW1lbmRhdGlvbnNcbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVOZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTtcblxuICAgICAgLy8gU3RlcCAzOiBSZWZyZXNoIHRoZSBjdXJyZW50IGRhdGFcbiAgICAgIHRoaXMucmVmcmVzaENvbXBvbmVudCgpO1xuXG4gICAgICBjb25zb2xlLmxvZygnQ291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgcmVnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdDbG9zZScsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnc3VjY2Vzcy1zbmFja2JhciddXG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbjonLCBlcnJvcik7XG5cbiAgICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gcmVnZW5lcmF0ZSBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLiBQbGVhc2UgdHJ5IGFnYWluLicsICdDbG9zZScsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnZXJyb3Itc25hY2tiYXInXVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7IC8vIEVuc3VyZSBtYWluIGNvbnRlbnQgaXMgc2hvd24gYWZ0ZXIgcmVnZW5lcmF0aW9uXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZyBmb3IgcmVnZW5lcmF0ZSBhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlZ2VuZXJhdGVDb25maXJtYXRpb25EaWFsb2csIHtcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdyZWdlbmVyYXRlLWNvbmZpcm1hdGlvbi1kaWFsb2cnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQgPT09IHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZm9yIHRoZSBjdXJyZW50IHJvbGUgbWFwcGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBkZWxldGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgcm9sZU1hcElkID0gdGhpcy5wbGFuRGF0YT8uaWQ7XG5cbiAgICAgIGlmICghcm9sZU1hcElkKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JvbGUgbWFwcGluZyBJRCBub3QgZm91bmQnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ0RlbGV0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZm9yIHJvbGUgbWFwcGluZzonLCByb2xlTWFwSWQpO1xuXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKHJvbGVNYXBJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgZGVsZXRlZCBzdWNjZXNzZnVsbHk6JywgcmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uczonLCBlcnJvcik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgbmV3IGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZHVyaW5nIHJlZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld0NvdXJzZVJlY29tbWVuZGF0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmF0aW5nIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VGb3JSZWdlbmVyYXRpb24odGhpcy5wbGFuRGF0YS5pZCk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZWQgY291cnNlIGdlbmVyYXRpb24gc3BlY2lmaWNhbGx5IGZvciByZWdlbmVyYXRpb24gd2l0aCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIGdldFJlY29tbWVuZGVkQ291cnNlRm9yUmVnZW5lcmF0aW9uKHJvbGVfbWFwcGluZ19pZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gU3RhcnQgdGhlIHByb2dyZXNzaXZlIGxvYWRpbmcgc2ltdWxhdGlvbiBmb3IgcmVnZW5lcmF0aW9uXG4gICAgICB0aGlzLnN0YXJ0UmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVMb2FkaW5nKCk7XG5cbiAgICAgIC8vIE1ha2UgdGhlIGFjdHVhbCBBUEkgY2FsbFxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIC8vICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAgICAgLy8gU3RvcCBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBzaG93IGNvbXBsZXRpb25cbiAgICAgIC8vICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7IC8vIFRoaXMgd2lsbCBzdG9wIHRoZSBpbnRlcnZhbFxuICAgICAgLy8gICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgLy8gICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIHJlZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAvLyAgICAgLy8gQ2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgYWZ0ZXIgc2hvd2luZyBjb21wbGV0aW9uXG4gICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgLy8gICAgIH0sIDIwMDApO1xuICAgICAgLy8gICB9LFxuICAgICAgLy8gICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAvLyAgICAgLy8gU3RvcCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gICAgICAvLyAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgLy8gICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgICAgLy8gICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBlcnJvciBjYXNlc1xuICAgICAgLy8gICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOSB8fCBlcnJvci5lcnJvcj8uZGV0YWlsPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuICAgICAgLy8gICAgICAgLy8gQ291cnNlIHJlY29tbWVuZGF0aW9ucyBhbHJlYWR5IGV4aXN0IC0gdGhpcyBpcyBub3JtYWxcbiAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGFscmVhZHkgZXhpc3QsIGxvYWRpbmcgZXhpc3RpbmcgZGF0YS4uLicpO1xuXG4gICAgICAvLyAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGluZyBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcblxuICAgICAgLy8gICAgICAgLy8gVHJ5IHRvIGdldCBleGlzdGluZyBkYXRhXG4gICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgLy8gICAgICAgICBuZXh0OiAoZXhpc3RpbmdSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgbG9hZGVkIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMnKTtcbiAgICAgIC8vICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgIC8vICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGVkIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgc3VjY2Vzc2Z1bGx5ISc7XG5cbiAgICAgIC8vICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShleGlzdGluZ1Jlc3BvbnNlKTtcbiAgICAgIC8vICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgIC8vICAgICAgICAgfSxcbiAgICAgIC8vICAgICAgICAgZXJyb3I6IChsb2FkRXJyb3IpID0+IHtcbiAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zOicsIGxvYWRFcnJvcik7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgLy8gICAgICAgICAgIHJlamVjdChsb2FkRXJyb3IpO1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICB9KTtcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb246JywgZXJyb3IpO1xuICAgICAgLy8gICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnR2VuZXJhdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcblxuICAgICAgaW50ZXJ2YWwoNTAwMClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5waXBlKFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBQYXNzIGVycm9yIHRocm91Z2ggb2JzZXJ2YWJsZSBzbyBwb2xsaW5nIGxvZ2ljIGNhbiBpbnNwZWN0IGl0XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHsgZXJyb3IgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIHRhcChyZXMgPT4gY29uc29sZS5sb2coXCJQb2xsaW5nIHJlc3VsdDpcIiwgcmVzKSksXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiDirIfvuI8gU1RPUCBQT0xMSU5HIG9ubHkgd2hlbjpcbiAgICAgICAgICAgKiAtIFNVQ0NFU1Mg4oaSIHJlcy5zdGF0dXMgPT09IENPTVBMRVRFRFxuICAgICAgICAgICAqIC0gRVJST1Ig4oaSIGNvbmZsaWN0IC8gYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0YWtlV2hpbGUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHJldHVybiBmYWxzZTsgICAgICAgLy8gU3RvcFxuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3I/LnN0YXR1cyA9PT0gNDA5KSByZXR1cm4gZmFsc2U7ICAgICAgICAvLyBTdG9wXG4gICAgICAgICAgICBpZiAocmVzPy5lcnJvcj8uZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHJldHVybiBmYWxzZTsgLy8gU3RvcFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgcG9sbGluZ1xuICAgICAgICAgIH0sIHRydWUpIC8vIGluY2x1ZGUgZmluYWwgZW1pc3Npb25cbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICogIFNVQ0NFU1MgQ0FTRSAoc3RhdHVzIENPTVBMRVRFRClcbiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyByZWdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICogIEVSUk9SIENBU0UgKDQwOSAvIGFscmVhZHkgZXhpc3RzKVxuICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXMuZXJyb3I7XG5cbiAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA5IHx8IGVycm9yPy5lcnJvcj8uZGV0YWlsPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRpbmcgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogKGV4aXN0aW5nRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXN0aW5nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBsb2FkRXJyb3IgPT4gcmVqZWN0KGxvYWRFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8qKiBBbnkgb3RoZXIgZXJyb3Ig4oaSIHN0b3AgJiByZWplY3QgKi9cbiAgICAgICAgICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBTVElMTCBQUk9DRVNTSU5HIChrZWVwIHBvbGxpbmcpXG4gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSBNYXRoLm1pbih0aGlzLnByb2dyZXNzUGVyY2VudGFnZSArIDEwLCA5NSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnU3RpbGwgcHJvY2Vzc2luZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvLyBQcm9ncmVzc2l2ZSBsb2FkaW5nIG1ldGhvZHMgZm9yIHJlZ2VuZXJhdGlvblxuICBzdGFydFJlZ2VuZXJhdGl2ZVByb2dyZXNzaXZlTG9hZGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuc2ltdWxhdGVSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZVN0YWdlcygpO1xuICB9XG5cbiAgc2ltdWxhdGVSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZVN0YWdlcygpIHtcbiAgICBsZXQgY3VycmVudFN0YWdlSW5kZXggPSAwO1xuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSA2MDAwMDsgLy8gNjAgc2Vjb25kcyBlc3RpbWF0ZWQgZHVyYXRpb25cbiAgICBjb25zdCBzdGFnZUludGVydmFsID0gdG90YWxEdXJhdGlvbiAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGg7XG5cbiAgICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgLy8gU3RvcCBpZiByZWdlbmVyYXRpb24gaXMgY29tcGxldGVcbiAgICAgIGlmICghdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcykge1xuICAgICAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpcy5zdGFnZVN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGFnZVByb2dyZXNzID0gKGVsYXBzZWQgJSBzdGFnZUludGVydmFsKSAvIHN0YWdlSW50ZXJ2YWw7XG4gICAgICBjb25zdCBzdGFnZUluZGV4ID0gTWF0aC5taW4oTWF0aC5mbG9vcihlbGFwc2VkIC8gc3RhZ2VJbnRlcnZhbCksIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGggLSAxKTtcblxuICAgICAgLy8gVXBkYXRlIHN0YWdlIGlmIG5lZWRlZFxuICAgICAgaWYgKHN0YWdlSW5kZXggIT09IGN1cnJlbnRTdGFnZUluZGV4ICYmIHN0YWdlSW5kZXggPCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSB7XG4gICAgICAgIGN1cnJlbnRTdGFnZUluZGV4ID0gc3RhZ2VJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgb3ZlcmFsbCBwcm9ncmVzcyAoZWFjaCBzdGFnZSBpcyB3b3J0aCB+MTYuNjclKVxuICAgICAgY29uc3QgYmFzZVByb2dyZXNzID0gKHN0YWdlSW5kZXggLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHN0YWdlUHJvZ3Jlc3MgPSAoY3VycmVudFN0YWdlUHJvZ3Jlc3MgLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gTWF0aC5taW4oTWF0aC5yb3VuZChiYXNlUHJvZ3Jlc3MgKyBzdGFnZVByb2dyZXNzKSwgOTUpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNvbXBvbmVudCBkYXRhIGFmdGVyIHJlZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoQ29tcG9uZW50KCkge1xuICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIGNvbXBvbmVudCBkYXRhLi4uJyk7XG5cbiAgICAvLyBSZXNldCBhbGwgZmlsdGVycyBhbmQgc2VsZWN0aW9uc1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnO1xuICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBbXTtcbiAgICB0aGlzLm9yaWdpbmFsRmlsdGVyZWRDb3Vyc2VzID0gW107XG4gICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gW107XG4gICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzID0gW107XG4gICAgdGhpcy5sYXN0RW5yaWNoZWRJZGVudGlmaWVyc0tleSA9ICcnO1xuXG4gICAgLy8gUmVzZXQgdGFiIHN0YXRlc1xuICAgIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9IDA7XG4gICAgdGhpcy5vdXRlclRhYkFjdGl2ZUluZGV4ID0gMDtcblxuICAgIC8vIENhbGwgdGhlIGRhdGEgbG9hZGluZyBtZXRob2RzIGRpcmVjdGx5IHRvIGF2b2lkIHJlc2V0dGluZyBkYXRhTG9hZGVkXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50RGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29tcG9uZW50IGRhdGEgKHNlcGFyYXRlZCBmcm9tIG5nT25Jbml0IGZvciByZXVzZSlcbiAgICovXG4gIHByaXZhdGUgbG9hZENvbXBvbmVudERhdGEoKSB7XG4gICAgdGhpcy5nZXRSZWNvbW1lbmRlZENvdXJzZVdpdGhQcm9ncmVzcyh0aGlzLnBsYW5EYXRhLmlkKS50aGVuKChyZXMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgICAgbGV0IGFsbENvdXJlcyA9IFtdXG4gICAgICBpZiAocmVzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICByZXM/LmZpbHRlcmVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtPy5yZWxldmFuY3kgPj0gNzUpIHtcbiAgICAgICAgICAgIGFsbENvdXJlcy5wdXNoKGl0ZW0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHRoaXMuc29ydENvdXJzZXNCeVJlbGV2YW5jeShhbGxDb3VyZXMpXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLnNvcnRDb3Vyc2VzQnlSZWxldmFuY3koYWxsQ291cmVzKVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICB0aGlzLmdldENvdXJzZXMoKVxuICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuXG4gICAgICAvLyBJbml0aWFsaXplIGdhcCBhbmFseXNpcyBzdGF0cyBhZnRlciBjb3Vyc2VzIGFyZSBsb2FkZWRcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdhcEFuYWx5c2lzU3RhdHMoKVxuICAgICAgdGhpcy5nZXRVc2VyQ291cnNlKClcblxuICAgICAgLy8gTWFyayBkYXRhIGFzIGxvYWRlZCBhZnRlciBhbGwgaW5pdGlhbCBvcGVyYXRpb25zXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyByZWNvbW1lbmRlZCBjb3Vyc2VzOicsIGVycm9yKTtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICBjb25zb2xlLmxvZygnVW5hdXRob3JpemVkIGFjY2VzcyAtIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIGxvZ2luJyk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB7XG4gICAgICAgIC8vIERvbid0IGxvZyBlcnJvciBmb3IgNDA5IChhbHJlYWR5IGV4aXN0cykgYXMgaXQncyBoYW5kbGVkIGluIHRoZSBtZXRob2RcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgY291cnNlIHJlY29tbWVuZGF0aW9ucycpO1xuICAgICAgfVxuICAgICAgLy8gTWFyayBkYXRhIGFzIGxvYWRlZCBldmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IgdG8gc2hvdyB0aGUgZGlhbG9nIGNvbnRlbnRcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQcm9ncmVzc2l2ZSBsb2FkaW5nIG1ldGhvZHMgZm9yIGNvdXJzZSBnZW5lcmF0aW9uXG4gIHN0YXJ0UHJvZ3Jlc3NpdmVMb2FkaW5nKCkge1xuICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9IHRoaXMucHJvY2Vzc2luZ1N0YWdlc1swXTtcbiAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5zaW11bGF0ZVByb2dyZXNzaXZlU3RhZ2VzKCk7XG4gIH1cblxuICBzaW11bGF0ZVByb2dyZXNzaXZlU3RhZ2VzKCkge1xuICAgIGxldCBjdXJyZW50U3RhZ2VJbmRleCA9IDA7XG4gICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IDYwMDAwOyAvLyA2MCBzZWNvbmRzIGVzdGltYXRlZCBkdXJhdGlvblxuICAgIGNvbnN0IHN0YWdlSW50ZXJ2YWwgPSB0b3RhbER1cmF0aW9uIC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aDtcblxuICAgIGNvbnN0IHByb2dyZXNzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHRoaXMuc3RhZ2VTdGFydFRpbWU7XG4gICAgICBjb25zdCBjdXJyZW50U3RhZ2VQcm9ncmVzcyA9IChlbGFwc2VkICUgc3RhZ2VJbnRlcnZhbCkgLyBzdGFnZUludGVydmFsO1xuICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IE1hdGgubWluKE1hdGguZmxvb3IoZWxhcHNlZCAvIHN0YWdlSW50ZXJ2YWwpLCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGFnZSBpZiBuZWVkZWRcbiAgICAgIGlmIChzdGFnZUluZGV4ICE9PSBjdXJyZW50U3RhZ2VJbmRleCAmJiBzdGFnZUluZGV4IDwgdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkge1xuICAgICAgICBjdXJyZW50U3RhZ2VJbmRleCA9IHN0YWdlSW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9IHRoaXMucHJvY2Vzc2luZ1N0YWdlc1tzdGFnZUluZGV4XTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG92ZXJhbGwgcHJvZ3Jlc3MgKGVhY2ggc3RhZ2UgaXMgd29ydGggfjE2LjY3JSlcbiAgICAgIGNvbnN0IGJhc2VQcm9ncmVzcyA9IChzdGFnZUluZGV4IC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICBjb25zdCBzdGFnZVByb2dyZXNzID0gKGN1cnJlbnRTdGFnZVByb2dyZXNzIC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IE1hdGgubWluKE1hdGgucm91bmQoYmFzZVByb2dyZXNzICsgc3RhZ2VQcm9ncmVzcyksIDk1KTtcblxuICAgICAgLy8gQ2xlYXIgaW50ZXJ2YWwgd2hlbiBsb2FkaW5nIHN0b3BzXG4gICAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgLy8gRW5oYW5jZWQgY291cnNlIGdlbmVyYXRpb24gd2l0aCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gIGdldFJlY29tbWVuZGVkQ291cnNlV2l0aFByb2dyZXNzKHJvbGVfbWFwcGluZ19pZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0dlbmVyYXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDMwO1xuXG4gICAgICB0aGlzLnN0YXJ0UHJvZ3Jlc3NpdmVMb2FkaW5nKCk7XG5cbiAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IG51bGw7XG5cbiAgICAgIGNvbmNhdChcbiAgICAgICAgb2YobnVsbCksICAgICAgICAgIC8vIGltbWVkaWF0ZSBjYWxsXG4gICAgICAgIGludGVydmFsKDUwMDApICAgICAvLyBwb2xsIGV2ZXJ5IDUgc2VjXG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZClcbiAgICAgICAgICApLFxuXG4gICAgICAgICAgdGFwKChyZXNwb25zZTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5maXJzdEFwaVJlc3BvbnNlICYmICF0aGlzLmV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCkge1xuICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnRmlyc3QgcmVjb21tZW5kYXRpb24gcmVzcG9uc2U6JyxcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgdGFrZVdoaWxlKChyZXNwb25zZTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgcG9sbGluZyBpZiBleGlzdGluZyByZWNvbW1lbmRhdGlvbnMgZm91bmRcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0QXBpUmVzcG9uc2U/LmlzX2V4aXN0aW5nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgIT09ICdDT01QTEVURUQnO1xuXG4gICAgICAgICAgfSwgdHJ1ZSksXG5cbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuXG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAvLyBFWElTVElORyBSRUNPTU1FTkRBVElPTlNcbiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RBcGlSZXNwb25zZT8uaXNfZXhpc3RpbmcgJiYgdGhpcy5leGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQpIHtcblxuICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFxuICAgICAgICAgICAgICAgIERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiAnZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMnICAgICAgICAgICAgICAgICAvLyBpbmRleCBmb3IgVUkgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlX21hcHBpbmdfaWQpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRSZWNvbW1lbmRlZENvdXJzZVdpdGhQcm9ncmVzcyhyb2xlX21hcHBpbmdfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZGV0YWlsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZGVsZXRlIHJlY29tbWVuZGF0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5maXJzdEFwaVJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgLy8gQ09NUExFVEVEXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZT8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuXG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9XG4gICAgICAgICAgICAgICAgJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgICAgICAgICAgfSwgMjAwMCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgICAgICdSZWNvbW1lbmRhdGlvbnMgcmVhZHkhJyxcbiAgICAgICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuXG4gICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgICAgICdGYWlsZWQgdG8gZ2VuZXJhdGUgY291cnNlIHJlY29tbWVuZGF0aW9ucy4nLFxuICAgICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldCh7XG4gICAgICBjb21wZXRlbmN5OiBbXSxcbiAgICAgIHJhdGluZzogW10sXG4gICAgICBsYW5ndWFnZTogW10sXG4gICAgICBkdXJhdGlvbjogW10sXG4gICAgICBwcm92aWRlcjogW11cbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IGZpbHRlcmVkIGRyb3Bkb3duIGxpc3RzXG4gICAgdGhpcy5maWx0ZXJlZENvbXBldGVuY3kgPSBbLi4udGhpcy5jb21wZXRlbmNpZXNUeXBlXTtcbiAgICB0aGlzLmZpbHRlcmVkUmF0aW5ncyA9IFsuLi50aGlzLnJhdGluZ3NdO1xuICAgIHRoaXMuZmlsdGVyZWRMYW5ndWFnZXMgPSBbLi4udGhpcy5sYW5ndWFnZXNdO1xuICAgIHRoaXMuZmlsdGVyZWREdXJhdGlvbnMgPSBbLi4udGhpcy5kdXJhdGlvbnNdO1xuICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMgPSBbLi4udGhpcy5wcm92aWRlcnNdO1xuXG4gICAgLy8gUmVzZXQgY291cnNlIGxpc3RcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gWy4uLnRoaXMuZnVsbENvdXJzZUxpc3RdO1xuICAgIC8vIHRoaXMuZnVsbENvdXJzZUxpc3QuZm9yRWFjaCgoaXRlbSk9PntcbiAgICAvLyAgIGlmKGl0ZW0gJiYgaXRlbS5vcmdhbmlzYXRpb24gJiYgaXRlbS5vcmdhbmlzYXRpb24ubGVuZ3RoKSB7XG4gICAgLy8gICAgIGlmKHRoaXMuZmlsdGVyZWRQcm92aWRlcnMuaW5kZXhPZihpdGVtLm9yZ2FuaXNhdGlvblswXSkgPCAwKSB7XG4gICAgLy8gICAgICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycy5wdXNoKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKVxuICAgIC8vICAgICB9XG5cbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICAgIHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpXG4gIH1cblxuICBmaWx0ZXJMaXN0KHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlYXJjaCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbXBldGVuY3knOlxuICAgICAgICB0aGlzLmZpbHRlcmVkQ29tcGV0ZW5jeSA9IHRoaXMuY29tcGV0ZW5jaWVzVHlwZS5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmF0aW5nJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZFJhdGluZ3MgPSB0aGlzLnJhdGluZ3MuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhbmd1YWdlJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZExhbmd1YWdlcyA9IHRoaXMubGFuZ3VhZ2VzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkdXJhdGlvbic6XG4gICAgICAgIHRoaXMuZmlsdGVyZWREdXJhdGlvbnMgPSB0aGlzLmR1cmF0aW9ucy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJvdmlkZXInOlxuICAgICAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzID0gdGhpcy5wcm92aWRlcnMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVDb21wZXRlbmN5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBjb25zdCB2ID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh2ID09PSAnYWxsJykgcmV0dXJuICdhbGwnO1xuICAgIGlmICh2LmluY2x1ZGVzKCdiZWhhdmlvdXJhbCcpIHx8IHYuaW5jbHVkZXMoJ2JlaGF2aW9yYWwnKSkgcmV0dXJuICdiZWhhdmlvcmFsJztcbiAgICBpZiAodi5pbmNsdWRlcygnZnVuY3Rpb25hbCcpKSByZXR1cm4gJ2Z1bmN0aW9uYWwnO1xuICAgIGlmICh2LmluY2x1ZGVzKCdkb21haW4nKSkgcmV0dXJuICdkb21haW4nO1xuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbXBldGVuY3kgPSBbXSxcbiAgICAgIHJhdGluZyA9IFtdLFxuICAgICAgbGFuZ3VhZ2UgPSBbXSxcbiAgICAgIGR1cmF0aW9uID0gW10sXG4gICAgICBwcm92aWRlciA9IFtdXG4gICAgfSA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmZ1bGxDb3Vyc2VMaXN0LS0nLCB0aGlzLmZ1bGxDb3Vyc2VMaXN0KVxuXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZnVsbENvdXJzZUxpc3QuZmlsdGVyKGNvdXJzZSA9PiB7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gQ29tcGV0ZW5jeSAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBjb3Vyc2VDb21wZXRlbmNpZXMgPSBbXG4gICAgICAgIC4uLihjb3Vyc2UuY29tcGV0ZW5jaWVzIHx8IFtdKSxcbiAgICAgICAgLi4uKGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgfHwgW10pXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENvbXBldGVuY2llcyA9IGNvbXBldGVuY3lcbiAgICAgICAgLm1hcCgoYzogc3RyaW5nKSA9PiB0aGlzLm5vcm1hbGl6ZUNvbXBldGVuY3koYykpXG4gICAgICAgIC5maWx0ZXIoYyA9PiBjICE9PSAnJyk7XG5cbiAgICAgIGNvbnN0IGNvbXBldGVuY3lNYXRjaCA9XG4gICAgICAgIHNlbGVjdGVkQ29tcGV0ZW5jaWVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBzZWxlY3RlZENvbXBldGVuY2llcy5pbmNsdWRlcygnYWxsJykgfHxcbiAgICAgICAgY291cnNlQ29tcGV0ZW5jaWVzLnNvbWUoKGM6IGFueSkgPT5cbiAgICAgICAgICBzZWxlY3RlZENvbXBldGVuY2llcy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplQ29tcGV0ZW5jeShjLmNvbXBldGVuY3lBcmVhTmFtZSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gUmF0aW5nIC0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGNvbnN0IHJhdGluZ01hdGNoID1cbiAgICAgICAgcmF0aW5nLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICB0aGlzLm1hdGNoUmF0aW5nKGNvdXJzZSwgcmF0aW5nKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBMYW5ndWFnZSAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBsYW5ndWFnZU1hdGNoID1cbiAgICAgICAgbGFuZ3VhZ2UubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGxhbmd1YWdlLnNvbWUoKGw6IHN0cmluZykgPT5cbiAgICAgICAgICBjb3Vyc2UubGFuZ3VhZ2UgPT09IGwgfHxcbiAgICAgICAgICBjb3Vyc2UubGFuZ3VhZ2U/LmluY2x1ZGVzPy4obCkgfHxcbiAgICAgICAgICBjb3Vyc2UubGFuZ3VhZ2U/LlswXT8uaW5jbHVkZXM/LihsKVxuICAgICAgICApO1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIER1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGNvbnN0IGR1cmF0aW9uTWF0Y2ggPVxuICAgICAgICBkdXJhdGlvbi5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5tYXRjaER1cmF0aW9uKGNvdXJzZS5kdXJhdGlvbiwgZHVyYXRpb24pO1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIFByb3ZpZGVyIC0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGNvbnN0IHByb3ZpZGVyTWF0Y2ggPVxuICAgICAgICBwcm92aWRlci5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgcHJvdmlkZXIuc29tZSgocDogc3RyaW5nKSA9PlxuICAgICAgICAgIGNvdXJzZS5vcmdhbmlzYXRpb24/LmluY2x1ZGVzKHApXG4gICAgICAgICk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbXBldGVuY3lNYXRjaCAmJlxuICAgICAgICByYXRpbmdNYXRjaCAmJlxuICAgICAgICBsYW5ndWFnZU1hdGNoICYmXG4gICAgICAgIGR1cmF0aW9uTWF0Y2ggJiZcbiAgICAgICAgcHJvdmlkZXJNYXRjaFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLnNvcnRDb3Vyc2VzQnlDYXRlZ29yeUFuZFJlbGV2YW5jeSh0aGlzLmZpbHRlcmRDb3Vyc2VzKTtcbiAgfVxuXG4gIG1hdGNoUmF0aW5nKGNvdXJzZTogYW55LCBzZWxlY3RlZFJhdGluZ3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZWxlY3RlZFJhdGluZ3MgfHwgc2VsZWN0ZWRSYXRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIG5vIGZpbHRlciBzZWxlY3RlZCDihpIgbWF0Y2ggZXZlcnl0aGluZ1xuICAgIH1cblxuICAgIGxldCByYXRpbmcgPSBudWxsO1xuXG4gICAgLy8gMe+4j+KDoyBVc2UgYXZnUmF0aW5nIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb3Vyc2UuYXZnUmF0aW5nICE9IG51bGwgJiYgIWlzTmFOKGNvdXJzZS5hdmdSYXRpbmcpKSB7XG4gICAgICByYXRpbmcgPSBOdW1iZXIoY291cnNlLmF2Z1JhdGluZyk7XG4gICAgfVxuICAgIC8vIDLvuI/ig6MgTWFwIHJlbGV2YW5jeSBpZiBhdmdSYXRpbmcgbWlzc2luZ1xuICAgIGVsc2UgaWYgKGNvdXJzZS5yZWxldmFuY3kgIT0gbnVsbCAmJiAhaXNOYU4oY291cnNlLnJlbGV2YW5jeSkpIHtcbiAgICAgIGNvbnN0IHJlbCA9IE51bWJlcihjb3Vyc2UucmVsZXZhbmN5KTtcbiAgICAgIGlmIChyZWwgPj0gOTApIHJhdGluZyA9IDQuNTtcbiAgICAgIGVsc2UgaWYgKHJlbCA+PSA4MCkgcmF0aW5nID0gNC4wO1xuICAgICAgZWxzZSBpZiAocmVsID49IDcwKSByYXRpbmcgPSAzLjU7XG4gICAgICBlbHNlIGlmIChyZWwgPj0gNTApIHJhdGluZyA9IDIuNTtcbiAgICAgIGVsc2UgcmF0aW5nID0gMS4wO1xuICAgIH1cblxuICAgIC8vIDPvuI/ig6MgTm8gdXNhYmxlIHJhdGluZyDihpIgZXhjbHVkZVxuICAgIGlmIChyYXRpbmcgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIDTvuI/ig6MgTWF0Y2ggc2VsZWN0ZWQgcmF0aW5nIHJhbmdlc1xuICAgIHJldHVybiBzZWxlY3RlZFJhdGluZ3Muc29tZShyID0+IHtcbiAgICAgIHN3aXRjaCAocikge1xuICAgICAgICBjYXNlICc0LjUgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSA0LjU7XG4gICAgICAgIGNhc2UgJzQuMCBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDQuMDtcbiAgICAgICAgY2FzZSAnMy41IGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gMy41O1xuICAgICAgICBjYXNlICcyLjUgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSAyLjU7XG4gICAgICAgIGNhc2UgJzEgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSAxLjA7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbWF0Y2hEdXJhdGlvbihkdXJhdGlvbkluU2Vjb25kczogbnVtYmVyIHwgc3RyaW5nLCBzZWxlY3RlZFJhbmdlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBob3VycyA9IE51bWJlcihkdXJhdGlvbkluU2Vjb25kcykgLyAzNjAwO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2VzLnNvbWUocmFuZ2UgPT4ge1xuICAgICAgc3dpdGNoIChyYW5nZSkge1xuICAgICAgICBjYXNlICc8IDEgSG91cic6XG4gICAgICAgICAgcmV0dXJuIGhvdXJzIDwgMTtcbiAgICAgICAgY2FzZSAnMS01IEhvdXJzJzpcbiAgICAgICAgICByZXR1cm4gaG91cnMgPj0gMSAmJiBob3VycyA8PSA1O1xuICAgICAgICBjYXNlICc1KyBIb3Vycyc6XG4gICAgICAgICAgcmV0dXJuIGhvdXJzID4gNTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vLyBDb25maXJtYXRpb24gRGlhbG9nIENvbXBvbmVudFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmVnZW5lcmF0ZS1jb25maXJtYXRpb24tZGlhbG9nJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLWRpYWxvZy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndhcm5pbmctaWNvblwiPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5SZWdlbmVyYXRlIENvdXJzZSBSZWNvbW1lbmRhdGlvbnM8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxuICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPlxuICAgICAgICAgIFRoaXMgd2lsbCBkZWxldGUgYWxsIGN1cnJlbnQgY291cnNlIHJlY29tbWVuZGF0aW9ucyBhbmQgZ2VuZXJhdGUgbmV3IG9uZXMgYmFzZWQgb24gdGhlIGxhdGVzdCByb2xlIG1hcHBpbmcuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJzdWItbWVzc2FnZVwiPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT9cbiAgICAgICAgPC9wPlxuICAgICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICBcbiAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnMgY2xhc3M9XCJkaWFsb2ctYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBjbGFzcz1cImNhbmNlbC1idG5cIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCIgY2xhc3M9XCJjb25maXJtLWJ0blwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICBZZXMsIFJlZ2VuZXJhdGVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5jb25maXJtYXRpb24tZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICBcbiAgICAuZGlhbG9nLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIHBhZGRpbmc6IDI0cHggMjRweCAxNnB4IDI0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICB9XG4gICAgXG4gICAgLndhcm5pbmctaWNvbiB7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICB3aWR0aDogMjRweDtcbiAgICAgIGhlaWdodDogMjRweDtcbiAgICAgIGNvbG9yOiAjZmY5ODAwO1xuICAgIH1cbiAgICBcbiAgICBoMiB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgfVxuICAgIFxuICAgIC5kaWFsb2ctY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAyNHB4O1xuICAgIH1cbiAgICBcbiAgICAubWFpbi1tZXNzYWdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgbWFyZ2luOiAwIDAgMTJweCAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICB9XG4gICAgXG4gICAgLnN1Yi1tZXNzYWdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGNvbG9yOiAjNjY2O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG4gICAgXG4gICAgLmRpYWxvZy1hY3Rpb25zIHtcbiAgICAgIHBhZGRpbmc6IDE2cHggMjRweCAyNHB4IDI0cHg7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cbiAgICBcbiAgICAuY2FuY2VsLWJ0biB7XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG4gICAgXG4gICAgLmNvbmZpcm0tYnRuIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBcbiAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVnZW5lcmF0ZUNvbmZpcm1hdGlvbkRpYWxvZyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxSZWdlbmVyYXRlQ29uZmlybWF0aW9uRGlhbG9nPlxuICApIHsgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcbiAgfVxuXG4gIG9uQ29uZmlybSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBJbml0aWFsIExvYWRpbmcgU2NyZWVuIChmb3IgaW5pdGlhbCBsb2FkIGFuZCByZWdlbmVyYXRpb24pIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1sb2FkaW5nLWNvbnRhaW5lclwiICpuZ0lmPVwiIWRhdGFMb2FkZWQgfHwgaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWFpbi1tZXNzYWdlXCI+e3sgY3VycmVudFByb2Nlc3NpbmdTdGFnZSB8fCAoaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPyAnUmVnZW5lcmF0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nIDogJ0xvYWRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicpIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZGV0YWlsc1wiICpuZ0lmPVwicHJvZ3Jlc3NQZXJjZW50YWdlID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1BlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IHByb2dyZXNzUGVyY2VudGFnZSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0aW1lLWVzdGltYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIGNvdXJzZSBnZW5lcmF0aW9uIGluIHByb2dyZXNzLiBUaGlzIG1heSB0YWtlIDEtMiBtaW51dGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIiAqbmdJZj1cImRhdGFMb2FkZWQgJiYgIWlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+U2F2ZSBDb3Vyc2VzICg8c3Bhbj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/Lm9yZ05hbWV9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgXCI+LyB7e3BsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lfX08L3NwYW4+PC9zcGFuPik8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlZ2VuZXJhdGUtYnRuXCIgKGNsaWNrKT1cInJlZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWdlbmVyYXRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc1JlZ2VuZXJhdGluZ1wiPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1JlZ2VuZXJhdGluZ1wiIGRpYW1ldGVyPVwiMjBcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2lzUmVnZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZy4uLicgOiAnUmVnZW5lcmF0ZSBSZWNvbW1lbmRhdGlvbnMnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlLWJ0blwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lciBtdC00XCI+XG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cCAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25PdXRlclRhYkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBGaXJzdCBNYWluIFRhYiAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImNvdXJzZSByZWNvbW1lbmRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5lc3RlZCBUYWJzIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtdGFiLWdyb3VwIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJvbklubmVyVGFiQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiYWxsXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiYmVoYXZpb3VyYWxcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJmdW5jdGlvbmFsXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiZG9tYWluXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPiAtLT5cbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNlY29uZCBNYWluIFRhYiAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImdhcCBhbmFseXNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxwPkdhcCBhbmFseXNpcyBjb250ZW50IGdvZXMgaGVyZTwvcD4gLS0+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgY2xhc3M9XCJmaWx0ZXJzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtbWFwcGluZy1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3V0ZXJUYWJBY3RpdmVJbmRleCA9PT0gMCAmJiAoaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMCB8fCBpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAxIHx8IGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDIgfHwgaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMyApXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItaW1wcm92ZWQgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VhcmNoIENvdXJzZXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lci1jb21wYWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyc2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzaW5wdXQtY29tcGFjdFwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFwcGx5RmlsdGVyKCRldmVudC50YXJnZXQudmFsdWUpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ291cnNlc1wiIHR5cGU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgQ29tcGV0ZW5jeTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUuY29tcGV0ZW5jeT8ubGVuZ3RoID8gJycgOiAnQ29tcGV0ZW5jeScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnY29tcGV0ZW5jeScpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRDb21wZXRlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgUmF0aW5nPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUucmF0aW5nPy5sZW5ndGggPyAnJyA6ICdSYXRpbmcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmF0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUmVhdGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ3JhdGluZycpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRSYXRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWltcHJvdmVkLXNlYy0yIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IExhbmd1YWdlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUubGFuZ3VhZ2U/Lmxlbmd0aCA/ICcnIDogJ0xhbmd1YWdlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggTGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdsYW5ndWFnZScpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRMYW5ndWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgRHVyYXRpb248L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5kdXJhdGlvbj8ubGVuZ3RoID8gJycgOiAnRHVyYXRpb24nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBEdXJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnZHVyYXRpb24nKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkRHVyYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IFByb3ZpZGVyPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUucHJvdmlkZXI/Lmxlbmd0aCA/ICcnIDogJ1Byb3ZpZGVyJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ3Byb3ZpZGVyJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZFByb3ZpZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogNDVweDttYXJnaW4tbGVmdDogMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiUmVzZXQgQWxsIEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcmVkIENvdXJzZSBDb3VudCA6IHt7ZmlsdGVyZENvdXJzZXM/Lmxlbmd0aH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01IHN1Yi1oZWFkaW5nIHNlbGVjdC1hbGwtY29udGFpbmVyXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJmYWxzZVwiIChjaGFuZ2UpPVwic2VsZWN0QWxsQ291cnNlcygkZXZlbnQpXCI+U2VsZWN0IEFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VzPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAtY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJBZGQgTW9yZSBDb3Vyc2UgRnJvbSBpR09UXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWdnZXN0TW9yZUNvdXJzZXMoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJzZWxlY3RGaWx0ZXJDb3Vyc2VzPy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdEZpbHRlckNvdXJzZXM/Lmxlbmd0aCA+IDAgPyAnYnRuLWFjdGl2ZScgOiAnYnRuLWRpc2FibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbdmFsdWVdPVwibW9kZSA9PT0gJ2FkZCcgPyAnU2F2ZSBDb3Vyc2VzJyA6ICdVcGRhdGUgQ291cnNlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDb3Vyc2VzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLWNvbnRhaW5lciBtdC0yXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lci1tZXNzYWdlIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkRpc2NsYWltZXI6PC9zdHJvbmc+IFBsZWFzZSB2ZXJpZnkgdGhlIHB1YmxpYyBjb3Vyc2UgVVJMIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHBsYW4uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMCA/ICdjb3Vyc2UtbGlzdC1jb250YWluZXItZmxleCc6J2NvdXJzZS1saXN0LWNvbnRhaW5lci1yaWdodC1mbGV4JyBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlubmVyVGFiQWN0aXZlSW5kZXggPiAwID8gJ2xlZnQtcGFuZWwnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgaW4gQmVoYXZpb3VyYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoZW1lLWZpbHRlci1jb250cm9scyBtYi0yXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbGVhci1maWx0ZXItYnRuXCIgKGNsaWNrKT1cImNsZWFyVGhlbWVGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj4gQ2xlYXIgRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImZpbHRlck9uQ29tcGV0ZW5jeVRoZW1lKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F0ZWdvcnktbGlzdC1pdGVtIGN1cnNvci1wb2ludGVyIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC10aGVtZSc6IGlzVGhlbWVTZWxlY3RlZChpdGVtKX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY2llcyBpbiBGdW5jdGlvbmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aGVtZS1maWx0ZXItY29udHJvbHMgbWItMlwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYXItZmlsdGVyLWJ0blwiIChjbGljayk9XCJjbGVhclRoZW1lRmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+IENsZWFyIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWxpc3QtaXRlbSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdGhlbWUnOiBpc1RoZW1lU2VsZWN0ZWQoaXRlbSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgaW4gRG9tYWluPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aGVtZS1maWx0ZXItY29udHJvbHMgbWItMlwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYXItZmlsdGVyLWJ0blwiIChjbGljayk9XCJjbGVhclRoZW1lRmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+IENsZWFyIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F0ZWdvcnktbGlzdC1pdGVtIGN1cnNvci1wb2ludGVyIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLXRoZW1lJzogaXNUaGVtZVNlbGVjdGVkKGl0ZW0pfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlubmVyVGFiQWN0aXZlSW5kZXggPiAwID8gJ3JpZ2h0LXBhbmVsJzoncmlnaHQtcGFuZWwtZmxleCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gQ291cnNlIEZvdW5kIE1lc3NhZ2UgaW4gUmlnaHQgUGFuZWwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tY291cnNlLWZvdW5kLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tY291cnNlLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoX29mZjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tY291cnNlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5ObyBDb3Vyc2VzIEZvdW5kPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vIGNvdXJzZXMgZm91bmQgZm9yIHRoZSBzZWxlY3RlZCB0aGVtZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7c2VsZWN0ZWRUaGVtZUZpbHRlcn19PC9zdHJvbmc+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+V291bGQgeW91IGxpa2UgdG8gYWRkIGEgY291cnNlIGZvciB0aGlzIGNvbXBldGVuY3k/PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Z2dlc3QtY291cnNlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvdXJzZUZvclNlbGVjdGVkVGhlbWUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgQ291cnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb3Vyc2VzIExpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmRDb3Vyc2VzO2xldCBpPWluZGV4XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2VkLWNvdXJzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImNoZWNrSWZDb3Vyc2VFeGlzdHMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RlZEZpbHRlckNvdXJzZXMoJGV2ZW50LCBpdGVtKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvY291cnNlLnN2Z1wiPjwvc3Bhbj4mbmJzcDs8c3Bhbj5Db3Vyc2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZVwiPkFJIFJlY29tbWVuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5pc19wdWJsaWNcIj4gLSBQdWJsaWM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXRlbT8uaXNfcHVibGljXCI+IC0gaUdPVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0/LnJhdGlvbmFsZVwiPk1hbnVhbGx5IFN1Z2dlc3RlZCAtIGlHT1Q8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlICYmICFpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JlZW4tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkIC0gaUdPVCA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9ufX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlICYmIGl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtcHVibGljLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIFB1YmxpYyA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9ufX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0/LnJhdGlvbmFsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXktdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk1hbnVhbGx5IFN1Z2dlc3RlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXRpdGxlIG10LTMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVkaXJlY3RUb1RvYyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5jb3Vyc2VcIj57e2l0ZW0/LmNvdXJzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIml0ZW0/Lm5hbWVcIj57e2l0ZW0/Lm5hbWV9fSoqKio8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O1wiIChjbGljayk9XCJyZWRpcmVjdFRvVG9jKGl0ZW0pXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOHB4XCIgd2lkdGg9XCIxOHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL3JlZGlyZWN0LnBuZ1wiIC8+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJpdGVtPy5yYXRpb25hbGVcIj57e2l0ZW0/LnJhdGlvbmFsZX19PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uZGVzY3JpcHRpb25cIj57e2l0ZW0/LmRlc2NyaXB0aW9ufX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvdXJhbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5CZWhhdmlvdXJhbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYmVoYXZpb3VyYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdCZWhhdmlvdXJhbCcsaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdCZWhhdmlvdXJhbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnQmVoYXZpb3VyYWwnLGkpICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0Z1bmN0aW9uYWwnLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdGdW5jdGlvbmFsJyxpKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdGdW5jdGlvbmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRG9tYWluJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZG9tYWluLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0RvbWFpbicsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0RvbWFpbicsaSlcIiBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRG9tYWluJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRG9tYWluJyxpKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdEb21haW4nLGkpICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVsZXZhbmN5IGFuZCBEdXJhdGlvbiBzZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtZm9vdGVyXCIgKm5nSWY9XCJpdGVtPy5yZWxldmFuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1waWxsLWdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3lcIj5SZWxldmFuY3k8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiPnt7aXRlbT8ucmVsZXZhbmN5fX0lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+RHVyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5kdXJhdGlvblwiPnt7Z2V0RHVyYXRpb24oaXRlbT8uZHVyYXRpb24pfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShpdGVtPy5kdXJhdGlvbilcIj5OL0E8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEdlbmVyYWwgTm8gRGF0YSBNZXNzYWdlIChvbmx5IHdoZW4gbm8gdGhlbWUgZmlsdGVyIGlzIGFjdGl2ZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHN1Yi1oZWFkaW5nXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoID09PSAwICYmICFzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBEYXRhIEZvdW5kPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1tYXBwaW5nLWNvbnRhaW5lclwiICpuZ0lmPVwib3V0ZXJUYWJBY3RpdmVJbmRleCA9PT0gMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJnYXAtYW5hbHlzaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1wZGYgbXQtNCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJEb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZFBERigpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImlzUERGRG93bmxvYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGRmLWhlYWRpbmdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/Lm5hbWV9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSBcIj5fe3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19X0dhcF9BbmFseXNpczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdmgtMTAwXCIgW25nQ2xhc3NdPVwiaXNQREZEb3dubG9hZCA/ICdtdC00JzonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2lkZWJhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHAtMyBiZy1saWdodCBib3JkZXItZW5kXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTRcIj5BbmFseXplIGJ5IENhdGVnb3J5PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtZW51SXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtYi0yIHRleHQtc3RhcnQgbWVudS1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZENhdGVnb3J5ID09PSBpdGVtLmtleVwiIChjbGljayk9XCJzZWxlY3RDYXRlZ29yeShpdGVtLmtleSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTMgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIGdyYXktYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWxhYmVsIHN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY2llcyBDb3ZlcmVkPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIj57e2NvbXBldGVuY3lDb3ZlcmVkQ291bnR9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIGdyYXktYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWxhYmVsIHN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCdcIj5Ub3RhbCBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnXCI+VG90YWwgQmVoYXZpb3VyYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCdcIj5Ub3RhbCBGdW5jdGlvbmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbidcIj5Ub3RhbCBEb21haW4gQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGh9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2JlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RvbWFpblRvdGFsQ29tcGV0ZW5jaWVzfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBncmVlbi1iZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWxcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnXCI+T3ZlcmFsbCBDb3ZlcmFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWxcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvdXJhbCBDb3ZlcmFnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWxcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvdmVyYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1sYWJlbFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbidcIj5Eb21haW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ292ZXJhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e292ZXJhbGxDb3ZlcmFnZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmVoYXZpb3JhbENvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmdW5jdGlvbmFsQ292ZXJhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9tYWluQ292ZXJhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhbGwtY2F0ZWdvcnktbGlzdFwiIFtuZ1N3aXRjaF09XCJzZWxlY3RlZENhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5BbGwgQ2F0ZWdvcmllczwvaDQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgQmVoYXZpb3VyYWwgc2VjdGlvbiBvbmx5IGlmIHRoZXJlIGFyZSB1bm1hdGNoZWQgYmVoYXZpb3VyYWwgY29tcGV0ZW5jaWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJiZWhhdmlvdXJhbE5vdE1hdGNoZWQgJiYgYmVoYXZpb3VyYWxOb3RNYXRjaGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5CZWhhdmlvdXJhbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiZWhhdmlvdXJhbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnQmVoYXZpb3JhbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2U8L3NwYW4+PC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IEZ1bmN0aW9uYWwgc2VjdGlvbiBvbmx5IGlmIHRoZXJlIGFyZSB1bm1hdGNoZWQgZnVuY3Rpb25hbCBjb21wZXRlbmNpZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZ1bmN0aW9uYWxOb3RNYXRjaGVkICYmIGZ1bmN0aW9uYWxOb3RNYXRjaGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5GdW5jdGlvbmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZ1bmN0aW9uYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0Z1bmN0aW9uYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBEb21haW4gc2VjdGlvbiBvbmx5IGlmIHRoZXJlIGFyZSB1bm1hdGNoZWQgZG9tYWluIGNvbXBldGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZG9tYWluTm90TWF0Y2hlZCAmJiBkb21haW5Ob3RNYXRjaGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Eb21haW48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZG9tYWluTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtIHwgdGl0bGVjYXNlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBtZXNzYWdlIHdoZW4gYWxsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKCFiZWhhdmlvdXJhbE5vdE1hdGNoZWQgfHwgYmVoYXZpb3VyYWxOb3RNYXRjaGVkLmxlbmd0aCA9PT0gMCkgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWZ1bmN0aW9uYWxOb3RNYXRjaGVkIHx8IGZ1bmN0aW9uYWxOb3RNYXRjaGVkLmxlbmd0aCA9PT0gMCkgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWRvbWFpbk5vdE1hdGNoZWQgfHwgZG9tYWluTm90TWF0Y2hlZC5sZW5ndGggPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1nYXBzLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInN1Y2Nlc3MtaWNvblwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+RXhjZWxsZW50ISBBbGwgY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFsbCByZXF1aXJlZCBjb21wZXRlbmNpZXMgaGF2ZSBiZWVuIGFkZHJlc3NlZCBieSB0aGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VzLjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+QmVoYXZpb3VyYWw8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJiZWhhdmlvcmFsQ292ZXJhZ2UgIT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5CZWhhdmlvdXJhbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiZWhhdmlvdXJhbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnQmVoYXZpb3JhbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3IENvdXJzZSA8L3NwYW4+PC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJiZWhhdmlvcmFsQ292ZXJhZ2UgPT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlODsgYm9yZGVyOiAxcHggc29saWQgIzRjYWY1MDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICMyZTdkMzI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn46JIEV4Y2VsbGVudCEgQWxsIGJlaGF2aW9yYWwgY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIGNvdXJzZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkZ1bmN0aW9uYWw8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJmdW5jdGlvbmFsQ292ZXJhZ2UgIT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5GdW5jdGlvbmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZ1bmN0aW9uYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW19fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0Z1bmN0aW9uYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ldyBDb3Vyc2U8L3NwYW4+PC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJmdW5jdGlvbmFsQ292ZXJhZ2UgPT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlODsgYm9yZGVyOiAxcHggc29saWQgIzRjYWY1MDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICMyZTdkMzI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn46JIEV4Y2VsbGVudCEgQWxsIGZ1bmN0aW9uYWwgY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIGNvdXJzZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+RG9tYWluPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZG9tYWluQ292ZXJhZ2UgIT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Eb21haW48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZG9tYWluTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ldyBDb3Vyc2UgPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZG9tYWluQ292ZXJhZ2UgPT09ICcxMDAlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlODsgYm9yZGVyOiAxcHggc29saWQgIzRjYWY1MDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICMyZTdkMzI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn46JIEV4Y2VsbGVudCEgQWxsIGRvbWFpbiBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQgYnkgdGhlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+UGxlYXNlIHNlbGVjdCBhIGNhdGVnb3J5LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gPCEtLSBDbG9zZSBtYWluLWNvbnRlbnQgZGl2IC0tPlxuXG4gICAgPC9kaXY+XG48L2Rpdj5cblxuXG48ZGl2IFtoaWRkZW5dPVwiIWlzUERGRG93bmxvYWRcIiBjbGFzcz1cImdhcC1hbmFseXNpcy1wZGYtY29udGFpbmVyXCIgI3BkZkNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImdhcC1hbmFseXNpcy1wZGYtaGVhZGVyXCI+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9rYXJtYXlvZ2lMb2dvLW1pbi5wbmdcIiBhbHQ9XCJLYXJtYXlvZ2kgQmhhcmF0IExvZ29cIiBjbGFzcz1cImxvZ29cIiAvPlxuICAgICAgPGgxPjxzcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJ1wiPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5kZXBhcnRtZW50X25hbWU/Lm5hbWV9fTwvc3Bhbj4gXG4gICAgICAgIDxzcGFuICpuZ0lmPVwic2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnbWluaXN0cnknXCI+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5uYW1lfX08L3NwYW4+ICAgXG4gICAgICAgIDxzcGFuICpuZ0lmPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgXCI+LyB7e3BsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj48L2gxPlxuICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPkEgZGV0YWlsZWQgYnJlYWtkb3duIG9mIGNvbXBldGVuY2llcyBHYXAgQW5hbHlzaXM8L3A+XG4gICAgIFxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zbmFwc2hvdFwiPlxuICAgICAgPGgyPkNvbXBldGVuY3kgU25hcHNob3Q8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cInNuYXBzaG90LWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZS13cmFwcGVyXCI+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cInByb2dyZXNzLXJpbmdcIiB3aWR0aD1cIjEyMFwiIGhlaWdodD1cIjEyMFwiPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInByb2dyZXNzLXJpbmctYmdcIiBjeD1cIjYwXCIgY3k9XCI2MFwiIHI9XCI1MlwiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicHJvZ3Jlc3MtcmluZy1jaXJjbGVcIiBjeD1cIjYwXCIgY3k9XCI2MFwiIHI9XCI1MlwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2UtdGV4dFwiPnt7b3ZlcmFsbENvdmVyYWdlfX08YnIgLz48c3Bhbj5PdmVyYWxsIENvdmVyYWdlPC9zcGFuPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSBUb3RhbCBDb21wZXRlbmNpZXMgQm94IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLWJveFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Ub3RhbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gUHJvZ3Jlc3MgQmFycyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHQgYmVoYXZpb3JhbFwiPkJlaGF2aW91cmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY292ZXJlZC10ZXh0XCI+e3tiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudH19IC8ge3tiZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXN9fSBDb3ZlcmVkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1maWxsIGJlaGF2aW9yYWxcIiBbc3R5bGUud2lkdGguJV09XCIoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgLyBiZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0IGZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY292ZXJlZC10ZXh0XCI+e3tmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudH19IC8ge3tmdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXN9fSBDb3ZlcmVkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1maWxsIGZ1bmN0aW9uYWxcIiBbc3R5bGUud2lkdGguJV09XCIoZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgLyBmdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0IGRvbWFpblwiPkRvbWFpbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdmVyZWQtdGV4dFwiPnt7ZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudH19IC8ge3tkb21haW5Ub3RhbENvbXBldGVuY2llc319IENvdmVyZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWZpbGwgZG9tYWluXCIgW3N0eWxlLndpZHRoLiVdPVwiKGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQgLyBkb21haW5Ub3RhbENvbXBldGVuY2llcykgKiAxMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNsYXNzPVwiZ2FwLXNlY3Rpb24gbWItNFwiPlxuICAgICAgPGgyPkRldGFpbGVkIENvbXBldGVuY3kgQW5hbHlzaXM8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cImdhcC1ib3hcIj5cbiAgICAgICAgQnJpZGdlIFlvdXIgQ29tcGV0ZW5jaWVzIEdhcFxuICAgICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+SGVyZSBhcmUge3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCl9fSBrZXkgYXJlYXMgZm9yIGRldmVsb3BtZW50LjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmcgbWItNFwiPlxuICAgICAgICA8cD5HYXAgdG8gQWRkcmVzcyA8c3BhbiAqbmdJZj1cIih0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCkpID4gMFwiPih7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50KX19KTwvc3Bhbj48L3A+XG4gICAgICAgIFxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgYmVoYXZpb3JhbFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJlaGF2aW91cmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAmbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGJlaGF2aW9yYWxcIj5CZWhhdmlvdXJhbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgZnVuY3Rpb25hbFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZ1bmN0aW9uYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAmbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGRvbWFpblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk5vdE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgPCEtLSBQcm9qZWN0IE1hbmFnZW1lbnQgIC0tPlxuICAgICAgICAgICZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgZG9tYWluXCI+RG9tYWluPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nIG1iLTRcIj5cbiAgICAgICAgPHA+Q292ZXJlZCBDb21wZXRlbmNpZXMgPHNwYW4+KHt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3VyYWxOb3RNYXRjaGVkPy5sZW5ndGggKyBmdW5jdGlvbmFsTm90TWF0Y2hlZD8ubGVuZ3RoICsgZG9tYWluTm90TWF0Y2hlZD8ubGVuZ3RoKX19KTwvc3Bhbj48L3A+ICAgICAgICBcbiAgICAgPC9kaXY+XG4gICAgIDxkaXYgY2xhc3M9XCJnYXAtc2VjdGlvbiBtYi00XCI+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JlZW4tYmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWwgbWItMlwiPlxuICAgICAgICAgICAgICAgIENvbmdyYXR1bGF0aW9ucyFcbiAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHA+WW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNvdmVyZWQgPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj57e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW91cmFsTm90TWF0Y2hlZD8ubGVuZ3RoICsgZnVuY3Rpb25hbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGRvbWFpbk5vdE1hdGNoZWQ/Lmxlbmd0aCl9fSBrZXkgY29tcGV0ZW5jaWVzLCBmb3JtaW5nIGEgc3Ryb25nIHByb2Zlc3Npb25hbCBmb3VuZGF0aW9uLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGJlaGF2aW9yYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiZWhhdmlvdXJhbE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtPy50aGVtZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgIHt7aXRlbT8uc3ViX3RoZW1lfX0mbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGJlaGF2aW9yYWxcIj5CZWhhdmlvdXJhbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgZnVuY3Rpb25hbFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZ1bmN0aW9uYWxNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbT8udGhlbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgIHt7aXRlbT8uc3ViX3RoZW1lfX0mbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGRvbWFpblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtPy50aGVtZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgIDwhLS0gUHJvamVjdCBNYW5hZ2VtZW50ICAtLT5cbiAgICAgICAgICB7e2l0ZW0/LnN1Yl90aGVtZX19Jm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBkb21haW5cIj5Eb21haW48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2FwLXNlY3Rpb24gbWItNFwiPlxuICAgICAgICA8aDI+UmVjb21tZW5kZWQgQ291cnNlczwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhcHAtZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZSBbcGxhbkRhdGFdPVwicGxhbkRhdGFcIj48L2FwcC1nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlPlxuPC9kaXY+XG4gIFxuXG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZyAmJiBkYXRhTG9hZGVkICYmICFpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0IG10LTNcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFpbi1tZXNzYWdlXCI+e3sgY3VycmVudFByb2Nlc3NpbmdTdGFnZSB8fCAnUHJlcGFyaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiBnZW5lcmF0aW9uLi4uJyB9fTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiICpuZ0lmPVwicHJvZ3Jlc3NQZXJjZW50YWdlID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1BlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IHByb2dyZXNzUGVyY2VudGFnZSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIGNvdXJzZSBnZW5lcmF0aW9uIGluIHByb2dyZXNzLiBUaGlzIG1heSB0YWtlIDEtMiBtaW51dGVzLlxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|