@wavemaker/app-ng-runtime 11.5.0-next.26237 → 11.5.0-next.26239

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.
@@ -1335,7 +1335,7 @@
1335
1335
  getAttributes() {
1336
1336
  let _tNodeAttrs = this.inj._tNode.attrs, actualAttrs = Array.from(this.nativeElement.attributes).map(attr => attr.name);
1337
1337
  if (_tNodeAttrs === null) {
1338
- return actualAttrs;
1338
+ return actualAttrs.sort();
1339
1339
  }
1340
1340
  _.forEach(_tNodeAttrs, (attr, i) => {
1341
1341
  if (typeof attr === 'number') {
@@ -1349,14 +1349,20 @@
1349
1349
  }
1350
1350
  }
1351
1351
  });
1352
- return actualAttrs;
1352
+ /*
1353
+ Sorting attributes as properties like placeholder is not working when it is bound.
1354
+ placeholder and placeholder.bind two properties are coming in Array.
1355
+ When array is not sorted, initially placeholder.bind value is set then placeholder default value is updated.
1356
+ If array is sorted, placeholder.bind value will be set finally.
1357
+ This is caused because of the way we are storing attribute names in watcher registry map
1358
+ */
1359
+ return actualAttrs.sort();
1353
1360
  }
1354
1361
  /**
1355
1362
  * Process the attributes
1356
1363
  */
1357
1364
  processAttrs() {
1358
- const attrs = this.getAttributes();
1359
- _.map(attrs, (attrName) => {
1365
+ _.map(this.getAttributes(), (attrName) => {
1360
1366
  let attrValue = this.nativeElement.attributes[attrName].value;
1361
1367
  this.$attrs.set(attrName, attrValue);
1362
1368
  this.processAttr(attrName, attrValue);
@@ -449,7 +449,7 @@ export class BaseComponent {
449
449
  getAttributes() {
450
450
  let _tNodeAttrs = this.inj._tNode.attrs, actualAttrs = Array.from(this.nativeElement.attributes).map(attr => attr.name);
451
451
  if (_tNodeAttrs === null) {
452
- return actualAttrs;
452
+ return actualAttrs.sort();
453
453
  }
454
454
  _.forEach(_tNodeAttrs, (attr, i) => {
455
455
  if (typeof attr === 'number') {
@@ -463,15 +463,20 @@ export class BaseComponent {
463
463
  }
464
464
  }
465
465
  });
466
- return actualAttrs;
466
+ /*
467
+ Sorting attributes as properties like placeholder is not working when it is bound.
468
+ placeholder and placeholder.bind two properties are coming in Array.
469
+ When array is not sorted, initially placeholder.bind value is set then placeholder default value is updated.
470
+ If array is sorted, placeholder.bind value will be set finally.
471
+ This is caused because of the way we are storing attribute names in watcher registry map
472
+ */
473
+ return actualAttrs.sort();
467
474
  }
468
475
  /**
469
476
  * Process the attributes
470
477
  */
471
478
  processAttrs() {
472
- const attrs = this.getAttributes();
473
- let i = 0;
474
- _.map(attrs, (attrName) => {
479
+ _.map(this.getAttributes(), (attrName) => {
475
480
  let attrValue = this.nativeElement.attributes[attrName].value;
476
481
  this.$attrs.set(attrName, attrValue);
477
482
  this.processAttr(attrName, attrValue);
@@ -599,4 +604,4 @@ BaseComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: BaseCompon
599
604
  type: Inject,
600
605
  args: [WidgetConfig]
601
606
  }] }, { type: Promise }]; }, null); })();
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFHTixnQkFBZ0IsRUFFaEIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQ0gsZUFBZSxFQUNmLFdBQVcsRUFDWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixHQUFHLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsV0FBVyxFQUNYLE9BQU8sRUFDUCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFDWCxVQUFVLEVBQ2IsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFpQixPQUFPLEVBQWlCLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxF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LE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQixLQUFJLENBQUM7SUFFdkIsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDOzswRUFyc0JpQixhQUFhLHdDQTJIbkIsWUFBWTttRUEzSE4sYUFBYSxXQUFiLGFBQWE7dUZBQWIsYUFBYTtjQURsQyxVQUFVOztzQkE0SEYsTUFBTTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIEluamVjdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgT3B0aW9uYWwsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFdmVudE1hbmFnZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQge1JlcGxheVN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkcGFyc2VFdmVudCxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgYWRkQ2xhc3MsXG4gICAgQXBwLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZUFwcCxcbiAgICByZW1vdmVBdHRyLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHNldEF0dHIsXG4gICAgc2V0Q1NTLFxuICAgIHNldENTU0Zyb21PYmosXG4gICAgc3dpdGNoQ2xhc3MsXG4gICAgZmluZFBhcmVudFxufSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7Z2V0V2lkZ2V0UHJvcHNCeVR5cGV9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtcHJvcHMnO1xuaW1wb3J0IHtpc1N0eWxlfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvc3R5bGVyJztcbmltcG9ydCB7cmVnaXN0ZXIsIHJlbmFtZVdpZGdldH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1yZWdpc3RyeSc7XG5pbXBvcnQge0NoYW5nZUxpc3RlbmVyLCBDb250ZXh0LCBJV2lkZ2V0Q29uZmlnLCBXaWRnZXRDb25maWd9IGZyb20gJy4uLy4uL2ZyYW1ld29yay90eXBlcyc7XG5pbXBvcnQge3dpZGdldElkR2VuZXJhdG9yfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LWlkLWdlbmVyYXRvcic7XG5pbXBvcnQge0RJU1BMQVlfVFlQRSwgRVZFTlRTX01BUH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2NvbnN0YW50cyc7XG5pbXBvcnQge1dpZGdldFByb3h5UHJvdmlkZXJ9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtcHJveHktcHJvdmlkZXInO1xuaW1wb3J0IHtnZXRXYXRjaElkZW50aWZpZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3dpZGdldC11dGlscyc7XG5cbmRlY2xhcmUgY29uc3QgJCwgXztcblxuLy8gR2V0cyBsaXN0IG9mIGNsYXNzZXMgdG8gYWRkIGFuZCByZW1vdmUgYW5kIGFwcGxpZXMgb24gdGhlICRlbFxuY29uc3QgdXBkYXRlQ2xhc3NlcyA9ICh0b0FkZCwgdG9SZW1vdmUsIGVsKSA9PiB7XG4gICAgaWYgKHRvUmVtb3ZlICYmIHRvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgICByZW1vdmVDbGFzcyhlbCwgXy5qb2luKHRvUmVtb3ZlLCAnICcpKTtcbiAgICB9XG4gICAgaWYgKHRvQWRkICYmIHRvQWRkLmxlbmd0aCkge1xuICAgICAgICBhZGRDbGFzcyhlbCwgXy5qb2luKHRvQWRkLCAnICcpKTtcbiAgICB9XG59O1xuXG4vLyBUbyBhZGQgYW5kIHJlbW92ZSBzdHlsZXMgb24gdGhlICRlbFxuY29uc3QgdXBkYXRlU3R5bGVzID0gKG52LCBvdiwgZWwpID0+IHtcbiAgICBpZiAob3YgJiYgXy5pc09iamVjdChvdikpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92IHx8IHt9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgc2V0Q1NTKGVsLCBrZXksICcnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChudiAmJiBfLmlzT2JqZWN0KG52KSkge1xuICAgICAgICBzZXRDU1NGcm9tT2JqKGVsLCBudik7XG4gICAgfVxuXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIC8qKlxuICAgICAqIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHdpZGdldElkOiBhbnk7XG5cbiAgICBwdWJsaWMgaXNEZXN0cm95ZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgaXNBdHRhY2hlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogalF1ZXJ5IG5hdGl2ZUVsZW1lbnQgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgcm9vdFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgJGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiAkKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRE9NIG5vZGUgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgcm9vdFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIC8qKlxuICAgICAqIFR5cGUgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3aWRnZXRUeXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyBzYW1lIGFzIHdpZGdldFR5cGVcbiAgICAgKiBmb3Igc3BlY2lmaWMgd2lkZ2V0cyBsaWtlIGNoYXJ0cyB3aWRnZXRUeXBlIGNhbiBiZSB3bS1jaGFydCB3aGVyZSBhcyB0aGUgc3VidHlwZSBjYW4gYmUgd20tYmFyLWNoYXJ0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFN1YlR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFByb3h5IGZvciB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3aWRnZXQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgcGFyZW50IGNvbXBvbmVudFxuICAgICAqIGVnLCBQYWdlLCBQYXJ0aWFsLCBQcmVmYWJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld1BhcmVudDogYW55O1xuXG4gICAgLyoqXG4gICAgICogRXZlbnRNYW5nZXIgdG8gYWRkL3JlbW92ZSBldmVudHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXZlbnRNYW5hZ2VyOiBFdmVudE1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBBcHAgTG9jYWxlXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFwcExvY2FsZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3R5bGUgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlQ2hhbmdlID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eUNoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBPbiBSZWFkeSBTdGF0ZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVhZHlTdGF0ZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgZGVzdHJveSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE1hcCBvZiBldmVudCBoYW5kbGVyIGNhbGxiYWNrc1xuICAgICAqL1xuICAgIHByaXZhdGUgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCB7Y2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueX0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBjb250ZXh0IG9mIHRoZSB3aWRnZXRcbiAgICAgKiB3aGVuIHRoZSB3aWRnZXQgaXMgcHJlc2V0IGluc2lkZSBhIHJlcGVhdGVyIHRoaXMgY29udGV4dCB3aWxsIGhhdmUgdGhlIHJlcGVhdGVyIHJlbGF0ZWQgcHJvcGVydGllc1xuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZXh0OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHN0YXRlIG9mIHRoZSB3aWRnZXQuXG4gICAgICogV2lsbCBiZSB1bmRlZmluZWQgb25jZSB0aGUgaW5pdGlhbCBwcm9wZXJ0aWVzIGFyZSBzZXQgb24gdG8gdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0byB3YWl0IGZvciB0aGUgd2lkZ2V0IGluaXRpYWxpemF0aW9uIG9yIG5vdFxuICAgICAqIElmIHRoZSBpbml0UHJvbWlzZSBpcyBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0aW9uIHdhaXQgdGlsbCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZFxuICAgICAqIElmIHRoZSBpbml0UHJvbWlzZSBpcyBub3QgcHJvdmlkZWQgcHJvY2VlZCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWxheWVkSW5pdDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXkgdHlwZSBvZiB0aGUgY29tcG9uZW50LiBlZywgYmxvY2soRGVmYXVsdCksIGlubGluZS1ibG9jaywgaW5saW5lIGV0Y1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBldmVudCByZWdpc3RyYXRpb24gZnVuY3Rpb25zLlxuICAgICAqIHRoZXNlIGZ1bmN0aW9ucyBuZWVkcyB0byBiZSBleGVjdXRlZCBhZnRlciBvblZpZXdJbml0XG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0JlU2V0dXBFdmVudHNRdWV1ZTogQXJyYXk8RnVuY3Rpb24+ID0gW107XG5cbiAgICBwdWJsaWMgX19jbG9uZWFibGVfXyA9IGZhbHNlO1xuXG4gICAgcHVibGljIHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gICAgcHJpdmF0ZSAkYXR0cnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBpc011dGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwdWJsaWMgdmlld1BhcmVudEFwcDogQXBwO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgaW5qOiBJbmplY3RvcixcbiAgICAgICAgQEluamVjdChXaWRnZXRDb25maWcpIGNvbmZpZzogSVdpZGdldENvbmZpZyxcbiAgICAgICAgaW5pdFByb21pc2U/OiBQcm9taXNlPGFueT4gLy8gUHJvbWlzZSBvbiB3aGljaCB0aGUgaW5pdGlhbGl6YXRpb24gaGFzIHRvIHdhaXRcbiAgICApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZiA9IGluai5nZXQoRWxlbWVudFJlZik7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy9tYWtpbmcgdGhlIGNvZGUgY29tcGF0aWJsZSBpbiBib3RoIHRoZSBKSVQgYW5kIEFPVCBtb2Rlc1xuICAgICAgICB0aGlzLnZpZXdQYXJlbnRBcHAgPSBpbmogPyBpbmouZ2V0KEFwcCkgOiBpbmplY3QoQXBwKTtcbiAgICAgICAgdGhpcy53aWRnZXRUeXBlID0gY29uZmlnLndpZGdldFR5cGU7XG4gICAgICAgIHRoaXMud2lkZ2V0U3ViVHlwZSA9IGNvbmZpZy53aWRnZXRTdWJUeXBlIHx8IGNvbmZpZy53aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBpbmouZ2V0KFZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSAoaW5qIGFzIGFueSkudmlldy5jb21wb25lbnQ7XG4gICAgICAgIC8vIHRoaXMudmlld1BhcmVudCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5wYXJlbnRJbmplY3Rvci5fbFZpZXdbOF07XG4gICAgICAgIC8vIHRoaXMudmlld1BhcmVudCA9IF92aWV3UGFyZW50IHx8ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5wYXJlbnRJbmplY3Rvci5fbFZpZXdbOF07XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9tYWluL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy92aWV3LnRzXG5cbiAgICAgICAgbGV0IGxWaWV3ID0gKHRoaXMuaW5qIGFzIGFueSkuX2xWaWV3O1xuICAgICAgICB0aGlzLnZpZXdQYXJlbnQgPSBmaW5kUGFyZW50KGxWaWV3LCB0aGlzLnZpZXdQYXJlbnRBcHApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiLS0tKioqKioqKioqKioqKi0tY29udGV4dC0tKioqKioqKioqKioqKi0tLVwiLCBsVmlld1s4XSk7XG4gICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlld1s4XTtcblxuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlID0gY29uZmlnLmRpc3BsYXlUeXBlIHx8IERJU1BMQVlfVFlQRS5CTE9DSztcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0ID0gKGluaiBhcyBhbnkpLnZpZXcuY29udGV4dDtcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZGVidWcuY29udGV4dDtcbiAgICAgICAgLy8gbGV0IGhhc0ltcGxpY2l0Q29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICAvLyB3aGVuICRpbXBsaWNpdCBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIG9iamVjdCBjb250YWlucyBzb21lIG5nRm9yIGNvbnRleHQgb3IgbGlzdGl0ZW0gY29udGV4dCBvZiB0aGUgd2lkZ2V0IHRoZW5cbiAgICAgICAgLy8gd2UgdXNlIHRoZSBkaXJlY3QgcGFyZW50IGZvciBleGFtcGxlOiBuYXYgY29tcG9uZW50IGlzIHRoZSBwYXJlbnQgZm9yIGFuY2hvciA9PiBhbmNob3IgZ2V0cyB2aWV3UGFyZW50IGFzIE5hdlxuICAgICAgICAvLyBJbiBvdGhlciBjYXNlLCB3aGVyZSB3ZSBoYXZlIGltcGxpY2l0Q29udGV4dCB0aGVyZSB3ZSBjYW4gbWFrZSB1c2Ugb2YgcGFnZS9hcHAgbGV2ZWwgY29udGV4dCBoZW5jZSB2aWV3UGFyZW50LnZpZXdQYXJlbnQgdG8gZ2V0IHBhZ2UgbGV2ZWwgY29udGV4dFxuICAgICAgICAvKmlmIChoYXNJbXBsaWNpdENvbnRleHQgJiYgdGhpcy52aWV3UGFyZW50LnZpZXdQYXJlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLWNhcmQnICYmIHRoaXMudmlld1BhcmVudC53aWRnZXRUeXBlICE9PSAnd20taWZyYW1lZGlhbG9nJ1xuICAgICAgICAgICAgICAgICYmIHRoaXMudmlld1BhcmVudC53aWRnZXRUeXBlICE9PSAnd20tcGFydGlhbGRpYWxvZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdQYXJlbnQgPSB0aGlzLnZpZXdQYXJlbnQudmlld1BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpY2l0Q29udGV4dCB8fCAoIXRoaXMudmlld1BhcmVudC53aWRnZXRUeXBlKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZmluZCh0ID0+IHQgJiYgISF0LiRpbXBsaWNpdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICB9Ki9cblxuICAgICAgICAvKmlmKF92aWV3UGFyZW50ICYmICFoYXNJbXBsaWNpdENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3WzhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gaGFzSW1wbGljaXRDb250ZXh0O1xuICAgICAgICB9Ki9cbiAgICAgICAgLy8gaWYgKFsnd20tbGlzdCcsICd3bS1uYXYnXS5pbmNsdWRlcyh0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSkgfHwgWyd3bS1jYXJvdXNlbC10ZW1wbGF0ZScsICd3bS1jYXJkJ10uaW5jbHVkZXModGhpcy53aWRnZXRUeXBlKSkge1xuICAgICAgICAvLyAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZGVidWcuY29udGV4dDtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5wYXJlbnRJbmplY3Rvci5fbFZpZXdbOF07XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy53aWRnZXQgPSB0aGlzLmNyZWF0ZVByb3h5KCk7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gaW5qLmdldChFdmVudE1hbmFnZXIpO1xuICAgICAgICAodGhpcy5uYXRpdmVFbGVtZW50IGFzIGFueSkud2lkZ2V0ID0gdGhpcy53aWRnZXQ7XG5cbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBpbmouZ2V0KEFwcCkuYXBwTG9jYWxlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuaW5pdENvbnRleHQoKTtcblxuICAgICAgICBpZiAoY29uZmlnLmhvc3RDbGFzcykge1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBjb25maWcuaG9zdENsYXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2lkZ2V0SWQgPSB0aGlzLmdlbmVyYXRlV2lkZ2V0SWQoKTtcbiAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICd3aWRnZXQtaWQnLCB0aGlzLndpZGdldElkLCB0cnVlKTtcblxuICAgICAgICAvLyByZWdpc3RlciBkZWZhdWx0IHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIGFuZCBzdHlsZSBjaGFuZ2UgaGFuZGxlclxuICAgICAgICB0aGlzLnJlZ2lzdGVyU3R5bGVDaGFuZ2VMaXN0ZW5lcih0aGlzLm9uU3R5bGVDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcih0aGlzLm9uUHJvcGVydHlDaGFuZ2UsIHRoaXMpO1xuXG4gICAgICAgIC8vIGlmIHRoZSBpbml0UHJvbWlzZSBpcyBwcm92aWRlZCwgd2FpdCB0aWxsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHRvIHByb2NlZWQgd2l0aCB0aGUgd2lkZ2V0IGluaXRpYWxpemF0aW9uXG4gICAgICAgIGlmICghaW5pdFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFdpZGdldCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWxheWVkSW5pdCA9IHRydWU7XG4gICAgICAgICAgICBpbml0UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRXaWRnZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRQcm9wcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0U3ViVHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRTdWJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQcm9wZXJ0eShwcm9wTmFtZSwgcHJvcFZhbHVlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0W3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Vmlld1BhcmVudCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3UGFyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlTdHlsZUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlLm5leHQoe2tleSwgbnYsIG92fSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHlDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJTdHlsZUNoYW5nZUxpc3RlbmVyKGZuOiBDaGFuZ2VMaXN0ZW5lciwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2Uuc3Vic2NyaWJlKCh7a2V5LCBudiwgb3Z9KSA9PiBmbihrZXksIG52LCBvdikpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclJlYWR5U3RhdGVMaXN0ZW5lcihmbjogRnVuY3Rpb24sIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuc3Vic2NyaWJlKCgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge30sICgpID0+IHt9LCAoKSA9PiBmbigpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGlzcGxheVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVR5cGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVByb3h5KCk6IGFueSB7XG4gICAgICAgIHJldHVybiBXaWRnZXRQcm94eVByb3ZpZGVyLmNyZWF0ZSh0aGlzLCB0aGlzLndpZGdldFN1YlR5cGUsIGdldFdpZGdldFByb3BzQnlUeXBlKHRoaXMud2lkZ2V0U3ViVHlwZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgLy8gY29uc3QgY29udGV4dCA9ICh0aGlzLmluaiBhcyBhbnkpLnZpZXcuY29udGV4dDtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCB8fCB7fTtcblxuICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0cyA9IHRoaXMuaW5qLmdldChDb250ZXh0LCB7fSk7XG5cbiAgICAgICAgLy8gYXNzaWduIHRoZSBjb250ZXh0IHByb3BlcnR5IGFjY29yZGluZ2x5XG4gICAgICAgIGlmICh0aGlzLnZpZXdQYXJlbnQgIT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRDb250ZXh0cykge1xuICAgICAgICAgICAgbGV0IHBhcmVudENvbnRleHRPYmogPSB7fTtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkocGFyZW50Q29udGV4dHMpKSB7XG4gICAgICAgICAgICAgICAgXy5mb3JFYWNoKHBhcmVudENvbnRleHRzLCAoY29udGV4dE9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmVudENvbnRleHRPYmosIGNvbnRleHRPYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250ZXh0T2JqID0gcGFyZW50Q29udGV4dHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0T2JqLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0IHRoZSB2YWx1ZSBvbiB0aGUgcHJveHkgb2JqZWN0IGllLCB3aWRnZXRcbiAgICAgKiBzZXR0aW5nIHRoZSBwcm9wZXJ0eSBvbiB0aGUgcHJveHkgd2lsbCBpbnZva2UgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIHNldFdpZGdldFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMud2lkZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0cihhdHRyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLmdldChhdHRyTmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhcHAgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7QXBwfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBJbnN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5qLmdldChBcHApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBpZFxuICAgICAqIERlZmF1bHQgcGF0dGVybiBpcyBgd2lkZ2V0LWlkLSR7aWR9YFxuICAgICAqIENvbXBvbmVudHMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGdlbmVyYXRlIGEgZGlmZmVyZW50IGlkIGVnLCBiYXItY2hhcnQtMVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVdpZGdldElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB3aWRnZXRJZEdlbmVyYXRvci5uZXh0VWlkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBjb21wb25lbnRzXG4gICAgICogZWcsXG4gICAgICogIDEuIHZhbHVlIG9mIHRoZSBjbGFzcyBwcm9wZXJ0eSB3aWxsIGJlIGFwcGxpZWQgb24gdGhlIGhvc3QgZWxlbWVudFxuICAgICAqICAyLiBiYXNlZCBvbiB0aGUgdmFsdWUgb2Ygc2hvdyBwcm9wZXJ0eSBjb21wb25lbnQgaXMgc2hvd24vaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIG52XG4gICAgICogQHBhcmFtIG92XG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdzaG93Jykge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmhpZGRlbiA9ICFudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdoaW50Jykge1xuICAgICAgICAgICAgaWYgKCFpc01vYmlsZUFwcCgpKSB7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScsIG52KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgIHN3aXRjaENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgbnYsIG92KTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudi5tYXRjaCgvKFxcV3xeKShoKFswLTZdKSkoPz1cXHN8JCkvKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3JvbGUnLCAnaGVhZGluZycpO1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnYXJpYS1sZXZlbCcsIHJlc3VsdFszXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmFtZScgfHwga2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwga2V5LCBudik7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnbmFtZScgJiYgbnYpIHtcbiAgICAgICAgICAgICAgICByZW5hbWVXaWRnZXQodGhpcy52aWV3UGFyZW50LCB0aGlzLndpZGdldCwgbnYsIG92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb25kaXRpb25hbGNsYXNzJykge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNsYXNzZXMgaWYgb2xkIGFuZCBudiB2YWx1ZSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICB1cGRhdGVDbGFzc2VzKG52LnRvQWRkLCBudi50b1JlbW92ZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlICBpZiAoa2V5ID09PSAnYXV0b3BsYXknKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdOYW1lID0gdGhpcy53aWRnZXRUeXBlID09PSAnd20tYXVkaW8nID8gJ2F1ZGlvJyA6ICd2aWRlbyc7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIG1lZGlhKGF1ZGlvL3ZpZGVvKSBlbGVtZW50IGxvYWQgbWV0aG9kIGFmdGVyIGNoYW5naW5nIGF1dG9wbGF5IHByb3BlcnR5XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0YWdOYW1lKS5sb2FkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29uZGl0aW9uYWxzdHlsZScpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBzdHlsZXMgaWYgb2xkIGFuZCBudiB2YWx1ZSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICB1cGRhdGVTdHlsZXMobnYsIG92LCB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FuaW1hdGlvbicpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBzdHlsZXMgaWYgb2xkIGFuZCBudiB2YWx1ZSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIFwiYW5pbWF0ZWQgXCIgKyBudik7XG4gICAgICAgIH0gIGVsc2UgaWYgKGtleSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgLy8gV01TLTE5MzIxOiBJbiBJRSwgd2lkZ2V0IGlzIGluIGRpc2FibGVkIHN0YXRlIHdoZW4gZGlzYWJsZWQ9XCJmYWxzZVwiIGF0dHJpYnV0ZSBpcyBwcmVzZW50XG4gICAgICAgICAgICAobnYgPT09IHRydWUpID8gc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsICd0cnVlJywgdHJ1ZSkgOiByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN0eWxlIGNoYW5nZSBoYW5kbGVyXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uU3R5bGVDaGFuZ2Uoazogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge31cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSB3aWRnZXQgd2l0aCB0aGUgd2lkZ2V0UmVnaXN0cnlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXJXaWRnZXQod2lkZ2V0TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIocmVnaXN0ZXIodGhpcy53aWRnZXQsIHRoaXMudmlld1BhcmVudCwgdGhpcy53aWRnZXRJZCwgd2lkZ2V0TmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG92ZXJyaWRlIHRoZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBFVkVOVFNfTUFQLmdldChldmVudE5hbWUpIHx8IGV2ZW50TmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnZva2UgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgKiBDb21wb25lbnRzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBleGVjdXRlIGN1c3RvbSBsb2dpYyBiZWZvcmUgaW52b2tpbmcgdGhlIHVzZXIgY2FsbGJhY2tcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnksIG1ldGE/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbHMuJGV2ZW50ID0gZTtcbiAgICAgICAgICAgICAgICBpZiAobWV0YSA9PT0gJ2RlbGF5ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBldmVudENhbGxiYWNrKCksIDE1MCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Q2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcGFyc2UgdGhlIGV2ZW50IGV4cHJlc3Npb24gYW5kIHNhdmUgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBpbnNpZGUgZXZlbnRIYW5kbGVycyBtYXBcbiAgICAgKiBJZiB0aGUgY29tcG9uZW50IHByb3ZpZGVzIGEgb3ZlcnJpZGUgZm9yIGFuIGV2ZW50IHRocm91Z2ggQEV2ZW50IGRlY29yYXRvciBpbnZva2UgdGhhdFxuICAgICAqIGVsc2UgaW52b2tlIHRoZSByZXNvbHZlZCBmdW5jdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NFdmVudEF0dHIoZXZlbnROYW1lOiBzdHJpbmcsIGV4cHI6IHN0cmluZywgbWV0YT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KGV4cHIpO1xuICAgICAgICBjb25zdCBsb2NhbHMgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGxvY2Fscy53aWRnZXQgPSB0aGlzLndpZGdldDtcbiAgICAgICAgY29uc3QgYm91bmRGbiA9IGZuLmJpbmQodW5kZWZpbmVkLCB0aGlzLnZpZXdQYXJlbnQsIGxvY2Fscyk7XG5cbiAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBib3VuZEZuVmFsO1xuICAgICAgICAgICAgJGludm9rZVdhdGNoZXJzKHRydWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2NhbHMuJGV2ZW50ID0gbG9jYWxzLiRldmVudCB8fCBuZXcgd2luZG93LkN1c3RvbUV2ZW50KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGlzIGJvdW5kIGRpcmVjdGx5IHRvIHRoZSB2YXJpYWJsZSB0aGVuIHdlIG5lZWQgdG8gaW50ZXJuYWxseSBoYW5kbGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgdmFyaWFibGUgY2FsbC5cbiAgICAgICAgICAgICAgICBib3VuZEZuVmFsID0gYm91bmRGbigpO1xuICAgICAgICAgICAgICAgIGlmIChib3VuZEZuVmFsIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBib3VuZEZuVmFsLnRoZW4oIHJlc3BvbnNlID0+IHJlc3BvbnNlLCBlcnIgPT4gZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRGblZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KHRoaXMuZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSksIHtjYWxsYmFjazogZXZlbnRDYWxsYmFjaywgbG9jYWxzfSk7XG4gICAgICAgIC8vIHByZXBlbmQgZXZlbnROYW1lIHdpdGggb24gYW5kIGNvbnZlcnQgaXQgdG8gY2FtZWxjYXNlLlxuICAgICAgICAvLyBlZywgXCJjbGlja1wiIC0tLT4gb25DbGlja1xuICAgICAgICBjb25zdCBvbkV2ZW50TmFtZSA9ICBfLmNhbWVsQ2FzZShgb24tJHtldmVudE5hbWV9YCk7XG4gICAgICAgIC8vIHNhdmUgdGhlIGV2ZW50Q2FsbGJhY2sgaW4gd2lkZ2V0U2NvcGUuXG4gICAgICAgIHRoaXNbb25FdmVudE5hbWVdID0gZXZlbnRDYWxsYmFjaztcblxuICAgICAgICAvLyBldmVudHMgbmVlZHMgdG8gYmUgc2V0dXAgYWZ0ZXIgdmlld0luaXRcbiAgICAgICAgdGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnQodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpLCBldmVudENhbGxiYWNrLCBsb2NhbHMsIG1ldGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBib3VuZCBwcm9wZXJ0eVxuICAgICAqIFJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIGJvdW5kIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0JpbmRBdHRyKHByb3BOYW1lOiBzdHJpbmcsIGV4cHI6IHN0cmluZykge1xuXG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmRlbGV0ZShwcm9wTmFtZSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoXG4gICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgZXhwcixcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdQYXJlbnQsXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LFxuICAgICAgICAgICAgICAgIG52ID0+IHRoaXMud2lkZ2V0W3Byb3BOYW1lXSA9IG52LFxuICAgICAgICAgICAgICAgIGdldFdhdGNoSWRlbnRpZmllcih0aGlzLndpZGdldElkLCBwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdkYXRhc291cmNlJyxcbiAgICAgICAgICAgICAgICB0aGlzLndpZGdldFByb3BzLmdldChwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5pc011dGVkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHdhdGNoIG9uIHRoZSBib3VuZCBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVQcm9wZXJ0eUJpbmRpbmcocHJvcE5hbWU6IHN0cmluZykge1xuICAgICAgICAkdW53YXRjaChnZXRXYXRjaElkZW50aWZpZXIodGhpcy53aWRnZXRJZCwgcHJvcE5hbWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrIG1ldGhvZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0gZXh0cmFMb2NhbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWU6IHN0cmluZywgZXh0cmFMb2NhbHM/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJbmZvID0gdGhpcy5ldmVudEhhbmRsZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAoY2FsbGJhY2tJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBmbiA9IGNhbGxiYWNrSW5mby5jYWxsYmFjaztcbiAgICAgICAgICAgIGNvbnN0IGxvY2FscyA9IGNhbGxiYWNrSW5mby5sb2NhbHMgfHwge307XG5cbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbihPYmplY3QuYXNzaWduKGxvY2FscywgZXh0cmFMb2NhbHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZVxuICAgICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYW4gZXZlbnQgZXhwcmVzc2lvbiwgZ2VuZXJhdGUgYSBmdW5jdGlvbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9uXG4gICAgICogICAgICBhbmQga2VlcCBpbiBldmVudEhhbmRsZXJzXG4gICAgICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhIGJvdW5kIGV4cHJlc3Npb24sIHJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0F0dHIoYXR0ck5hbWU6IHN0cmluZywgYXR0clZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCI9PT09YXR0ck5hbWU9PT09PVwiLCBhdHRyTmFtZSwgXCI9PT09PXR5cGVvZiBhdHRybmFtZT09PT09XCIsIHR5cGVvZiBhdHRyTmFtZSwgXCItLS0tLWF0dHJWYWx1ZS0tLS1cIiwgYXR0clZhbHVlKTtcbiAgICAgICAgY29uc3QgezA6IHByb3BOYW1lLCAxOiB0eXBlLCAyOiBtZXRhLCBsZW5ndGh9ID0gYXR0ck5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdiaW5kJykge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNob3cgcHJvcGVydHkgaXMgYm91bmQsIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSB0byBmYWxzZVxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAnc2hvdycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0JpbmRBdHRyKHByb3BOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdldmVudCcpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0V2ZW50QXR0cihwcm9wTmFtZSwgYXR0clZhbHVlLCBtZXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBjbGFzcyBhbmQgbmFtZSBhdHRyaWJ1dGVzLiBDb21wb25lbnQgd2lsbCBzZXQgdGhlbSBvbiB0aGUgcHJvcGVyIG5vZGVcbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYXR0clZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT09ICd0YWJpbmRleCcgfHwgYXR0ck5hbWUgPT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCBhdHRyTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlLnNldChwcm9wTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzIHByb3ZpZGVkIG9uIGVsRGVmO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyByZXF1aXJlZCBhcyB0aGUgbmF0aXZlIGVsZW1lbnQgYXR0cmlidXRlcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZShjYW1lbGNhc2UpIGxpa2UgY3VzdG9tRXhwcmVzc2lvbnMgYmVjb21lcyBjdXN0b21leHByZXNzaW9uXG4gICAgICogYW5kIG91ciBsb2dpYyB0byBjaGVjayBsaWtlIHRoZXNlIGNoYW5nZXMgd2lsbCBmYWlsLiBCZWZvcmUgSVZZIGNoYW5nZXMsIGFuZ3VsYXIgbWFpbnRhaW5zIGEgc2VwYXJhdGUgb2JqZWN0IHdpdGggdGhlc2UgYXR0cmlidXRlc1xuICAgICAqIGFzIGl0IGlzIGxpa2UgaW4gdGhlIGNhbWVsY2FzZS4gV2l0aCBJVlkgYWxsIHRob3NlIGFyZSBnb25lLiBTbyBuZWVkIHRvIG1haW50YWluIGEgc2VwYXJhdGUgbGlzdCB3aXRoIHRoZSBjYW1lbGNhc2luZyBvZiBhdHRyaWJ1dGVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBfdE5vZGUuYXR0cnMgYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIGFycmF5KGV2ZW4gaW5kZXg6IGtleSwgb2RkIGluZGV4OiB2YWx1ZSlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGxldCBfdE5vZGVBdHRycyA9ICh0aGlzLmluaiBhcyBhbnkpLl90Tm9kZS5hdHRycywgYWN0dWFsQXR0cnMgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzKS5tYXAoYXR0ciA9PiBhdHRyLm5hbWUpO1xuICAgICAgICBpZihfdE5vZGVBdHRycyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFjdHVhbEF0dHJzO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaChfdE5vZGVBdHRycywgKGF0dHIsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgYXR0ciA9PT0gJ3N0cmluZycgJiYgaSAlIDIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBsb3dlckNhc2VBdHRyID0gYXR0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxBdHRycy5pbmNsdWRlcyhsb3dlckNhc2VBdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBhY3R1YWxBdHRycy5pbmRleE9mKGxvd2VyQ2FzZUF0dHIpXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEF0dHJzW2luZGV4XSA9IGF0dHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFjdHVhbEF0dHJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NBdHRycygpIHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBfLm1hcChhdHRycywgKGF0dHJOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBhdHRyVmFsdWUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVcbiAgICAgICAgICAgIHRoaXMuJGF0dHJzLnNldChhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0F0dHIoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgaW5pdFN0YXRlIHdpdGggdGhlIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXBcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzXG4gICAgICogUmVnaXN0ZXIgdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0V2lkZ2V0KCkge1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgICAgICAgLy8gZ2V0IHRoZSB3aWRnZXQgcHJvcGVydGllc1xuICAgICAgICBjb25zdCB3aWRnZXRQcm9wczogTWFwPHN0cmluZywgYW55PiA9IGdldFdpZGdldFByb3BzQnlUeXBlKHRoaXMud2lkZ2V0U3ViVHlwZSk7XG4gICAgICAgIHdpZGdldFByb3BzLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTdGF0ZS5zZXQoaywgdi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud2lkZ2V0UHJvcHMgPSB3aWRnZXRQcm9wcztcblxuICAgICAgICB0aGlzLnByb2Nlc3NBdHRycygpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJXaWRnZXQodGhpcy5pbml0U3RhdGUuZ2V0KCduYW1lJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGFuZCB0aGUgcHJvcGVydGllcyBwcm92aWRlZCBpbiB0aGUgbWFya3VwIGluIGNvbXBvbmVudFxuICAgICAqIEludm9raW5nIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWx0IGluIGludm9jYXRpb24gb2YgcHJvcGVydHlDaGFuZ2UgaGFuZGxlcnMgb24gdGhlIGNvbXBvbmVudCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0SW5pdFByb3BzKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUuZ2V0KCduYW1lJykpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Lm5hbWUgPSB0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRTdGF0ZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgICAgICAgICAvLyBuYW1lIGlzIGFscmVhZHkgc2V0LCBpZ25vcmUgbmFtZVxuICAgICAgICAgICAgLy8gaWYgdGhlIGtleSBpcyBwYXJ0IG9mIHRvIGJlIGlnbm9yZWQgYXR0cmlidXRlcyBsaXN0IGRvIG5vdCBzZXQgaXQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgICAgICAgaWYgKCh0aGlzLndpZGdldFByb3BzLmdldChrKSB8fCBpc1N0eWxlKGspKSAmJiBrICE9PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZGdldFtrXSA9IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnJlYWR5U3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlLCBpZiBhIGxpc3RlbmVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBldmVudCBvbiB0aGlzIHdpZGdldCBtYXJrdXAuXG4gICAgICogQHBhcmFtIGV2ZW50TmFtZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYXNFdmVudENhbGxiYWNrKGV2ZW50TmFtZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXJzLmhhcyhldmVudE5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgdGhlIG5vZGVzIGhhdmluZyBmb2N1cy10YXJnZXQgYXR0cmlidXRlIGluc2lkZSB0aGUgZWxlbWVudFxuICAgICAgICAgKiBJZiBmb3VuZCwgZm9jdXMgdGhlIGZpcnN0IG5vZGUgKGVnLCBkYXRlIHdpZGdldClcbiAgICAgICAgICogZWxzZSwgZm9jdXMgdGhlIGVsZW1lbnQgKGVnLCB0ZXh0IHdpZGdldClcbiAgICAgICAgICovXG4gICAgICAgIGxldCAkdGFyZ2V0ID0gdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgICAgICBpZiAoISR0YXJnZXQpIHtcbiAgICAgICAgICAgICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdO1xuICAgICAgICB9XG4gICAgICAgICR0YXJnZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmluZyB0aGUgZXhlY3V0ZSBtZXRob2Qgb24gQmFzZUNvbXBvbmVudC4gSWYgZGF0YXNldCBpcyBiaW5kZWQgdG8gd2lkZ2V0cyBvdXB0dXQgdGhlbiBkYXRhc291cmNlLmV4ZWN1dGUgd2lsbCBiZSBkZWZpbmVkXG4gICAgcHJvdGVjdGVkIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKTogYW55IHtcblxuICAgIH1cblxuICAgIHB1YmxpYyBtdXRlKCkge1xuICAgICAgICB0aGlzLmlzTXV0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyB1bm11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHRoZSBob3N0IHBhZ2UgaXMgYXR0YWNoZWQgZnJvbSBjYWNoZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIG5nT25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIHRoZSBob3N0IHBhZ2UgaXMgZGV0YWNoZWQgZnJvbSBkb20gYW5kIHN0b3JlZCBpbiBjYWNoZSwgIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBuYXRpdmVFbGVtZW50IHdpbGwgYmUgYXZhaWxhYmxlIGJ5IHRoaXMgdGltZVxuICAgICAqIGlmIHRoZSBkZWxheUluaXQgaXMgZmFsc2UsIHByb3BlcnRpZXMgbWV0YSB3aWxsIGJlIGF2YWlsYWJsZSBieSB0aGlzIHRpbWVcbiAgICAgKiBJbnZva2UgdGhlIHNldEluaXRQcm9wcyBpZiB0aGUgZGVsYXlJbml0IGlzIGZhbHNlXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWxheWVkSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge31cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53aWRnZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucHJvcGVydHlDaGFuZ2UuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
607
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFHTixnQkFBZ0IsRUFFaEIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQ0gsZUFBZSxFQUNmLFdBQVcsRUFDWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixHQUFHLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsV0FBVyxFQUNYLE9BQU8sRUFDUCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFDWCxVQUFVLEVBQ2IsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFpQixPQUFPLEVBQWlCLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxF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Q0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCLEtBQUksQ0FBQztJQUV2QixXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7OzBFQTNzQmlCLGFBQWEsd0NBMkhuQixZQUFZO21FQTNITixhQUFhLFdBQWIsYUFBYTt1RkFBYixhQUFhO2NBRGxDLFVBQVU7O3NCQTRIRixNQUFNO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBPcHRpb25hbCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0V2ZW50TWFuYWdlcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRwYXJzZUV2ZW50LFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICBhZGRDbGFzcyxcbiAgICBBcHAsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlQXBwLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2V0QXR0cixcbiAgICBzZXRDU1MsXG4gICAgc2V0Q1NTRnJvbU9iaixcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICBmaW5kUGFyZW50XG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtnZXRXaWRnZXRQcm9wc0J5VHlwZX0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1wcm9wcyc7XG5pbXBvcnQge2lzU3R5bGV9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9zdHlsZXInO1xuaW1wb3J0IHtyZWdpc3RlciwgcmVuYW1lV2lkZ2V0fSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXJlZ2lzdHJ5JztcbmltcG9ydCB7Q2hhbmdlTGlzdGVuZXIsIENvbnRleHQsIElXaWRnZXRDb25maWcsIFdpZGdldENvbmZpZ30gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3R5cGVzJztcbmltcG9ydCB7d2lkZ2V0SWRHZW5lcmF0b3J9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtaWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7RElTUExBWV9UWVBFLCBFVkVOVFNfTUFQfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY29uc3RhbnRzJztcbmltcG9ydCB7V2lkZ2V0UHJveHlQcm92aWRlcn0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1wcm94eS1wcm92aWRlcic7XG5pbXBvcnQge2dldFdhdGNoSWRlbnRpZmllcn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvd2lkZ2V0LXV0aWxzJztcblxuZGVjbGFyZSBjb25zdCAkLCBfO1xuXG4vLyBHZXRzIGxpc3Qgb2YgY2xhc3NlcyB0byBhZGQgYW5kIHJlbW92ZSBhbmQgYXBwbGllcyBvbiB0aGUgJGVsXG5jb25zdCB1cGRhdGVDbGFzc2VzID0gKHRvQWRkLCB0b1JlbW92ZSwgZWwpID0+IHtcbiAgICBpZiAodG9SZW1vdmUgJiYgdG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICAgIHJlbW92ZUNsYXNzKGVsLCBfLmpvaW4odG9SZW1vdmUsICcgJykpO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgdG9BZGQubGVuZ3RoKSB7XG4gICAgICAgIGFkZENsYXNzKGVsLCBfLmpvaW4odG9BZGQsICcgJykpO1xuICAgIH1cbn07XG5cbi8vIFRvIGFkZCBhbmQgcmVtb3ZlIHN0eWxlcyBvbiB0aGUgJGVsXG5jb25zdCB1cGRhdGVTdHlsZXMgPSAobnYsIG92LCBlbCkgPT4ge1xuICAgIGlmIChvdiAmJiBfLmlzT2JqZWN0KG92KSkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3YgfHwge30pO1xuICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICBzZXRDU1MoZWwsIGtleSwgJycpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG52ICYmIF8uaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHNldENTU0Zyb21PYmooZWwsIG52KTtcbiAgICB9XG5cbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkZ2V0SWQ6IGFueTtcblxuICAgIHB1YmxpYyBpc0Rlc3Ryb3llZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBpc0F0dGFjaGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBqUXVlcnkgbmF0aXZlRWxlbWVudCByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIGdldCAkZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBET00gbm9kZSByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1vc3Qgb2YgdGhlIGNhc2VzIGl0IGlzIHNhbWUgYXMgd2lkZ2V0VHlwZVxuICAgICAqIGZvciBzcGVjaWZpYyB3aWRnZXRzIGxpa2UgY2hhcnRzIHdpZGdldFR5cGUgY2FuIGJlIHdtLWNoYXJ0IHdoZXJlIGFzIHRoZSBzdWJ0eXBlIGNhbiBiZSB3bS1iYXItY2hhcnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2lkZ2V0U3ViVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJveHkgZm9yIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdpZGdldDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVmlldyBwYXJlbnQgY29tcG9uZW50XG4gICAgICogZWcsIFBhZ2UsIFBhcnRpYWwsIFByZWZhYlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB2aWV3UGFyZW50OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudE1hbmdlciB0byBhZGQvcmVtb3ZlIGV2ZW50c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIEFwcCBMb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdHlsZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5Q2hhbmdlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE9uIFJlYWR5IFN0YXRlIGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkeVN0YXRlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBkZXN0cm95IHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogTWFwIG9mIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2tzXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIHtjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55fT4oKTtcblxuICAgIC8qKlxuICAgICAqIGNvbnRleHQgb2YgdGhlIHdpZGdldFxuICAgICAqIHdoZW4gdGhlIHdpZGdldCBpcyBwcmVzZXQgaW5zaWRlIGEgcmVwZWF0ZXIgdGhpcyBjb250ZXh0IHdpbGwgaGF2ZSB0aGUgcmVwZWF0ZXIgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc3RhdGUgb2YgdGhlIHdpZGdldC5cbiAgICAgKiBXaWxsIGJlIHVuZGVmaW5lZCBvbmNlIHRoZSBpbml0aWFsIHByb3BlcnRpZXMgYXJlIHNldCBvbiB0byB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhaXQgZm9yIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb24gb3Igbm90XG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rpb24gd2FpdCB0aWxsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIG5vdCBwcm92aWRlZCBwcm9jZWVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGF5ZWRJbml0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSB0eXBlIG9mIHRoZSBjb21wb25lbnQuIGVnLCBibG9jayhEZWZhdWx0KSwgaW5saW5lLWJsb2NrLCBpbmxpbmUgZXRjXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGV2ZW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAgICogdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIG9uVmlld0luaXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQmVTZXR1cEV2ZW50c1F1ZXVlOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBfX2Nsb25lYWJsZV9fID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgd2lkZ2V0UHJvcHM6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICBwcml2YXRlICRhdHRycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIGlzTXV0ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIHB1YmxpYyB2aWV3UGFyZW50QXBwOiBBcHA7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBpbml0UHJvbWlzZT86IFByb21pc2U8YW55PiAvLyBQcm9taXNlIG9uIHdoaWNoIHRoZSBpbml0aWFsaXphdGlvbiBoYXMgdG8gd2FpdFxuICAgICkge1xuICAgICAgICBjb25zdCBlbGVtZW50UmVmID0gaW5qLmdldChFbGVtZW50UmVmKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAvL21ha2luZyB0aGUgY29kZSBjb21wYXRpYmxlIGluIGJvdGggdGhlIEpJVCBhbmQgQU9UIG1vZGVzXG4gICAgICAgIHRoaXMudmlld1BhcmVudEFwcCA9IGluaiA/IGluai5nZXQoQXBwKSA6IGluamVjdChBcHApO1xuICAgICAgICB0aGlzLndpZGdldFR5cGUgPSBjb25maWcud2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy53aWRnZXRTdWJUeXBlID0gY29uZmlnLndpZGdldFN1YlR5cGUgfHwgY29uZmlnLndpZGdldFR5cGU7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IGluai5nZXQoVmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIC8vIHRoaXMudmlld1BhcmVudCA9IChpbmogYXMgYW55KS52aWV3LmNvbXBvbmVudDtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gX3ZpZXdQYXJlbnQgfHwgKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21haW4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy9pbnRlcmZhY2VzL3ZpZXcudHNcblxuICAgICAgICBsZXQgbFZpZXcgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXc7XG4gICAgICAgIHRoaXMudmlld1BhcmVudCA9IGZpbmRQYXJlbnQobFZpZXcsIHRoaXMudmlld1BhcmVudEFwcCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCItLS0qKioqKioqKioqKioqLS1jb250ZXh0LS0qKioqKioqKioqKioqLS0tXCIsIGxWaWV3WzhdKTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkuX2xWaWV3WzhdO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheVR5cGUgPSBjb25maWcuZGlzcGxheVR5cGUgfHwgRElTUExBWV9UWVBFLkJMT0NLO1xuICAgICAgICAvLyB0aGlzLmNvbnRleHQgPSAoaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICAvLyB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5kZWJ1Zy5jb250ZXh0O1xuICAgICAgICAvLyBsZXQgaGFzSW1wbGljaXRDb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZmluZCh0ID0+IHQgJiYgISF0LiRpbXBsaWNpdCk7XG4gICAgICAgIC8vIHdoZW4gJGltcGxpY2l0IGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgb2JqZWN0IGNvbnRhaW5zIHNvbWUgbmdGb3IgY29udGV4dCBvciBsaXN0aXRlbSBjb250ZXh0IG9mIHRoZSB3aWRnZXQgdGhlblxuICAgICAgICAvLyB3ZSB1c2UgdGhlIGRpcmVjdCBwYXJlbnQgZm9yIGV4YW1wbGU6IG5hdiBjb21wb25lbnQgaXMgdGhlIHBhcmVudCBmb3IgYW5jaG9yID0+IGFuY2hvciBnZXRzIHZpZXdQYXJlbnQgYXMgTmF2XG4gICAgICAgIC8vIEluIG90aGVyIGNhc2UsIHdoZXJlIHdlIGhhdmUgaW1wbGljaXRDb250ZXh0IHRoZXJlIHdlIGNhbiBtYWtlIHVzZSBvZiBwYWdlL2FwcCBsZXZlbCBjb250ZXh0IGhlbmNlIHZpZXdQYXJlbnQudmlld1BhcmVudCB0byBnZXQgcGFnZSBsZXZlbCBjb250ZXh0XG4gICAgICAgIC8qaWYgKGhhc0ltcGxpY2l0Q29udGV4dCAmJiB0aGlzLnZpZXdQYXJlbnQudmlld1BhcmVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld1BhcmVudC53aWRnZXRUeXBlICE9PSAnd20tY2FyZCcgJiYgdGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1pZnJhbWVkaWFsb2cnXG4gICAgICAgICAgICAgICAgJiYgdGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1wYXJ0aWFsZGlhbG9nJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCA9IHRoaXMudmlld1BhcmVudC52aWV3UGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzSW1wbGljaXRDb250ZXh0IHx8ICghdGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5wYXJlbnRJbmplY3Rvci5fbFZpZXdbOF07XG4gICAgICAgIH0qL1xuXG4gICAgICAgIC8qaWYoX3ZpZXdQYXJlbnQgJiYgIWhhc0ltcGxpY2l0Q29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXdbOF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBoYXNJbXBsaWNpdENvbnRleHQ7XG4gICAgICAgIH0qL1xuICAgICAgICAvLyBpZiAoWyd3bS1saXN0JywgJ3dtLW5hdiddLmluY2x1ZGVzKHRoaXMudmlld1BhcmVudC53aWRnZXRUeXBlKSB8fCBbJ3dtLWNhcm91c2VsLXRlbXBsYXRlJywgJ3dtLWNhcmQnXS5pbmNsdWRlcyh0aGlzLndpZGdldFR5cGUpKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5kZWJ1Zy5jb250ZXh0O1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLndpZGdldCA9IHRoaXMuY3JlYXRlUHJveHkoKTtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBpbmouZ2V0KEV2ZW50TWFuYWdlcik7XG4gICAgICAgICh0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgYW55KS53aWRnZXQgPSB0aGlzLndpZGdldDtcblxuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IGluai5nZXQoQXBwKS5hcHBMb2NhbGUgfHwge307XG5cbiAgICAgICAgdGhpcy5pbml0Q29udGV4dCgpO1xuXG4gICAgICAgIGlmIChjb25maWcuaG9zdENsYXNzKSB7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZy5ob3N0Q2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53aWRnZXRJZCA9IHRoaXMuZ2VuZXJhdGVXaWRnZXRJZCgpO1xuICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3dpZGdldC1pZCcsIHRoaXMud2lkZ2V0SWQsIHRydWUpO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIGRlZmF1bHQgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgYW5kIHN0eWxlIGNoYW5nZSBoYW5kbGVyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdHlsZUNoYW5nZUxpc3RlbmVyKHRoaXMub25TdHlsZUNoYW5nZSwgdGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKHRoaXMub25Qcm9wZXJ0eUNoYW5nZSwgdGhpcyk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkLCB3YWl0IHRpbGwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gcHJvY2VlZCB3aXRoIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgaWYgKCFpbml0UHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5ZWRJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGluaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFdpZGdldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdFByb3BzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXRTdWJUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFN1YlR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByb3BlcnR5KHByb3BOYW1lLCBwcm9wVmFsdWUpIHtcbiAgICAgICAgdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWaWV3UGFyZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN0eWxlQ2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5UHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5uZXh0KHtrZXksIG52LCBvdn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5zdWJzY3JpYmUoKCkgPT4gZm4oKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihmbjogQ2hhbmdlTGlzdGVuZXIsIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLnN1YnNjcmliZSgoe2tleSwgbnYsIG92fSkgPT4gZm4oa2V5LCBudiwgb3YpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7fSwgKCkgPT4ge30sICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREaXNwbGF5VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUHJveHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldFByb3h5UHJvdmlkZXIuY3JlYXRlKHRoaXMsIHRoaXMud2lkZ2V0U3ViVHlwZSwgZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRDb250ZXh0KCkge1xuICAgICAgICAvLyBjb25zdCBjb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRleHRzID0gdGhpcy5pbmouZ2V0KENvbnRleHQsIHt9KTtcblxuICAgICAgICAvLyBhc3NpZ24gdGhlIGNvbnRleHQgcHJvcGVydHkgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMudmlld1BhcmVudCAhPT0gY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudENvbnRleHRzKSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50Q29udGV4dE9iaiA9IHt9O1xuICAgICAgICAgICAgaWYgKF8uaXNBcnJheShwYXJlbnRDb250ZXh0cykpIHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2gocGFyZW50Q29udGV4dHMsIChjb250ZXh0T2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyZW50Q29udGV4dE9iaiwgY29udGV4dE9iaik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbnRleHRPYmogPSBwYXJlbnRDb250ZXh0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudENvbnRleHRPYmosIHRoaXMuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIHZhbHVlIG9uIHRoZSBwcm94eSBvYmplY3QgaWUsIHdpZGdldFxuICAgICAqIHNldHRpbmcgdGhlIHByb3BlcnR5IG9uIHRoZSBwcm94eSB3aWxsIGludm9rZSB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0V2lkZ2V0UHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy53aWRnZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRyKGF0dHJOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXR0cnMuZ2V0KGF0dHJOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGFwcCBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtBcHB9XG4gICAgICovXG4gICAgcHVibGljIGdldEFwcEluc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmouZ2V0KEFwcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgdW5pcXVlIGlkXG4gICAgICogRGVmYXVsdCBwYXR0ZXJuIGlzIGB3aWRnZXQtaWQtJHtpZH1gXG4gICAgICogQ29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZ2VuZXJhdGUgYSBkaWZmZXJlbnQgaWQgZWcsIGJhci1jaGFydC0xXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlV2lkZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHdpZGdldElkR2VuZXJhdG9yLm5leHRVaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSBjb21tb24gZnVuY3Rpb25hbGl0eSBhY3Jvc3MgdGhlIGNvbXBvbmVudHNcbiAgICAgKiBlZyxcbiAgICAgKiAgMS4gdmFsdWUgb2YgdGhlIGNsYXNzIHByb3BlcnR5IHdpbGwgYmUgYXBwbGllZCBvbiB0aGUgaG9zdCBlbGVtZW50XG4gICAgICogIDIuIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBzaG93IHByb3BlcnR5IGNvbXBvbmVudCBpcyBzaG93bi9oaWRkZW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0gbnZcbiAgICAgKiBAcGFyYW0gb3ZcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gIW52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2hpbnQnKSB7XG4gICAgICAgICAgICBpZiAoIWlzTW9iaWxlQXBwKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJywgbnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBudiwgb3YpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG52Lm1hdGNoKC8oXFxXfF4pKGgoWzAtNl0pKSg/PVxcc3wkKS8pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAncm9sZScsICdoZWFkaW5nJyk7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxldmVsJywgcmVzdWx0WzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYW1lJyB8fCBrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCBrZXksIG52KTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICduYW1lJyAmJiBudikge1xuICAgICAgICAgICAgICAgIHJlbmFtZVdpZGdldCh0aGlzLnZpZXdQYXJlbnQsIHRoaXMud2lkZ2V0LCBudiwgb3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsY2xhc3MnKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgY2xhc3NlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIHVwZGF0ZUNsYXNzZXMobnYudG9BZGQsIG52LnRvUmVtb3ZlLCB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgIGlmIChrZXkgPT09ICdhdXRvcGxheScpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1hdWRpbycgPyAnYXVkaW8nIDogJ3ZpZGVvJztcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgbWVkaWEoYXVkaW8vdmlkZW8pIGVsZW1lbnQgbG9hZCBtZXRob2QgYWZ0ZXIgY2hhbmdpbmcgYXV0b3BsYXkgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRhZ05hbWUpLmxvYWQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb25kaXRpb25hbHN0eWxlJykge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHN0eWxlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIHVwZGF0ZVN0eWxlcyhudiwgb3YsIHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYW5pbWF0aW9uJykge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHN0eWxlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgXCJhbmltYXRlZCBcIiArIG52KTtcbiAgICAgICAgfSAgZWxzZSBpZiAoa2V5ID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAvLyBXTVMtMTkzMjE6IEluIElFLCB3aWRnZXQgaXMgaW4gZGlzYWJsZWQgc3RhdGUgd2hlbiBkaXNhYmxlZD1cImZhbHNlXCIgYXR0cmlidXRlIGlzIHByZXNlbnRcbiAgICAgICAgICAgIChudiA9PT0gdHJ1ZSkgPyBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgJ3RydWUnLCB0cnVlKSA6IHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3R5bGUgY2hhbmdlIGhhbmRsZXJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdHlsZUNoYW5nZShrOiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIHdpZGdldCB3aXRoIHRoZSB3aWRnZXRSZWdpc3RyeVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWdpc3RlcldpZGdldCh3aWRnZXROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihyZWdpc3Rlcih0aGlzLndpZGdldCwgdGhpcy52aWV3UGFyZW50LCB0aGlzLndpZGdldElkLCB3aWRnZXROYW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogb3ZlcnJpZGUgdGhlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIEVWRU5UU19NQVAuZ2V0KGV2ZW50TmFtZSkgfHwgZXZlbnROYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGludm9rZSB0aGUgZXZlbnQgaGFuZGxlclxuICAgICAqIENvbXBvbmVudHMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGV4ZWN1dGUgY3VzdG9tIGxvZ2ljIGJlZm9yZSBpbnZva2luZyB0aGUgdXNlciBjYWxsYmFja1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSwgbWV0YT86IHN0cmluZykge1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2Fscy4kZXZlbnQgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChtZXRhID09PSAnZGVsYXllZCcpIHtcbiAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGV2ZW50Q2FsbGJhY2soKSwgMTUwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBwYXJzZSB0aGUgZXZlbnQgZXhwcmVzc2lvbiBhbmQgc2F2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIGluc2lkZSBldmVudEhhbmRsZXJzIG1hcFxuICAgICAqIElmIHRoZSBjb21wb25lbnQgcHJvdmlkZXMgYSBvdmVycmlkZSBmb3IgYW4gZXZlbnQgdGhyb3VnaCBARXZlbnQgZGVjb3JhdG9yIGludm9rZSB0aGF0XG4gICAgICogZWxzZSBpbnZva2UgdGhlIHJlc29sdmVkIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0V2ZW50QXR0cihldmVudE5hbWU6IHN0cmluZywgZXhwcjogc3RyaW5nLCBtZXRhPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQoZXhwcik7XG4gICAgICAgIGNvbnN0IGxvY2FscyA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgbG9jYWxzLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuICAgICAgICBjb25zdCBib3VuZEZuID0gZm4uYmluZCh1bmRlZmluZWQsIHRoaXMudmlld1BhcmVudCwgbG9jYWxzKTtcblxuICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGJvdW5kRm5WYWw7XG4gICAgICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvY2Fscy4kZXZlbnQgPSBsb2NhbHMuJGV2ZW50IHx8IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIHZhcmlhYmxlIHRoZW4gd2UgbmVlZCB0byBpbnRlcm5hbGx5IGhhbmRsZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoZSB2YXJpYWJsZSBjYWxsLlxuICAgICAgICAgICAgICAgIGJvdW5kRm5WYWwgPSBib3VuZEZuKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kRm5WYWwgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdW5kRm5WYWwudGhlbiggcmVzcG9uc2UgPT4gcmVzcG9uc2UsIGVyciA9PiBlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZEZuVmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5zZXQodGhpcy5nZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSwge2NhbGxiYWNrOiBldmVudENhbGxiYWNrLCBsb2NhbHN9KTtcbiAgICAgICAgLy8gcHJlcGVuZCBldmVudE5hbWUgd2l0aCBvbiBhbmQgY29udmVydCBpdCB0byBjYW1lbGNhc2UuXG4gICAgICAgIC8vIGVnLCBcImNsaWNrXCIgLS0tPiBvbkNsaWNrXG4gICAgICAgIGNvbnN0IG9uRXZlbnROYW1lID0gIF8uY2FtZWxDYXNlKGBvbi0ke2V2ZW50TmFtZX1gKTtcbiAgICAgICAgLy8gc2F2ZSB0aGUgZXZlbnRDYWxsYmFjayBpbiB3aWRnZXRTY29wZS5cbiAgICAgICAgdGhpc1tvbkV2ZW50TmFtZV0gPSBldmVudENhbGxiYWNrO1xuXG4gICAgICAgIC8vIGV2ZW50cyBuZWVkcyB0byBiZSBzZXR1cCBhZnRlciB2aWV3SW5pdFxuICAgICAgICB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSksIGV2ZW50Q2FsbGJhY2ssIGxvY2FscywgbWV0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGJvdW5kIHByb3BlcnR5XG4gICAgICogUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgYm91bmQgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQmluZEF0dHIocHJvcE5hbWU6IHN0cmluZywgZXhwcjogc3RyaW5nKSB7XG5cbiAgICAgICAgdGhpcy5pbml0U3RhdGUuZGVsZXRlKHByb3BOYW1lKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgbnYgPT4gdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gbnYsXG4gICAgICAgICAgICAgICAgZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsIHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ2RhdGFzb3VyY2UnLFxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0UHJvcHMuZ2V0KHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmlzTXV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgd2F0Y2ggb24gdGhlIGJvdW5kIHByb3BlcnR5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZVByb3BlcnR5QmluZGluZyhwcm9wTmFtZTogc3RyaW5nKSB7XG4gICAgICAgICR1bndhdGNoKGdldFdhdGNoSWRlbnRpZmllcih0aGlzLndpZGdldElkLCBwcm9wTmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGludm9rZSB0aGUgZXZlbnQgY2FsbGJhY2sgbWV0aG9kXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgICAqIEBwYXJhbSBleHRyYUxvY2Fsc1xuICAgICAqL1xuICAgIHB1YmxpYyBpbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBleHRyYUxvY2Fscz86IGFueSkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0luZm8gPSB0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChjYWxsYmFja0luZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gY2FsbGJhY2tJbmZvLmNhbGxiYWNrO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxzID0gY2FsbGJhY2tJbmZvLmxvY2FscyB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKE9iamVjdC5hc3NpZ24obG9jYWxzLCBleHRyYUxvY2FscykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgYXR0cmlidXRlXG4gICAgICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbiBldmVudCBleHByZXNzaW9uLCBnZW5lcmF0ZSBhIGZ1bmN0aW9uYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb25cbiAgICAgKiAgICAgIGFuZCBrZWVwIGluIGV2ZW50SGFuZGxlcnNcbiAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgYm91bmQgZXhwcmVzc2lvbiwgcmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQXR0cihhdHRyTmFtZTogc3RyaW5nLCBhdHRyVmFsdWU6IHN0cmluZykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIj09PT1hdHRyTmFtZT09PT09XCIsIGF0dHJOYW1lLCBcIj09PT09dHlwZW9mIGF0dHJuYW1lPT09PT1cIiwgdHlwZW9mIGF0dHJOYW1lLCBcIi0tLS0tYXR0clZhbHVlLS0tLVwiLCBhdHRyVmFsdWUpO1xuICAgICAgICBjb25zdCB7MDogcHJvcE5hbWUsIDE6IHR5cGUsIDI6IG1ldGEsIGxlbmd0aH0gPSBhdHRyTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2JpbmQnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc2hvdyBwcm9wZXJ0eSBpcyBib3VuZCwgc2V0IHRoZSBpbml0aWFsIHZhbHVlIHRvIGZhbHNlXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdzaG93Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQmluZEF0dHIocHJvcE5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBdHRyKHByb3BOYW1lLCBhdHRyVmFsdWUsIG1ldGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGNsYXNzIGFuZCBuYW1lIGF0dHJpYnV0ZXMuIENvbXBvbmVudCB3aWxsIHNldCB0aGVtIG9uIHRoZSBwcm9wZXIgbm9kZVxuICAgICAgICAgICAgaWYgKGF0dHJOYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PT0gJ3RhYmluZGV4JyB8fCBhdHRyTmFtZSA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUuc2V0KHByb3BOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXMgcHJvdmlkZWQgb24gZWxEZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHJlcXVpcmVkIGFzIHRoZSBuYXRpdmUgZWxlbWVudCBhdHRyaWJ1dGVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlKGNhbWVsY2FzZSkgbGlrZSBjdXN0b21FeHByZXNzaW9ucyBiZWNvbWVzIGN1c3RvbWV4cHJlc3Npb25cbiAgICAgKiBhbmQgb3VyIGxvZ2ljIHRvIGNoZWNrIGxpa2UgdGhlc2UgY2hhbmdlcyB3aWxsIGZhaWwuIEJlZm9yZSBJVlkgY2hhbmdlcywgYW5ndWxhciBtYWludGFpbnMgYSBzZXBhcmF0ZSBvYmplY3Qgd2l0aCB0aGVzZSBhdHRyaWJ1dGVzXG4gICAgICogYXMgaXQgaXMgbGlrZSBpbiB0aGUgY2FtZWxjYXNlLiBXaXRoIElWWSBhbGwgdGhvc2UgYXJlIGdvbmUuIFNvIG5lZWQgdG8gbWFpbnRhaW4gYSBzZXBhcmF0ZSBsaXN0IHdpdGggdGhlIGNhbWVsY2FzaW5nIG9mIGF0dHJpYnV0ZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIF90Tm9kZS5hdHRycyBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgaW4gYXJyYXkoZXZlbiBpbmRleDoga2V5LCBvZGQgaW5kZXg6IHZhbHVlKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QXR0cmlidXRlcygpIHtcbiAgICAgICAgbGV0IF90Tm9kZUF0dHJzID0gKHRoaXMuaW5qIGFzIGFueSkuX3ROb2RlLmF0dHJzLCBhY3R1YWxBdHRycyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMpLm1hcChhdHRyID0+IGF0dHIubmFtZSk7XG4gICAgICAgIGlmKF90Tm9kZUF0dHJzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsQXR0cnMuc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaChfdE5vZGVBdHRycywgKGF0dHIsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgYXR0ciA9PT0gJ3N0cmluZycgJiYgaSAlIDIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBsb3dlckNhc2VBdHRyID0gYXR0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxBdHRycy5pbmNsdWRlcyhsb3dlckNhc2VBdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBhY3R1YWxBdHRycy5pbmRleE9mKGxvd2VyQ2FzZUF0dHIpXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEF0dHJzW2luZGV4XSA9IGF0dHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICBTb3J0aW5nIGF0dHJpYnV0ZXMgYXMgcHJvcGVydGllcyBsaWtlIHBsYWNlaG9sZGVyIGlzIG5vdCB3b3JraW5nIHdoZW4gaXQgaXMgYm91bmQuXG4gICAgICAgIHBsYWNlaG9sZGVyIGFuZCBwbGFjZWhvbGRlci5iaW5kIHR3byBwcm9wZXJ0aWVzIGFyZSBjb21pbmcgaW4gQXJyYXkuXG4gICAgICAgIFdoZW4gYXJyYXkgaXMgbm90IHNvcnRlZCwgaW5pdGlhbGx5IHBsYWNlaG9sZGVyLmJpbmQgdmFsdWUgaXMgc2V0IHRoZW4gcGxhY2Vob2xkZXIgZGVmYXVsdCB2YWx1ZSBpcyB1cGRhdGVkLlxuICAgICAgICBJZiBhcnJheSBpcyBzb3J0ZWQsIHBsYWNlaG9sZGVyLmJpbmQgdmFsdWUgd2lsbCBiZSBzZXQgZmluYWxseS5cbiAgICAgICAgVGhpcyBpcyBjYXVzZWQgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGFyZSBzdG9yaW5nIGF0dHJpYnV0ZSBuYW1lcyBpbiB3YXRjaGVyIHJlZ2lzdHJ5IG1hcFxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGFjdHVhbEF0dHJzLnNvcnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzQXR0cnMoKSB7XG4gICAgICAgIF8ubWFwKHRoaXMuZ2V0QXR0cmlidXRlcygpLCAoYXR0ck5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJWYWx1ZSA9IHRoaXMubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVxuICAgICAgICAgICAgdGhpcy4kYXR0cnMuc2V0KGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQXR0cihhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpbml0U3RhdGUgd2l0aCB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIG1hcmt1cFxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRXaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHdpZGdldCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+ID0gZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKTtcbiAgICAgICAgd2lkZ2V0UHJvcHMuZm9yRWFjaCgodiwgaykgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlLnNldChrLCB2LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53aWRnZXRQcm9wcyA9IHdpZGdldFByb3BzO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0F0dHJzKCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcldpZGdldCh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgYW5kIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXAgaW4gY29tcG9uZW50XG4gICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXN1bHQgaW4gaW52b2NhdGlvbiBvZiBwcm9wZXJ0eUNoYW5nZSBoYW5kbGVycyBvbiB0aGUgY29tcG9uZW50IGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRJbml0UHJvcHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQubmFtZSA9IHRoaXMuaW5pdFN0YXRlLmdldCgnbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIC8vIG5hbWUgaXMgYWxyZWFkeSBzZXQsIGlnbm9yZSBuYW1lXG4gICAgICAgICAgICAvLyBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdG8gYmUgaWdub3JlZCBhdHRyaWJ1dGVzIGxpc3QgZG8gbm90IHNldCBpdCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgICAgICBpZiAoKHRoaXMud2lkZ2V0UHJvcHMuZ2V0KGspIHx8IGlzU3R5bGUoaykpICYmIGsgIT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0W2tdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIGV2ZW50IG9uIHRoaXMgd2lkZ2V0IG1hcmt1cC5cbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhc0V2ZW50Q2FsbGJhY2soZXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciB0aGUgbm9kZXMgaGF2aW5nIGZvY3VzLXRhcmdldCBhdHRyaWJ1dGUgaW5zaWRlIHRoZSBlbGVtZW50XG4gICAgICAgICAqIElmIGZvdW5kLCBmb2N1cyB0aGUgZmlyc3Qgbm9kZSAoZWcsIGRhdGUgd2lkZ2V0KVxuICAgICAgICAgKiBlbHNlLCBmb2N1cyB0aGUgZWxlbWVudCAoZWcsIHRleHQgd2lkZ2V0KVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0ICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgICAgIGlmICghJHRhcmdldCkge1xuICAgICAgICAgICAgJHRhcmdldCA9IHRoaXMuJGVsZW1lbnRbMF07XG4gICAgICAgIH1cbiAgICAgICAgJHRhcmdldC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIERlZmluaW5nIHRoZSBleGVjdXRlIG1ldGhvZCBvbiBCYXNlQ29tcG9uZW50LiBJZiBkYXRhc2V0IGlzIGJpbmRlZCB0byB3aWRnZXRzIG91cHR1dCB0aGVuIGRhdGFzb3VyY2UuZXhlY3V0ZSB3aWxsIGJlIGRlZmluZWRcbiAgICBwcm90ZWN0ZWQgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpOiBhbnkge1xuXG4gICAgfVxuXG4gICAgcHVibGljIG11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHVubXV0ZSgpIHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdGhlIGhvc3QgcGFnZSBpcyBhdHRhY2hlZCBmcm9tIGNhY2hlLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkF0dGFjaCgpIHtcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCZWZvcmUgdGhlIGhvc3QgcGFnZSBpcyBkZXRhY2hlZCBmcm9tIGRvbSBhbmQgc3RvcmVkIGluIGNhY2hlLCAgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG5hdGl2ZUVsZW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgYnkgdGhpcyB0aW1lXG4gICAgICogaWYgdGhlIGRlbGF5SW5pdCBpcyBmYWxzZSwgcHJvcGVydGllcyBtZXRhIHdpbGwgYmUgYXZhaWxhYmxlIGJ5IHRoaXMgdGltZVxuICAgICAqIEludm9rZSB0aGUgc2V0SW5pdFByb3BzIGlmIHRoZSBkZWxheUluaXQgaXMgZmFsc2VcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbGF5ZWRJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldEluaXRQcm9wcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUpIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7fVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLndpZGdldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgfVxufVxuIl19
@@ -1329,7 +1329,7 @@ class BaseComponent {
1329
1329
  getAttributes() {
1330
1330
  let _tNodeAttrs = this.inj._tNode.attrs, actualAttrs = Array.from(this.nativeElement.attributes).map(attr => attr.name);
1331
1331
  if (_tNodeAttrs === null) {
1332
- return actualAttrs;
1332
+ return actualAttrs.sort();
1333
1333
  }
1334
1334
  _.forEach(_tNodeAttrs, (attr, i) => {
1335
1335
  if (typeof attr === 'number') {
@@ -1343,15 +1343,20 @@ class BaseComponent {
1343
1343
  }
1344
1344
  }
1345
1345
  });
1346
- return actualAttrs;
1346
+ /*
1347
+ Sorting attributes as properties like placeholder is not working when it is bound.
1348
+ placeholder and placeholder.bind two properties are coming in Array.
1349
+ When array is not sorted, initially placeholder.bind value is set then placeholder default value is updated.
1350
+ If array is sorted, placeholder.bind value will be set finally.
1351
+ This is caused because of the way we are storing attribute names in watcher registry map
1352
+ */
1353
+ return actualAttrs.sort();
1347
1354
  }
1348
1355
  /**
1349
1356
  * Process the attributes
1350
1357
  */
1351
1358
  processAttrs() {
1352
- const attrs = this.getAttributes();
1353
- let i = 0;
1354
- _.map(attrs, (attrName) => {
1359
+ _.map(this.getAttributes(), (attrName) => {
1355
1360
  let attrValue = this.nativeElement.attributes[attrName].value;
1356
1361
  this.$attrs.set(attrName, attrValue);
1357
1362
  this.processAttr(attrName, attrValue);