ng-easycommerce 0.0.654 → 0.0.656-beta.1

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.
Files changed (34) hide show
  1. package/README.md +6 -0
  2. package/bundles/ng-easycommerce.umd.js +90 -27
  3. package/bundles/ng-easycommerce.umd.js.map +1 -1
  4. package/bundles/ng-easycommerce.umd.min.js +1 -1
  5. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  6. package/esm2015/lib/core.consts.js +2 -1
  7. package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +8 -1
  8. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
  9. package/esm2015/lib/ec-component/header-ec/header-ec.component.js +1 -1
  10. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +27 -2
  11. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +1 -2
  12. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
  13. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  14. package/esm2015/lib/services/cart.service.js +27 -12
  15. package/esm5/lib/core.consts.js +2 -1
  16. package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +8 -1
  17. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
  18. package/esm5/lib/ec-component/header-ec/header-ec.component.js +1 -1
  19. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +45 -2
  20. package/esm5/lib/ec-component/product-ec/product-ec.component.js +1 -2
  21. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
  22. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  23. package/esm5/lib/services/cart.service.js +27 -12
  24. package/fesm2015/ng-easycommerce.js +67 -22
  25. package/fesm2015/ng-easycommerce.js.map +1 -1
  26. package/fesm5/ng-easycommerce.js +91 -28
  27. package/fesm5/ng-easycommerce.js.map +1 -1
  28. package/lib/core.consts.d.ts +1 -0
  29. package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +1 -0
  30. package/lib/ec-component/header-ec/header-ec.component.d.ts +1 -1
  31. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +2 -0
  32. package/lib/services/cart.service.d.ts +2 -2
  33. package/ng-easycommerce.metadata.json +1 -1
  34. package/package.json +1 -1
@@ -23,6 +23,7 @@ let Constants = class Constants {
23
23
  this.LOCALE = 'LOCALE';
24
24
  this.CHANNEL = 'CHANNEL';
25
25
  this.searchValue = '';
26
+ this.channelSelected = '';
26
27
  this.channelConfigSubject = new ReplaySubject();
27
28
  this.channelConfig$ = this.channelConfigSubject.asObservable();
28
29
  this.channelConfigAPI = (channel) => '/shop-api/' + channel + 'channel';
@@ -416,4 +417,4 @@ Constants = __decorate([
416
417
  __param(2, Inject('env'))
417
418
  ], Constants);
418
419
  export { Constants };
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVl0RCxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFTO0lBRWxCLFlBQW1CLFNBQTJCLEVBQVUsTUFBYyxFQUF5QixHQUFHO1FBQS9FLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUF5QixRQUFHLEdBQUgsR0FBRyxDQUFBO1FBRWpGLFdBQU0sR0FBRyxRQUFRLENBQUM7UUFDbEIsWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUM5QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV4Qix5QkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBTyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpELHFCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUVuRSxrQkFBYSxHQUFXLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDckMscUJBQWdCLEdBQVcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckUsZ0ZBQWdGO1FBQ3hFLFlBQU8sR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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LEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQTtJQUVwRyxDQUFDO0lBQUEsQ0FBQztJQThIRixvQkFBb0IsQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztJQUNwSSxDQUFDO0NBQ0osQ0FBQTs7WUE5Y2lDLGdCQUFnQjtZQUFrQixNQUFNOzRDQUFHLE1BQU0sU0FBQyxLQUFLOzs7QUFGNUUsU0FBUztJQUhyQixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0lBRzJFLFdBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0dBRjdFLFNBQVMsQ0FnZHJCO1NBaGRZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VycmVuY3lDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvY3VycmVuY3lDb25maWcnO1xyXG5pbXBvcnQgeyBEZWZhdWx0RmlsdGVyLCBGaWx0ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyJztcclxuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wYXJhbXNJbnRlcmZhY2VzL3BhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQnO1xyXG50eXBlIGN1cnJlbmN5VHlwZSA9ICdFVVInIHwgJ0FSRycgfCAnVVNEJyB8ICdQWUcnIHwgJ1BFTicgfCAnU0VLJyB8ICdDVVNUT00nO1xyXG50eXBlIHBvc2l0aW9uVHlwZSA9ICdMJyB8ICdSJztcclxudHlwZSBjaGFubmVsVHlwZXMgPSAnYjJiJyB8ICdiMmIyYycgfCAnYjJjJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudikgeyB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTCA9ICdDSEFOTkVMJztcclxuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueT4oKTtcclxuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnJCA9IHRoaXMuY2hhbm5lbENvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnQVBJID0gKGNoYW5uZWwpID0+ICcvc2hvcC1hcGkvJyArIGNoYW5uZWwgKyAnY2hhbm5lbCc7XHJcblxyXG4gICAgcHJpdmF0ZSBicm93c2VyV2luZG93OiBvYmplY3QgPSB3aW5kb3cgfHwge307XHJcbiAgICBwcml2YXRlIGJyb3dzZXJXaW5kb3dFbnY6IG9iamVjdCA9IHRoaXMuYnJvd3NlcldpbmRvd1snX19lbnYnXSB8fCB7fTtcclxuXHJcbiAgICAvLyAgICAgcHJpdmF0ZSB1cmxCYXNlOiBzdHJpbmcgPSAnaHR0cDovL3Rlc3RpbmcuYmFja2VuZC5lYXN5Y29tbWVyY2V0ZWNoLmNvbS8nO1xyXG4gICAgcHJpdmF0ZSB1cmxCYXNlOiBzdHJpbmcgPSB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2FwaVVybCddID8gdGhpcy5icm93c2VyV2luZG93RW52WydhcGlVcmwnXSA6ICh0aGlzLmVudi5hcGlVcmwgfHwgJ2h0dHA6Ly9iYWNrZW5kLmVhc3ljb21tZXJjZS5kZXZwLycpO1xyXG4gICAgcHJpdmF0ZSB1cmxBc3NldHM6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3VybEFzc2V0cyddIDogKHRoaXMuZW52LnVybEFzc2V0cyB8fCB0aGlzLnVybEJhc2UpO1xyXG4gICAgcHJpdmF0ZSB1cmxGcm9udGVuZDogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddID8gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddIDogKHRoaXMuZW52LnVybEZyb250ZW5kIHx8ICdodHRwczovL2VsZGVuLmVhc3ljb21tZXJjZXRlY2guY29tLycpO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKSA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKSA6IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnbG9jYWxlJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2xvY2FsZSddIDogKHRoaXMuZW52LmxvY2FsZSB8fCAnZXNfQVInKTtcclxuICAgIHByaXZhdGUgY2hhbm5lbDogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkgOiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2NoYW5uZWwnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddIDogKHRoaXMuZW52LmNoYW5uZWwgfHwgJ21pbm9yaXN0YScpXHJcbiAgICBwcml2YXRlIGJsb2Nrc0NhY2hlVGltZTogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52WydibG9ja3NDYWNoZVRpbWUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYmxvY2tzQ2FjaGVUaW1lJ10gOiAodGhpcy5lbnYuYmxvY2tzQ2FjaGVUaW1lIHx8IG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgbW9kYWxDb25maWcgPSB7IHRpdGxlOiAnRXhhbXBsZScsIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtZGlhbG9nLWNlbnRlcmVkJywga2V5Ym9hcmQ6IGZhbHNlIH07XHJcbiAgICBzZXRNb2RhbENvbmZpZyA9IChjb25maWc6IGFueSkgPT4gdGhpcy5tb2RhbENvbmZpZyA9IGNvbmZpZztcclxuICAgIGdldE1vZGFsQ29uZmlnID0gKCkgPT4gdGhpcy5tb2RhbENvbmZpZztcclxuXHJcbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZyA9ICd2MSc7XHJcblxyXG4gICAgcHJpdmF0ZSByb3V0ZXMgPSBbL15ob21lJC9nLCAvXihcXC8/KWNvbGxlY3Rpb24oXFwvPykoW1xcd1xcLlxcL1xcP10qKSQvZywgL15jb250YWN0JC9nXTtcclxuXHJcbiAgICAvKiBHZXQgcmlkIG9mIHRoaXMgQVNBUCEgKi9cclxuICAgIHByaXZhdGUgbWFzdGVyQ2hhbm5lbCA9IG51bGxcclxuXHJcbiAgICBwdWJsaWMgZ2V0TWFzdGVyQ2hhbm5lbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMubWFzdGVyQ2hhbm5lbCkgdGhpcy5tYXN0ZXJDaGFubmVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ01BU1RFUl9DSEFOTkVMJylcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJDaGFubmVsXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE1hc3RlckNoYW5uZWwgPSBjaGFubmVsID0+IHtcclxuICAgICAgICB0aGlzLm1hc3RlckNoYW5uZWwgPSBjaGFubmVsXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ01BU1RFUl9DSEFOTkVMJywgY2hhbm5lbClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzUHJvZHVjdGlvbiA9ICgpID0+IHRoaXMuYnJvd3NlcldpbmRvd0VudlsncHJvZHVjdGlvbiddID8gdGhpcy5icm93c2VyV2luZG93RW52Wydwcm9kdWN0aW9uJ10gOiAodGhpcy5lbnYucHJvZHVjdGlvbiB8fCBmYWxzZSk7XHJcblxyXG4gICAgc2V0VXJsQmFzZSA9ICh1cmwpID0+IHRoaXMudXJsQmFzZSA9IHVybDtcclxuICAgIHNldFVybEFzc2V0cyA9ICh1cmwpID0+IHRoaXMudXJsQXNzZXRzID0gdXJsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIG5leHQgRnVuY3Rpb24gdG8gZXhlY3V0ZVxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBUaGF0IGZ1bmN0aW9uIG5lZWRzXHJcbiAgICAgKlxyXG4gICAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gcGFzc2VkIGFzIHBhcmFtcywgaWYgdGhlIGZyb250ZW5kIGlzIGluIHByb2R1Y3Rpb24gbW9kZVxyXG4gICAgICovXHJcbiAgICBvbmx5SWZQcm9kdWN0aW9uID0gKG5leHQsIHBhcmFtcykgPT4gdGhpcy5pc1Byb2R1Y3Rpb24oKSAmJiBuZXh0KHBhcmFtcyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV2dWVsdmUgbGEgdXJsIGJhc2UgZG9uZGUgc2UgYWxvamFuIGxvcyBhcmNoaXZvcyBtdWx0aW1lZGlhXHJcbiAgICAgKiBAcGFyYW0gcG9zdE1lZGlhIGNhcnBldGEgZG9uZGUgc2UgZ3VhcmRhbiBsb3MgYXJjaGl2b3NcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIG1lZGlhVXJsID0gKHBvc3RNZWRpYT86IHN0cmluZykgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyAocG9zdE1lZGlhID8gcG9zdE1lZGlhIDogXCJpbWFnZS9cIik7XHJcbiAgICBtZWRpYUJhbm5lclVybCA9ICgpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgXCJiYW5uZXItaW1hZ2UvXCI7XHJcbiAgICBtZWRpYVN0b3JlVXJsID0gKCkgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyBcInN0b3JlLWltYWdlL1wiO1xyXG5cclxuICAgIGdldFByb2R1Y3RzTGlzdFJvdXRlID0gKCkgPT4gJ2NvbGxlY3Rpb24vJztcclxuXHJcbiAgICBnZXRTZWN0aW9uc1JvdXRlID0gKCkgPT4gJ3NlY3Rpb24vJztcclxuXHJcbiAgICBnZXRVcmxCYXNlID0gKCkgPT4gdGhpcy51cmxCYXNlO1xyXG4gICAgZ2V0VXJsRnJvbnRlbmQgPSAoKSA9PiB0aGlzLnVybEZyb250ZW5kO1xyXG5cclxuICAgIGdldEJsb2Nrc0NhY2hlVGltZSA9ICgpOiBudW1iZXIgPT4gdGhpcy5ibG9ja3NDYWNoZVRpbWUgJiYgcGFyc2VJbnQodGhpcy5ibG9ja3NDYWNoZVRpbWUpO1xyXG5cclxuICAgIC8vIGdldExvY2FsZSA9ICgpID0+IHRoaXMubG9jYWxlO1xyXG4gICAgLy8gc2V0TG9jYWxlID0gKGxvY2FsZSkgPT4gdGhpcy5sb2NhbGUgPSBsb2NhbGU7XHJcblxyXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9jYWxlVHJhbnNsYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsZSgpLnNwbGl0KCdfJylbMF1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TG9jYWxlID0gbG9jYWxlID0+IHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPQ0FMRSwgbG9jYWxlKVxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsb2NhbGUuc3BsaXQoJ18nKVswXSlcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZVxyXG4gICAgfVxyXG5cclxuICAgIGdldENoYW5uZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENoYW5uZWwgPSBjaGFubmVsID0+IHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUwsIGNoYW5uZWwpXHJcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbFxyXG4gICAgfVxyXG5cclxuICAgIGdldFZlcnNpb24gPSAoKSA9PiB0aGlzLnZlcnNpb247XHJcblxyXG4gICAgbG9naW5FeHRyYURhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiAnc2VjcmV0X2RlbW9fY2xpZW50JyxcclxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3Bhc3N3b3JkJ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0NvbGxlY3Rpb24gPSAocGF0aCkgPT4gKC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nKS50ZXN0KHBhdGgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXRpbGl0aWVzXHJcbiAgICAgKi9cclxuXHJcbiAgICBtb2JpbGUgPSAoKSA9PiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc1MDtcclxuXHJcbiAgICBzdHJpY3RUeXBlQ2hhbm5lbCA9ICgpID0+IHRoaXMuZW52LnN0cmljdFR5cGVDaGFubmVsIHx8ICdiMmIyYyc7XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKHRvdGFsKSA9PiAodG90YWwgLSBNYXRoLmZsb29yKHRvdGFsKSA9PSAwKSA/IHRvdGFsIC8gMTAwIDogdG90YWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbGVtZW50b3MgcGFyYSBtYW5lam8gZGUgbGlzdGEgZGUgcnV0YXMgcmV1dGlsaXphYmxlc1xyXG4gICAgICovXHJcblxyXG4gICAgYWRkUm91dGVUb1JldXNlID0gKHJvdXRlOiBSZWdFeHApID0+IHJvdXRlICYmIHRoaXMucm91dGVzLnB1c2gocm91dGUpO1xyXG5cclxuICAgIHJlbW92ZVJvdXRlVG9SZXVzZSA9IChyb3V0ZTogUmVnRXhwKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvdXRlcy5pbmRleE9mKHJvdXRlKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSb3V0ZXNUb1JldXNlID0gKCk6IFJlZ0V4cFtdID0+IHRoaXMucm91dGVzO1xyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpYyBlamVtcGxvIGRlIHVzbyA8aW1nICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnN0cy5nZXRSYXRpbmdTdGFyKHByb2R1Y3QucmF0aW5nLCdhc3NldHMvaW1hZ2VzL3N0YXIucG5nJywnYXNzZXRzL2ltYWdlcy9ub3RTdGFyLnBuZycpXCIgW3NyY109XCJpdGVtXCI+XHJcbiAgICAgKiAgQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGRhZG8gdW4gdmFsb3IgZW50cmUgMSAuLiA1LCB5IHN0YXI6IG5vdFN0YXI6XHJcbiAgICAgKiAgICAgIChkZWJlbiBzZXIgZWwgcGF0aCBkZWwgYXJjaGl2byBsb2NhbCBhIGxhIGltcGxlbWVudGFjaW9uKS5cclxuICAgICAqICAgICAgcmV0b3JuYSB1biBhcnJlZ2xvIGNvbiBjb24gbGEgdmFsb3JhY2lvbiBjb3JyZXNwb25kaWVudGUuXHJcbiAgICAgKi9cclxuICAgIGdldFJhdGluZ1N0YXIgPSAocmF0aW5nOiBhbnksIHN0YXI6IFN0cmluZywgbm90U3RhcjogU3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHVybFN0YXIgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGNhbnRTdGFyID0gTnVtYmVyKHJhdGluZykgfHwgMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDU7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIHVybFN0YXIucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBjYW50U3RhciA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzdGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm90U3RhclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNhbnRTdGFyLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHVybFN0YXI7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImdldFJhdGluZ1N0YXIgcHJvZHVqbyB1biBlcnJvciAtPiBcIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwdWJsaWMgZWplbXBsbyBkZSB1c28gKGtleXByZXNzKT1cImlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMoJGV2ZW50LCdbMC05XXsxLDl9JylcIiBlbiBlbCBET00uXHJcbiAgICAgKiAgQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGRhZG8gdW4gbWFuZWphbmRvciBkZSBldmVudG8sIHkgdW5hIGV4cHJlc2lvbiByZWd1bGFyIGVzdGEgZXNcclxuICAgICAqICAgICAgICAgIGV2YWx1YWRhIHNvYnJlIGxvcyB2YWxvcmVzIHF1ZSBlbCBtYW5lamFkb3IgZGUgZXZlbnRvcyBub3MgZW52aWEuXHJcbiAgICAgKiAgICAgICAgICBFbiBlbCBjYXNvIGVuIGVsIHF1ZSBzZSBlbnZpZSBlbCBwYXJhbWV0cm8gJ2NvbmRpdGlvbicgZXN0ZSBwdWVkZSBzZXIgcGFyYVxyXG4gICAgICogICAgICAgICAgYW51bGFyIGVsIGV2ZW50byBjb21vIGNvbmRpY2lvbiBhZGljaW9uYWwgYSBsYSBldmFsdWFjaW9uIGRlIGxhIGVudHJhZGEuXHJcbiAgICAgKi9cclxuICAgIGlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMgPSAoZSwgcGF0cm9uLCBjb25kaXRpb24gPSBudWxsKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHRlY2xhID0gKGRvY3VtZW50KSA/IGUua2V5Q29kZSA6IGUud2hpY2g7XHJcbiAgICAgICAgICAgIGlmICh0ZWNsYSA9PSA4KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHBhdHJvblJlZyA9IG5ldyBSZWdFeHAocGF0cm9uKVxyXG4gICAgICAgICAgICBsZXQgdGVjbGFfZmluYWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRlY2xhKTtcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0cm9uUmVnLnRlc3QodGVjbGFfZmluYWwpICYmIGNvbmRpdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0cm9uUmVnLnRlc3QodGVjbGFfZmluYWwpXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMgcHJvZHVqbyB1biBlcnJvciAtPiBcIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5lZWRsZXMgKGFndWphcykgb2JqZWN0IGNvbiBjbGF2ZXMgdmFsb3IgYSBmaWx0cmFyXHJcbiAgICAgKiBAcGFyYW0gaGF5c3RhY2sgKHBhamFyKSBvYmplY3RvIGVuIGVsIHF1ZSBidXNjYXJcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgYnVzY2EgZW4gZWwgaGF5c3RhY2sgKHBhamFyKSB0b2RvcyBsb3Mgb2JqZXRvcyBxdWUgY29udGVudGFuXHJcbiAgICAgKiB0b2RhcyBsYXMgY2xhdmVzIGRlIGxvcyBuZWVkbGVzKGFndWphcykgcXVlIGNvbnRlbmdhbiBlbCBtaXNtbyB2YWxvclxyXG4gICAgICovXHJcbiAgICBjb250YWluc0FsbChuZWVkbGVzOiBvYmplY3QsIGhheXN0YWNrOiBvYmplY3QpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCEhbmVlZGxlcyAmJiAhIWhheXN0YWNrKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG5lZWRsZXMpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoaGF5c3RhY2suaGFzT3duUHJvcGVydHkodmFsdWVbMF0pICYmIGhheXN0YWNrW3ZhbHVlWzBdXSA9PSB2YWx1ZVsxXSkpIHJlc3VsdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9waWVkYWQgcXVlIHNlIHV0aWxpemEgcGFyYSB0b21hciBjb21vIGNvbmZpZ3VyYWNpw7NuIHBhcmEgZWwgdGlwbyBkZSBtb25lZGEgcXVlIHNlIHV0aWxpemEgZW4gZWwgc2l0aW8uXHJcbiAgICAgKiBFc3RvcyB2YWxvcmVzIHNvbiB1dGlsaXphZG9zIHBhcmEgZWwgcGlwZSBjdXJyZW5jeVByaWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjdXJyZW5jeTogQ3VycmVuY3lDb25maWcgPSB7XHJcbiAgICAgICAgY29kZTogJ0FSRycsXHJcbiAgICAgICAgc3ltYm9sOiAnJCcsXHJcbiAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFycmVnbG8gZGUgdmFsb3JlcyB1c2Fkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdFVVInLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICfigqwnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1JpZ2h0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnQVJHJyxcclxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXHJcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnQVJTJyxcclxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXHJcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnVVNEJyxcclxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXHJcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnUFlHJyxcclxuICAgICAgICAgICAgc3ltYm9sOiAnR3MuJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdQRU4nLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICdTLycsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXHJcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnU0VLJyxcclxuICAgICAgICAgICAgc3ltYm9sOiAnU0VLJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdSaWdodCcsXHJcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgIF1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnID0gY3VycmVuY3lUeXBlQ29uZmlnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWVtcGxhemEgbG9zIHZhbG9yZXMgZGUgdW5hIG1vbmVkYS5cclxuICAgICAqIEBwYXJhbSBjdXJyZW5jeVR5cGVGaW5kIFRpcG8gZGUgY3VycmVuY3kgcXVlIHNlIGRlc2VhIG1vZGlmaWNhclxyXG4gICAgICogQHBhcmFtIGN1c3RvbVR5cGUgTG9zIG51ZXZvcyB2YWxvcmVzLiBUb2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzXHJcbiAgICAgKiBAZXhhbXBsZSBjdXN0b21UeXBlID0geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTGVmdCcgLCB3aXRob3V0RGVjaW1hbDogZmFsc2UgfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVwbGFjZUN1cnJlbmN5VHlwZUNvbmZpZyA9IChjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU6IEN1cnJlbmN5Q29uZmlnKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbmN5VHlwZSA9IHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLmZpbmQodHlwZSA9PiB0eXBlLmNvZGUgPT0gY3VycmVuY3lUeXBlRmluZClcclxuICAgICAgICBpZiAoY3VycmVuY3lUeXBlKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5zeW1ib2wgPSBjdXN0b21UeXBlPy5zeW1ib2wgfHwgY3VycmVuY3lUeXBlLnN5bWJvbFxyXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUuY29kZSA9IGN1c3RvbVR5cGU/LmNvZGUgfHwgY3VycmVuY3lUeXBlLmNvZGVcclxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLnBvc2l0aW9uID0gY3VzdG9tVHlwZT8ucG9zaXRpb24gfHwgY3VycmVuY3lUeXBlLnBvc2l0aW9uXHJcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS53aXRob3V0RGVjaW1hbCA9IGN1c3RvbVR5cGU/LndpdGhvdXREZWNpbWFsIHx8IGN1cnJlbmN5VHlwZS53aXRob3V0RGVjaW1hbFxyXG4gICAgICAgIH1cclxuICAgICAgICAvL1JldmVlciBlbiBlbCBmdXR1cm8gc2kgc2UgZW1waWV6YW4gYSBhZ3JlZ2FyIG90cm8gdGlwb3MgZGUgbW9uZWRhc1xyXG4gICAgICAgIC8qIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLnB1c2goey4uLmN1c3RvbVR5cGUgfSlcclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgRGVmaW5pciBlbCBjb2RlIGRlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgcXVpZXJhIHV0aWxpemFyLlxyXG4gICAgICogU2kgZWwgdGlwbyBlcyBDVVNUT00gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIHNlZ3VuZG8gcGFyYW1ldHJvIGRvbmRlIHNlIHB1ZWRlIGRlZmluaXIgbGEgc2ltYm9sb2fDrWEgeSBwb3Nlc2nDs24gcXVlIHNlIHF1aWVyYS5cclxuICAgICAqIEBwYXJhbSBjdXN0b21UeXBlIEZvcm1hdG8gZGVsIHBhcsOhbWV0cm8gZWplbXBsbyB7IGNvZGU6ICdBUkcnLCBzeW1ib2w6ICckJywgcG9zaXRpb246ICdMJyAsIHdpdGhvdXREZWNpbWFsczogZmFsc2UgfSAsXHJcbiAgICAgKiB0b2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzIHkgcG9yIGRlZmVjdG8gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIGVqZW1wbG8uXHJcbiAgICAgKiBAcmV0dXJucyBzZSByZXRvcm5hIGxhIGNvbmZpZ3VyYWNpw7NuIHF1ZSBzZSBzZXRlbyBhIGxhIHByb3BpZWRhZCBjdXJyZW5jeSBkZWwgc2VydmljaW8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDdXJyZW5jeSA9IChjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU/OiBDdXJyZW5jeUNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZy5maW5kKGN0ID0+IGN0LmNvZGUgPT0gY3VycmVuY3lUeXBlRmluZC50b1VwcGVyQ2FzZSgpKSB8fCB0aGlzLmN1cnJlbmN5XHJcbiAgICAgICAgY3VzdG9tVHlwZSAmJiAodGhpcy5jdXJyZW5jeSA9IHsgLi4udGhpcy5jdXJyZW5jeSwgLi4uY3VzdG9tVHlwZSB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZXZ1ZWx2ZSB0cnVlIHNpIGV4aXN0ZSBlbCBlbGVtZW50byBcInNlYXJjaFwiIGVuIGVsIGFycmF5IGRlIHBhcmFtZXRyb3MgXCJwYXJhbXNcIlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgQXJyYXkgZGUgcGFyYW1ldHJvcyBlbnRyZSBsb3MgcXVlIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIHNlYXJjaGVkIEVsZW1lbnRvIHF1ZSBidXNjYXJcclxuICAgICAqIEBwYXJhbSBwcmVmaXggcHJlZmlqbyBkZWwgc3RyaW5nIGEgYnVzY2FyIChlamVtcGxvOiBcImxpbmtfXCIpXHJcbiAgICAgKiBAcGFyYW0gc3VmZml4IHN1ZmlqbyBkZWwgc3RyaW5nIGEgYnVzY2FyIChlamVtcGxvOiBcImxpbmtfXCIpXHJcbiAgICAgKiBAcGFyYW0gY2FzZXNlbnNpdGl2ZSBkZXRlcm1pbmEgc2kgc2UgZXZhbHVhIGNvbiBzZW5zaWJpbGlkYWQgZW50cmUgbWF5dXNjdWxhIHkgbWludXNjdWxhXHJcbiAgICAgKiBAcmV0dXJucyByZXRvcm5hIHRydWUgbyBmYWxzZSBzaSBzZSBlbmNvbnRybyBvIG5vIGVsIHBhcmFtZXRybyBlbiBlbCBhcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFzUGFyYW1zKFxyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICBzZWFyY2hlZCxcclxuICAgICAgICBwcmVmaXggPSAnJyxcclxuICAgICAgICBzdWZmaXggPSAnJyxcclxuICAgICAgICBjYXNlc2Vuc2l0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcclxuXHJcblxyXG4gICAgICAgIHJldHVybiBjYXNlc2Vuc2l0aXZlID8gcGFyYW1zLmZpbmQocGFyYW0gPT4gKHBhcmFtLmNvZGUpLnRvTG93ZXJDYXNlKCkgPT0gKHByZWZpeCArIHNlYXJjaGVkICsgc3VmZml4KS50b0xvd2VyQ2FzZSgpIHx8IChwYXJhbS5jb2RlKS50b0xvd2VyQ2FzZSgpID09IChzZWFyY2hlZCkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgOiBwYXJhbXMuZmluZChwYXJhbSA9PiBwYXJhbS5jb2RlID09IChwcmVmaXggKyBzZWFyY2hlZCArIHN1ZmZpeCkgfHwgcGFyYW0uY29kZSA9PSBzZWFyY2hlZClcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBtb2RpZnlDaGFubmVsQ29uZmlnID0gY2hhbm5lbENvbmZpZyA9PiB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcuY2hhbm5lbCB8fCBjaGFubmVsQ29uZmlnLmNvZGUpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhbm5lbChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxyXG5cclxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5sb2NhbGUgfHwgY2hhbm5lbENvbmZpZy5sb2NhbGVzLmNvZGUpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxyXG5cclxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5jdXJyZW5jeSB8fCBjaGFubmVsQ29uZmlnLmJhc2VDdXJyZW5jeSlcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW5jeShjaGFubmVsQ29uZmlnLmN1cnJlbmN5IHx8IGNoYW5uZWxDb25maWcuYmFzZUN1cnJlbmN5KVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbm5lbENvbmZpZztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIGxvcyBmaWx0cm9zIHBvciBkZWZlY3RvIHF1ZSBzZSBhcGxpY2FyYW4gZW4gbGEgc2VjY2lvbiAnQ29sbGVjdGlvbidcclxuICAgICAqIGN1YW5kbyBzZSBpbmdyZXNhIGEgbGEgbWlzbWEuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGVmYXVsdEZpbHRlcnM6IERlZmF1bHRGaWx0ZXJbXSA9IFtdXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0dGVhIGVsIHZhbG9yIGRlIGxhIHZhcmlhYmxlIGRlZmF1bEZpbHRlcnMuXHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0RGVmYXVsdEZpbHRlcnMgPSAoZmlsdGVyczogRGVmYXVsdEZpbHRlcltdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZmF1bHRGaWx0ZXJzID0gKCk6IERlZmF1bHRGaWx0ZXJbXSA9PiB0aGlzLmRlZmF1bHRGaWx0ZXJzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgdGFudG8gbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG9zIHF1ZSB5YSBzZXJhbiBhcGxpY2Fkb3MsIGNvbW8gdGFtYmllblxyXG4gICAgICogbG9zIGZpbHRyb3MgcXVlIHNlIG1vc3RyYXJhbiBlbiBsYSBzZWNjaW9uIGNvbGxlY3Rpb24sIHN1IG9yZGVuLCBldGMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XHJcbiAgICAgICAgZGVmYXVsdEZpbHRlcnM6IFtdLFxyXG4gICAgICAgIGZpbHRlcnM6IFsnY2F0ZWdvcnknLCAnYXR0cmlidXRlcycsICdkeW5hbWljcycsICdwcmljZV9yYW5nZSddXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZpbHRlckNvbmZpZyA9IChmaWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZykgPT4ge1xyXG4gICAgICAgIGZpbHRlckNvbmZpZy5kZWZhdWx0RmlsdGVycyA/IHRoaXMuZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzID0gZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzIDogbnVsbFxyXG4gICAgICAgIGZpbHRlckNvbmZpZy5maWx0ZXJzID8gdGhpcy5maWx0ZXJDb25maWcuZmlsdGVycyA9IGZpbHRlckNvbmZpZy5maWx0ZXJzIDogbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGaWx0ZXJDb25maWcgPSAoKSA9PiB0aGlzLmZpbHRlckNvbmZpZy5maWx0ZXJzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gY29udGllbmUgdW4gYXJyZWdsbyBkZSBzdHJpbmcgY3V5byBjb250ZW5pZG8gc29uIGxvcyBjb2RpZ29zIGRlIGxvcyBwYWlzZXMuXHJcbiAgICAgKiBAZXhhbXBsZSBbJ0FSJywnRVMnLCdHQiddXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY291bnRyaWVzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBjb250aWVuZSB1biBhcnJlZ2xvIGRlIHN0cmluZyBjdXlvIGNvbnRlbmlkbyBzb24gbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBhIGV4Y2x1aXIuXHJcbiAgICAgKiBAZXhhbXBsZSBbJ0dCJ11cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4Y2x1ZGVkQ291bnRyaWVzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY291bnRyaWVzIGRlYmUgY29udGVuZXIgbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBxdWUgc2UgcXVpZXJlIG1vc3RyYXJcclxuICAgICAqIEBleGFtcGxlIFsnQVInLCdFUycsJ0dCJ11cclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDb3VudHJpZXMgPSAoY291bnRyaWVzOiBzdHJpbmdbXSkgPT4gdGhpcy5jb3VudHJpZXMgPSBjb3VudHJpZXM7XHJcblxyXG4gICAgcHVibGljIGdldENvdW50cmllcyA9ICgpID0+IHRoaXMuY291bnRyaWVzO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBlc3RhIHZhcmlhYmxlIHNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIGxvcyBwYXJhbWV0cm9zIGN1YW5kbyBzZSBkZXNlYSBtb3N0cmFyXHJcbiAgICAgKiB2YXJpYW50ZXMgZWwgbGlzdGFkbyBkZSBwcm9kdWN0b3MuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ310eXBlIHRpcG8gZGUgb3B0aW9uc1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9Y29kZSBjb2RpZ28gZGUgb3B0aW9uc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufWRlZmF1bHRGaXJzdE9wdGlvbiBgdHJ1ZWAgdG9tYSBlbCBwcmltZXIgb3B0aW9uIGRlbCBwcm9kdWN0byBlbiBnZW5lcmFsXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59Y2hlY2tJZlN0b2NrIGB0cnVlYCBzZSByZWFsaXphIHVuIGNoZXF1ZW8gZGUgc2kgbGEgdmFyaWFudGUgdGllbmUgc3RvY2sgcGFyYSBtb3N0cmFybGFcclxuICAgICAqIEBleGFtcGxlICBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB7XHJcbiAgICAgICAgdHlwZTogJ2NvbG9yJyxcclxuICAgICAgICBjb2RlOiAnY29sb3InLFxyXG4gICAgICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UgLFxyXG4gICAgICAgIGNoZWNrSWZTdG9jazp0cnVlXHJcbiAgICAgICAgfSBgYGBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50OiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xyXG4gICAgICAgIHR5cGU6ICdjb2xvcicsXHJcbiAgICAgICAgY29kZTogJ2NvbG9yJyxcclxuICAgICAgICBkZWZhdWx0Rmlyc3RPcHRpb246IGZhbHNlLFxyXG4gICAgICAgIGNoZWNrSWZTdG9jazogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHNldFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSAodmFsdWU6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQpID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCxcclxuICAgICAgICAgICAgLi4udmFsdWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9ICgpID0+IHRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBxdWUgZmlsdHJvcyBkZWwgdGlwbyBgU29ydEZpbHRlcmAgc2UgcXVpZXJlIG1vc3RyYXIgZW4gbGEgdmlzdGEuXHJcbiAgICAgKiBTZSB1c2FuIGxvcyBjb2RpZ28gZGUgbG9zIGZpbHRyb3MgcGFyYSBpbmRpY2FyIGN1YWxlcyBzZSBkZWJlbiBtb3N0cmFyLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNvcnRGaWx0ZXJzOiBzdHJpbmdbXSA9IFsncHJpY2UnLCAnb3JkZXItYWxwaCcsICdyZWNlbnQnXVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJzQ29kZSBhcnJlZ2xvIGRlIHN0cmluZ3MgY29uIGxvcyBjb2RpZ29zIGRlIGxvcyBmaWx0cm9zLlxyXG4gICAgICogU2kgc2UgbGUgcGFzYSBlbCBwYXJhbWV0cm8gKiphbGwqKiBlc3RlIG1vc3RyYXJhIHRvZG9zLlxyXG4gICAgICogQGV4YW1wbGUgcHJpY2UgfCBvcmRlci1hbHBoIHwgcmVjZW50IHwgdXBkYXRlIHwgYWxsXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzZXRTb3J0RmlsdGVycyA9IChmaWx0ZXJzQ29kZTogc3RyaW5nW10gPSBbJ2FsbCddKSA9PiB0aGlzLnNvcnRGaWx0ZXJzID0gZmlsdGVyc0NvZGU7XHJcblxyXG4gICAgZ2V0U29ydEZpbHRlcnMgPSAoKSA9PiB0aGlzLnNvcnRGaWx0ZXJzO1xyXG5cclxuICAgIHByaXZhdGUgcG9zdGFsQ29kZVBhdHRlcm5zOiB7IFtrZXk6IHN0cmluZ106IHsgcGF0dGVybjogUmVnRXhwLCBlcnJvcktleTogc3RyaW5nIH0gfSA9IHtcclxuICAgICAgICAnQVInOiB7IHBhdHRlcm46IC9eWzAtOV17NH0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5hclwiIH0sXHJcbiAgICAgICAgJ1VZJzogeyBwYXR0ZXJuOiAvXlswLTldezV9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IudXlcIiB9LFxyXG4gICAgICAgICdHQic6IHsgcGF0dGVybjogL15bQS1aXXsxLDJ9WzAtOV1bQS1aMC05XT9cXHM/WzAtOV1bQS1aXXsyfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmdiXCIgfSxcclxuICAgICAgICAnRVMnOiB7IHBhdHRlcm46IC9eKD86MFsxLTldfFsxLTRdXFxkfDVbMC0yXSlcXGR7M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5lc1wiIH0sXHJcbiAgICAgICAgJ0JSJzogeyBwYXR0ZXJuOiAvXlswLTldezV9LVswLTldezN9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuYnJcIiB9LFxyXG4gICAgICAgICdGUic6IHsgcGF0dGVybjogL15bMC05XXs1fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmZyXCIgfSxcclxuICAgICAgICAnUFQnOiB7IHBhdHRlcm46IC9eWzAtOV17NH0tWzAtOV17M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5wdFwiIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGdldFBvc3RhbENvZGVQYXR0ZXJuKGNvdW50cnlDb2RlOiBzdHJpbmcpOiB7IHBhdHRlcm46IFJlZ0V4cCwgZXJyb3JLZXk6IHN0cmluZyB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0YWxDb2RlUGF0dGVybnNbY291bnRyeUNvZGVdIHx8IHsgcGF0dGVybjogL15bQS1aYS16MC05XFxzXFwtXSskLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5kZWZhdWx0XCIgfTtcclxuICAgIH1cclxufVxyXG5cclxuIl19
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVl0RCxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFTO0lBRWxCLFlBQW1CLFNBQTJCLEVBQVUsTUFBYyxFQUF5QixHQUFHO1FBQS9FLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUF5QixRQUFHLEdBQUgsR0FBRyxDQUFBO1FBRWpGLFdBQU0sR0FBRyxRQUFRLENBQUM7UUFDbEIsWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUM5QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUU1Qix5QkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBTyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpELHFCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUVuRSxrQkFBYSxHQUFXLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDckMscUJBQWdCLEdBQVcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckUsZ0ZBQWdGO1FBQ3hFLFlBQU8sR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxD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QVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQTtJQUVwRyxDQUFDO0lBQUEsQ0FBQztJQThIRixvQkFBb0IsQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztJQUNwSSxDQUFDO0NBQ0osQ0FBQTs7WUEvY2lDLGdCQUFnQjtZQUFrQixNQUFNOzRDQUFHLE1BQU0sU0FBQyxLQUFLOzs7QUFGNUUsU0FBUztJQUhyQixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0lBRzJFLFdBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0dBRjdFLFNBQVMsQ0FpZHJCO1NBamRZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VycmVuY3lDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvY3VycmVuY3lDb25maWcnO1xyXG5pbXBvcnQgeyBEZWZhdWx0RmlsdGVyLCBGaWx0ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyJztcclxuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wYXJhbXNJbnRlcmZhY2VzL3BhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQnO1xyXG50eXBlIGN1cnJlbmN5VHlwZSA9ICdFVVInIHwgJ0FSRycgfCAnVVNEJyB8ICdQWUcnIHwgJ1BFTicgfCAnU0VLJyB8ICdDVVNUT00nO1xyXG50eXBlIHBvc2l0aW9uVHlwZSA9ICdMJyB8ICdSJztcclxudHlwZSBjaGFubmVsVHlwZXMgPSAnYjJiJyB8ICdiMmIyYycgfCAnYjJjJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudikgeyB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTCA9ICdDSEFOTkVMJztcclxuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgY2hhbm5lbFNlbGVjdGVkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpO1xyXG4gICAgcHVibGljIGNoYW5uZWxDb25maWckID0gdGhpcy5jaGFubmVsQ29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdBUEkgPSAoY2hhbm5lbCkgPT4gJy9zaG9wLWFwaS8nICsgY2hhbm5lbCArICdjaGFubmVsJztcclxuXHJcbiAgICBwcml2YXRlIGJyb3dzZXJXaW5kb3c6IG9iamVjdCA9IHdpbmRvdyB8fCB7fTtcclxuICAgIHByaXZhdGUgYnJvd3NlcldpbmRvd0Vudjogb2JqZWN0ID0gdGhpcy5icm93c2VyV2luZG93WydfX2VudiddIHx8IHt9O1xyXG5cclxuICAgIC8vICAgICBwcml2YXRlIHVybEJhc2U6IHN0cmluZyA9ICdodHRwOi8vdGVzdGluZy5iYWNrZW5kLmVhc3ljb21tZXJjZXRlY2guY29tLyc7XHJcbiAgICBwcml2YXRlIHVybEJhc2U6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYXBpVXJsJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2FwaVVybCddIDogKHRoaXMuZW52LmFwaVVybCB8fCAnaHR0cDovL2JhY2tlbmQuZWFzeWNvbW1lcmNlLmRldnAvJyk7XHJcbiAgICBwcml2YXRlIHVybEFzc2V0czogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxBc3NldHMnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gOiAodGhpcy5lbnYudXJsQXNzZXRzIHx8IHRoaXMudXJsQmFzZSk7XHJcbiAgICBwcml2YXRlIHVybEZyb250ZW5kOiBzdHJpbmcgPSB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3VybEZyb250ZW5kJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3VybEZyb250ZW5kJ10gOiAodGhpcy5lbnYudXJsRnJvbnRlbmQgfHwgJ2h0dHBzOi8vZWxkZW4uZWFzeWNvbW1lcmNldGVjaC5jb20vJyk7XHJcbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpIDogdGhpcy5icm93c2VyV2luZG93RW52Wydsb2NhbGUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnbG9jYWxlJ10gOiAodGhpcy5lbnYubG9jYWxlIHx8ICdlc19BUicpO1xyXG4gICAgcHJpdmF0ZSBjaGFubmVsOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA6IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddID8gdGhpcy5icm93c2VyV2luZG93RW52WydjaGFubmVsJ10gOiAodGhpcy5lbnYuY2hhbm5lbCB8fCAnbWlub3Jpc3RhJylcclxuICAgIHByaXZhdGUgYmxvY2tzQ2FjaGVUaW1lOiBzdHJpbmcgPSB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2Jsb2Nrc0NhY2hlVGltZSddID8gdGhpcy5icm93c2VyV2luZG93RW52WydibG9ja3NDYWNoZVRpbWUnXSA6ICh0aGlzLmVudi5ibG9ja3NDYWNoZVRpbWUgfHwgbnVsbCk7XHJcblxyXG4gICAgcHJpdmF0ZSBtb2RhbENvbmZpZyA9IHsgdGl0bGU6ICdFeGFtcGxlJywgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC1kaWFsb2ctY2VudGVyZWQnLCBrZXlib2FyZDogZmFsc2UgfTtcclxuICAgIHNldE1vZGFsQ29uZmlnID0gKGNvbmZpZzogYW55KSA9PiB0aGlzLm1vZGFsQ29uZmlnID0gY29uZmlnO1xyXG4gICAgZ2V0TW9kYWxDb25maWcgPSAoKSA9PiB0aGlzLm1vZGFsQ29uZmlnO1xyXG5cclxuICAgIHByaXZhdGUgdmVyc2lvbjogc3RyaW5nID0gJ3YxJztcclxuXHJcbiAgICBwcml2YXRlIHJvdXRlcyA9IFsvXmhvbWUkL2csIC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nLCAvXmNvbnRhY3QkL2ddO1xyXG5cclxuICAgIC8qIEdldCByaWQgb2YgdGhpcyBBU0FQISAqL1xyXG4gICAgcHJpdmF0ZSBtYXN0ZXJDaGFubmVsID0gbnVsbFxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXN0ZXJDaGFubmVsID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5tYXN0ZXJDaGFubmVsKSB0aGlzLm1hc3RlckNoYW5uZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlckNoYW5uZWxcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TWFzdGVyQ2hhbm5lbCA9IGNoYW5uZWwgPT4ge1xyXG4gICAgICAgIHRoaXMubWFzdGVyQ2hhbm5lbCA9IGNoYW5uZWxcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnLCBjaGFubmVsKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNQcm9kdWN0aW9uID0gKCkgPT4gdGhpcy5icm93c2VyV2luZG93RW52Wydwcm9kdWN0aW9uJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3Byb2R1Y3Rpb24nXSA6ICh0aGlzLmVudi5wcm9kdWN0aW9uIHx8IGZhbHNlKTtcclxuXHJcbiAgICBzZXRVcmxCYXNlID0gKHVybCkgPT4gdGhpcy51cmxCYXNlID0gdXJsO1xyXG4gICAgc2V0VXJsQXNzZXRzID0gKHVybCkgPT4gdGhpcy51cmxBc3NldHMgPSB1cmw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gbmV4dCBGdW5jdGlvbiB0byBleGVjdXRlXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIFRoYXQgZnVuY3Rpb24gbmVlZHNcclxuICAgICAqXHJcbiAgICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiBwYXNzZWQgYXMgcGFyYW1zLCBpZiB0aGUgZnJvbnRlbmQgaXMgaW4gcHJvZHVjdGlvbiBtb2RlXHJcbiAgICAgKi9cclxuICAgIG9ubHlJZlByb2R1Y3Rpb24gPSAobmV4dCwgcGFyYW1zKSA9PiB0aGlzLmlzUHJvZHVjdGlvbigpICYmIG5leHQocGFyYW1zKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZ1ZWx2ZSBsYSB1cmwgYmFzZSBkb25kZSBzZSBhbG9qYW4gbG9zIGFyY2hpdm9zIG11bHRpbWVkaWFcclxuICAgICAqIEBwYXJhbSBwb3N0TWVkaWEgY2FycGV0YSBkb25kZSBzZSBndWFyZGFuIGxvcyBhcmNoaXZvc1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgbWVkaWFVcmwgPSAocG9zdE1lZGlhPzogc3RyaW5nKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIChwb3N0TWVkaWEgPyBwb3N0TWVkaWEgOiBcImltYWdlL1wiKTtcclxuICAgIG1lZGlhQmFubmVyVXJsID0gKCkgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyBcImJhbm5lci1pbWFnZS9cIjtcclxuICAgIG1lZGlhU3RvcmVVcmwgPSAoKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIFwic3RvcmUtaW1hZ2UvXCI7XHJcblxyXG4gICAgZ2V0UHJvZHVjdHNMaXN0Um91dGUgPSAoKSA9PiAnY29sbGVjdGlvbi8nO1xyXG5cclxuICAgIGdldFNlY3Rpb25zUm91dGUgPSAoKSA9PiAnc2VjdGlvbi8nO1xyXG5cclxuICAgIGdldFVybEJhc2UgPSAoKSA9PiB0aGlzLnVybEJhc2U7XHJcbiAgICBnZXRVcmxGcm9udGVuZCA9ICgpID0+IHRoaXMudXJsRnJvbnRlbmQ7XHJcblxyXG4gICAgZ2V0QmxvY2tzQ2FjaGVUaW1lID0gKCk6IG51bWJlciA9PiB0aGlzLmJsb2Nrc0NhY2hlVGltZSAmJiBwYXJzZUludCh0aGlzLmJsb2Nrc0NhY2hlVGltZSk7XHJcblxyXG4gICAgLy8gZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XHJcbiAgICAvLyBzZXRMb2NhbGUgPSAobG9jYWxlKSA9PiB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcclxuXHJcbiAgICBnZXRMb2NhbGUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2NhbGVUcmFuc2xhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxlKCkuc3BsaXQoJ18nKVswXVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMb2NhbGUgPSBsb2NhbGUgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxFLCBsb2NhbGUpXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxvY2FsZS5zcGxpdCgnXycpWzBdKVxyXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhbm5lbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWxcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q2hhbm5lbCA9IGNoYW5uZWwgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0hBTk5FTCwgY2hhbm5lbClcclxuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmVyc2lvbiA9ICgpID0+IHRoaXMudmVyc2lvbjtcclxuXHJcbiAgICBsb2dpbkV4dHJhRGF0YSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6ICdkZW1vX2NsaWVudCcsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6ICdzZWNyZXRfZGVtb19jbGllbnQnLFxyXG4gICAgICAgICAgICBncmFudF90eXBlOiAncGFzc3dvcmQnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzQ29sbGVjdGlvbiA9IChwYXRoKSA9PiAoL14oXFwvPyljb2xsZWN0aW9uKFxcLz8pKFtcXHdcXC5cXC9cXD9dKikkL2cpLnRlc3QocGF0aCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVdGlsaXRpZXNcclxuICAgICAqL1xyXG5cclxuICAgIG1vYmlsZSA9ICgpID0+IHdpbmRvdy5pbm5lcldpZHRoIDwgNzUwO1xyXG5cclxuICAgIHN0cmljdFR5cGVDaGFubmVsID0gKCkgPT4gdGhpcy5lbnYuc3RyaWN0VHlwZUNoYW5uZWwgfHwgJ2IyYjJjJztcclxuXHJcbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVsZW1lbnRvcyBwYXJhIG1hbmVqbyBkZSBsaXN0YSBkZSBydXRhcyByZXV0aWxpemFibGVzXHJcbiAgICAgKi9cclxuXHJcbiAgICBhZGRSb3V0ZVRvUmV1c2UgPSAocm91dGU6IFJlZ0V4cCkgPT4gcm91dGUgJiYgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XHJcblxyXG4gICAgcmVtb3ZlUm91dGVUb1JldXNlID0gKHJvdXRlOiBSZWdFeHApID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm91dGVzLmluZGV4T2Yocm91dGUpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJvdXRlc1RvUmV1c2UgPSAoKTogUmVnRXhwW10gPT4gdGhpcy5yb3V0ZXM7XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqICBAcHVibGljIGVqZW1wbG8gZGUgdXNvIDxpbWcgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uc3RzLmdldFJhdGluZ1N0YXIocHJvZHVjdC5yYXRpbmcsJ2Fzc2V0cy9pbWFnZXMvc3Rhci5wbmcnLCdhc3NldHMvaW1hZ2VzL25vdFN0YXIucG5nJylcIiBbc3JjXT1cIml0ZW1cIj5cclxuICAgICAqICBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgZGFkbyB1biB2YWxvciBlbnRyZSAxIC4uIDUsIHkgc3Rhcjogbm90U3RhcjpcclxuICAgICAqICAgICAgKGRlYmVuIHNlciBlbCBwYXRoIGRlbCBhcmNoaXZvIGxvY2FsIGEgbGEgaW1wbGVtZW50YWNpb24pLlxyXG4gICAgICogICAgICByZXRvcm5hIHVuIGFycmVnbG8gY29uIGNvbiBsYSB2YWxvcmFjaW9uIGNvcnJlc3BvbmRpZW50ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UmF0aW5nU3RhciA9IChyYXRpbmc6IGFueSwgc3RhcjogU3RyaW5nLCBub3RTdGFyOiBTdHJpbmcpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdXJsU3RhciA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgY2FudFN0YXIgPSBOdW1iZXIocmF0aW5nKSB8fCAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgNTsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgdXJsU3Rhci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbnRTdGFyID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub3RTdGFyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY2FudFN0YXItLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdXJsU3RhcjtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZ2V0UmF0aW5nU3RhciBwcm9kdWpvIHVuIGVycm9yIC0+IFwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpYyBlamVtcGxvIGRlIHVzbyAoa2V5cHJlc3MpPVwiaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucygkZXZlbnQsJ1swLTldezEsOX0nKVwiIGVuIGVsIERPTS5cclxuICAgICAqICBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgZGFkbyB1biBtYW5lamFuZG9yIGRlIGV2ZW50bywgeSB1bmEgZXhwcmVzaW9uIHJlZ3VsYXIgZXN0YSBlc1xyXG4gICAgICogICAgICAgICAgZXZhbHVhZGEgc29icmUgbG9zIHZhbG9yZXMgcXVlIGVsIG1hbmVqYWRvciBkZSBldmVudG9zIG5vcyBlbnZpYS5cclxuICAgICAqICAgICAgICAgIEVuIGVsIGNhc28gZW4gZWwgcXVlIHNlIGVudmllIGVsIHBhcmFtZXRybyAnY29uZGl0aW9uJyBlc3RlIHB1ZWRlIHNlciBwYXJhXHJcbiAgICAgKiAgICAgICAgICBhbnVsYXIgZWwgZXZlbnRvIGNvbW8gY29uZGljaW9uIGFkaWNpb25hbCBhIGxhIGV2YWx1YWNpb24gZGUgbGEgZW50cmFkYS5cclxuICAgICAqL1xyXG4gICAgaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucyA9IChlLCBwYXRyb24sIGNvbmRpdGlvbiA9IG51bGwpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdGVjbGEgPSAoZG9jdW1lbnQpID8gZS5rZXlDb2RlIDogZS53aGljaDtcclxuICAgICAgICAgICAgaWYgKHRlY2xhID09IDgpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgcGF0cm9uUmVnID0gbmV3IFJlZ0V4cChwYXRyb24pXHJcbiAgICAgICAgICAgIGxldCB0ZWNsYV9maW5hbCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGVjbGEpO1xyXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXRyb25SZWcudGVzdCh0ZWNsYV9maW5hbCkgJiYgY29uZGl0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRyb25SZWcudGVzdCh0ZWNsYV9maW5hbClcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucyBwcm9kdWpvIHVuIGVycm9yIC0+IFwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmVlZGxlcyAoYWd1amFzKSBvYmplY3QgY29uIGNsYXZlcyB2YWxvciBhIGZpbHRyYXJcclxuICAgICAqIEBwYXJhbSBoYXlzdGFjayAocGFqYXIpIG9iamVjdG8gZW4gZWwgcXVlIGJ1c2NhclxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvbiBmdW5jaW9uIHF1ZSBidXNjYSBlbiBlbCBoYXlzdGFjayAocGFqYXIpIHRvZG9zIGxvcyBvYmpldG9zIHF1ZSBjb250ZW50YW5cclxuICAgICAqIHRvZGFzIGxhcyBjbGF2ZXMgZGUgbG9zIG5lZWRsZXMoYWd1amFzKSBxdWUgY29udGVuZ2FuIGVsIG1pc21vIHZhbG9yXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zQWxsKG5lZWRsZXM6IG9iamVjdCwgaGF5c3RhY2s6IG9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoISFuZWVkbGVzICYmICEhaGF5c3RhY2spIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobmVlZGxlcykuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShoYXlzdGFjay5oYXNPd25Qcm9wZXJ0eSh2YWx1ZVswXSkgJiYgaGF5c3RhY2tbdmFsdWVbMF1dID09IHZhbHVlWzFdKSkgcmVzdWx0ID0gZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BpZWRhZCBxdWUgc2UgdXRpbGl6YSBwYXJhIHRvbWFyIGNvbW8gY29uZmlndXJhY2nDs24gcGFyYSBlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgdXRpbGl6YSBlbiBlbCBzaXRpby5cclxuICAgICAqIEVzdG9zIHZhbG9yZXMgc29uIHV0aWxpemFkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1cnJlbmN5OiBDdXJyZW5jeUNvbmZpZyA9IHtcclxuICAgICAgICBjb2RlOiAnQVJHJyxcclxuICAgICAgICBzeW1ib2w6ICckJyxcclxuICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxyXG4gICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyZWdsbyBkZSB2YWxvcmVzIHVzYWRvcyBwYXJhIGVsIHBpcGUgY3VycmVuY3lQcmljZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ0VVUicsXHJcbiAgICAgICAgICAgIHN5bWJvbDogJ+KCrCcsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnUmlnaHQnLFxyXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdBUkcnLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdBUlMnLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdVU0QnLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdQWUcnLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICdHcy4nLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxyXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ1BFTicsXHJcbiAgICAgICAgICAgIHN5bWJvbDogJ1MvJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdTRUsnLFxyXG4gICAgICAgICAgICBzeW1ib2w6ICdTRUsnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1JpZ2h0JyxcclxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgXVxyXG5cclxuICAgIHB1YmxpYyBzZXRDdXJyZW5jeVR5cGVDb25maWcgPSAoY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW5jeVR5cGVDb25maWcgPSBjdXJyZW5jeVR5cGVDb25maWc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZW1wbGF6YSBsb3MgdmFsb3JlcyBkZSB1bmEgbW9uZWRhLlxyXG4gICAgICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgVGlwbyBkZSBjdXJyZW5jeSBxdWUgc2UgZGVzZWEgbW9kaWZpY2FyXHJcbiAgICAgKiBAcGFyYW0gY3VzdG9tVHlwZSBMb3MgbnVldm9zIHZhbG9yZXMuIFRvZGFzIGxhcyBrZXkgc29uIG9wY2lvbmFsZXNcclxuICAgICAqIEBleGFtcGxlIGN1c3RvbVR5cGUgPSB7IGNvZGU6ICdBUkcnLCBzeW1ib2w6ICckJywgcG9zaXRpb246ICdMZWZ0JyAsIHdpdGhvdXREZWNpbWFsOiBmYWxzZSB9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXBsYWNlQ3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUZpbmQ6IGN1cnJlbmN5VHlwZSwgY3VzdG9tVHlwZTogQ3VycmVuY3lDb25maWcpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVuY3lUeXBlID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZCh0eXBlID0+IHR5cGUuY29kZSA9PSBjdXJyZW5jeVR5cGVGaW5kKVxyXG4gICAgICAgIGlmIChjdXJyZW5jeVR5cGUpIHtcclxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLnN5bWJvbCA9IGN1c3RvbVR5cGU/LnN5bWJvbCB8fCBjdXJyZW5jeVR5cGUuc3ltYm9sXHJcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5jb2RlID0gY3VzdG9tVHlwZT8uY29kZSB8fCBjdXJyZW5jeVR5cGUuY29kZVxyXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUucG9zaXRpb24gPSBjdXN0b21UeXBlPy5wb3NpdGlvbiB8fCBjdXJyZW5jeVR5cGUucG9zaXRpb25cclxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsID0gY3VzdG9tVHlwZT8ud2l0aG91dERlY2ltYWwgfHwgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vUmV2ZWVyIGVuIGVsIGZ1dHVybyBzaSBzZSBlbXBpZXphbiBhIGFncmVnYXIgb3RybyB0aXBvcyBkZSBtb25lZGFzXHJcbiAgICAgICAgLyogZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVR5cGVDb25maWcucHVzaCh7Li4uY3VzdG9tVHlwZSB9KVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3VycmVuY3lUeXBlRmluZCBEZWZpbmlyIGVsIGNvZGUgZGVsIHRpcG8gZGUgbW9uZWRhIHF1ZSBzZSBxdWllcmEgdXRpbGl6YXIuXHJcbiAgICAgKiBTaSBlbCB0aXBvIGVzIENVU1RPTSBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgc2VndW5kbyBwYXJhbWV0cm8gZG9uZGUgc2UgcHVlZGUgZGVmaW5pciBsYSBzaW1ib2xvZ8OtYSB5IHBvc2VzacOzbiBxdWUgc2UgcXVpZXJhLlxyXG4gICAgICogQHBhcmFtIGN1c3RvbVR5cGUgRm9ybWF0byBkZWwgcGFyw6FtZXRybyBlamVtcGxvIHsgY29kZTogJ0FSRycsIHN5bWJvbDogJyQnLCBwb3NpdGlvbjogJ0wnICwgd2l0aG91dERlY2ltYWxzOiBmYWxzZSB9ICxcclxuICAgICAqIHRvZGFzIGxhcyBrZXkgc29uIG9wY2lvbmFsZXMgeSBwb3IgZGVmZWN0byBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgZWplbXBsby5cclxuICAgICAqIEByZXR1cm5zIHNlIHJldG9ybmEgbGEgY29uZmlndXJhY2nDs24gcXVlIHNlIHNldGVvIGEgbGEgcHJvcGllZGFkIGN1cnJlbmN5IGRlbCBzZXJ2aWNpby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEN1cnJlbmN5ID0gKGN1cnJlbmN5VHlwZUZpbmQ6IGN1cnJlbmN5VHlwZSwgY3VzdG9tVHlwZT86IEN1cnJlbmN5Q29uZmlnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW5jeSA9IHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLmZpbmQoY3QgPT4gY3QuY29kZSA9PSBjdXJyZW5jeVR5cGVGaW5kLnRvVXBwZXJDYXNlKCkpIHx8IHRoaXMuY3VycmVuY3lcclxuICAgICAgICBjdXN0b21UeXBlICYmICh0aGlzLmN1cnJlbmN5ID0geyAuLi50aGlzLmN1cnJlbmN5LCAuLi5jdXN0b21UeXBlIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVuY3k7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIGRldnVlbHZlIHRydWUgc2kgZXhpc3RlIGVsIGVsZW1lbnRvIFwic2VhcmNoXCIgZW4gZWwgYXJyYXkgZGUgcGFyYW1ldHJvcyBcInBhcmFtc1wiXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBBcnJheSBkZSBwYXJhbWV0cm9zIGVudHJlIGxvcyBxdWUgYnVzY2FyXHJcbiAgICAgKiBAcGFyYW0gc2VhcmNoZWQgRWxlbWVudG8gcXVlIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIHByZWZpeCBwcmVmaWpvIGRlbCBzdHJpbmcgYSBidXNjYXIgKGVqZW1wbG86IFwibGlua19cIilcclxuICAgICAqIEBwYXJhbSBzdWZmaXggc3VmaWpvIGRlbCBzdHJpbmcgYSBidXNjYXIgKGVqZW1wbG86IFwibGlua19cIilcclxuICAgICAqIEBwYXJhbSBjYXNlc2Vuc2l0aXZlIGRldGVybWluYSBzaSBzZSBldmFsdWEgY29uIHNlbnNpYmlsaWRhZCBlbnRyZSBtYXl1c2N1bGEgeSBtaW51c2N1bGFcclxuICAgICAqIEByZXR1cm5zIHJldG9ybmEgdHJ1ZSBvIGZhbHNlIHNpIHNlIGVuY29udHJvIG8gbm8gZWwgcGFyYW1ldHJvIGVuIGVsIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYXNQYXJhbXMoXHJcbiAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgIHNlYXJjaGVkLFxyXG4gICAgICAgIHByZWZpeCA9ICcnLFxyXG4gICAgICAgIHN1ZmZpeCA9ICcnLFxyXG4gICAgICAgIGNhc2VzZW5zaXRpdmUgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhc2VzZW5zaXRpdmUgPyBwYXJhbXMuZmluZChwYXJhbSA9PiAocGFyYW0uY29kZSkudG9Mb3dlckNhc2UoKSA9PSAocHJlZml4ICsgc2VhcmNoZWQgKyBzdWZmaXgpLnRvTG93ZXJDYXNlKCkgfHwgKHBhcmFtLmNvZGUpLnRvTG93ZXJDYXNlKCkgPT0gKHNlYXJjaGVkKS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICA6IHBhcmFtcy5maW5kKHBhcmFtID0+IHBhcmFtLmNvZGUgPT0gKHByZWZpeCArIHNlYXJjaGVkICsgc3VmZml4KSB8fCBwYXJhbS5jb2RlID09IHNlYXJjaGVkKVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG1vZGlmeUNoYW5uZWxDb25maWcgPSBjaGFubmVsQ29uZmlnID0+IHtcclxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5jaGFubmVsIHx8IGNoYW5uZWxDb25maWcuY29kZSlcclxuICAgICAgICAgICAgdGhpcy5zZXRDaGFubmVsKGNoYW5uZWxDb25maWcuY2hhbm5lbCB8fCBjaGFubmVsQ29uZmlnLmNvZGUpXHJcblxyXG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmxvY2FsZSB8fCBjaGFubmVsQ29uZmlnLmxvY2FsZXMuY29kZSlcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGUoY2hhbm5lbENvbmZpZy5sb2NhbGUgfHwgY2hhbm5lbENvbmZpZy5sb2NhbGVzLmNvZGUpXHJcblxyXG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmN1cnJlbmN5IHx8IGNoYW5uZWxDb25maWcuYmFzZUN1cnJlbmN5KVxyXG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbmN5KGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXHJcblxyXG4gICAgICAgIHJldHVybiBjaGFubmVsQ29uZmlnO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG8gcXVlIHNlIGFwbGljYXJhbiBlbiBsYSBzZWNjaW9uICdDb2xsZWN0aW9uJ1xyXG4gICAgICogY3VhbmRvIHNlIGluZ3Jlc2EgYSBsYSBtaXNtYS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyczogRGVmYXVsdEZpbHRlcltdID0gW11cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXR0ZWEgZWwgdmFsb3IgZGUgbGEgdmFyaWFibGUgZGVmYXVsRmlsdGVycy5cclxuICAgICAqIEBwYXJhbSBmaWx0ZXJzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXREZWZhdWx0RmlsdGVycyA9IChmaWx0ZXJzOiBEZWZhdWx0RmlsdGVyW10pID0+IHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gZmlsdGVycztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEZpbHRlcnMgPSAoKTogRGVmYXVsdEZpbHRlcltdID0+IHRoaXMuZGVmYXVsdEZpbHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciB0YW50byBsb3MgZmlsdHJvcyBwb3IgZGVmZWN0b3MgcXVlIHlhIHNlcmFuIGFwbGljYWRvcywgY29tbyB0YW1iaWVuXHJcbiAgICAgKiBsb3MgZmlsdHJvcyBxdWUgc2UgbW9zdHJhcmFuIGVuIGxhIHNlY2Npb24gY29sbGVjdGlvbiwgc3Ugb3JkZW4sIGV0Yy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZyA9IHtcclxuICAgICAgICBkZWZhdWx0RmlsdGVyczogW10sXHJcbiAgICAgICAgZmlsdGVyczogWydjYXRlZ29yeScsICdhdHRyaWJ1dGVzJywgJ2R5bmFtaWNzJywgJ3ByaWNlX3JhbmdlJ11cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RmlsdGVyQ29uZmlnID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzID8gdGhpcy5maWx0ZXJDb25maWcuZGVmYXVsdEZpbHRlcnMgPSBmaWx0ZXJDb25maWcuZGVmYXVsdEZpbHRlcnMgOiBudWxsXHJcbiAgICAgICAgZmlsdGVyQ29uZmlnLmZpbHRlcnMgPyB0aGlzLmZpbHRlckNvbmZpZy5maWx0ZXJzID0gZmlsdGVyQ29uZmlnLmZpbHRlcnMgOiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZpbHRlckNvbmZpZyA9ICgpID0+IHRoaXMuZmlsdGVyQ29uZmlnLmZpbHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBjb250aWVuZSB1biBhcnJlZ2xvIGRlIHN0cmluZyBjdXlvIGNvbnRlbmlkbyBzb24gbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcy5cclxuICAgICAqIEBleGFtcGxlIFsnQVInLCdFUycsJ0dCJ11cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb3VudHJpZXM6IHN0cmluZ1tdID0gW11cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbnRpZW5lIHVuIGFycmVnbG8gZGUgc3RyaW5nIGN1eW8gY29udGVuaWRvIHNvbiBsb3MgY29kaWdvcyBkZSBsb3MgcGFpc2VzIGEgZXhjbHVpci5cclxuICAgICAqIEBleGFtcGxlIFsnR0InXVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhjbHVkZWRDb3VudHJpZXM6IHN0cmluZ1tdID0gW11cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb3VudHJpZXMgZGViZSBjb250ZW5lciBsb3MgY29kaWdvcyBkZSBsb3MgcGFpc2VzIHF1ZSBzZSBxdWllcmUgbW9zdHJhclxyXG4gICAgICogQGV4YW1wbGUgWydBUicsJ0VTJywnR0InXVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldENvdW50cmllcyA9IChjb3VudHJpZXM6IHN0cmluZ1tdKSA9PiB0aGlzLmNvdW50cmllcyA9IGNvdW50cmllcztcclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291bnRyaWVzID0gKCkgPT4gdGhpcy5jb3VudHJpZXM7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGVzdGEgdmFyaWFibGUgc2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIHBhcmFtZXRyb3MgY3VhbmRvIHNlIGRlc2VhIG1vc3RyYXJcclxuICAgICAqIHZhcmlhbnRlcyBlbCBsaXN0YWRvIGRlIHByb2R1Y3Rvcy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfXR5cGUgdGlwbyBkZSBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ31jb2RlIGNvZGlnbyBkZSBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59ZGVmYXVsdEZpcnN0T3B0aW9uIGB0cnVlYCB0b21hIGVsIHByaW1lciBvcHRpb24gZGVsIHByb2R1Y3RvIGVuIGdlbmVyYWxcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn1jaGVja0lmU3RvY2sgYHRydWVgIHNlIHJlYWxpemEgdW4gY2hlcXVlbyBkZSBzaSBsYSB2YXJpYW50ZSB0aWVuZSBzdG9jayBwYXJhIG1vc3RyYXJsYVxyXG4gICAgICogQGV4YW1wbGUgIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHtcclxuICAgICAgICB0eXBlOiAnY29sb3InLFxyXG4gICAgICAgIGNvZGU6ICdjb2xvcicsXHJcbiAgICAgICAgZGVmYXVsdEZpcnN0T3B0aW9uOiBmYWxzZSAsXHJcbiAgICAgICAgY2hlY2tJZlN0b2NrOnRydWVcclxuICAgICAgICB9IGBgYFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XHJcbiAgICAgICAgdHlwZTogJ2NvbG9yJyxcclxuICAgICAgICBjb2RlOiAnY29sb3InLFxyXG4gICAgICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UsXHJcbiAgICAgICAgY2hlY2tJZlN0b2NrOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9ICh2YWx1ZTogUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50LFxyXG4gICAgICAgICAgICAuLi52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKCkgPT4gdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIHNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIHF1ZSBmaWx0cm9zIGRlbCB0aXBvIGBTb3J0RmlsdGVyYCBzZSBxdWllcmUgbW9zdHJhciBlbiBsYSB2aXN0YS5cclxuICAgICAqIFNlIHVzYW4gbG9zIGNvZGlnbyBkZSBsb3MgZmlsdHJvcyBwYXJhIGluZGljYXIgY3VhbGVzIHNlIGRlYmVuIG1vc3RyYXIuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc29ydEZpbHRlcnM6IHN0cmluZ1tdID0gWydwcmljZScsICdvcmRlci1hbHBoJywgJ3JlY2VudCddXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZpbHRlcnNDb2RlIGFycmVnbG8gZGUgc3RyaW5ncyBjb24gbG9zIGNvZGlnb3MgZGUgbG9zIGZpbHRyb3MuXHJcbiAgICAgKiBTaSBzZSBsZSBwYXNhIGVsIHBhcmFtZXRybyAqKmFsbCoqIGVzdGUgbW9zdHJhcmEgdG9kb3MuXHJcbiAgICAgKiBAZXhhbXBsZSBwcmljZSB8IG9yZGVyLWFscGggfCByZWNlbnQgfCB1cGRhdGUgfCBhbGxcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHNldFNvcnRGaWx0ZXJzID0gKGZpbHRlcnNDb2RlOiBzdHJpbmdbXSA9IFsnYWxsJ10pID0+IHRoaXMuc29ydEZpbHRlcnMgPSBmaWx0ZXJzQ29kZTtcclxuXHJcbiAgICBnZXRTb3J0RmlsdGVycyA9ICgpID0+IHRoaXMuc29ydEZpbHRlcnM7XHJcblxyXG4gICAgcHJpdmF0ZSBwb3N0YWxDb2RlUGF0dGVybnM6IHsgW2tleTogc3RyaW5nXTogeyBwYXR0ZXJuOiBSZWdFeHAsIGVycm9yS2V5OiBzdHJpbmcgfSB9ID0ge1xyXG4gICAgICAgICdBUic6IHsgcGF0dGVybjogL15bMC05XXs0fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmFyXCIgfSxcclxuICAgICAgICAnVVknOiB7IHBhdHRlcm46IC9eWzAtOV17NX0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci51eVwiIH0sXHJcbiAgICAgICAgJ0dCJzogeyBwYXR0ZXJuOiAvXltBLVpdezEsMn1bMC05XVtBLVowLTldP1xccz9bMC05XVtBLVpdezJ9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZ2JcIiB9LFxyXG4gICAgICAgICdFUyc6IHsgcGF0dGVybjogL14oPzowWzEtOV18WzEtNF1cXGR8NVswLTJdKVxcZHszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmVzXCIgfSxcclxuICAgICAgICAnQlInOiB7IHBhdHRlcm46IC9eWzAtOV17NX0tWzAtOV17M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5iclwiIH0sXHJcbiAgICAgICAgJ0ZSJzogeyBwYXR0ZXJuOiAvXlswLTldezV9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZnJcIiB9LFxyXG4gICAgICAgICdQVCc6IHsgcGF0dGVybjogL15bMC05XXs0fS1bMC05XXszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLnB0XCIgfSxcclxuICAgIH07XHJcblxyXG4gICAgZ2V0UG9zdGFsQ29kZVBhdHRlcm4oY291bnRyeUNvZGU6IHN0cmluZyk6IHsgcGF0dGVybjogUmVnRXhwLCBlcnJvcktleTogc3RyaW5nIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RhbENvZGVQYXR0ZXJuc1tjb3VudHJ5Q29kZV0gfHwgeyBwYXR0ZXJuOiAvXltBLVphLXowLTlcXHNcXC1dKyQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmRlZmF1bHRcIiB9O1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
@@ -17,6 +17,9 @@ let SelectChannelEcComponent = class SelectChannelEcComponent extends ComponentH
17
17
  this.modalService = modalService;
18
18
  this.router = router;
19
19
  this.channels = [];
20
+ this.unloadHandler = () => {
21
+ this.authService.logout();
22
+ };
20
23
  this.navigateByUrl = () => {
21
24
  this.router.navigateByUrl('');
22
25
  };
@@ -30,7 +33,9 @@ let SelectChannelEcComponent = class SelectChannelEcComponent extends ComponentH
30
33
  this.bsModalRef = this.modalService.show(this.template, { class: 'modal modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });
31
34
  this.subsModal = this.modalService.onHide.subscribe(onClose => {
32
35
  this.bsModalRef = null;
36
+ window.removeEventListener('unload', this.unloadHandler);
33
37
  });
38
+ window.addEventListener('unload', this.unloadHandler);
34
39
  }
35
40
  };
36
41
  this.setSelect = (chanelSelect) => {
@@ -44,6 +49,7 @@ let SelectChannelEcComponent = class SelectChannelEcComponent extends ComponentH
44
49
  if (this.channels.find(chanel => chanel.selected)) {
45
50
  this.authService.channelAccess(this.channels.find(chanel => chanel.selected));
46
51
  this.bsModalRef.hide();
52
+ window.removeEventListener('unload', this.unloadHandler);
47
53
  }
48
54
  };
49
55
  }
@@ -60,6 +66,7 @@ let SelectChannelEcComponent = class SelectChannelEcComponent extends ComponentH
60
66
  var _a, _b;
61
67
  (_a = this.subs) === null || _a === void 0 ? void 0 : _a.unsubscribe();
62
68
  (_b = this.subsModal) === null || _b === void 0 ? void 0 : _b.unsubscribe();
69
+ window.removeEventListener('unload', this.unloadHandler);
63
70
  }
64
71
  };
65
72
  SelectChannelEcComponent.ctorParameters = () => [
@@ -79,4 +86,4 @@ SelectChannelEcComponent = __decorate([
79
86
  })
80
87
  ], SelectChannelEcComponent);
81
88
  export { SelectChannelEcComponent };
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNoYW5uZWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hdXRoLWVjL3NlbGVjdC1jaGFubmVsLWVjL3NlbGVjdC1jaGFubmVsLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUE4QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVTdELElBQWEsd0JBQXdCLEdBQXJDLE1BQWEsd0JBQXlCLFNBQVEsZUFBZTtJQVF6RCxZQUNXLFdBQXdCLEVBQ3ZCLFlBQTRCLEVBQzdCLE1BQWM7UUFFckIsS0FBSyxFQUFFLENBQUM7UUFKRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN2QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUxsQixhQUFRLEdBQUcsRUFBRSxDQUFBO1FBMkJwQixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQyxDQUFDLENBQUE7UUFFRCx1QkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7Z0JBQzdCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO2lCQUFNO2dCQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7Z0JBQ3ZKLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtnQkFDMUIsQ0FBQyxDQUFDLENBQUE7YUFDTDtRQUNMLENBQUMsQ0FBQTtRQUVELGNBQVMsR0FBRyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQy9FLG9CQUFvQjtZQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUE7UUFFRCxlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtnQkFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTthQUN6QjtRQUNMLENBQUMsQ0FBQTtJQWxERCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDbEcsR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLHVDQUFhLElBQWUsS0FBRSxRQUFRLEVBQUUsS0FBSyxJQUFFO1lBQ25ELENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7UUFDN0IsQ0FBQyxDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELFdBQVc7O1FBQ1AsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxXQUFXLEdBQUU7UUFDeEIsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxXQUFXLEdBQUU7SUFDakMsQ0FBQztDQW9DSixDQUFBOztZQTFEMkIsV0FBVztZQUNULGNBQWM7WUFDckIsTUFBTTs7QUFSRjtJQUF0QixTQUFTLENBQUMsVUFBVSxDQUFDOzBEQUFzQztBQUhuRCx3QkFBd0I7SUFOcEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLG1CQUFtQjtRQUM3Qiwya0RBQStDO1FBRS9DLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQzs7S0FDOUIsQ0FBQztHQUNXLHdCQUF3QixDQW1FcEM7U0FuRVksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVEhJU19FWFBSLCBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiwgQnNNb2RhbFNlcnZpY2UsIE1vZGFsRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XHJcbmltcG9ydCB7IEJvZHlFcnJvciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQvY2hlY2tvdXQtZXJyb3InO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2NoZWNrb3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzZWxlY3QtY2hhbm5lbC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ3NlbGVjdC1jaGFubmVsLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydzZWxlY3QtY2hhbm5lbC1lYy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQnNNb2RhbFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RDaGFubmVsRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmXHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZScpIHByb3RlY3RlZCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIHN1YnM6IFN1YnNjcmlwdGlvbjtcclxuICAgIHN1YnNNb2RhbDogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHVibGljIGNoYW5uZWxzID0gW11cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzID0gdGhpcy5hdXRoU2VydmljZS5jaGFubmVsc1VzZXIucGlwZShmaWx0ZXIocmVzID0+IHJlcyAhPSBudWxsICYmIHJlcy5sZW5ndGggPiAwKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVscyA9IHJlcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uKGl0ZW0gYXMgb2JqZWN0KSwgc2VsZWN0ZWQ6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3Vicz8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuc3Vic01vZGFsPy51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGVCeVVybCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcnKVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGhpcy50ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCAnLCBrZXlib2FyZDogZmFsc2UsIGJhY2tkcm9wOiAnc3RhdGljJywgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgdGhpcy5zdWJzTW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5vbkhpZGUuc3Vic2NyaWJlKG9uQ2xvc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic01vZGFsUmVmID0gbnVsbFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3QgPSAoY2hhbmVsU2VsZWN0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lJ10pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLm1hcChjaGFuZWwgPT4gY2hhbmVsLnNlbGVjdGVkID0gY2hhbmVsLmNvZGUgPT0gY2hhbmVsU2VsZWN0LmNvZGUpXHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2V0Q2hhbm5lbCgpXHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaGFubmVsID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWxzLmZpbmQoY2hhbmVsID0+IGNoYW5lbC5zZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuY2hhbm5lbEFjY2Vzcyh0aGlzLmNoYW5uZWxzLmZpbmQoY2hhbmVsID0+IGNoYW5lbC5zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxufSJdfQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNoYW5uZWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hdXRoLWVjL3NlbGVjdC1jaGFubmVsLWVjL3NlbGVjdC1jaGFubmVsLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUE4QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVTdELElBQWEsd0JBQXdCLEdBQXJDLE1BQWEsd0JBQXlCLFNBQVEsZUFBZTtJQVd6RCxZQUNXLFdBQXdCLEVBQ3ZCLFlBQTRCLEVBQzdCLE1BQWM7UUFFckIsS0FBSyxFQUFFLENBQUM7UUFKRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN2QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVJsQixhQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ1osa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUE7UUE0QkQsa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakMsQ0FBQyxDQUFBO1FBRUQsdUJBQWtCLEdBQUcs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QkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0F1Q0osQ0FBQTs7WUE5RDJCLFdBQVc7WUFDVCxjQUFjO1lBQ3JCLE1BQU07O0FBWEY7SUFBdEIsU0FBUyxDQUFDLFVBQVUsQ0FBQzswREFBc0M7QUFIbkQsd0JBQXdCO0lBTnBDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsMmtEQUErQztRQUUvQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7O0tBQzlCLENBQUM7R0FDVyx3QkFBd0IsQ0EwRXBDO1NBMUVZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRISVNfRVhQUiwgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL291dHB1dC9vdXRwdXRfYXN0JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJzTW9kYWxSZWYsIEJzTW9kYWxTZXJ2aWNlLCBNb2RhbERpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBCb2R5RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2NoZWNrb3V0L2NoZWNrb3V0LWVycm9yJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2VsZWN0LWNoYW5uZWwtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdzZWxlY3QtY2hhbm5lbC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnc2VsZWN0LWNoYW5uZWwtZWMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0JzTW9kYWxTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0Q2hhbm5lbEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZlxyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGUnKSBwcm90ZWN0ZWQgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBzdWJzOiBTdWJzY3JpcHRpb247XHJcbiAgICBzdWJzTW9kYWw6IFN1YnNjcmlwdGlvbjtcclxuICAgIHB1YmxpYyBjaGFubmVscyA9IFtdXHJcbiAgICBwcml2YXRlIHVubG9hZEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzID0gdGhpcy5hdXRoU2VydmljZS5jaGFubmVsc1VzZXIucGlwZShmaWx0ZXIocmVzID0+IHJlcyAhPSBudWxsICYmIHJlcy5sZW5ndGggPiAwKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVscyA9IHJlcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uKGl0ZW0gYXMgb2JqZWN0KSwgc2VsZWN0ZWQ6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3Vicz8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuc3Vic01vZGFsPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHRoaXMudW5sb2FkSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGVCeVVybCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcnKVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGhpcy50ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCAnLCBrZXlib2FyZDogZmFsc2UsIGJhY2tkcm9wOiAnc3RhdGljJywgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgdGhpcy5zdWJzTW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5vbkhpZGUuc3Vic2NyaWJlKG9uQ2xvc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic01vZGFsUmVmID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHRoaXMudW5sb2FkSGFuZGxlcik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCB0aGlzLnVubG9hZEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3QgPSAoY2hhbmVsU2VsZWN0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lJ10pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLm1hcChjaGFuZWwgPT4gY2hhbmVsLnNlbGVjdGVkID0gY2hhbmVsLmNvZGUgPT0gY2hhbmVsU2VsZWN0LmNvZGUpXHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2V0Q2hhbm5lbCgpXHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaGFubmVsID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWxzLmZpbmQoY2hhbmVsID0+IGNoYW5lbC5zZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuY2hhbm5lbEFjY2Vzcyh0aGlzLmNoYW5uZWxzLmZpbmQoY2hhbmVsID0+IGNoYW5lbC5zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKClcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHRoaXMudW5sb2FkSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn0iXX0=
@@ -132,7 +132,7 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
132
132
  this.ecOnInit();
133
133
  }
134
134
  actualizarCantidad(item, cantidad, stock, id) {
135
- var _a;
135
+ var _a, _b, _c;
136
136
  if (this.cartLoading) {
137
137
  return;
138
138
  }
@@ -152,10 +152,11 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
152
152
  newQuantity = Math.round(newQuantity / step) * step;
153
153
  }
154
154
  }
155
+ const keepSameComment = (_c = (_b = item) === null || _b === void 0 ? void 0 : _b.comments, (_c !== null && _c !== void 0 ? _c : undefined));
155
156
  if (id) {
156
157
  this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
157
158
  if (newQuantity > 0 && newQuantity <= stock) {
158
- this.cartService.updateItemQuantity(item, newQuantity);
159
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
159
160
  }
160
161
  else {
161
162
  this.toastrService.show('out-of-stock-actually');
@@ -166,7 +167,7 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
166
167
  }
167
168
  else {
168
169
  if (newQuantity > 0 && newQuantity <= stock) {
169
- this.cartService.updateItemQuantity(item, newQuantity);
170
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
170
171
  }
171
172
  else {
172
173
  this.toastrService.show('out-of-stock-actually');
@@ -428,4 +429,4 @@ CartEcComponent = __decorate([
428
429
  })
429
430
  ], CartEcComponent);
430
431
  export { CartEcComponent };
431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFzQmhELFlBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFURCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNyQixXQUFNLEdBQU4s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QUFDO0NBU0osQ0FBQTs7WUFyYTJCLFdBQVc7WUFDWCxXQUFXO1lBQ2IsU0FBUztZQUNILGVBQWU7WUFDeEIsTUFBTTtZQUNBLGNBQWM7WUFDVixZQUFZO1lBQ1gsaUJBQWlCO1lBQ2Qsb0JBQW9COztBQS9CNUMsZUFBZTtJQUwzQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsYUFBYTtRQUN2QixZQUF1Qzs7S0FFMUMsQ0FBQztHQUNXLGVBQWUsQ0E0YjNCO1NBNWJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XHJcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG1lZGlhVXJsID0gJyc7XHJcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcclxuICAgIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIHVwZGF0ZVN0b2NrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcclxuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXJ0TG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcclxuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xyXG5cclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcclxuXHJcbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXHJcbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcclxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXHJcbiAgICAgICAgdmFyIGlkID0gMTtcclxuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xyXG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcclxuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcclxuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcclxuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VNb2RhbChpZCkge1xyXG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSA/IHRoaXMucmVkaXJlY3RDaGVja291dCgpIDogdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFzQmhELFlBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFURCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNyQixXQUFNLEdBQU4s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QyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFHLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQztRQUNuRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0NBU0osQ0FBQTs7WUF2YTJCLFdBQVc7WUFDWCxXQUFXO1lBQ2IsU0FBUztZQUNILGVBQWU7WUFDeEIsTUFBTTtZQUNBLGNBQWM7WUFDVixZQUFZO1lBQ1gsaUJBQWlCO1lBQ2Qsb0JBQW9COztBQS9CNUMsZUFBZTtJQUwzQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsYUFBYTtRQUN2QixZQUF1Qzs7S0FFMUMsQ0FBQztHQUNXLGVBQWUsQ0E4YjNCO1NBOWJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XHJcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG1lZGlhVXJsID0gJyc7XHJcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcclxuICAgIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIHVwZGF0ZVN0b2NrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcclxuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXJ0TG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcclxuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xyXG5cclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGtlZXBTYW1lQ29tbWVudCA9IGl0ZW0/LmNvbW1lbnRzID8/IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7IC8vIEFjdHVhbGl6YSBsYSBwcm9waWVkYWQgdmluY3VsYWRhIGEgYFtkaXNhYmxlZF1gXHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSA+IDAgJiYgbmV3UXVhbnRpdHkgPD0gc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gRnVuY2nDs24gZGUgZmxlY2hhIHBhcmEgcHJlc2VydmFyIGVsIGNvbnRleHRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcclxuXHJcbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXHJcbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcclxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXHJcbiAgICAgICAgdmFyIGlkID0gMTtcclxuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xyXG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcclxuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcclxuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcclxuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VNb2RhbChpZCkge1xyXG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSA/IHRoaXMucmVkaXJlY3RDaGVja291dCgpIDogdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==