igniteui-angular 17.2.11 → 17.2.12

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.
@@ -782,29 +782,29 @@ export class IgxQueryBuilderComponent extends DisplayDensityBase {
782
782
  this.currentGroup = groupItem;
783
783
  }
784
784
  createExpressionGroupItem(expressionTree, parent) {
785
- let groupItem;
786
- if (expressionTree) {
787
- groupItem = new ExpressionGroupItem(expressionTree.operator, parent);
788
- for (const expr of expressionTree.filteringOperands) {
789
- if (expr instanceof FilteringExpressionsTree) {
790
- groupItem.children.push(this.createExpressionGroupItem(expr, groupItem));
785
+ if (!expressionTree) {
786
+ return null;
787
+ }
788
+ const groupItem = new ExpressionGroupItem(expressionTree.operator, parent);
789
+ for (const expr of expressionTree.filteringOperands) {
790
+ if (expr instanceof FilteringExpressionsTree) {
791
+ const childGroup = this.createExpressionGroupItem(expr, groupItem);
792
+ if (childGroup) {
793
+ groupItem.children.push(childGroup);
791
794
  }
792
- else {
793
- const filteringExpr = expr;
794
- const exprCopy = {
795
- fieldName: filteringExpr.fieldName,
796
- condition: filteringExpr.condition,
797
- searchVal: filteringExpr.searchVal,
798
- ignoreCase: filteringExpr.ignoreCase
799
- };
795
+ }
796
+ else {
797
+ const filteringExpr = expr;
798
+ const field = this.fields.find(el => el.field === filteringExpr.fieldName);
799
+ if (field) {
800
+ const exprCopy = { ...filteringExpr };
800
801
  const operandItem = new ExpressionOperandItem(exprCopy, groupItem);
801
- const field = this.fields.find(el => el.field === filteringExpr.fieldName);
802
802
  operandItem.fieldLabel = field.label || field.header || field.field;
803
803
  groupItem.children.push(operandItem);
804
804
  }
805
805
  }
806
806
  }
807
- return groupItem;
807
+ return groupItem.children.length > 0 ? groupItem : null;
808
808
  }
809
809
  createExpressionTreeFromGroupItem(groupItem) {
810
810
  if (!groupItem) {
@@ -1045,4 +1045,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
1045
1045
  type: ViewChild,
1046
1046
  args: ['overlayOutlet', { read: IgxOverlayOutletDirective, static: true }]
1047
1047
  }] } });
1048
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNILFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFxQixZQUFZLEVBQWEsVUFBVSxFQUFhLFdBQVcsRUFDOUcsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNELE9BQU8sRUFBeUIsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFn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bnRFbWl0dGVyLCBMT0NBTEVfSUQsIE9wdGlvbmFsLCBPdXRwdXQsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrLCBOZ0lmLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBlZGl0b3IgfSBmcm9tICdAaWduaXRldWkvbWF0ZXJpYWwtaWNvbnMtZXh0ZW5kZWQnO1xuaW1wb3J0IHsgSUJ1dHRvbkdyb3VwRXZlbnRBcmdzLCBJZ3hCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbkdyb3VwL2J1dHRvbkdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDaGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlCYXNlLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IElRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3MsIFF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5nc0VOIH0gZnJvbSAnLi4vY29yZS9pMThuL3F1ZXJ5LWJ1aWxkZXItcmVzb3VyY2VzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSWd4VGltZUZpbHRlcmluZ09wZXJhbmQgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYywgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUV4cHJlc3Npb25UcmVlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElneERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSwgSWd4VG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi9ncmlkcy9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4SWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3Jpem9udGFsQWxpZ25tZW50LCBPdmVybGF5U2V0dGluZ3MsIFBvaW50LCBWZXJ0aWNhbEFsaWdubWVudCB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBDbG9zZVNjcm9sbFN0cmF0ZWd5LCBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFF1ZXJ5QnVpbGRlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vcXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpY2tlclRvZ2dsZUNvbXBvbmVudCwgSWd4UGlja2VyQ2xlYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItaWNvbnMuY29tbW9uJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFByZWZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcHJlZml4L3ByZWZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSWd4SWNvbkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2ljb24tYnV0dG9uLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IERFRkFVTFRfUElQRV9EQVRFX0ZPUk1BVCA9ICdtZWRpdW1EYXRlJztcbmNvbnN0IERFRkFVTFRfUElQRV9USU1FX0ZPUk1BVCA9ICdtZWRpdW1UaW1lJztcbmNvbnN0IERFRkFVTFRfUElQRV9EQVRFX1RJTUVfRk9STUFUID0gJ21lZGl1bSc7XG5jb25zdCBERUZBVUxUX1BJUEVfRElHSVRTX0lORk8gPSAnMS4wLTMnO1xuY29uc3QgREVGQVVMVF9EQVRFX1RJTUVfRk9STUFUID0gJ2RkL01NL3l5eXkgSEg6bW06c3MgdHQnO1xuY29uc3QgREVGQVVMVF9USU1FX0ZPUk1BVCA9ICdoaDptbTpzcyB0dCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnZmllbGRGb3JtYXR0ZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmllbGRGb3JtYXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdHRlcjogKHY6IGFueSwgZGF0YTogYW55LCBmaWVsZERhdGE/OiBhbnkpID0+IGFueSwgcm93RGF0YTogYW55LCBmaWVsZERhdGE/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgcm93RGF0YSwgZmllbGREYXRhKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqXG4gKiBJbnRlcm5hbCBjbGFzcyB1c2FnZVxuICovXG5jbGFzcyBFeHByZXNzaW9uSXRlbSB7XG4gICAgcHVibGljIHBhcmVudDogRXhwcmVzc2lvbkdyb3VwSXRlbTtcbiAgICBwdWJsaWMgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocGFyZW50PzogRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqXG4gKiBJbnRlcm5hbCBjbGFzcyB1c2FnZVxuICovXG5jbGFzcyBFeHByZXNzaW9uR3JvdXBJdGVtIGV4dGVuZHMgRXhwcmVzc2lvbkl0ZW0ge1xuICAgIHB1YmxpYyBvcGVyYXRvcjogRmlsdGVyaW5nTG9naWM7XG4gICAgcHVibGljIGNoaWxkcmVuOiBFeHByZXNzaW9uSXRlbVtdO1xuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBGaWx0ZXJpbmdMb2dpYywgcGFyZW50PzogRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICBzdXBlcihwYXJlbnQpO1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqXG4gKiBJbnRlcm5hbCBjbGFzcyB1c2FnZVxuICovXG5jbGFzcyBFeHByZXNzaW9uT3BlcmFuZEl0ZW0gZXh0ZW5kcyBFeHByZXNzaW9uSXRlbSB7XG4gICAgcHVibGljIGV4cHJlc3Npb246IElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgIHB1YmxpYyBpbkVkaXRNb2RlOiBib29sZWFuO1xuICAgIHB1YmxpYyBpbkFkZE1vZGU6IGJvb2xlYW47XG4gICAgcHVibGljIGhvdmVyZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGZpZWxkTGFiZWw6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBJRmlsdGVyaW5nRXhwcmVzc2lvbiwgcGFyZW50OiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgfVxufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgZm9yIG9wZXJhdGluZyB3aXRoIGNvbXBsZXggZmlsdGVycyBieSBjcmVhdGluZyBvciBlZGl0aW5nIGNvbmRpdGlvbnNcbiAqIGFuZCBncm91cGluZyB0aGVtIHVzaW5nIEFORC9PUiBsb2dpYy5cbiAqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSBpbiB0aGUgQWR2YW5jZWQgRmlsdGVyaW5nIG9mIHRoZSBHcmlkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXF1ZXJ5LWJ1aWxkZXIgW2ZpZWxkc109XCJ0aGlzLmZpZWxkc1wiPlxuICogPC9pZ3gtcXVlcnktYnVpbGRlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1xdWVyeS1idWlsZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50LCBJZ3hCdXR0b25EaXJlY3RpdmUsIElneEljb25Db21wb25lbnQsIElneENoaXBDb21wb25lbnQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4U3VmZml4RGlyZWN0aXZlLCBJZ3hTZWxlY3RDb21wb25lbnQsIEZvcm1zTW9kdWxlLCBOZ0ZvciwgSWd4U2VsZWN0SXRlbUNvbXBvbmVudCwgSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneERhdGVQaWNrZXJDb21wb25lbnQsIElneFBpY2tlclRvZ2dsZUNvbXBvbmVudCwgSWd4UGlja2VyQ2xlYXJDb21wb25lbnQsIElneFRpbWVQaWNrZXJDb21wb25lbnQsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzLCBJZ3hUb2dnbGVEaXJlY3RpdmUsIElneEJ1dHRvbkdyb3VwQ29tcG9uZW50LCBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBEYXRlUGlwZSwgSWd4RmllbGRGb3JtYXR0ZXJQaXBlLCBJZ3hJY29uQnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hRdWVyeUJ1aWxkZXJDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2UgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcXVlcnktYnVpbGRlcicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1xdWVyeS1idWlsZGVyJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgICBwdWJsaWMgZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIGZpZWxkcy5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEZpZWxkVHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBmaWVsZHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGZpZWxkcyhmaWVsZHM6IEZpZWxkVHlwZVtdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcblxuICAgICAgICBpZiAodGhpcy5fZmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU1ZHSWNvbnMoKTtcblxuICAgICAgICAgICAgdGhpcy5fZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVycyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXQoZmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdHJlZS5cbiAgICAqL1xuICAgICBwdWJsaWMgZ2V0IGV4cHJlc3Npb25UcmVlKCk6IElFeHByZXNzaW9uVHJlZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uVHJlZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBleHByZXNzaW9uIHRyZWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGV4cHJlc3Npb25UcmVlKGV4cHJlc3Npb25UcmVlOiBJRXhwcmVzc2lvblRyZWUpIHtcbiAgICAgICAgdGhpcy5fZXhwcmVzc2lvblRyZWUgPSBleHByZXNzaW9uVHJlZTtcblxuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgcXVlcnkgYnVpbGRlci5cbiAgICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byBhcHBsaWNhdGlvbidzIGxvY2FsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYGxvY2FsZWAgb2YgdGhlIHF1ZXJ5IGJ1aWxkZXIuXG4gICAgICogRXhwZWN0cyBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgLy8gaWYgdmFsdWUgaXMgaW52YWxpZCwgc2V0IGl0IGJhY2sgdG8gX2xvY2FsZUlkXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBnZXRMb2NhbGVGaXJzdERheU9mV2Vlayh0aGlzLl9sb2NhbGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGVJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZmlyZWQgYXMgdGhlIGV4cHJlc3Npb24gdHJlZSBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXF1ZXJ5LWJ1aWxkZXIgKGV4cHJlc3Npb25UcmVlQ2hhbmdlKT0nb25FeHByZXNzaW9uVHJlZUNoYW5nZSgpJz48L2lneC1xdWVyeS1idWlsZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBleHByZXNzaW9uVHJlZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZpZWxkU2VsZWN0JywgeyByZWFkOiBJZ3hTZWxlY3RDb21wb25lbnQgfSlcbiAgICBwcml2YXRlIGZpZWxkU2VsZWN0OiBJZ3hTZWxlY3RDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdjb25kaXRpb25TZWxlY3QnLCB7IHJlYWQ6IElneFNlbGVjdENvbXBvbmVudCB9KVxuICAgIHByaXZhdGUgY29uZGl0aW9uU2VsZWN0OiBJZ3hTZWxlY3RDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hWYWx1ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSBzZWFyY2hWYWx1ZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgncGlja2VyJylcbiAgICBwcml2YXRlIHBpY2tlcjogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCB8IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdhZGRSb290QW5kR3JvdXBCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGFkZFJvb3RBbmRHcm91cEJ1dHRvbjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2FkZENvbmRpdGlvbkJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgYWRkQ29uZGl0aW9uQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFF1ZXJ5QnVpbGRlckhlYWRlckNvbXBvbmVudClcbiAgICBwdWJsaWMgaGVhZGVyQ29udGVudDogSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnZWRpdGluZ0lucHV0c0NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBzZXQgZWRpdGluZ0lucHV0c0NvbnRhaW5lcih2YWx1ZTogRWxlbWVudFJlZikge1xuICAgICAgICBpZiAoKHZhbHVlICYmICF0aGlzLl9lZGl0aW5nSW5wdXRzQ29udGFpbmVyKSB8fFxuICAgICAgICAgICAgKHZhbHVlICYmIHRoaXMuX2VkaXRpbmdJbnB1dHNDb250YWluZXIgJiYgdGhpcy5fZWRpdGluZ0lucHV0c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50ICE9PSB2YWx1ZS5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyh2YWx1ZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWRpdGluZ0lucHV0c0NvbnRhaW5lciA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBlZGl0aW5nSW5wdXRzQ29udGFpbmVyKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0lucHV0c0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdhZGRNb2RlQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIHNldCBhZGRNb2RlQ29udGFpbmVyKHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGlmICgodmFsdWUgJiYgIXRoaXMuX2FkZE1vZGVDb250YWluZXIpIHx8XG4gICAgICAgICAgICAodmFsdWUgJiYgdGhpcy5fYWRkTW9kZUNvbnRhaW5lciAmJiB0aGlzLl9hZGRNb2RlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgIT09IHZhbHVlLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudEludG9WaWV3KHZhbHVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hZGRNb2RlQ29udGFpbmVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGFkZE1vZGVDb250YWluZXIoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRNb2RlQ29udGFpbmVyO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcm90ZWN0ZWQgc2V0IGN1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXIodmFsdWU6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgaWYgKCh2YWx1ZSAmJiAhdGhpcy5fY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lcikgfHxcbiAgICAgICAgICAgICh2YWx1ZSAmJiB0aGlzLl9jdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyICYmIHRoaXMuX2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXIubmF0aXZlRWxlbWVudCAhPT0gdmFsdWUubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxFbGVtZW50SW50b1ZpZXcodmFsdWUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBnZXQgY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lcigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXI7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZChJZ3hUb2dnbGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBjb250ZXh0TWVudVRvZ2dsZTogSWd4VG9nZ2xlRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hDaGlwQ29tcG9uZW50KVxuICAgIHByaXZhdGUgY2hpcHM6IFF1ZXJ5TGlzdDxJZ3hDaGlwQ29tcG9uZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2V4cHJlc3Npb25zQ29udGFpbmVyJylcbiAgICBwcml2YXRlIGV4cHJlc3Npb25zQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmxheU91dGxldCcsIHsgcmVhZDogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBvdmVybGF5T3V0bGV0OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm9vdEdyb3VwOiBFeHByZXNzaW9uR3JvdXBJdGVtO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRFeHByZXNzaW9uczogRXhwcmVzc2lvbk9wZXJhbmRJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRHcm91cDogRXhwcmVzc2lvbkdyb3VwSXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHR1YWxHcm91cDogRXhwcmVzc2lvbkdyb3VwSXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmluZ0xvZ2ljcztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkQ29uZGl0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcGlja2VyT3V0bGV0OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNvbmRpdGlvblNlbGVjdE92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiBmYWxzZVxuICAgIH07XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkRmllbGQ6IEZpZWxkVHlwZTtcbiAgICBwcml2YXRlIF9jbGlja1RpbWVyO1xuICAgIHByaXZhdGUgX2RibENsaWNrRGVsYXkgPSAyMDA7XG4gICAgcHJpdmF0ZSBfcHJldmVudENoaXBDbGljayA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2VkaXRpbmdJbnB1dHNDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gICAgcHJpdmF0ZSBfYWRkTW9kZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgICBwcml2YXRlIF9jdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgX2FkZE1vZGVFeHByZXNzaW9uOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW07XG4gICAgcHJpdmF0ZSBfZWRpdGVkRXhwcmVzc2lvbjogRXhwcmVzc2lvbk9wZXJhbmRJdGVtO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkR3JvdXBzOiBFeHByZXNzaW9uR3JvdXBJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIF9maWVsZHM6IEZpZWxkVHlwZVtdO1xuICAgIHByaXZhdGUgX2V4cHJlc3Npb25UcmVlOiBJRXhwcmVzc2lvblRyZWU7XG4gICAgcHJpdmF0ZSBfbG9jYWxlO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MoUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzRU4pO1xuXG4gICAgcHJpdmF0ZSBfcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuVG9wXG4gICAgfTtcblxuICAgIHByaXZhdGUgX292ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiBmYWxzZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSh0aGlzLl9wb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBDbG9zZVNjcm9sbFN0cmF0ZWd5KClcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBpY29uU2VydmljZTogSWd4SWNvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcm90ZWN0ZWQgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM/OiBJRGlzcGxheURlbnNpdHlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIGVsKTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmxvY2FsZSB8fCB0aGlzLl9sb2NhbGVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm92ZXJsYXlPdXRsZXQ7XG4gICAgICAgIHRoaXMuZmllbGRTZWxlY3RPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5vdmVybGF5T3V0bGV0O1xuICAgICAgICB0aGlzLmNvbmRpdGlvblNlbGVjdE92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm92ZXJsYXlPdXRsZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldCBzZWxlY3RlZEZpZWxkKHZhbHVlOiBGaWVsZFR5cGUpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9zZWxlY3RlZEZpZWxkO1xuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEZpZWxkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWVsZCA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG9sZFZhbHVlICYmIHRoaXMuX3NlbGVjdGVkRmllbGQgJiYgdGhpcy5fc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSAhPT0gb2xkVmFsdWUuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRGaWVsZCgpOiBGaWVsZFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRGaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqXG4gICAgICogdXNlZCBieSB0aGUgZ3JpZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRQaWNrZXJPdXRsZXQob3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5waWNrZXJPdXRsZXQgPSBvdXRsZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKlxuICAgICAqIHVzZWQgYnkgdGhlIGdyaWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzQ29udGV4dE1lbnVWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29udGV4dE1lbnVUb2dnbGUuY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNFZGl0ZWRFeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGVkRXhwcmVzc2lvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24gIT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ29uZGl0aW9uKHBhcmVudDogRXhwcmVzc2lvbkdyb3VwSXRlbSwgYWZ0ZXJFeHByZXNzaW9uPzogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kQWRkKCk7XG5cbiAgICAgICAgY29uc3Qgb3BlcmFuZEl0ZW0gPSBuZXcgRXhwcmVzc2lvbk9wZXJhbmRJdGVtKHtcbiAgICAgICAgICAgIGZpZWxkTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICBzZWFyY2hWYWw6IG51bGxcbiAgICAgICAgfSwgcGFyZW50KTtcblxuICAgICAgICBpZiAoYWZ0ZXJFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGFmdGVyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4ICsgMSwgMCwgb3BlcmFuZEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gob3BlcmFuZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbnRlckV4cHJlc3Npb25FZGl0KG9wZXJhbmRJdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRBbmRHcm91cChwYXJlbnQ/OiBFeHByZXNzaW9uR3JvdXBJdGVtLCBhZnRlckV4cHJlc3Npb24/OiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICB0aGlzLmFkZEdyb3VwKEZpbHRlcmluZ0xvZ2ljLkFuZCwgcGFyZW50LCBhZnRlckV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFkZE9yR3JvdXAocGFyZW50PzogRXhwcmVzc2lvbkdyb3VwSXRlbSwgYWZ0ZXJFeHByZXNzaW9uPzogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgdGhpcy5hZGRHcm91cChGaWx0ZXJpbmdMb2dpYy5PciwgcGFyZW50LCBhZnRlckV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZEdyb3VwKGdyb3VwSXRlbTogRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cCA9IGdyb3VwSXRlbS5wYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0T3BlcmFuZEVkaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0ZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uLmV4cHJlc3Npb24uZmllbGROYW1lID0gdGhpcy5zZWxlY3RlZEZpZWxkLmZpZWxkO1xuICAgICAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbi5leHByZXNzaW9uLmNvbmRpdGlvbiA9IHRoaXMuc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbih0aGlzLnNlbGVjdGVkQ29uZGl0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uZXhwcmVzc2lvbi5zZWFyY2hWYWwgPSBEYXRhVXRpbC5wYXJzZVZhbHVlKHRoaXMuc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSwgdGhpcy5zZWFyY2hWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uLmZpZWxkTGFiZWwgPSB0aGlzLnNlbGVjdGVkRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRGaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEZpZWxkLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRGaWVsZC5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkRmllbGQuZmllbGQ7XG4gICAgICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXhwcmVzc2lvblRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25UcmVlRnJvbUdyb3VwSXRlbSh0aGlzLnJvb3RHcm91cCk7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblRyZWVDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbmNlbE9wZXJhbmRBZGQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9hZGRNb2RlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fYWRkTW9kZUV4cHJlc3Npb24uaW5BZGRNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9hZGRNb2RlRXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5jZWxPcGVyYW5kRWRpdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uaW5FZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2VkaXRlZEV4cHJlc3Npb24uZXhwcmVzc2lvbi5maWVsZE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0odGhpcy5fZWRpdGVkRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlcmFuZENhbkJlQ29tbWl0dGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpZWxkICYmIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gJiZcbiAgICAgICAgICAgICghIXRoaXMuc2VhcmNoVmFsdWUgfHwgdGhpcy5zZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKHRoaXMuc2VsZWN0ZWRDb25kaXRpb24pLmlzVW5hcnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICpcbiAgICAgKiB1c2VkIGJ5IHRoZSBncmlkXG4gICAgICovXG4gICAgcHVibGljIGV4aXRPcGVyYW5kRWRpdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9lZGl0ZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcGVyYW5kQ2FuQmVDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb21taXRPcGVyYW5kRWRpdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kRWRpdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFeHByZXNzaW9uR3JvdXAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbkl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24gaW5zdGFuY2VvZiBFeHByZXNzaW9uR3JvdXBJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcFJlbW92ZShleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgdGhpcy5kZWxldGVJdGVtKGV4cHJlc3Npb25JdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBDbGljayhleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbk9wZXJhbmRJdGVtKSB7XG4gICAgICAgIHRoaXMuX2NsaWNrVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJldmVudENoaXBDbGljaykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub2dnbGVFeHByZXNzaW9uKGV4cHJlc3Npb25JdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ByZXZlbnRDaGlwQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgfSwgdGhpcy5fZGJsQ2xpY2tEZWxheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRGJsQ2xpY2soZXhwcmVzc2lvbkl0ZW06IEV4cHJlc3Npb25PcGVyYW5kSXRlbSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xpY2tUaW1lcik7XG4gICAgICAgIHRoaXMuX3ByZXZlbnRDaGlwQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmVudGVyRXhwcmVzc2lvbkVkaXQoZXhwcmVzc2lvbkl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVudGVyRXhwcmVzc2lvbkVkaXQoZXhwcmVzc2lvbkl0ZW06IEV4cHJlc3Npb25PcGVyYW5kSXRlbSkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuZXhpdE9wZXJhbmRFZGl0KCk7XG4gICAgICAgIHRoaXMuY2FuY2VsT3BlcmFuZEFkZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9lZGl0ZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHJlc3Npb25JdGVtLmhvdmVyZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmZpZWxkTmFtZSA/XG4gICAgICAgICAgICB0aGlzLmZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLmZpZWxkID09PSBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmZpZWxkTmFtZSkgOiBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uID0gZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5jb25kaXRpb24gP1xuICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA6IG51bGw7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLnNlYXJjaFZhbDtcblxuICAgICAgICBleHByZXNzaW9uSXRlbS5pbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25JdGVtO1xuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IHRoaXMuZmllbGRTZWxlY3QuZWxlbWVudDtcbiAgICAgICAgdGhpcy5maWVsZFNlbGVjdE92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLmZpZWxkU2VsZWN0LmVsZW1lbnQgYXMgSFRNTEVsZW1lbnRdO1xuICAgICAgICB0aGlzLmZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TZWxlY3RPdmVybGF5U2V0dGluZ3MudGFyZ2V0ID0gdGhpcy5jb25kaXRpb25TZWxlY3QuZWxlbWVudDtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TZWxlY3RPdmVybGF5U2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2sgPSBbdGhpcy5jb25kaXRpb25TZWxlY3QuZWxlbWVudCBhcyBIVE1MRWxlbWVudF07XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU2VsZWN0T3ZlcmxheVNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFNlbGVjdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbih0aGlzLnNlbGVjdGVkQ29uZGl0aW9uKS5pc1VuYXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25TZWxlY3QuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNlYXJjaFZhbHVlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5waWNrZXI/LmdldEVkaXRFbGVtZW50KCk7XG4gICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fc2VsZWN0ZWRHcm91cHMpIHtcbiAgICAgICAgICAgIGdyb3VwLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRHcm91cHMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV4cHIgb2YgdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICBleHByLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zID0gW107XG5cbiAgICAgICAgdGhpcy50b2dnbGVDb250ZXh0TWVudSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVudGVyRXhwcmVzc2lvbkFkZChleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbk9wZXJhbmRJdGVtKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5leGl0T3BlcmFuZEVkaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5fYWRkTW9kZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZE1vZGVFeHByZXNzaW9uLmluQWRkTW9kZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwcmVzc2lvbkl0ZW0uaW5BZGRNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWRkTW9kZUV4cHJlc3Npb24gPSBleHByZXNzaW9uSXRlbTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25JdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUV4cHJlc3Npb24oZXhwcmVzc2lvbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGV4dE1lbnVDbG9zZWQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHVhbEdyb3VwID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50QXJncy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnRBcmdzLmtleTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHRNZW51VG9nZ2xlLmNvbGxhcHNlZCAmJiAoa2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FU0NBUEUpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBbmRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVHcm91cChGaWx0ZXJpbmdMb2dpYy5BbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZU9yR3JvdXAoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlR3JvdXAoRmlsdGVyaW5nTG9naWMuT3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUZpbHRlcnMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlSXRlbShleHByKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkdyb3VwQ2xpY2soZ3JvdXBJdGVtOiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlR3JvdXAoZ3JvdXBJdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB1bmdyb3VwKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEdyb3VwID0gdGhpcy5jb250ZXh0dWFsR3JvdXA7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGVkR3JvdXAucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHNlbGVjdGVkR3JvdXApO1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4uc2VsZWN0ZWRHcm91cC5jaGlsZHJlbik7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXhwciBvZiBzZWxlY3RlZEdyb3VwLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZXhwci5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY29tbWl0T3BlcmFuZEVkaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVHcm91cCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cCA9IHRoaXMuY29udGV4dHVhbEdyb3VwO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzZWxlY3RlZEdyb3VwLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihzZWxlY3RlZEdyb3VwKTtcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JvdXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmNvbW1pdE9wZXJhbmRFZGl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0RmlsdGVyaW5nTG9naWMoZXZlbnQ6IElCdXR0b25Hcm91cEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLmNvbnRleHR1YWxHcm91cC5vcGVyYXRvciA9IGV2ZW50LmluZGV4IGFzIEZpbHRlcmluZ0xvZ2ljO1xuICAgICAgICB0aGlzLmNvbW1pdE9wZXJhbmRFZGl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZGl0aW9uRnJpZW5kbHlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5nc1tgaWd4X3F1ZXJ5X2J1aWxkZXJfZmlsdGVyXyR7bmFtZX1gXSB8fCBuYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGlzRGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25FeHByZXNzaW9uc1Njcm9sbGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dE1lbnVUb2dnbGUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbnRleHRNZW51VGFyZ2V0KCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VG9nZ2xlLnJlcG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGludm9rZUNsaWNrKGV2ZW50QXJnczogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnRBcmdzKSkge1xuICAgICAgICAgICAgZXZlbnRBcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAoZXZlbnRBcmdzLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuUGlja2VyKGFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGFyZ3MpKSB7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlci5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbk91dGxldFBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgY2xvc2luZyB0aGUgc2VsZWN0J3MgZHJvcGRvd24gd2hlbiBjbGlja2luZyB0aGUgc2Nyb2xsXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZGl0aW9uTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGQgPyB0aGlzLnNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb25MaXN0KCkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZXIoZmllbGQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZChlbCA9PiBlbC5maWVsZCA9PT0gZmllbGQpLmZvcm1hdHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGb3JtYXQoZmllbGQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZChlbCA9PiBlbC5maWVsZCA9PT0gZmllbGQpLnBpcGVBcmdzLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqXG4gICAgICogdXNlZCBieSB0aGUgZ3JpZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRBZGRCdXR0b25Gb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkUm9vdEFuZEdyb3VwQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFJvb3RBbmRHcm91cEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hZGRDb25kaXRpb25CdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29uZGl0aW9uQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHQoZXhwcmVzc2lvbjogRXhwcmVzc2lvbkl0ZW0sIGFmdGVyRXhwcmVzc2lvbj86IEV4cHJlc3Npb25JdGVtKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGV4cHJlc3Npb24sXG4gICAgICAgICAgICBhZnRlckV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBTZWxlY3Rpb25FbmQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHR1YWxHcm91cCA9IHRoaXMuZmluZFNpbmdsZVNlbGVjdGVkR3JvdXAoKTtcbiAgICAgICAgaWYgKGNvbnRleHR1YWxHcm91cCB8fCB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0dWFsR3JvdXAgPSBjb250ZXh0dWFsR3JvdXA7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbnRleHRNZW51VGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVRvZ2dsZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VG9nZ2xlLm9wZW4odGhpcy5fb3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudVRvZ2dsZS5yZXBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvcm1hdChmaWVsZDogRmllbGRUeXBlKSB7XG4gICAgICAgIGlmICghZmllbGQucGlwZUFyZ3MpIHtcbiAgICAgICAgICAgIGZpZWxkLnBpcGVBcmdzID0geyBkaWdpdHNJbmZvOiBERUZBVUxUX1BJUEVfRElHSVRTX0lORk8gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmllbGQucGlwZUFyZ3MuZm9ybWF0KSB7XG4gICAgICAgICAgICBmaWVsZC5waXBlQXJncy5mb3JtYXQgPSBmaWVsZC5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuVGltZSA/XG4gICAgICAgICAgICAgICAgREVGQVVMVF9QSVBFX1RJTUVfRk9STUFUIDogZmllbGQuZGF0YVR5cGUgPT09IERhdGFUeXBlLkRhdGVUaW1lID9cbiAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9QSVBFX0RBVEVfVElNRV9GT1JNQVQgOiBERUZBVUxUX1BJUEVfREFURV9GT1JNQVQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpZWxkLmRlZmF1bHREYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdERhdGVUaW1lRm9ybWF0ID0gREVGQVVMVF9EQVRFX1RJTUVfRk9STUFUO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWVsZC5kZWZhdWx0VGltZUZvcm1hdCkge1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdFRpbWVGb3JtYXQgPSBERUZBVUxUX1RJTUVfRk9STUFUO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGaWx0ZXJzKGZpZWxkOiBGaWVsZFR5cGUpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5maWx0ZXJzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbHRlcnMgPSBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsdGVycyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsdGVycyA9IElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbHRlcnMgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5TdHJpbmc6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Ub2dnbGVFeHByZXNzaW9uKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW0pIHtcbiAgICAgICAgdGhpcy5leGl0T3BlcmFuZEVkaXQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVFeHByZXNzaW9uKGV4cHJlc3Npb25JdGVtKTtcblxuICAgICAgICB0aGlzLnRvZ2dsZUNvbnRleHRNZW51KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVFeHByZXNzaW9uKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW0pIHtcbiAgICAgICAgZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWQgPSAhZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWQ7XG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb25JdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMucHVzaChleHByZXNzaW9uSXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5pbmRleE9mKGV4cHJlc3Npb25JdGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBhcmVudFJlY3Vyc2l2ZShleHByZXNzaW9uSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwKG9wZXJhdG9yOiBGaWx0ZXJpbmdMb2dpYywgcGFyZW50PzogRXhwcmVzc2lvbkdyb3VwSXRlbSwgYWZ0ZXJFeHByZXNzaW9uPzogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kQWRkKCk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtID0gbmV3IEV4cHJlc3Npb25Hcm91cEl0ZW0ob3BlcmF0b3IsIHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGFmdGVyRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmNoaWxkcmVuLmluZGV4T2YoYWZ0ZXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4ICsgMSwgMCwgZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyb3VwID0gZ3JvdXBJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRDb25kaXRpb24oZ3JvdXBJdGVtKTtcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAgPSBncm91cEl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uR3JvdXBJdGVtKGV4cHJlc3Npb25UcmVlOiBJRXhwcmVzc2lvblRyZWUsIHBhcmVudD86IEV4cHJlc3Npb25Hcm91cEl0ZW0pOiBFeHByZXNzaW9uR3JvdXBJdGVtIHtcbiAgICAgICAgbGV0IGdyb3VwSXRlbTogRXhwcmVzc2lvbkdyb3VwSXRlbTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25UcmVlKSB7XG4gICAgICAgICAgICBncm91cEl0ZW0gPSBuZXcgRXhwcmVzc2lvbkdyb3VwSXRlbShleHByZXNzaW9uVHJlZS5vcGVyYXRvciwgcGFyZW50KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBleHByIG9mIGV4cHJlc3Npb25UcmVlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJdGVtLmNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVFeHByZXNzaW9uR3JvdXBJdGVtKGV4cHIsIGdyb3VwSXRlbSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ0V4cHIgPSBleHByIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHByQ29weTogSUZpbHRlcmluZ0V4cHJlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpbHRlcmluZ0V4cHIuZmllbGROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBmaWx0ZXJpbmdFeHByLmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbDogZmlsdGVyaW5nRXhwci5zZWFyY2hWYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBmaWx0ZXJpbmdFeHByLmlnbm9yZUNhc2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmFuZEl0ZW0gPSBuZXcgRXhwcmVzc2lvbk9wZXJhbmRJdGVtKGV4cHJDb3B5LCBncm91cEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoZWwgPT4gZWwuZmllbGQgPT09IGZpbHRlcmluZ0V4cHIuZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEl0ZW0uZmllbGRMYWJlbCA9IGZpZWxkLmxhYmVsIHx8IGZpZWxkLmhlYWRlciB8fCBmaWVsZC5maWVsZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJdGVtLmNoaWxkcmVuLnB1c2gob3BlcmFuZEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cEl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uVHJlZUZyb21Hcm91cEl0ZW0oZ3JvdXBJdGVtOiBFeHByZXNzaW9uR3JvdXBJdGVtKTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHtcbiAgICAgICAgaWYgKCFncm91cEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvblRyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGdyb3VwSXRlbS5vcGVyYXRvcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwSXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvblRyZWVGcm9tR3JvdXBJdGVtKChpdGVtIGFzIEV4cHJlc3Npb25Hcm91cEl0ZW0pKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHN1YlRyZWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKChpdGVtIGFzIEV4cHJlc3Npb25PcGVyYW5kSXRlbSkuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvblRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVDb250ZXh0TWVudSgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dHVhbEdyb3VwID0gdGhpcy5maW5kU2luZ2xlU2VsZWN0ZWRHcm91cCgpO1xuXG4gICAgICAgIGlmIChjb250ZXh0dWFsR3JvdXAgfHwgdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHVhbEdyb3VwID0gY29udGV4dHVhbEdyb3VwO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dHVhbEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdMb2dpY3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9maWx0ZXJfb3BlcmF0b3JfYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGNvbnRleHR1YWxHcm91cC5vcGVyYXRvciA9PT0gRmlsdGVyaW5nTG9naWMuQW5kXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9maWx0ZXJfb3BlcmF0b3Jfb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogY29udGV4dHVhbEdyb3VwLm9wZXJhdG9yID09PSBGaWx0ZXJpbmdMb2dpYy5PclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRleHRNZW51VG9nZ2xlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VG9nZ2xlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRTaW5nbGVTZWxlY3RlZEdyb3VwKCk6IEV4cHJlc3Npb25Hcm91cEl0ZW0ge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX3NlbGVjdGVkR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluc0FsbFNlbGVjdGVkRXhwcmVzc2lvbnMgPSB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMuZXZlcnkob3AgPT4gdGhpcy5pc0luc2lkZUdyb3VwKG9wLCBncm91cCkpO1xuXG4gICAgICAgICAgICBpZiAoY29udGFpbnNBbGxTZWxlY3RlZEV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0luc2lkZUdyb3VwKGl0ZW06IEV4cHJlc3Npb25JdGVtLCBncm91cDogRXhwcmVzc2lvbkdyb3VwSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnBhcmVudCA9PT0gZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnNpZGVHcm91cChpdGVtLnBhcmVudCwgZ3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlSXRlbShleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uSXRlbS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25UcmVlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHByZXNzaW9uSXRlbSA9PT0gdGhpcy5jdXJyZW50R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBleHByZXNzaW9uSXRlbS5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihleHByZXNzaW9uSXRlbSk7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2V4cHJlc3Npb25UcmVlID0gdGhpcy5jcmVhdGVFeHByZXNzaW9uVHJlZUZyb21Hcm91cEl0ZW0odGhpcy5yb290R3JvdXApO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXhwcmVzc2lvbkl0ZW0ucGFyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblRyZWVDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR3JvdXAob3BlcmF0b3I6IEZpbHRlcmluZ0xvZ2ljKSB7XG4gICAgICAgIGNvbnN0IGNoaXBzID0gdGhpcy5jaGlwcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLnJlZHVjZSgoaSwgZSkgPT4gTWF0aC5taW4oaSwgY2hpcHMuZmluZEluZGV4KGMgPT4gYy5kYXRhID09PSBlKSksIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICBjb25zdCBmaXJzdEV4cHJlc3Npb24gPSBjaGlwc1ttaW5JbmRleF0uZGF0YTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBmaXJzdEV4cHJlc3Npb24ucGFyZW50O1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSBuZXcgRXhwcmVzc2lvbkdyb3VwSXRlbShvcGVyYXRvciwgcGFyZW50KTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGZpcnN0RXhwcmVzc2lvbik7XG4gICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGdyb3VwSXRlbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByIG9mIHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucykge1xuICAgICAgICAgICAgZ3JvdXBJdGVtLmNoaWxkcmVuLnB1c2goZXhwcik7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXhwcik7XG4gICAgICAgICAgICBleHByLnBhcmVudCA9IGdyb3VwSXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUdyb3VwKGdyb3VwSXRlbTogRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICB0aGlzLmV4aXRPcGVyYW5kRWRpdCgpO1xuICAgICAgICBpZiAoZ3JvdXBJdGVtLmNoaWxkcmVuICYmIGdyb3VwSXRlbS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlR3JvdXBSZWN1cnNpdmUoZ3JvdXBJdGVtLCAhZ3JvdXBJdGVtLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBJdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBhcmVudFJlY3Vyc2l2ZShncm91cEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b2dnbGVDb250ZXh0TWVudSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVHcm91cFJlY3Vyc2l2ZShncm91cEl0ZW06IEV4cHJlc3Npb25Hcm91cEl0ZW0sIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChncm91cEl0ZW0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncm91cEl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgICAgICAgICAgaWYgKGdyb3VwSXRlbS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkR3JvdXBzLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZEdyb3Vwcy5pbmRleE9mKGdyb3VwSXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRHcm91cHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiBncm91cEl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChleHByIGluc3RhbmNlb2YgRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlR3JvdXBSZWN1cnNpdmUoZXhwciwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYW5kRXhwcmVzc2lvbiA9IGV4cHIgYXMgRXhwcmVzc2lvbk9wZXJhbmRJdGVtO1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kRXhwcmVzc2lvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFeHByZXNzaW9uKG9wZXJhbmRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0UGFyZW50UmVjdXJzaXZlKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBleHByZXNzaW9uSXRlbS5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkR3JvdXBzLmluZGV4T2YocGFyZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEdyb3Vwcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBhcmVudFJlY3Vyc2l2ZShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDb250ZXh0TWVudVRhcmdldCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuZXhwcmVzc2lvbnNDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY2hpcHMgPSB0aGlzLmNoaXBzLmZpbHRlcihjID0+IHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5pbmRleE9mKGMuZGF0YSkgIT09IC0xKTtcbiAgICAgICAgbGV0IG1pblRvcCA9IGNoaXBzLnJlZHVjZSgodCwgYykgPT5cbiAgICAgICAgICAgIE1hdGgubWluKHQsIGMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgICAgbWluVG9wID0gTWF0aC5tYXgoY29udGFpbmVyUmVjdC50b3AsIG1pblRvcCk7XG4gICAgICAgIG1pblRvcCA9IE1hdGgubWluKGNvbnRhaW5lclJlY3QuYm90dG9tLCBtaW5Ub3ApO1xuICAgICAgICBsZXQgbWF4UmlnaHQgPSBjaGlwcy5yZWR1Y2UoKHIsIGMpID0+XG4gICAgICAgICAgICBNYXRoLm1heChyLCBjLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpLCAwKTtcbiAgICAgICAgbWF4UmlnaHQgPSBNYXRoLm1heChtYXhSaWdodCwgY29udGFpbmVyUmVjdC5sZWZ0KTtcbiAgICAgICAgbWF4UmlnaHQgPSBNYXRoLm1pbihtYXhSaWdodCwgY29udGFpbmVyUmVjdC5yaWdodCk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSBuZXcgUG9pbnQobWF4UmlnaHQsIG1pblRvcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxFbGVtZW50SW50b1ZpZXcodGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmV4cHJlc3Npb25zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9IHRhcmdldC5vZmZzZXRUb3AgLSBjb250YWluZXIub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCBkZWx0YSA9IDEwO1xuXG4gICAgICAgIGlmIChjb250YWluZXIuc2Nyb2xsVG9wICsgZGVsdGEgPiB0YXJnZXRPZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSB0YXJnZXRPZmZzZXQgLSBkZWx0YTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXIuc2Nyb2xsVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodCA8IHRhcmdldE9mZnNldCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKyBkZWx0YSkge1xuICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IHRhcmdldE9mZnNldCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKyBkZWx0YSAtIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kQWRkKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsT3BlcmFuZEVkaXQoKTtcbiAgICAgICAgdGhpcy5yb290R3JvdXAgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25Hcm91cEl0ZW0odGhpcy5leHByZXNzaW9uVHJlZSk7XG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5yb290R3JvdXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNWR0ljb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0b3JJY29ucyA9IGVkaXRvciBhcyBhbnlbXTtcbiAgICAgICAgZWRpdG9ySWNvbnMuZm9yRWFjaChpY29uID0+IHRoaXMuaWNvblNlcnZpY2UuYWRkU3ZnSWNvbkZyb21UZXh0KGljb24ubmFtZSwgaWNvbi52YWx1ZSwgJ2lteC1pY29ucycpKTtcbiAgICB9XG59XG5cbiIsIjxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXJcbiAgICAqbmdJZj1cIiFoZWFkZXJDb250ZW50XCJcbiAgICBbdGl0bGVdPVwidGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfdGl0bGVcIlxuPlxuPC9pZ3gtcXVlcnktYnVpbGRlci1oZWFkZXI+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cImlneC1xdWVyeS1idWlsZGVyLWhlYWRlclwiPjwvbmctY29udGVudD5cblxuPGRpdlxuICAgICNleHByZXNzaW9uc0NvbnRhaW5lclxuICAgIGNsYXNzPVwiaWd4LXF1ZXJ5LWJ1aWxkZXJfX21haW5cIlxuICAgIChzY3JvbGwpPVwib25FeHByZXNzaW9uc1Njcm9sbGVkKClcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm9vdEdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAjYWRkUm9vdEFuZEdyb3VwQnV0dG9uXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5kR3JvdXAoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtaWNvbj5hZGQ8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfYW5kX2dyb3VwIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cInRoaXMuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZE9yR3JvdXAoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtaWNvbj5hZGQ8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfb3JfZ3JvdXAgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZmlsdGVyLWVtcHR5XCI+XG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJpZ3gtZmlsdGVyLWVtcHR5X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2luaXRpYWxfdGV4dCB9fVxuICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2FkZEV4cHJlc3Npb25zVGVtcGxhdGVcbiAgICAgICAgbGV0LWV4cHJlc3Npb25JdGVtXG4gICAgICAgIGxldC1hZnRlckV4cHJlc3Npb249XCJhZnRlckV4cHJlc3Npb25cIlxuICAgID5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICNhZGRDb25kaXRpb25CdXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJoYXNFZGl0ZWRFeHByZXNzaW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRDb25kaXRpb24oZXhwcmVzc2lvbkl0ZW0sIGFmdGVyRXhwcmVzc2lvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+YWRkPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfYWRkX2NvbmRpdGlvblxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaGFzRWRpdGVkRXhwcmVzc2lvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5kR3JvdXAoZXhwcmVzc2lvbkl0ZW0sIGFmdGVyRXhwcmVzc2lvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+YWRkPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2FuZF9ncm91cCB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJoYXNFZGl0ZWRFeHByZXNzaW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRPckdyb3VwKGV4cHJlc3Npb25JdGVtLCBhZnRlckV4cHJlc3Npb24pXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1pY29uPmFkZDwvaWd4LWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9vcl9ncm91cCB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZmlsdGVyT3BlcmFuZFRlbXBsYXRlIGxldC1leHByZXNzaW9uSXRlbT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhZXhwcmVzc2lvbkl0ZW0uaW5FZGl0TW9kZVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvbi1pdGVtXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImV4cHJlc3Npb25JdGVtLmhvdmVyZWQgPSB0cnVlXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImV4cHJlc3Npb25JdGVtLmhvdmVyZWQgPSBmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hpcFxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImV4cHJlc3Npb25JdGVtXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCcgPyAnY29zeScgOiBkaXNwbGF5RGVuc2l0eVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGljayhleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJvbkNoaXBEYmxDbGljayhleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlKGV4cHJlc3Npb25JdGVtKVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJvbkNoaXBTZWxlY3Rpb25FbmQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gaWd4UHJlZml4IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19leHByZXNzaW9uLWNvbHVtblwiPnt7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmZpZWxkTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uZmllbGROYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlneC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiaW14LWljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uY29uZGl0aW9uLmljb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvbi1jb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGlneFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0RhdGUoZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5zZWFyY2hWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRGb3JtYXR0ZXIoZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uc2VhcmNoVmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWVsZEZvcm1hdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEZvcm1hdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLnNlYXJjaFZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5sb2NhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLnNlYXJjaFZhbFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZmlsdGVyLXRyZWVfX2V4cHJlc3Npb24tYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgKGV4cHJlc3Npb25JdGVtLnNlbGVjdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uaG92ZXJlZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW50ZXJFeHByZXNzaW9uRWRpdChleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW50ZXJFeHByZXNzaW9uQWRkKGV4cHJlc3Npb25JdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAhZXhwcmVzc2lvbkl0ZW0uaW5BZGRNb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXhwcmVzc2lvbkl0ZW0ucGFyZW50ICE9PSBjdXJyZW50R3JvdXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSXRlbSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmNoaWxkcmVuW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGFkZFxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJleHByZXNzaW9uSXRlbS5pbkVkaXRNb2RlXCJcbiAgICAgICAgICAgICNlZGl0aW5nSW5wdXRzQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9faW5wdXRzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1zZWxlY3RcbiAgICAgICAgICAgICAgICAjZmllbGRTZWxlY3RcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgICAgICBbb3ZlcmxheVNldHRpbmdzXT1cImZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2NvbHVtbl9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZpZWxkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LXNlbGVjdC1pdGVtICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiBbdmFsdWVdPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQuaGVhZGVyIHx8IGZpZWxkLmZpZWxkIH19XG4gICAgICAgICAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxpZ3gtc2VsZWN0XG4gICAgICAgICAgICAgICAgI2NvbmRpdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCInY29tcGFjdCdcIlxuICAgICAgICAgICAgICAgIFtvdmVybGF5U2V0dGluZ3NdPVwiY29uZGl0aW9uU2VsZWN0T3ZlcmxheVNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2NvbmRpdGlvbl9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEZpZWxkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LXByZWZpeFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2VsZWN0LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKGNvbmRpdGlvblNlbGVjdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiaW14LWljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNlbGVjdC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuaWNvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2lneC1wcmVmaXg+XG5cbiAgICAgICAgICAgICAgICA8aWd4LXNlbGVjdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgZ2V0Q29uZGl0aW9uTGlzdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShjb25kaXRpb24pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJpbXgtaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShjb25kaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSAhPT0gJ2RhdGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlICE9PSAndGltZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZGF0YVR5cGUgIT09ICdkYXRlVGltZScpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaFZhbHVlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkRmllbGQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZENvbmRpdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkRmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKHNlbGVjdGVkQ29uZGl0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNVbmFyeSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkICYmIHNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX3ZhbHVlX3BsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cblxuICAgICAgICAgICAgPGlneC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICNwaWNrZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRmllbGQgJiYgc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib3BlblBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCInY29tcGFjdCdcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfZGF0ZV9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRDb25kaXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkRmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb24oc2VsZWN0ZWRDb25kaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzVW5hcnkpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInRoaXMubG9jYWxlXCJcbiAgICAgICAgICAgICAgICBbb3V0bGV0XT1cInBpY2tlck91dGxldFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdHRlcl09XCJzZWxlY3RlZEZpZWxkLmZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlGb3JtYXRdPVwic2VsZWN0ZWRGaWVsZC5waXBlQXJncy5mb3JtYXRcIlxuICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwic2VsZWN0ZWRGaWVsZC5waXBlQXJncy53ZWVrU3RhcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gZGlzYWJsZSBkZWZhdWx0IGljb25zIC0tPlxuICAgICAgICAgICAgICAgIDxpZ3gtcGlja2VyLXRvZ2dsZT48L2lneC1waWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxpZ3gtcGlja2VyLWNsZWFyPjwvaWd4LXBpY2tlci1jbGVhcj5cbiAgICAgICAgICAgIDwvaWd4LWRhdGUtcGlja2VyPlxuXG4gICAgICAgICAgICA8aWd4LXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgI3BpY2tlclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWVsZCAmJiBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAndGltZSdcIlxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib3BlblBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX3RpbWVfcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZENvbmRpdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbihzZWxlY3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNVbmFyeSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwidGhpcy5sb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtvdXRsZXRdPVwicGlja2VyT3V0bGV0XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0dGVyXT1cInNlbGVjdGVkRmllbGQuZm9ybWF0dGVyXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRGb3JtYXRdPVwic2VsZWN0ZWRGaWVsZC5kZWZhdWx0VGltZUZvcm1hdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBkaXNhYmxlIGRlZmF1bHQgaWNvbnMgLS0+XG4gICAgICAgICAgICAgICAgPGlneC1waWNrZXItdG9nZ2xlPjwvaWd4LXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgICAgPGlneC1waWNrZXItY2xlYXI+PC9pZ3gtcGlja2VyLWNsZWFyPlxuICAgICAgICAgICAgPC9pZ3gtdGltZS1waWNrZXI+XG5cbiAgICAgICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgICAgICAjaW5wdXRHcm91cFxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWVsZCAmJiBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2RhdGVfcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRDb25kaXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbihzZWxlY3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzVW5hcnkpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJzZWxlY3RlZEZpZWxkLmRlZmF1bHREYXRlVGltZUZvcm1hdFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19pbnB1dHMtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGlneEljb25CdXR0b249XCJmbGF0XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tY29tcG9uZW50LXNpemVdPVwiZ2V0Q29tcG9uZW50U2l6ZVN0eWxlcygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcGVyYW5kQ2FuQmVDb21taXR0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21taXRPcGVyYW5kRWRpdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbj5jaGVjazwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWd4SWNvbkJ1dHRvbj1cImZsYXRcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1jb21wb25lbnQtc2l6ZV09XCJnZXRDb21wb25lbnRTaXplU3R5bGVzKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3BlcmFuZEVkaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZXhwcmVzc2lvbkl0ZW0uaW5BZGRNb2RlXCJcbiAgICAgICAgICAgICNhZGRNb2RlQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fYnV0dG9uc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBhZGRFeHByZXNzaW9uc1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KGV4cHJlc3Npb25JdGVtLnBhcmVudCwgZXhwcmVzc2lvbkl0ZW0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tY29tcG9uZW50LXNpemVdPVwiZ2V0Q29tcG9uZW50U2l6ZVN0eWxlcygpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3BlcmFuZEFkZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2V4cHJlc3Npb25UcmVlVGVtcGxhdGUgbGV0LWV4cHJlc3Npb25JdGVtPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fbGluZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnaWd4LWZpbHRlci10cmVlX19saW5lLS1hbmQnOiBleHByZXNzaW9uSXRlbS5vcGVyYXRvciA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgJ2lneC1maWx0ZXItdHJlZV9fbGluZS0tb3InOiBleHByZXNzaW9uSXRlbS5vcGVyYXRvciA9PT0gMSxcbiAgICAgICAgICAgICAgICAgICAgJ2lneC1maWx0ZXItdHJlZV9fbGluZS0tc2VsZWN0ZWQnOiBleHByZXNzaW9uSXRlbS5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soZXhwcmVzc2lvbkl0ZW0pXCJcbiAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGV4cHIgb2YgZXhwcmVzc2lvbkl0ZW0uY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V4cHJlc3Npb25Hcm91cChleHByKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGV4cHJlc3Npb25UcmVlVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWx0ZXJPcGVyYW5kVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dChleHByKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudEdyb3VwID09PSBleHByZXNzaW9uSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICNjdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19idXR0b25zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXhwcmVzc2lvbnNUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KGV4cHJlc3Npb25JdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwcmVzc2lvbkl0ZW0gIT09IHJvb3RHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWRpdGVkRXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmNoaWxkcmVuLmxlbmd0aCA8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5kR3JvdXAoZXhwcmVzc2lvbkl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9lbmRfZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvb3RHcm91cFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25UcmVlVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dChyb290R3JvdXApXG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGlneFRvZ2dsZVxuICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51XCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xvc2VkKT1cImNvbnRleHRNZW51Q2xvc2VkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWd4LWZpbHRlci1jb250ZXh0dWFsLW1lbnUtLWNvc3knOiBkaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knLFxuICAgICAgICAgICAgJ2lneC1maWx0ZXItY29udGV4dHVhbC1tZW51LS1jb21wYWN0JzogZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0J1xuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51X19jbG9zZS1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dHVhbEdyb3VwXCI+XG4gICAgICAgICAgICA8aWd4LWJ1dHRvbmdyb3VwXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cInRoaXMuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZXNdPVwiZmlsdGVyaW5nTG9naWNzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdEZpbHRlcmluZ0xvZ2ljKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9pZ3gtYnV0dG9uZ3JvdXA+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbnRleHR1YWxHcm91cC5wYXJlbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1bmdyb3VwKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBuYW1lPVwidW5ncm91cFwiPjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfdW5ncm91cFxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUdyb3VwKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LWZpbHRlci1jb250ZXh0dWFsLW1lbnVfX2RlbGV0ZS1idG5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvbj5kZWxldGU8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2RlbGV0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZXh0dWFsR3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlQW5kR3JvdXAoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfY3JlYXRlX2FuZF9ncm91cCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZU9yR3JvdXAoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfY3JlYXRlX29yX2dyb3VwIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51X19kZWxldGUtYnRuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9kZWxldGVfZmlsdGVycyB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gICAgI292ZXJsYXlPdXRsZXRcbiAgICBpZ3hPdmVybGF5T3V0bGV0XG4gICAgY2xhc3M9XCJpZ3gtcXVlcnktYnVpbGRlcl9fb3V0bGV0XCJcbiAgICAocG9pbnRlcmRvd24pPVwib25PdXRsZXRQb2ludGVyRG93bigkZXZlbnQpXCJcbj48L2Rpdj5cbiJdfQ==
1048
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNILFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFxQixZQUFZLEVBQWEsVUFBVSxFQUFhLFdBQVcsRUFDOUcsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNELE9BQU8sRUFBeUIsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFn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bnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIExPQ0FMRV9JRCwgT3B0aW9uYWwsIE91dHB1dCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWssIE5nSWYsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVkaXRvciB9IGZyb20gJ0BpZ25pdGV1aS9tYXRlcmlhbC1pY29ucy1leHRlbmRlZCc7XG5pbXBvcnQgeyBJQnV0dG9uR3JvdXBFdmVudEFyZ3MsIElneEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uR3JvdXAvYnV0dG9uR3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoaXBDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSVF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5ncywgUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzRU4gfSBmcm9tICcuLi9jb3JlL2kxOG4vcXVlcnktYnVpbGRlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgRGF0YVV0aWwgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLCBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZCB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IEZpbHRlcmluZ0xvZ2ljLCBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRXhwcmVzc2lvblRyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IElneEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGUtdGltZS1lZGl0b3IvZGF0ZS10aW1lLWVkaXRvci5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBJZ3hUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJy4uL2dyaWRzL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hJY29uU2VydmljZSB9IGZyb20gJy4uL2ljb24vaWNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEhvcml6b250YWxBbGlnbm1lbnQsIE92ZXJsYXlTZXR0aW5ncywgUG9pbnQsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSwgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksIENsb3NlU2Nyb2xsU3RyYXRlZ3ksIENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UGlja2VyVG9nZ2xlQ29tcG9uZW50LCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1pY29ucy5jb21tb24nO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneFNlbGVjdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJZ3hJY29uQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vaWNvbi1idXR0b24uZGlyZWN0aXZlJztcblxuY29uc3QgREVGQVVMVF9QSVBFX0RBVEVfRk9STUFUID0gJ21lZGl1bURhdGUnO1xuY29uc3QgREVGQVVMVF9QSVBFX1RJTUVfRk9STUFUID0gJ21lZGl1bVRpbWUnO1xuY29uc3QgREVGQVVMVF9QSVBFX0RBVEVfVElNRV9GT1JNQVQgPSAnbWVkaXVtJztcbmNvbnN0IERFRkFVTFRfUElQRV9ESUdJVFNfSU5GTyA9ICcxLjAtMyc7XG5jb25zdCBERUZBVUxUX0RBVEVfVElNRV9GT1JNQVQgPSAnZGQvTU0veXl5eSBISDptbTpzcyB0dCc7XG5jb25zdCBERUZBVUxUX1RJTUVfRk9STUFUID0gJ2hoOm1tOnNzIHR0JztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdmaWVsZEZvcm1hdHRlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hGaWVsZEZvcm1hdHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IGFueSwgZm9ybWF0dGVyOiAodjogYW55LCBkYXRhOiBhbnksIGZpZWxkRGF0YT86IGFueSkgPT4gYW55LCByb3dEYXRhOiBhbnksIGZpZWxkRGF0YT86IGFueSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVyKHZhbHVlLCByb3dEYXRhLCBmaWVsZERhdGEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICpcbiAqIEludGVybmFsIGNsYXNzIHVzYWdlXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25JdGVtIHtcbiAgICBwdWJsaWMgcGFyZW50OiBFeHByZXNzaW9uR3JvdXBJdGVtO1xuICAgIHB1YmxpYyBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICpcbiAqIEludGVybmFsIGNsYXNzIHVzYWdlXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25Hcm91cEl0ZW0gZXh0ZW5kcyBFeHByZXNzaW9uSXRlbSB7XG4gICAgcHVibGljIG9wZXJhdG9yOiBGaWx0ZXJpbmdMb2dpYztcbiAgICBwdWJsaWMgY2hpbGRyZW46IEV4cHJlc3Npb25JdGVtW107XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IEZpbHRlcmluZ0xvZ2ljLCBwYXJlbnQ/OiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICpcbiAqIEludGVybmFsIGNsYXNzIHVzYWdlXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25PcGVyYW5kSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgICBwdWJsaWMgZXhwcmVzc2lvbjogSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgcHVibGljIGluRWRpdE1vZGU6IGJvb2xlYW47XG4gICAgcHVibGljIGluQWRkTW9kZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgaG92ZXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZmllbGRMYWJlbDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IElGaWx0ZXJpbmdFeHByZXNzaW9uLCBwYXJlbnQ6IEV4cHJlc3Npb25Hcm91cEl0ZW0pIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG59XG5cbi8qKlxuICogQSBjb21wb25lbnQgdXNlZCBmb3Igb3BlcmF0aW5nIHdpdGggY29tcGxleCBmaWx0ZXJzIGJ5IGNyZWF0aW5nIG9yIGVkaXRpbmcgY29uZGl0aW9uc1xuICogYW5kIGdyb3VwaW5nIHRoZW0gdXNpbmcgQU5EL09SIGxvZ2ljLlxuICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IGluIHRoZSBBZHZhbmNlZCBGaWx0ZXJpbmcgb2YgdGhlIEdyaWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtcXVlcnktYnVpbGRlciBbZmllbGRzXT1cInRoaXMuZmllbGRzXCI+XG4gKiA8L2lneC1xdWVyeS1idWlsZGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXF1ZXJ5LWJ1aWxkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hRdWVyeUJ1aWxkZXJIZWFkZXJDb21wb25lbnQsIElneEJ1dHRvbkRpcmVjdGl2ZSwgSWd4SWNvbkNvbXBvbmVudCwgSWd4Q2hpcENvbXBvbmVudCwgSWd4UHJlZml4RGlyZWN0aXZlLCBJZ3hTdWZmaXhEaXJlY3RpdmUsIElneFNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIE5nRm9yLCBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50LCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgSWd4UGlja2VyVG9nZ2xlQ29tcG9uZW50LCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCwgSWd4VGltZVBpY2tlckNvbXBvbmVudCwgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIElneFRvZ2dsZURpcmVjdGl2ZSwgSWd4QnV0dG9uR3JvdXBDb21wb25lbnQsIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUsIERhdGVQaXBlLCBJZ3hGaWVsZEZvcm1hdHRlclBpcGUsIElneEljb25CdXR0b25EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneFF1ZXJ5QnVpbGRlckNvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1xdWVyeS1idWlsZGVyJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXF1ZXJ5LWJ1aWxkZXInO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICAgIHB1YmxpYyBkaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgZmllbGRzLlxuICAgICovXG4gICAgcHVibGljIGdldCBmaWVsZHMoKTogRmllbGRUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpZWxkcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmllbGRzKGZpZWxkczogRmllbGRUeXBlW10pIHtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmllbGRzO1xuXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJTVkdJY29ucygpO1xuXG4gICAgICAgICAgICB0aGlzLl9maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1hdChmaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0cmVlLlxuICAgICovXG4gICAgIHB1YmxpYyBnZXQgZXhwcmVzc2lvblRyZWUoKTogSUV4cHJlc3Npb25UcmVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25UcmVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGV4cHJlc3Npb24gdHJlZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZXhwcmVzc2lvblRyZWUoZXhwcmVzc2lvblRyZWU6IElFeHByZXNzaW9uVHJlZSkge1xuICAgICAgICB0aGlzLl9leHByZXNzaW9uVHJlZSA9IGV4cHJlc3Npb25UcmVlO1xuXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSBxdWVyeSBidWlsZGVyLlxuICAgICAqIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uJ3MgbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgcXVlcnkgYnVpbGRlci5cbiAgICAgKiBFeHBlY3RzIGEgdmFsaWQgQkNQIDQ3IGxhbmd1YWdlIHRhZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBpbnZhbGlkLCBzZXQgaXQgYmFjayB0byBfbG9jYWxlSWRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrKHRoaXMuX2xvY2FsZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZUlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBmaXJlZCBhcyB0aGUgZXhwcmVzc2lvbiB0cmVlIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtcXVlcnktYnVpbGRlciAoZXhwcmVzc2lvblRyZWVDaGFuZ2UpPSdvbkV4cHJlc3Npb25UcmVlQ2hhbmdlKCknPjwvaWd4LXF1ZXJ5LWJ1aWxkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGV4cHJlc3Npb25UcmVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZmllbGRTZWxlY3QnLCB7IHJlYWQ6IElneFNlbGVjdENvbXBvbmVudCB9KVxuICAgIHByaXZhdGUgZmllbGRTZWxlY3Q6IElneFNlbGVjdENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbmRpdGlvblNlbGVjdCcsIHsgcmVhZDogSWd4U2VsZWN0Q29tcG9uZW50IH0pXG4gICAgcHJpdmF0ZSBjb25kaXRpb25TZWxlY3Q6IElneFNlbGVjdENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaFZhbHVlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHNlYXJjaFZhbHVlSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdwaWNrZXInKVxuICAgIHByaXZhdGUgcGlja2VyOiBJZ3hEYXRlUGlja2VyQ29tcG9uZW50IHwgSWd4VGltZVBpY2tlckNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2FkZFJvb3RBbmRHcm91cEJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgYWRkUm9vdEFuZEdyb3VwQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnYWRkQ29uZGl0aW9uQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSBhZGRDb25kaXRpb25CdXR0b246IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBoZWFkZXJDb250ZW50OiBJZ3hRdWVyeUJ1aWxkZXJIZWFkZXJDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0aW5nSW5wdXRzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIHNldCBlZGl0aW5nSW5wdXRzQ29udGFpbmVyKHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGlmICgodmFsdWUgJiYgIXRoaXMuX2VkaXRpbmdJbnB1dHNDb250YWluZXIpIHx8XG4gICAgICAgICAgICAodmFsdWUgJiYgdGhpcy5fZWRpdGluZ0lucHV0c0NvbnRhaW5lciAmJiB0aGlzLl9lZGl0aW5nSW5wdXRzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgIT09IHZhbHVlLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudEludG9WaWV3KHZhbHVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lZGl0aW5nSW5wdXRzQ29udGFpbmVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGVkaXRpbmdJbnB1dHNDb250YWluZXIoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0aW5nSW5wdXRzQ29udGFpbmVyO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2FkZE1vZGVDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcm90ZWN0ZWQgc2V0IGFkZE1vZGVDb250YWluZXIodmFsdWU6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgaWYgKCh2YWx1ZSAmJiAhdGhpcy5fYWRkTW9kZUNvbnRhaW5lcikgfHxcbiAgICAgICAgICAgICh2YWx1ZSAmJiB0aGlzLl9hZGRNb2RlQ29udGFpbmVyICYmIHRoaXMuX2FkZE1vZGVDb250YWluZXIubmF0aXZlRWxlbWVudCAhPT0gdmFsdWUubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxFbGVtZW50SW50b1ZpZXcodmFsdWUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FkZE1vZGVDb250YWluZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBnZXQgYWRkTW9kZUNvbnRhaW5lcigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZE1vZGVDb250YWluZXI7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBzZXQgY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lcih2YWx1ZTogRWxlbWVudFJlZikge1xuICAgICAgICBpZiAoKHZhbHVlICYmICF0aGlzLl9jdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyKSB8fFxuICAgICAgICAgICAgKHZhbHVlICYmIHRoaXMuX2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXIgJiYgdGhpcy5fY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50ICE9PSB2YWx1ZS5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyh2YWx1ZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lciA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBjdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEdyb3VwQnV0dG9uc0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKElneFRvZ2dsZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIGNvbnRleHRNZW51VG9nZ2xlOiBJZ3hUb2dnbGVEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkcmVuKElneENoaXBDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBjaGlwczogUXVlcnlMaXN0PElneENoaXBDb21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnZXhwcmVzc2lvbnNDb250YWluZXInKVxuICAgIHByaXZhdGUgZXhwcmVzc2lvbnNDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdvdmVybGF5T3V0bGV0JywgeyByZWFkOiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIG92ZXJsYXlPdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb290R3JvdXA6IEV4cHJlc3Npb25Hcm91cEl0ZW07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZEV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVudEdyb3VwOiBFeHByZXNzaW9uR3JvdXBJdGVtO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGV4dHVhbEdyb3VwOiBFeHByZXNzaW9uR3JvdXBJdGVtO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyaW5nTG9naWNzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRDb25kaXRpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBwaWNrZXJPdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmllbGRTZWxlY3RPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogZmFsc2VcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uZGl0aW9uU2VsZWN0T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlXG4gICAgfTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRGaWVsZDogRmllbGRUeXBlO1xuICAgIHByaXZhdGUgX2NsaWNrVGltZXI7XG4gICAgcHJpdmF0ZSBfZGJsQ2xpY2tEZWxheSA9IDIwMDtcbiAgICBwcml2YXRlIF9wcmV2ZW50Q2hpcENsaWNrID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZWRpdGluZ0lucHV0c0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgICBwcml2YXRlIF9hZGRNb2RlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgX2N1cnJlbnRHcm91cEJ1dHRvbnNDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gICAgcHJpdmF0ZSBfYWRkTW9kZUV4cHJlc3Npb246IEV4cHJlc3Npb25PcGVyYW5kSXRlbTtcbiAgICBwcml2YXRlIF9lZGl0ZWRFeHByZXNzaW9uOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW07XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRHcm91cHM6IEV4cHJlc3Npb25Hcm91cEl0ZW1bXSA9IFtdO1xuICAgIHByaXZhdGUgX2ZpZWxkczogRmllbGRUeXBlW107XG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvblRyZWU6IElFeHByZXNzaW9uVHJlZTtcbiAgICBwcml2YXRlIF9sb2NhbGU7XG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyhRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3NFTik7XG5cbiAgICBwcml2YXRlIF9wb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ub3BcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IENsb3NlU2Nyb2xsU3RyYXRlZ3koKVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJZ3hJY29uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZixcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByb3RlY3RlZCBfbG9jYWxlSWQ6IHN0cmluZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucz86IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgZWwpO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlIHx8IHRoaXMuX2xvY2FsZUlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3ZlcmxheU91dGxldDtcbiAgICAgICAgdGhpcy5maWVsZFNlbGVjdE92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm92ZXJsYXlPdXRsZXQ7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU2VsZWN0T3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3ZlcmxheU91dGxldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkRmllbGQodmFsdWU6IEZpZWxkVHlwZSkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3NlbGVjdGVkRmllbGQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRmllbGQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEZpZWxkID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUgJiYgdGhpcy5fc2VsZWN0ZWRGaWVsZCAmJiB0aGlzLl9zZWxlY3RlZEZpZWxkLmRhdGFUeXBlICE9PSBvbGRWYWx1ZS5kYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZEZpZWxkKCk6IEZpZWxkVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICpcbiAgICAgKiB1c2VkIGJ5IHRoZSBncmlkXG4gICAgICovXG4gICAgcHVibGljIHNldFBpY2tlck91dGxldChvdXRsZXQ/OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLnBpY2tlck91dGxldCA9IG91dGxldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqXG4gICAgICogdXNlZCBieSB0aGUgZ3JpZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb250ZXh0TWVudVZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250ZXh0TWVudVRvZ2dsZS5jb2xsYXBzZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0VkaXRlZEV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbiAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb25kaXRpb24ocGFyZW50OiBFeHByZXNzaW9uR3JvdXBJdGVtLCBhZnRlckV4cHJlc3Npb24/OiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICB0aGlzLmNhbmNlbE9wZXJhbmRBZGQoKTtcblxuICAgICAgICBjb25zdCBvcGVyYW5kSXRlbSA9IG5ldyBFeHByZXNzaW9uT3BlcmFuZEl0ZW0oe1xuICAgICAgICAgICAgZmllbGROYW1lOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBudWxsLFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIHNlYXJjaFZhbDogbnVsbFxuICAgICAgICB9LCBwYXJlbnQpO1xuXG4gICAgICAgIGlmIChhZnRlckV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmNoaWxkcmVuLmluZGV4T2YoYWZ0ZXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXggKyAxLCAwLCBvcGVyYW5kSXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChvcGVyYW5kSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVudGVyRXhwcmVzc2lvbkVkaXQob3BlcmFuZEl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFkZEFuZEdyb3VwKHBhcmVudD86IEV4cHJlc3Npb25Hcm91cEl0ZW0sIGFmdGVyRXhwcmVzc2lvbj86IEV4cHJlc3Npb25JdGVtKSB7XG4gICAgICAgIHRoaXMuYWRkR3JvdXAoRmlsdGVyaW5nTG9naWMuQW5kLCBwYXJlbnQsIGFmdGVyRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkT3JHcm91cChwYXJlbnQ/OiBFeHByZXNzaW9uR3JvdXBJdGVtLCBhZnRlckV4cHJlc3Npb24/OiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICB0aGlzLmFkZEdyb3VwKEZpbHRlcmluZ0xvZ2ljLk9yLCBwYXJlbnQsIGFmdGVyRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kR3JvdXAoZ3JvdXBJdGVtOiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gZ3JvdXBJdGVtLnBhcmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjb21taXRPcGVyYW5kRWRpdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uZXhwcmVzc2lvbi5maWVsZE5hbWUgPSB0aGlzLnNlbGVjdGVkRmllbGQuZmllbGQ7XG4gICAgICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uLmV4cHJlc3Npb24uY29uZGl0aW9uID0gdGhpcy5zZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKHRoaXMuc2VsZWN0ZWRDb25kaXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbi5leHByZXNzaW9uLnNlYXJjaFZhbCA9IERhdGFVdGlsLnBhcnNlVmFsdWUodGhpcy5zZWxlY3RlZEZpZWxkLmRhdGFUeXBlLCB0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uZmllbGRMYWJlbCA9IHRoaXMuc2VsZWN0ZWRGaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkRmllbGQuaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEZpZWxkLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRGaWVsZC5maWVsZDtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9leHByZXNzaW9uVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvblRyZWVGcm9tR3JvdXBJdGVtKHRoaXMucm9vdEdyb3VwKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uVHJlZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FuY2VsT3BlcmFuZEFkZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FkZE1vZGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRNb2RlRXhwcmVzc2lvbi5pbkFkZE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2FkZE1vZGVFeHByZXNzaW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbmNlbE9wZXJhbmRFZGl0KCkge1xuICAgICAgICBpZiAodGhpcy5fZWRpdGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbi5pbkVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZWRpdGVkRXhwcmVzc2lvbi5leHByZXNzaW9uLmZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlSXRlbSh0aGlzLl9lZGl0ZWRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZWRpdGVkRXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVyYW5kQ2FuQmVDb21taXR0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGQgJiYgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiAmJlxuICAgICAgICAgICAgKCEhdGhpcy5zZWFyY2hWYWx1ZSB8fCB0aGlzLnNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb24odGhpcy5zZWxlY3RlZENvbmRpdGlvbikuaXNVbmFyeSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKlxuICAgICAqIHVzZWQgYnkgdGhlIGdyaWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhpdE9wZXJhbmRFZGl0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2VkaXRlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZXJhbmRDYW5CZUNvbW1pdHRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdE9wZXJhbmRFZGl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbE9wZXJhbmRFZGl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0V4cHJlc3Npb25Hcm91cChleHByZXNzaW9uOiBFeHByZXNzaW9uSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEV4cHJlc3Npb25Hcm91cEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwUmVtb3ZlKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXhwcmVzc2lvbkl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcENsaWNrKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW0pIHtcbiAgICAgICAgdGhpcy5fY2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wcmV2ZW50Q2hpcENsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRvZ2dsZUV4cHJlc3Npb24oZXhwcmVzc2lvbkl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJldmVudENoaXBDbGljayA9IGZhbHNlO1xuICAgICAgICB9LCB0aGlzLl9kYmxDbGlja0RlbGF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEYmxDbGljayhleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbk9wZXJhbmRJdGVtKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbGlja1RpbWVyKTtcbiAgICAgICAgdGhpcy5fcHJldmVudENoaXBDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMuZW50ZXJFeHByZXNzaW9uRWRpdChleHByZXNzaW9uSXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW50ZXJFeHByZXNzaW9uRWRpdChleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbk9wZXJhbmRJdGVtKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5leGl0T3BlcmFuZEVkaXQoKTtcbiAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kQWRkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2VkaXRlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRlZEV4cHJlc3Npb24uaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwcmVzc2lvbkl0ZW0uaG92ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uZmllbGROYW1lID9cbiAgICAgICAgICAgIHRoaXMuZmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQuZmllbGQgPT09IGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uZmllbGROYW1lKSA6IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbiA/XG4gICAgICAgICAgICBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lIDogbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uc2VhcmNoVmFsO1xuXG4gICAgICAgIGV4cHJlc3Npb25JdGVtLmluRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9lZGl0ZWRFeHByZXNzaW9uID0gZXhwcmVzc2lvbkl0ZW07XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuZmllbGRTZWxlY3RPdmVybGF5U2V0dGluZ3MudGFyZ2V0ID0gdGhpcy5maWVsZFNlbGVjdC5lbGVtZW50O1xuICAgICAgICB0aGlzLmZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW3RoaXMuZmllbGRTZWxlY3QuZWxlbWVudCBhcyBIVE1MRWxlbWVudF07XG4gICAgICAgIHRoaXMuZmllbGRTZWxlY3RPdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneSA9IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblNlbGVjdE92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmNvbmRpdGlvblNlbGVjdC5lbGVtZW50O1xuICAgICAgICB0aGlzLmNvbmRpdGlvblNlbGVjdE92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLmNvbmRpdGlvblNlbGVjdC5lbGVtZW50IGFzIEhUTUxFbGVtZW50XTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TZWxlY3RPdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneSA9IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkU2VsZWN0LmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKHRoaXMuc2VsZWN0ZWRDb25kaXRpb24pLmlzVW5hcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblNlbGVjdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuc2VhcmNoVmFsdWVJbnB1dD8ubmF0aXZlRWxlbWVudCB8fCB0aGlzLnBpY2tlcj8uZ2V0RWRpdEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9zZWxlY3RlZEdyb3Vwcykge1xuICAgICAgICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZEdyb3VwcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIGV4cHIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMgPSBbXTtcblxuICAgICAgICB0aGlzLnRvZ2dsZUNvbnRleHRNZW51KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW50ZXJFeHByZXNzaW9uQWRkKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uT3BlcmFuZEl0ZW0pIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmV4aXRPcGVyYW5kRWRpdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9hZGRNb2RlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fYWRkTW9kZUV4cHJlc3Npb24uaW5BZGRNb2RlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBleHByZXNzaW9uSXRlbS5pbkFkZE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hZGRNb2RlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25JdGVtO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXhwcmVzc2lvbihleHByZXNzaW9uSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZXh0TWVudUNsb3NlZCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0dWFsR3JvdXAgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnRBcmdzLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudEFyZ3Mua2V5O1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dE1lbnVUb2dnbGUuY29sbGFwc2VkICYmIChrZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLkVTQ0FQRSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFuZEdyb3VwKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwKEZpbHRlcmluZ0xvZ2ljLkFuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlT3JHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVHcm91cChGaWx0ZXJpbmdMb2dpYy5Pcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlRmlsdGVycygpIHtcbiAgICAgICAgZm9yIChjb25zdCBleHByIG9mIHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJdGVtKGV4cHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uR3JvdXBDbGljayhncm91cEl0ZW06IEV4cHJlc3Npb25Hcm91cEl0ZW0pIHtcbiAgICAgICAgdGhpcy50b2dnbGVHcm91cChncm91cEl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHVuZ3JvdXAoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXAgPSB0aGlzLmNvbnRleHR1YWxHcm91cDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0ZWRHcm91cC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yoc2VsZWN0ZWRHcm91cCk7XG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxLCAuLi5zZWxlY3RlZEdyb3VwLmNoaWxkcmVuKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBleHByIG9mIHNlbGVjdGVkR3JvdXAuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBleHByLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5jb21taXRPcGVyYW5kRWRpdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUdyb3VwKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEdyb3VwID0gdGhpcy5jb250ZXh0dWFsR3JvdXA7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGVkR3JvdXAucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHNlbGVjdGVkR3JvdXApO1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcm91cCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY29tbWl0T3BlcmFuZEVkaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RGaWx0ZXJpbmdMb2dpYyhldmVudDogSUJ1dHRvbkdyb3VwRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHVhbEdyb3VwLm9wZXJhdG9yID0gZXZlbnQuaW5kZXggYXMgRmlsdGVyaW5nTG9naWM7XG4gICAgICAgIHRoaXMuY29tbWl0T3BlcmFuZEVkaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb25kaXRpb25GcmllbmRseU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzW2BpZ3hfcXVlcnlfYnVpbGRlcl9maWx0ZXJfJHtuYW1lfWBdIHx8IG5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkV4cHJlc3Npb25zU2Nyb2xsZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0TWVudVRvZ2dsZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29udGV4dE1lbnVUYXJnZXQoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVUb2dnbGUucmVwb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52b2tlQ2xpY2soZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChldmVudEFyZ3MuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9wZW5QaWNrZXIoYXJnczogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoYXJncykpIHtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uT3V0bGV0UG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBjbG9zaW5nIHRoZSBzZWxlY3QncyBkcm9wZG93biB3aGVuIGNsaWNraW5nIHRoZSBzY3JvbGxcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb25kaXRpb25MaXN0KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWVsZCA/IHRoaXMuc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbkxpc3QoKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1hdHRlcihmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kKGVsID0+IGVsLmZpZWxkID09PSBmaWVsZCkuZm9ybWF0dGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1hdChmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kKGVsID0+IGVsLmZpZWxkID09PSBmaWVsZCkucGlwZUFyZ3MuZm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICpcbiAgICAgKiB1c2VkIGJ5IHRoZSBncmlkXG4gICAgICovXG4gICAgcHVibGljIHNldEFkZEJ1dHRvbkZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRSb290QW5kR3JvdXBCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUm9vdEFuZEdyb3VwQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZENvbmRpdGlvbkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5hZGRDb25kaXRpb25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGV4dChleHByZXNzaW9uOiBFeHByZXNzaW9uSXRlbSwgYWZ0ZXJFeHByZXNzaW9uPzogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogZXhwcmVzc2lvbixcbiAgICAgICAgICAgIGFmdGVyRXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcFNlbGVjdGlvbkVuZCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dHVhbEdyb3VwID0gdGhpcy5maW5kU2luZ2xlU2VsZWN0ZWRHcm91cCgpO1xuICAgICAgICBpZiAoY29udGV4dHVhbEdyb3VwIHx8IHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHR1YWxHcm91cCA9IGNvbnRleHR1YWxHcm91cDtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29udGV4dE1lbnVUYXJnZXQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51VG9nZ2xlLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVUb2dnbGUub3Blbih0aGlzLl9vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VG9nZ2xlLnJlcG9zaXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9ybWF0KGZpZWxkOiBGaWVsZFR5cGUpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5waXBlQXJncykge1xuICAgICAgICAgICAgZmllbGQucGlwZUFyZ3MgPSB7IGRpZ2l0c0luZm86IERFRkFVTFRfUElQRV9ESUdJVFNfSU5GTyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWVsZC5waXBlQXJncy5mb3JtYXQpIHtcbiAgICAgICAgICAgIGZpZWxkLnBpcGVBcmdzLmZvcm1hdCA9IGZpZWxkLmRhdGFUeXBlID09PSBEYXRhVHlwZS5UaW1lID9cbiAgICAgICAgICAgICAgICBERUZBVUxUX1BJUEVfVElNRV9GT1JNQVQgOiBmaWVsZC5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuRGF0ZVRpbWUgP1xuICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BJUEVfREFURV9USU1FX0ZPUk1BVCA6IERFRkFVTFRfUElQRV9EQVRFX0ZPUk1BVDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmllbGQuZGVmYXVsdERhdGVUaW1lRm9ybWF0KSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0RGF0ZVRpbWVGb3JtYXQgPSBERUZBVUxUX0RBVEVfVElNRV9GT1JNQVQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpZWxkLmRlZmF1bHRUaW1lRm9ybWF0KSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0VGltZUZvcm1hdCA9IERFRkFVTFRfVElNRV9GT1JNQVQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZpbHRlcnMoZmllbGQ6IEZpZWxkVHlwZSkge1xuICAgICAgICBpZiAoIWZpZWxkLmZpbHRlcnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbHRlcnMgPSBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuUGVyY2VudDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsdGVycyA9IElneE51bWJlckZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWx0ZXJzID0gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsdGVycyA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWx0ZXJzID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblRvZ2dsZUV4cHJlc3Npb24oZXhwcmVzc2lvbkl0ZW06IEV4cHJlc3Npb25PcGVyYW5kSXRlbSkge1xuICAgICAgICB0aGlzLmV4aXRPcGVyYW5kRWRpdCgpO1xuICAgICAgICB0aGlzLnRvZ2dsZUV4cHJlc3Npb24oZXhwcmVzc2lvbkl0ZW0pO1xuXG4gICAgICAgIHRoaXMudG9nZ2xlQ29udGV4dE1lbnUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUV4cHJlc3Npb24oZXhwcmVzc2lvbkl0ZW06IEV4cHJlc3Npb25PcGVyYW5kSXRlbSkge1xuICAgICAgICBleHByZXNzaW9uSXRlbS5zZWxlY3RlZCA9ICFleHByZXNzaW9uSXRlbS5zZWxlY3RlZDtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5wdXNoKGV4cHJlc3Npb25JdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLmluZGV4T2YoZXhwcmVzc2lvbkl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0UGFyZW50UmVjdXJzaXZlKGV4cHJlc3Npb25JdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkR3JvdXAob3BlcmF0b3I6IEZpbHRlcmluZ0xvZ2ljLCBwYXJlbnQ/OiBFeHByZXNzaW9uR3JvdXBJdGVtLCBhZnRlckV4cHJlc3Npb24/OiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICB0aGlzLmNhbmNlbE9wZXJhbmRBZGQoKTtcblxuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSBuZXcgRXhwcmVzc2lvbkdyb3VwSXRlbShvcGVyYXRvciwgcGFyZW50KTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihhZnRlckV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXggKyAxLCAwLCBncm91cEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChncm91cEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JvdXAgPSBncm91cEl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihncm91cEl0ZW0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cCA9IGdyb3VwSXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUV4cHJlc3Npb25Hcm91cEl0ZW0oZXhwcmVzc2lvblRyZWU6IElFeHByZXNzaW9uVHJlZSwgcGFyZW50PzogRXhwcmVzc2lvbkdyb3VwSXRlbSk6IEV4cHJlc3Npb25Hcm91cEl0ZW0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uVHJlZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSBuZXcgRXhwcmVzc2lvbkdyb3VwSXRlbShleHByZXNzaW9uVHJlZS5vcGVyYXRvciwgcGFyZW50KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV4cHIgb2YgZXhwcmVzc2lvblRyZWUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGlmIChleHByIGluc3RhbmNlb2YgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcm91cCA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbkdyb3VwSXRlbShleHByLCBncm91cEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSXRlbS5jaGlsZHJlbi5wdXNoKGNoaWxkR3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nRXhwciA9IGV4cHIgYXMgSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGVsID0+IGVsLmZpZWxkID09PSBmaWx0ZXJpbmdFeHByLmZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwckNvcHk6IElGaWx0ZXJpbmdFeHByZXNzaW9uID0geyAuLi5maWx0ZXJpbmdFeHByIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhbmRJdGVtID0gbmV3IEV4cHJlc3Npb25PcGVyYW5kSXRlbShleHByQ29weSwgZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEl0ZW0uZmllbGRMYWJlbCA9IGZpZWxkLmxhYmVsIHx8IGZpZWxkLmhlYWRlciB8fCBmaWVsZC5maWVsZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJdGVtLmNoaWxkcmVuLnB1c2gob3BlcmFuZEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cEl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGdyb3VwSXRlbSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uVHJlZUZyb21Hcm91cEl0ZW0oZ3JvdXBJdGVtOiBFeHByZXNzaW9uR3JvdXBJdGVtKTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHtcbiAgICAgICAgaWYgKCFncm91cEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvblRyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGdyb3VwSXRlbS5vcGVyYXRvcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwSXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFeHByZXNzaW9uR3JvdXBJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvblRyZWVGcm9tR3JvdXBJdGVtKChpdGVtIGFzIEV4cHJlc3Npb25Hcm91cEl0ZW0pKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHN1YlRyZWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKChpdGVtIGFzIEV4cHJlc3Npb25PcGVyYW5kSXRlbSkuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvblRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVDb250ZXh0TWVudSgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dHVhbEdyb3VwID0gdGhpcy5maW5kU2luZ2xlU2VsZWN0ZWRHcm91cCgpO1xuXG4gICAgICAgIGlmIChjb250ZXh0dWFsR3JvdXAgfHwgdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHVhbEdyb3VwID0gY29udGV4dHVhbEdyb3VwO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dHVhbEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdMb2dpY3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9maWx0ZXJfb3BlcmF0b3JfYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGNvbnRleHR1YWxHcm91cC5vcGVyYXRvciA9PT0gRmlsdGVyaW5nTG9naWMuQW5kXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9maWx0ZXJfb3BlcmF0b3Jfb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogY29udGV4dHVhbEdyb3VwLm9wZXJhdG9yID09PSBGaWx0ZXJpbmdMb2dpYy5PclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRleHRNZW51VG9nZ2xlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VG9nZ2xlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRTaW5nbGVTZWxlY3RlZEdyb3VwKCk6IEV4cHJlc3Npb25Hcm91cEl0ZW0ge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX3NlbGVjdGVkR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluc0FsbFNlbGVjdGVkRXhwcmVzc2lvbnMgPSB0aGlzLnNlbGVjdGVkRXhwcmVzc2lvbnMuZXZlcnkob3AgPT4gdGhpcy5pc0luc2lkZUdyb3VwKG9wLCBncm91cCkpO1xuXG4gICAgICAgICAgICBpZiAoY29udGFpbnNBbGxTZWxlY3RlZEV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0luc2lkZUdyb3VwKGl0ZW06IEV4cHJlc3Npb25JdGVtLCBncm91cDogRXhwcmVzc2lvbkdyb3VwSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnBhcmVudCA9PT0gZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnNpZGVHcm91cChpdGVtLnBhcmVudCwgZ3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlSXRlbShleHByZXNzaW9uSXRlbTogRXhwcmVzc2lvbkl0ZW0pIHtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uSXRlbS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25UcmVlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHByZXNzaW9uSXRlbSA9PT0gdGhpcy5jdXJyZW50R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBleHByZXNzaW9uSXRlbS5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihleHByZXNzaW9uSXRlbSk7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2V4cHJlc3Npb25UcmVlID0gdGhpcy5jcmVhdGVFeHByZXNzaW9uVHJlZUZyb21Hcm91cEl0ZW0odGhpcy5yb290R3JvdXApO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXhwcmVzc2lvbkl0ZW0ucGFyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblRyZWVDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR3JvdXAob3BlcmF0b3I6IEZpbHRlcmluZ0xvZ2ljKSB7XG4gICAgICAgIGNvbnN0IGNoaXBzID0gdGhpcy5jaGlwcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gdGhpcy5zZWxlY3RlZEV4cHJlc3Npb25zLnJlZHVjZSgoaSwgZSkgPT4gTWF0aC5taW4oaSwgY2hpcHMuZmluZEluZGV4KGMgPT4gYy5kYXRhID09PSBlKSksIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICBjb25zdCBmaXJzdEV4cHJlc3Npb24gPSBjaGlwc1ttaW5JbmRleF0uZGF0YTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBmaXJzdEV4cHJlc3Npb24ucGFyZW50O1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSBuZXcgRXhwcmVzc2lvbkdyb3VwSXRlbShvcGVyYXRvciwgcGFyZW50KTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGZpcnN0RXhwcmVzc2lvbik7XG4gICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGdyb3VwSXRlbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByIG9mIHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucykge1xuICAgICAgICAgICAgZ3JvdXBJdGVtLmNoaWxkcmVuLnB1c2goZXhwcik7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXhwcik7XG4gICAgICAgICAgICBleHByLnBhcmVudCA9IGdyb3VwSXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUdyb3VwKGdyb3VwSXRlbTogRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICB0aGlzLmV4aXRPcGVyYW5kRWRpdCgpO1xuICAgICAgICBpZiAoZ3JvdXBJdGVtLmNoaWxkcmVuICYmIGdyb3VwSXRlbS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlR3JvdXBSZWN1cnNpdmUoZ3JvdXBJdGVtLCAhZ3JvdXBJdGVtLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBJdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBhcmVudFJlY3Vyc2l2ZShncm91cEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b2dnbGVDb250ZXh0TWVudSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVHcm91cFJlY3Vyc2l2ZShncm91cEl0ZW06IEV4cHJlc3Npb25Hcm91cEl0ZW0sIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChncm91cEl0ZW0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncm91cEl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgICAgICAgICAgaWYgKGdyb3VwSXRlbS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkR3JvdXBzLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZEdyb3Vwcy5pbmRleE9mKGdyb3VwSXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRHcm91cHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiBncm91cEl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChleHByIGluc3RhbmNlb2YgRXhwcmVzc2lvbkdyb3VwSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlR3JvdXBSZWN1cnNpdmUoZXhwciwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYW5kRXhwcmVzc2lvbiA9IGV4cHIgYXMgRXhwcmVzc2lvbk9wZXJhbmRJdGVtO1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kRXhwcmVzc2lvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFeHByZXNzaW9uKG9wZXJhbmRFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0UGFyZW50UmVjdXJzaXZlKGV4cHJlc3Npb25JdGVtOiBFeHByZXNzaW9uSXRlbSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBleHByZXNzaW9uSXRlbS5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkR3JvdXBzLmluZGV4T2YocGFyZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEdyb3Vwcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBhcmVudFJlY3Vyc2l2ZShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDb250ZXh0TWVudVRhcmdldCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuZXhwcmVzc2lvbnNDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY2hpcHMgPSB0aGlzLmNoaXBzLmZpbHRlcihjID0+IHRoaXMuc2VsZWN0ZWRFeHByZXNzaW9ucy5pbmRleE9mKGMuZGF0YSkgIT09IC0xKTtcbiAgICAgICAgbGV0IG1pblRvcCA9IGNoaXBzLnJlZHVjZSgodCwgYykgPT5cbiAgICAgICAgICAgIE1hdGgubWluKHQsIGMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgICAgbWluVG9wID0gTWF0aC5tYXgoY29udGFpbmVyUmVjdC50b3AsIG1pblRvcCk7XG4gICAgICAgIG1pblRvcCA9IE1hdGgubWluKGNvbnRhaW5lclJlY3QuYm90dG9tLCBtaW5Ub3ApO1xuICAgICAgICBsZXQgbWF4UmlnaHQgPSBjaGlwcy5yZWR1Y2UoKHIsIGMpID0+XG4gICAgICAgICAgICBNYXRoLm1heChyLCBjLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpLCAwKTtcbiAgICAgICAgbWF4UmlnaHQgPSBNYXRoLm1heChtYXhSaWdodCwgY29udGFpbmVyUmVjdC5sZWZ0KTtcbiAgICAgICAgbWF4UmlnaHQgPSBNYXRoLm1pbihtYXhSaWdodCwgY29udGFpbmVyUmVjdC5yaWdodCk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSBuZXcgUG9pbnQobWF4UmlnaHQsIG1pblRvcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxFbGVtZW50SW50b1ZpZXcodGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmV4cHJlc3Npb25zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9IHRhcmdldC5vZmZzZXRUb3AgLSBjb250YWluZXIub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCBkZWx0YSA9IDEwO1xuXG4gICAgICAgIGlmIChjb250YWluZXIuc2Nyb2xsVG9wICsgZGVsdGEgPiB0YXJnZXRPZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSB0YXJnZXRPZmZzZXQgLSBkZWx0YTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXIuc2Nyb2xsVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodCA8IHRhcmdldE9mZnNldCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKyBkZWx0YSkge1xuICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IHRhcmdldE9mZnNldCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKyBkZWx0YSAtIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5jYW5jZWxPcGVyYW5kQWRkKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsT3BlcmFuZEVkaXQoKTtcbiAgICAgICAgdGhpcy5yb290R3JvdXAgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25Hcm91cEl0ZW0odGhpcy5leHByZXNzaW9uVHJlZSk7XG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5yb290R3JvdXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNWR0ljb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0b3JJY29ucyA9IGVkaXRvciBhcyBhbnlbXTtcbiAgICAgICAgZWRpdG9ySWNvbnMuZm9yRWFjaChpY29uID0+IHRoaXMuaWNvblNlcnZpY2UuYWRkU3ZnSWNvbkZyb21UZXh0KGljb24ubmFtZSwgaWNvbi52YWx1ZSwgJ2lteC1pY29ucycpKTtcbiAgICB9XG59XG5cbiIsIjxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXJcbiAgICAqbmdJZj1cIiFoZWFkZXJDb250ZW50XCJcbiAgICBbdGl0bGVdPVwidGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfdGl0bGVcIlxuPlxuPC9pZ3gtcXVlcnktYnVpbGRlci1oZWFkZXI+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cImlneC1xdWVyeS1idWlsZGVyLWhlYWRlclwiPjwvbmctY29udGVudD5cblxuPGRpdlxuICAgICNleHByZXNzaW9uc0NvbnRhaW5lclxuICAgIGNsYXNzPVwiaWd4LXF1ZXJ5LWJ1aWxkZXJfX21haW5cIlxuICAgIChzY3JvbGwpPVwib25FeHByZXNzaW9uc1Njcm9sbGVkKClcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm9vdEdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAjYWRkUm9vdEFuZEdyb3VwQnV0dG9uXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5kR3JvdXAoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtaWNvbj5hZGQ8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfYW5kX2dyb3VwIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cInRoaXMuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZE9yR3JvdXAoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtaWNvbj5hZGQ8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfb3JfZ3JvdXAgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZmlsdGVyLWVtcHR5XCI+XG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJpZ3gtZmlsdGVyLWVtcHR5X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2luaXRpYWxfdGV4dCB9fVxuICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2FkZEV4cHJlc3Npb25zVGVtcGxhdGVcbiAgICAgICAgbGV0LWV4cHJlc3Npb25JdGVtXG4gICAgICAgIGxldC1hZnRlckV4cHJlc3Npb249XCJhZnRlckV4cHJlc3Npb25cIlxuICAgID5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICNhZGRDb25kaXRpb25CdXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJoYXNFZGl0ZWRFeHByZXNzaW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRDb25kaXRpb24oZXhwcmVzc2lvbkl0ZW0sIGFmdGVyRXhwcmVzc2lvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+YWRkPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfYWRkX2NvbmRpdGlvblxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaGFzRWRpdGVkRXhwcmVzc2lvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5kR3JvdXAoZXhwcmVzc2lvbkl0ZW0sIGFmdGVyRXhwcmVzc2lvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+YWRkPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2FuZF9ncm91cCB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJoYXNFZGl0ZWRFeHByZXNzaW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRPckdyb3VwKGV4cHJlc3Npb25JdGVtLCBhZnRlckV4cHJlc3Npb24pXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1pY29uPmFkZDwvaWd4LWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9vcl9ncm91cCB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZmlsdGVyT3BlcmFuZFRlbXBsYXRlIGxldC1leHByZXNzaW9uSXRlbT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhZXhwcmVzc2lvbkl0ZW0uaW5FZGl0TW9kZVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvbi1pdGVtXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImV4cHJlc3Npb25JdGVtLmhvdmVyZWQgPSB0cnVlXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImV4cHJlc3Npb25JdGVtLmhvdmVyZWQgPSBmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hpcFxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImV4cHJlc3Npb25JdGVtXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCcgPyAnY29zeScgOiBkaXNwbGF5RGVuc2l0eVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiZXhwcmVzc2lvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGljayhleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJvbkNoaXBEYmxDbGljayhleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlKGV4cHJlc3Npb25JdGVtKVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJvbkNoaXBTZWxlY3Rpb25FbmQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gaWd4UHJlZml4IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19leHByZXNzaW9uLWNvbHVtblwiPnt7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmZpZWxkTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uZmllbGROYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlneC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiaW14LWljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uY29uZGl0aW9uLmljb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvbi1jb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGlneFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0RhdGUoZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5zZWFyY2hWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRGb3JtYXR0ZXIoZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGV4cHJlc3Npb25JdGVtLmV4cHJlc3Npb24uc2VhcmNoVmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWVsZEZvcm1hdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEZvcm1hdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLnNlYXJjaFZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uZXhwcmVzc2lvbi5maWVsZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5sb2NhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBleHByZXNzaW9uSXRlbS5leHByZXNzaW9uLnNlYXJjaFZhbFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZmlsdGVyLXRyZWVfX2V4cHJlc3Npb24tYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgKGV4cHJlc3Npb25JdGVtLnNlbGVjdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkl0ZW0uaG92ZXJlZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW50ZXJFeHByZXNzaW9uRWRpdChleHByZXNzaW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW50ZXJFeHByZXNzaW9uQWRkKGV4cHJlc3Npb25JdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAhZXhwcmVzc2lvbkl0ZW0uaW5BZGRNb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXhwcmVzc2lvbkl0ZW0ucGFyZW50ICE9PSBjdXJyZW50R3JvdXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSXRlbSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmNoaWxkcmVuW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGFkZFxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJleHByZXNzaW9uSXRlbS5pbkVkaXRNb2RlXCJcbiAgICAgICAgICAgICNlZGl0aW5nSW5wdXRzQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9faW5wdXRzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1zZWxlY3RcbiAgICAgICAgICAgICAgICAjZmllbGRTZWxlY3RcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgICAgICBbb3ZlcmxheVNldHRpbmdzXT1cImZpZWxkU2VsZWN0T3ZlcmxheVNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2NvbHVtbl9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZpZWxkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LXNlbGVjdC1pdGVtICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiBbdmFsdWVdPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQuaGVhZGVyIHx8IGZpZWxkLmZpZWxkIH19XG4gICAgICAgICAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxpZ3gtc2VsZWN0XG4gICAgICAgICAgICAgICAgI2NvbmRpdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCInY29tcGFjdCdcIlxuICAgICAgICAgICAgICAgIFtvdmVybGF5U2V0dGluZ3NdPVwiY29uZGl0aW9uU2VsZWN0T3ZlcmxheVNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2NvbmRpdGlvbl9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEZpZWxkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LXByZWZpeFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2VsZWN0LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKGNvbmRpdGlvblNlbGVjdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiaW14LWljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNlbGVjdC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuaWNvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2lneC1wcmVmaXg+XG5cbiAgICAgICAgICAgICAgICA8aWd4LXNlbGVjdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgZ2V0Q29uZGl0aW9uTGlzdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShjb25kaXRpb24pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJpbXgtaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmRpdGlvbkZyaWVuZGx5TmFtZShjb25kaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSAhPT0gJ2RhdGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlICE9PSAndGltZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZGF0YVR5cGUgIT09ICdkYXRlVGltZScpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaFZhbHVlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkRmllbGQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZENvbmRpdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkRmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkLmZpbHRlcnMuY29uZGl0aW9uKHNlbGVjdGVkQ29uZGl0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNVbmFyeSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpZWxkICYmIHNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX3ZhbHVlX3BsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cblxuICAgICAgICAgICAgPGlneC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICNwaWNrZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRmllbGQgJiYgc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib3BlblBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCInY29tcGFjdCdcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfZGF0ZV9wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRDb25kaXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkRmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmllbGQuZmlsdGVycy5jb25kaXRpb24oc2VsZWN0ZWRDb25kaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzVW5hcnkpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInRoaXMubG9jYWxlXCJcbiAgICAgICAgICAgICAgICBbb3V0bGV0XT1cInBpY2tlck91dGxldFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdHRlcl09XCJzZWxlY3RlZEZpZWxkLmZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlGb3JtYXRdPVwic2VsZWN0ZWRGaWVsZC5waXBlQXJncy5mb3JtYXRcIlxuICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwic2VsZWN0ZWRGaWVsZC5waXBlQXJncy53ZWVrU3RhcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gZGlzYWJsZSBkZWZhdWx0IGljb25zIC0tPlxuICAgICAgICAgICAgICAgIDxpZ3gtcGlja2VyLXRvZ2dsZT48L2lneC1waWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxpZ3gtcGlja2VyLWNsZWFyPjwvaWd4LXBpY2tlci1jbGVhcj5cbiAgICAgICAgICAgIDwvaWd4LWRhdGUtcGlja2VyPlxuXG4gICAgICAgICAgICA8aWd4LXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgI3BpY2tlclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWVsZCAmJiBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAndGltZSdcIlxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib3BlblBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX3RpbWVfcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZENvbmRpdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbihzZWxlY3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNVbmFyeSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwidGhpcy5sb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtvdXRsZXRdPVwicGlja2VyT3V0bGV0XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0dGVyXT1cInNlbGVjdGVkRmllbGQuZm9ybWF0dGVyXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRGb3JtYXRdPVwic2VsZWN0ZWRGaWVsZC5kZWZhdWx0VGltZUZvcm1hdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBkaXNhYmxlIGRlZmF1bHQgaWNvbnMgLS0+XG4gICAgICAgICAgICAgICAgPGlneC1waWNrZXItdG9nZ2xlPjwvaWd4LXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgICAgPGlneC1waWNrZXItY2xlYXI+PC9pZ3gtcGlja2VyLWNsZWFyPlxuICAgICAgICAgICAgPC9pZ3gtdGltZS1waWNrZXI+XG5cbiAgICAgICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgICAgICAjaW5wdXRHcm91cFxuICAgICAgICAgICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWVsZCAmJiBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2RhdGVfcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRDb25kaXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZC5maWx0ZXJzLmNvbmRpdGlvbihzZWxlY3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzVW5hcnkpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJzZWxlY3RlZEZpZWxkLmRlZmF1bHREYXRlVGltZUZvcm1hdFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19pbnB1dHMtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGlneEljb25CdXR0b249XCJmbGF0XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tY29tcG9uZW50LXNpemVdPVwiZ2V0Q29tcG9uZW50U2l6ZVN0eWxlcygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcGVyYW5kQ2FuQmVDb21taXR0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21taXRPcGVyYW5kRWRpdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbj5jaGVjazwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWd4SWNvbkJ1dHRvbj1cImZsYXRcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1jb21wb25lbnQtc2l6ZV09XCJnZXRDb21wb25lbnRTaXplU3R5bGVzKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3BlcmFuZEVkaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZXhwcmVzc2lvbkl0ZW0uaW5BZGRNb2RlXCJcbiAgICAgICAgICAgICNhZGRNb2RlQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fYnV0dG9uc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBhZGRFeHByZXNzaW9uc1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KGV4cHJlc3Npb25JdGVtLnBhcmVudCwgZXhwcmVzc2lvbkl0ZW0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tY29tcG9uZW50LXNpemVdPVwiZ2V0Q29tcG9uZW50U2l6ZVN0eWxlcygpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3BlcmFuZEFkZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2V4cHJlc3Npb25UcmVlVGVtcGxhdGUgbGV0LWV4cHJlc3Npb25JdGVtPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWZpbHRlci10cmVlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fbGluZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnaWd4LWZpbHRlci10cmVlX19saW5lLS1hbmQnOiBleHByZXNzaW9uSXRlbS5vcGVyYXRvciA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgJ2lneC1maWx0ZXItdHJlZV9fbGluZS0tb3InOiBleHByZXNzaW9uSXRlbS5vcGVyYXRvciA9PT0gMSxcbiAgICAgICAgICAgICAgICAgICAgJ2lneC1maWx0ZXItdHJlZV9fbGluZS0tc2VsZWN0ZWQnOiBleHByZXNzaW9uSXRlbS5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImludm9rZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soZXhwcmVzc2lvbkl0ZW0pXCJcbiAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1maWx0ZXItdHJlZV9fZXhwcmVzc2lvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGV4cHIgb2YgZXhwcmVzc2lvbkl0ZW0uY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V4cHJlc3Npb25Hcm91cChleHByKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGV4cHJlc3Npb25UcmVlVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWx0ZXJPcGVyYW5kVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dChleHByKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudEdyb3VwID09PSBleHByZXNzaW9uSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICNjdXJyZW50R3JvdXBCdXR0b25zQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LWZpbHRlci10cmVlX19idXR0b25zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXhwcmVzc2lvbnNUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KGV4cHJlc3Npb25JdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwcmVzc2lvbkl0ZW0gIT09IHJvb3RHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWRpdGVkRXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25JdGVtLmNoaWxkcmVuLmxlbmd0aCA8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5kR3JvdXAoZXhwcmVzc2lvbkl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9lbmRfZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvb3RHcm91cFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25UcmVlVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dChyb290R3JvdXApXG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGlneFRvZ2dsZVxuICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51XCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xvc2VkKT1cImNvbnRleHRNZW51Q2xvc2VkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWd4LWZpbHRlci1jb250ZXh0dWFsLW1lbnUtLWNvc3knOiBkaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knLFxuICAgICAgICAgICAgJ2lneC1maWx0ZXItY29udGV4dHVhbC1tZW51LS1jb21wYWN0JzogZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0J1xuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51X19jbG9zZS1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWljb24+Y2xvc2U8L2lneC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dHVhbEdyb3VwXCI+XG4gICAgICAgICAgICA8aWd4LWJ1dHRvbmdyb3VwXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cInRoaXMuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZXNdPVwiZmlsdGVyaW5nTG9naWNzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdEZpbHRlcmluZ0xvZ2ljKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9pZ3gtYnV0dG9uZ3JvdXA+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbnRleHR1YWxHcm91cC5wYXJlbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1bmdyb3VwKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBuYW1lPVwidW5ncm91cFwiPjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfdW5ncm91cFxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUdyb3VwKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LWZpbHRlci1jb250ZXh0dWFsLW1lbnVfX2RlbGV0ZS1idG5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvbj5kZWxldGU8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX2RlbGV0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZXh0dWFsR3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlQW5kR3JvdXAoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfY3JlYXRlX2FuZF9ncm91cCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGlneEJ1dHRvbj1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZU9yR3JvdXAoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfY3JlYXRlX29yX2dyb3VwIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWd4QnV0dG9uPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1maWx0ZXItY29udGV4dHVhbC1tZW51X19kZWxldGUtYnRuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9kZWxldGVfZmlsdGVycyB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gICAgI292ZXJsYXlPdXRsZXRcbiAgICBpZ3hPdmVybGF5T3V0bGV0XG4gICAgY2xhc3M9XCJpZ3gtcXVlcnktYnVpbGRlcl9fb3V0bGV0XCJcbiAgICAocG9pbnRlcmRvd24pPVwib25PdXRsZXRQb2ludGVyRG93bigkZXZlbnQpXCJcbj48L2Rpdj5cbiJdfQ==