@sumaris-net/ngx-components 2.5.16-rc1 → 2.5.16-rc3

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.
@@ -311,25 +311,12 @@ export class PlatformService extends StartableService {
311
311
  console.info('[platform] Configuring i18n ...');
312
312
  // this language will be used as a fallback when a translation isn't found in the current language
313
313
  this.translate.setDefaultLang(this.environment.defaultLocale);
314
+ // apply locale immediately
315
+ this.applyLocale(this.environment.defaultLocale);
314
316
  // When locale changes, apply to date adapter
315
317
  this.registerSubscription(this.translate.onLangChange.subscribe(event => {
316
318
  if (event && event.lang) {
317
- // force 'en' as 'en_GB'
318
- if (event.lang === 'en') {
319
- event.lang = 'en_GB';
320
- }
321
- // config moment lib
322
- try {
323
- momentLocale(event.lang);
324
- console.debug('[platform] Use locale {' + event.lang + '}');
325
- }
326
- // If error, fallback to en
327
- catch (err) {
328
- momentLocale('en');
329
- console.warn('[platform] Unknown locale for moment lib. Using default [en]');
330
- }
331
- // Config date adapter
332
- this.dateAdapter.setLocale(momentLocale());
319
+ this.applyLocale(event.lang);
333
320
  }
334
321
  }));
335
322
  this.registerSubscription(this.settings.onChange.subscribe(data => {
@@ -354,6 +341,24 @@ export class PlatformService extends StartableService {
354
341
  }
355
342
  }));
356
343
  }
344
+ applyLocale(locale) {
345
+ // force 'en' as 'en_GB'
346
+ if (locale === 'en') {
347
+ locale = 'en_GB';
348
+ }
349
+ // config moment lib
350
+ try {
351
+ momentLocale(locale);
352
+ console.debug('[platform] Use locale {' + locale + '}');
353
+ }
354
+ // If error, fallback to en
355
+ catch (err) {
356
+ momentLocale('en');
357
+ console.warn('[platform] Unknown locale for moment lib. Using default [en]');
358
+ }
359
+ // Config date adapter
360
+ this.dateAdapter.setLocale(momentLocale());
361
+ }
357
362
  configureCache(online) {
358
363
  online = toBoolean(online, this.cache.isOnline());
359
364
  const cacheTTL = online ? 3600 /* 1h */ : 3600 * 24 * 30; /* 1 month */
@@ -490,4 +495,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
490
495
  }] }, { type: i13.Downloader, decorators: [{
491
496
  type: Optional
492
497
  }] }]; } });
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVUzRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUYsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUduRSxPQUFPLEVBQUMsSUFBSSxFQUFjLEVBQUUsRUFBZ0IsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBOEIsc0JBQXNCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENB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QUFFLElBQUk7Z0JBQ3JCLE9BQU87YUFDUixDQUFDLENBQUM7U0FDSjthQUNJLElBQUksTUFBTSxFQUFFO1lBQ2YsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxnQkFBZ0IsY0FBYyxJQUFJLENBQUM7YUFDL0M7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZCO2FBQ0k7WUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7OzZHQXRnQlUsZUFBZSx3WkF3QmhCLFdBQVc7aUhBeEJWLGVBQWUsY0FESCxNQUFNOzRGQUNsQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBeUIzQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHtQbGF0Zm9ybXN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge0NhY2hlU2VydmljZX0gZnJvbSAnaW9uaWMtY2FjaGUnO1xuaW1wb3J0IHtBdWRpb1Byb3ZpZGVyfSBmcm9tICcuLi8uLi9zaGFyZWQvYXVkaW8vYXVkaW8nO1xuaW1wb3J0IHtQbGF0Zm9ybSBhcyBDZGtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcblxuaW1wb3J0IHtpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VudGl0aWVzU3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlL2VudGl0aWVzLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2tpcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHtEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHl9IGZyb20gJ0Bpb25pYy1uYXRpdmUvZG93bmxvYWRlci9uZ3gnO1xuaW1wb3J0IHtTdGFydGFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtpc01vYmlsZSwgaXNXaW5kb3dzfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7VmVyc2lvblV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQge0ZpbGVzVXRpbHMsIE1pbWVUeXBlc30gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS51dGlscyc7XG5pbXBvcnQge1VyaVV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmkudXRpbHMnO1xuaW1wb3J0IHtTdG9yYWdlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7U3BsYXNoU2NyZWVufSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHtTdGF0dXNCYXJ9IGZyb20gJ0BjYXBhY2l0b3Ivc3RhdHVzLWJhcic7XG5pbXBvcnQge0Jyb3dzZXIsIE9wZW5PcHRpb25zfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHtLZXlib2FyZH0gZnJvbSAnQGNhcGFjaXRvci9rZXlib2FyZCc7XG5pbXBvcnQge0NhcGFjaXRvclBsdWdpbnN9IGZyb20gJy4uLy4uL3NoYXJlZC9jYXBhY2l0b3IvcGx1Z2lucyc7XG5pbXBvcnQge2xvY2FsZSBhcyBtb21lbnRMb2NhbGV9IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBBbmRyb2lkT3NFbnZpcm9ubWVudCA9IE9iamVjdC5mcmVlemUoe1xuICBESVJFQ1RPUllfRE9XTkxPQURTOiAnRG93bmxvYWQnLFxuICBESVJFQ1RPUllfRE9XTkxPQURTX09MRDogJ0Rvd25sb2FkcycsIC8vIE9sZCBuYW1lLCBmb3Igb2xkZXIgQW5kcm9pZCB2ZXJzaW9uXG4gIC8vIFRPRE86IGZpbmQgdmFsdWUgZm9yIHRoaXMuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9vcy9FbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShqYXZhLmlvLkZpbGUpXG4gIC8vIERJUkVDVE9SWV9NVVNJQyxcbiAgLy8gRElSRUNUT1JZX1BPRENBU1RTLFxuICAvLyBESVJFQ1RPUllfUklOR1RPTkVTLFxuICAvLyBESVJFQ1RPUllfQUxBUk1TLFxuICAvLyBESVJFQ1RPUllfTk9USUZJQ0FUSU9OUyxcbiAgLy8gRElSRUNUT1JZX1BJQ1RVUkVTLFxuICAvLyBESVJFQ1RPUllfTU9WSUVTLFxuICAvLyBESVJFQ1RPUllfRENJTSxcbiAgLy8gRElSRUNUT1JZX0RPQ1VNRU5UUyxcbiAgLy8gRElSRUNUT1JZX0FVRElPQk9PS1MsXG59KTtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1TZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIF9jb3Jkb3ZhOiBib29sZWFuO1xuICBwcml2YXRlIF9jYXBhY2l0b3I6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FuZHJvaWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lvczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG93bmxvYWRpbmdKb2JzOiBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNoZWNrQXBwVmVyc2lvblRpbWVyOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpb25pY1BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNka1BsYXRmb3JtOiBDZGtQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IE1vbWVudERhdGVBZGFwdGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW50aXRpZXNTdG9yYWdlOiBFbnRpdGllc1N0b3JhZ2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGU6IENhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIGF1ZGlvUHJvdmlkZXI6IEF1ZGlvUHJvdmlkZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZG93bmxvYWRlcjogRG93bmxvYWRlclxuICApIHtcbiAgICBzdXBlcihpb25pY1BsYXRmb3JtKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIGlzKHBsYXRmb3JtTmFtZTogUGxhdGZvcm1zKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybU5hbWUpIHtcbiAgICAgIGNhc2UgJ21vYmlsZSc6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiBpc01vYmlsZSh3aW5kb3cpO1xuICAgICAgY2FzZSAnbW9iaWxld2ViJzpcbiAgICAgICAgLy8gRXhjbHVkZSBXaW5kb3dzIHRvdWNoIHNjcmVlbnMgLSBzZWUgc3VtYXJpcy1hcHAgaXNzdWVzICMzMjMgYW5kICMzNDZcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5pcyhwbGF0Zm9ybU5hbWUpICYmICFpc1dpbmRvd3Mod2luZG93KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9tb2JpbGUpID8gdGhpcy5fbW9iaWxlIDogdGhpcy5pcygnbW9iaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgaW5zaWRlIGFuIEFuZHJvaWQgb3IgaU9zIEFwcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGtub3duIGlmIHRoZXJlIGlzIGNvcmRvdmEgZmVhdHVyZXNcbiAgICovXG4gIGlzQ2FwYWNpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYXBhY2l0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgaW5zaWRlIGFuIEFuZHJvaWQgb3IgaU9zIEFwcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGtub3duIGlmIHRoZXJlIGlzIGNvcmRvdmEgZmVhdHVyZXNcbiAgICovXG4gIGlzQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY29yZG92YTtcbiAgfVxuXG4gIGlzQW5kcm9pZENvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fY29yZG92YSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzSU9TQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW9zICYmIHRoaXMuX2NvcmRvdmEgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSXMgYSBuYXRpdmUgQXBwIChhbmQgTk9UIGEgbW9iaWxlIHdlYilcbiAgICovXG4gIGlzQXBwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQW5kcm9pZENvcmRvdmEoKSB8fCB0aGlzLmlzSU9TQ29yZG92YSgpO1xuICB9XG5cbiAgaXNXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzQXBwKCk7XG4gIH1cblxuICBpc01vYmlsZVdlYigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2JpbGUgJiYgdGhpcy5pc1dlYigpO1xuICB9XG5cbiAgZ2V0IGNhbkRvd25sb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvd25sb2FkZXIgJiYgdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCk7XG4gIH1cblxuICBnZXQgY2FuT3BlbkZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBUT0RPOiBmaXhtZSB1c2luZyBAY2FwYWNpdG9yL2ZpbGVzeXN0ZW0gP1xuICB9XG5cbiAgd2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLndpZHRoKCk7XG4gIH1cblxuICBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmhlaWdodCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgdGhpcy5hY2NvdW50U2VydmljZS50b2tlblR5cGUgPSB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5pcygnbW9iaWxlJyk7XG4gICAgICB0aGlzLl9jb3Jkb3ZhID0gdGhpcy5pcygnY29yZG92YScpO1xuICAgICAgdGhpcy5fY2FwYWNpdG9yID0gdGhpcy5pcygnY2FwYWNpdG9yJyk7XG4gICAgICB0aGlzLl9hbmRyb2lkID0gdGhpcy5pcygnYW5kcm9pZCcpO1xuICAgICAgdGhpcy5faW9zID0gdGhpcy5pcygnaW9zJyk7XG5cbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBEZXRlY3RlZCB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNvcmRvdmE6ICR7dGhpcy5fY29yZG92YX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCBhbmRyb2lkOiAke3RoaXMuX2FuZHJvaWR9LCBpb3M6ICR7dGhpcy5faW9zfWApO1xuXG4gICAgICAvLyBDb25maWd1cmUgQ1NTIGNsYXNzXG4gICAgICB0aGlzLmNvbmZpZ3VyZUdsb2JhbENzc0NsYXNzKHRoaXMuX21vYmlsZSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBDYXBhY2l0b3IgcGx1Z2luc1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0cmFuc2xhdGlvblxuICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcblxuICAgICAgLy8gQ29uZmlndXJlIGNhY2hlXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNhY2hlKCk7XG5cbiAgICAgIC8vIFN0YXJ0IHJvb3Qgc2VydmljZXNcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N0b3JhZ2UucmVhZHkoKSxcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLnJlYWR5KCksXG4gICAgICAgIHRoaXMuYXVkaW9Qcm92aWRlci5yZWFkeSgpXG4gICAgICBdKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgd2ViIGFwcCBoYXMgdXBkYXRlLCBhbmQgcmVsb2FkIHBhZ2UgaWYgbmVlZFxuICAgICAgaWYgKHRoaXMuaXNXZWIoKSAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFZlcnNpb24oe2NhblJlbG9hZDogdHJ1ZX0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBza2lwKDEpIC8vIEFscmVhZHkgZG9uZSBvbmNlLCBzbyB3ZSBza2lwIHRoZSBmaXJzdCBldmVudFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKHR5cGUgPT4gdGhpcy5jb25maWd1cmVDYWNoZSh0eXBlICE9PSAnbm9uZScpKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtIFtPS10ge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCBjYXBhY2l0b3I6ICR7dGhpcy5fY2FwYWNpdG9yfSwgd2ViOiAke3RoaXMuaXNXZWIoKX0sIGRvd25sb2FkZXI6ICR7dGhpcy5jYW5Eb3dubG9hZH19IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBVcGRhdGUgYXV0aGVudGljYXRpb24gdHlwZVxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZ1xuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKGNvbmZpZyA9PiBjb25maWc/LmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlKSxcbiAgICAgICAgICAgIGZpbHRlcihpc05vdE5pbE9yQmxhbmspLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKHRva2VuVHlwZSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCB0b2tlbiB0eXBlIHske3Rva2VuVHlwZX19YCk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gSGlkZSB0aGUgc3BsYXNoc2NyZWVuIChpZiBtb2JpbGUpIC0gYWZ0ZXIgMXMgLSBhbmQgcGxheSBzdGFydCBzb3VuZFxuICAgICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAgICAgICAvLyBQbGF5IHN0YXJ0dXAgc291bmRcbiAgICAgICAgICB0aGlzLmF1ZGlvUHJvdmlkZXIucGxheVN0YXJ0dXBTb3VuZCgpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgbmV3IHZlcnNpb24sIGV2ZXJ5IDEgbWluXG4gICAgICBjb25zdCBjaGVja0ludGVydmFsTXMgPSAodGhpcy5lbnZpcm9ubWVudC5jaGVja0FwcFZlcnNpb25JbnRlcnZhbEluU2Vjb25kcyB8fCAwKSAqIDEwMDA7XG4gICAgICBpZiAodGhpcy5pc1dlYigpICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbiAmJiBjaGVja0ludGVydmFsTXMgPiAwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRpbWVyKGNoZWNrSW50ZXJ2YWxNcywgY2hlY2tJbnRlcnZhbE1zKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB0aGlzLmNoZWNrQXBwVmVyc2lvbih7c2lsZW50OiB0cnVlLCBjYW5SZWxvYWQ6IGZhbHNlIC8qZG8gTk9UIGF1dG8gcmVsb2FkLCB3aGVuIGFwcCBpcyBzdGFydGVkKi99KSk7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXIgPSBzdWJzY3JpcHRpb247XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE1hbmFnZSBzdGFydHVwIGVycm9yXG4gICAgICByZXR1cm4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPcGVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBPcGVuaW5nIGxpbms6ICR7dXJsfWApO1xuICAgIGlmICh0aGlzLl9tb2JpbGUgJiYgdGhpcy5fY2FwYWNpdG9yKSB7XG4gICAgICBhd2FpdCBCcm93c2VyLm9wZW4oe3VybCwgLi4ub3B0c30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgb3B0cz8ud2luZG93TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG93bmxvYWRpbmdKb2IodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHVyaSk7XG4gIH1cblxuICBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4pOiBPYnNlcnZhYmxlPHN0cmluZ3x1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwncmVxdWVzdFxcJyBvciBcXCdyZXF1ZXN0LnVyaVxcJycpO1xuXG4gICAgaWYgKHRoaXMuY2FuRG93bmxvYWQpIHtcblxuICAgICAgLy8gQ2hlY2sgaWYgbm90IGFscmVhZHkgZG93bmxvYWRpbmcgZmlsZVxuICAgICAgbGV0IGpvYiQgPSB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHJlcXVlc3QudXJpKTtcbiAgICAgIGlmIChqb2IkKSByZXR1cm4gam9iJDtcblxuICAgICAgLy8gQ29tcHV0ZSBzdWJQYXRoIChmaW5hbCBmaWxlbmFtZSlcbiAgICAgIGxldCBzdWJQYXRoID0gcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXI/LnN1YlBhdGhcbiAgICAgICAgfHwgcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0Rpcj8uc3ViUGF0aFxuICAgICAgICB8fCByZXF1ZXN0LmZpbGVuYW1lIHx8IFVyaVV0aWxzLmdldEZpbGVuYW1lKHJlcXVlc3QudXJpKVxuICAgICAgICB8fCByZXF1ZXN0LnRpdGxlIHx8ICdkb3dubG9hZCc7XG5cbiAgICAgIHN1YlBhdGggPSBzdWJQYXRoLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBkaXJUeXBlOiBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTLFxuICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpcixcbiAgICAgICAgICAgIHN1YlBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0YXJ0IGRvd25sb2FkXG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIERvd25sb2FkaW5nLCB1c2luZyByZXF1ZXN0OiAnICsgSlNPTi5zdHJpbmdpZnkoZG93bmxvYWRSZXF1ZXN0KSk7XG4gICAgICBqb2IkID0gZnJvbSh0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0KSk7XG5cbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgcmVxdWVzdCB1cmlcbiAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5zZXQoZG93bmxvYWRSZXF1ZXN0LnVyaSwgam9iJCk7XG4gICAgICByZXR1cm4gam9iJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAobG9jYXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIEZpbGUgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYXQ6JyArIGxvY2F0aW9uKTtcbiAgICAgICAgICAgIC8vIEZvcmdldCBqb2JcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycikpO1xuICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZGVsZXRlKGRvd25sb2FkUmVxdWVzdC51cmkpO1xuXG4gICAgICAgICAgICAvLyBSZXRyeSB3aXRoIGFub3RoZXIgbG9jYXRpb24gLSBpc3N1ZSBpbiBvbGRlciBBbmRyb2lkIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIuZGlyVHlwZSA9IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFNfT0xEO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZChkb3dubG9hZFJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlR2xvYmFsQ3NzQ2xhc3MobW9iaWxlOiBib29sZWFuLCB3aW46IGFueSA9IHdpbmRvdykge1xuICAgIGlmIChtb2JpbGUpIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuXG4gICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICBpZiAoIW1vYmlsZSAmJiAod2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwbHQtbW9iaWxlJylcbiAgICAgIHx8IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygncGx0LW1vYmlsZXdlYicpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIEZvcmNlIGNsYXNzIGxpc3QgdG86IDxodG1sIGNsYXNzPVwicGx0LWRlc2t0b3BcIj4uIFdvcmthcm91bmQgZm9yIFdpbmRvd3MgdG91Y2ggc2NyZWVuLicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwbHQtbW9iaWxlJywncGx0LW1vYmlsZXdlYicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwbHQtZGVza3RvcCcpO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHBsdWdpbiA9IENhcGFjaXRvclBsdWdpbnMuU3RhdHVzQmFyO1xuICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7b3ZlcmxheTogZmFsc2V9KTtcblxuICAgICAgLy8gSGlkZSBhY2Nlc3NvcnkgYmFyIChpT1Mgb25seSlcbiAgICAgIGlmICh0aGlzLmlzKCdpb3MnKSkge1xuICAgICAgICBwbHVnaW4gPSBDYXBhY2l0b3JQbHVnaW5zLktleWJvYXJkO1xuICAgICAgICBhd2FpdCBLZXlib2FyZC5zZXRBY2Nlc3NvcnlCYXJWaXNpYmxlKHtpc1Zpc2libGU6IGZhbHNlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3BsYXRmb3JtXSBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbn0gcGx1Z2luOiAke2Vyci5tZXNzYWdlfHxlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICB9XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVUcmFuc2xhdGUoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGkxOG4gLi4uJyk7XG5cbiAgICAvLyB0aGlzIGxhbmd1YWdlIHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSB0cmFuc2xhdGlvbiBpc24ndCBmb3VuZCBpbiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG5cbiAgICAgICAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICAgICAgICBpZiAoZXZlbnQubGFuZyA9PT0gJ2VuJykge1xuICAgICAgICAgICAgZXZlbnQubGFuZyA9ICdlbl9HQic7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29uZmlnIG1vbWVudCBsaWJcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbW9tZW50TG9jYWxlKGV2ZW50LmxhbmcpO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBVc2UgbG9jYWxlIHsnICsgZXZlbnQubGFuZyArICd9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZXJyb3IsIGZhbGxiYWNrIHRvIGVuXG4gICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbW9tZW50TG9jYWxlKCdlbicpO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIFVua25vd24gbG9jYWxlIGZvciBtb21lbnQgbGliLiBVc2luZyBkZWZhdWx0IFtlbl0nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5zZXRMb2NhbGUobW9tZW50TG9jYWxlKCkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgaWYgKGRhdGEubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUgIT09IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShkYXRhLmxvY2FsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQXBwbHlpbmcgZGVmYXVsdCwgd2hlbiBzZXR0aW5ncyBoYXMgbm8gbG9jYWxlIHByb3BlcnR5IChob3RmaXggLSBsdWRvdmljLnBlY3F1b3RAZS1pcy5wcm8gLSAxNC8xMS8yMDIxIC0gc2luY2UgdjEuMjAuNDIpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gTm8gbG9jYWxlIGZvdW5kIGluIHNldHRpbmdzOiBhcHBseWluZyBkZWZhdWx0TG9jYWxlOiAnLCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFVzZSBhY2NvdW50J3Mgc2V0dGluZ3MsIChsaWtlIGxvY2FsZSksIHdoZW4gYWNjb3VudCBpbmhlcml0YW5jZSBlbmFibGVkXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbi5zdWJzY3JpYmUoYWNjb3VudCA9PiB7XG4gICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3VudFNldHRpbmdzID0gYWNjb3VudC5zZXR0aW5ncy5hc0xvY2FsU2V0dGluZ3MoKTtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KGFjY291bnRTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDYWNoZShvbmxpbmU/OiBib29sZWFuKSB7XG4gICAgb25saW5lID0gdG9Cb29sZWFuKG9ubGluZSwgdGhpcy5jYWNoZS5pc09ubGluZSgpKTtcbiAgICBjb25zdCBjYWNoZVRUTCA9IG9ubGluZSA/IDM2MDAgLyogMWggKi8gOiAzNjAwICogMjQgKiAzMDsgLyogMSBtb250aCAqL1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDb25maWd1cmluZyBjYWNoZSBbT0tdIHtvbmxpbmU6ICR7b25saW5lfSwgdGltZVRvTGl2ZTogJHtjYWNoZVRUTCAvIDM2MDB9aCwgb2ZmbGluZUludmFsaWRhdGU6IGZhbHNlfWApO1xuICAgIHRoaXMuY2FjaGUuc2V0RGVmYXVsdFRUTChjYWNoZVRUTCk7XG4gICAgdGhpcy5jYWNoZS5zZXRPZmZsaW5lSW52YWxpZGF0ZShmYWxzZSk7IC8vIERvIG5vdCBpbnZhbGlkYXRlIGNhY2hlIHdoZW4gb2ZmbGluZVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrQXBwVmVyc2lvbihvcHRzPzoge2NhblJlbG9hZD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKHRoaXMubmV0d29ya1NlcnZpY2Uub2ZmbGluZSB8fCAhdGhpcy5pc1dlYigpKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnN0IHNpbGVudCA9IG9wdHM/LnNpbGVudCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGNvbnN0IGNhbkF1dG9SZWxvYWQgPSAhb3B0cyB8fCBvcHRzLmNhblJlbG9hZCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbi4uLicpO1xuXG4gICAgY29uc3QgYWN0dWFsVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIE1pc3NpbmcgcmVxdWlyZWQgdmFsdWUgZm9yIFxcJ2Vudmlyb25tZW50LnZlcnNpb25cXCcuIENhbm5vdCBjaGVjayByZW1vdGUgYXBwIHZlcnNpb24uJyk7XG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpOyAvLyBTdG9wIHRpbWVyIGlmIGV4aXN0c1xuICAgICAgcmV0dXJuOyAvLyBTa2lwXG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3RlVmVyc2lvbiA9IGF3YWl0IHRoaXMubmV0d29ya1NlcnZpY2UuZ2V0QXBwVmVyc2lvbigpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocmVtb3RlVmVyc2lvbikpIHtcbiAgICAgIGlmIChwcm9kdWN0aW9uICYmICFzaWxlbnQpIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gQ2Fubm90IGxvYWQgcmVtb3RlIGFwcCB2ZXJzaW9uLiBTa2lwcGluZyB2ZXJzaW9uIGNoZWNrJyk7XG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpOyAvLyBTdG9wIHRpbWVyIGlmIGV4aXN0c1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHJlbW90ZVZlcnNpb24sIGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbiBbT0tdIHtyZW1vdGU6ICcke3JlbW90ZVZlcnNpb259JywgYWN0dWFsOiAnJHthY3R1YWxWZXJzaW9ufSd9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3ZXIgdmVyc2lvbiBleGlzdHNcbiAgICBsZXQgcmVsb2FkUGF0aCA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvWyZdP3ZlcnNpb249WzAtOS5dKy9naSwgJycpOyAvLyBSZW1vdmUgb2xkIHZlcnNpb24gaW4gcXVlcnkgcGFyYW1zXG4gICAgcmVsb2FkUGF0aCArPSAocmVsb2FkUGF0aC5pbmRleE9mKCc/JykgPT09IC0xKSA/ICc/JyA6ICcmJzsgLy8gQWRkIHF1ZXJ5IHBhcmFtIHNlcGFyYXRvclxuICAgIHJlbG9hZFBhdGggKz0gJ3ZlcnNpb249JyArIHJlbW90ZVZlcnNpb247IC8vIEFkZCB2ZXJzaW9uICh0byBhdm9pZCBhIHJlbG9hZCBpbmZpbml0ZSBsb29wKVxuXG4gICAgLy8gQWxyZWFkeSB0cnkgdG8gcmVsb2FkLCBidXQgdmVyc2lvbiBzdGlsbCBiYWRcbiAgICBpZiAocmVsb2FkUGF0aCA9PT0gbG9jYXRpb24uaHJlZikge1xuICAgICAgaWYgKGNhbkF1dG9SZWxvYWQpIGNvbnNvbGUuZXJyb3IoYFtwbGF0Zm9ybV0gUmVsb2FkZWQgcGFnZSBmYWlsZWQsIGJlY2F1c2UgdmVyc2lvbiBzdGlsbCBtaXNtYXRjaCEgUGxlYXNlIGNoZWNrIHZlcnNpb24uYXBwdXAgZmlsZSAoZXhwZWN0ZWQgYXBwIHZlcnNpb246ICR7YWN0dWFsVmVyc2lvbn0pYCk7XG4gICAgICAvLyBTdG9wIHRpbWVyLCB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybihgW3BsYXRmb3JtXSBNb3JlIHJlY2VudCB2ZXJzaW9uIGRldGVjdGVkIChyZW1vdGU6ICR7cmVtb3RlVmVyc2lvbn0sIGFjdHVhbDogJHthY3R1YWxWZXJzaW9ufWApO1xuXG4gICAgLy8gQXV0byByZWxvYWRcbiAgICBpZiAoY2FuQXV0b1JlbG9hZCkge1xuICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIFdpbGwgcmVsb2FkaW5nIGF0ICcgKyByZWxvYWRQYXRoKTtcbiAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgLy8gQXBwIHN0b3BcbiAgICB9XG4gICAgLy8gQXNrIHVzZXIgdG8gcmVsb2FkXG4gICAgZWxzZSB7XG4gICAgICAvLyBTdG9wIHRpbWVyLCB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAvLyBEaXNwbGF5IGEgcmVsb2FkIHRvYXN0XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdDT05GSVJNLlJFTE9BRF9BUFAnLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7dmVyc2lvbjogcmVtb3RlVmVyc2lvbiwgbmFtZTogdGhpcy5lbnZpcm9ubWVudC5uYW1lfSxcbiAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIFJlbG9hZCBidXR0b25cbiAgICAgICAgICB7dGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkJUTl9VUERBVEUnKSxcbiAgICAgICAgICAgIHNpZGU6ICdlbmQnLFxuICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKTogUHJvbWlzZTxIVE1MSW9uVG9hc3RFbGVtZW50PiB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnRcXCdzIGNvbnN0cnVjdG9yJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiByZXNvbHZlKHQpXG4gICAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25TdGFydHVwRXJyb3IoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBGYWlsZWQgc3RhcnRpbmcgdGhlIHBsYXRmb3JtISAnICsgSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgbGV0IG1lc3NhZ2UgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgIGNvbnN0IGRldGFpbHNNZXNzYWdlID0gZXJyICYmIChlcnIuZGV0YWlscyAmJiBlcnIuZGV0YWlscy5tZXNzYWdlIHx8IGVyci5kZXRhaWxzKTtcbiAgICAvLyBTZXQgc3BlY2lmaWMgZXJyb3Igd2hlbiBGaXJlZm94IGlzIGluIHByaXZhdGUgbW9kZSBvciBoaXN0b3J5IG5ldmVyIHJlbWVtYmVyZWQgKHNlZSBNYW50aXMgSWZyZW1lciAjNTY0NDEpXG4gICAgaWYgKGVyci5jb2RlID09PSAxMSAmJiB0aGlzLmNka1BsYXRmb3JtLkZJUkVGT1gpIHtcbiAgICAgIG1lc3NhZ2UgPSAnRVJST1IuRklSRUZPWF9OT19TVE9SQUdFJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlKSB7XG4gICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuaW5zdGFudChtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIHtjb2RlOiAke2Vyci5jb2RlfX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgRmF0YWwgZXJyb3I6IFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cXG5cXG57Y29kZTogJHtlcnIgJiYgZXJyLmNvZGUgfHwgJ251bGwnfSwgbWVzc2FnZTogXCIke21lc3NhZ2V9XCJ9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9hc3RDb250cm9sbGVyKSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgPGJyLz48c21hbGw+JHtkZXRhaWxzTWVzc2FnZX08L3NtYWxsPmA7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBtZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAod2luZG93KSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxue2NhdXNlOiBcIiR7ZGV0YWlsc01lc3NhZ2V9XCJ9YDtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hbGVydChtZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuZGV0YWlscykgY29uc29sZS5lcnJvcignY2F1c2UnLCBlcnIuZGV0YWlscyk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVUzRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUYsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUduRSxPQUFPLEVBQUMsSUFBSSxFQUFjLEVBQUUsRUFBZ0IsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBOEIsc0JBQXNCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENB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Q0FBQzthQUNwRDtZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDWixlQUFlLEVBQUUsSUFBSTtnQkFDckIsT0FBTzthQUNSLENBQUMsQ0FBQztTQUNKO2FBQ0ksSUFBSSxNQUFNLEVBQUU7WUFDZixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLGdCQUFnQixjQUFjLElBQUksQ0FBQzthQUMvQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkI7YUFDSTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQzs7NkdBNWdCVSxlQUFlLHdaQXdCaEIsV0FBVztpSEF4QlYsZUFBZSxjQURILE1BQU07NEZBQ2xCLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkF5QjNCLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0F1dGhUb2tlblR5cGV9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQge1BsYXRmb3Jtc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQge0F1ZGlvUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9hdWRpby9hdWRpbyc7XG5pbXBvcnQge1BsYXRmb3JtIGFzIENka1BsYXRmb3JtfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuXG5pbXBvcnQge2lzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RW50aXRpZXNTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBza2lwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtDT1JFX0NPTkZJR19PUFRJT05TfSBmcm9tICcuL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge01vbWVudERhdGVBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQge0Rvd25sb2FkZXIsIERvd25sb2FkUmVxdWVzdCwgTm90aWZpY2F0aW9uVmlzaWJpbGl0eX0gZnJvbSAnQGlvbmljLW5hdGl2ZS9kb3dubG9hZGVyL25neCc7XG5pbXBvcnQge1N0YXJ0YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2lzTW9iaWxlLCBpc1dpbmRvd3N9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHtWZXJzaW9uVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7RmlsZXNVdGlscywgTWltZVR5cGVzfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7VXJpVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtTcGxhc2hTY3JlZW59IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQge1N0YXR1c0Jhcn0gZnJvbSAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJztcbmltcG9ydCB7QnJvd3NlciwgT3Blbk9wdGlvbnN9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XG5pbXBvcnQge0tleWJvYXJkfSBmcm9tICdAY2FwYWNpdG9yL2tleWJvYXJkJztcbmltcG9ydCB7Q2FwYWNpdG9yUGx1Z2luc30gZnJvbSAnLi4vLi4vc2hhcmVkL2NhcGFjaXRvci9wbHVnaW5zJztcbmltcG9ydCB7bG9jYWxlIGFzIG1vbWVudExvY2FsZX0gZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNvbnN0IEFuZHJvaWRPc0Vudmlyb25tZW50ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIERJUkVDVE9SWV9ET1dOTE9BRFM6ICdEb3dubG9hZCcsXG4gIERJUkVDVE9SWV9ET1dOTE9BRFNfT0xEOiAnRG93bmxvYWRzJywgLy8gT2xkIG5hbWUsIGZvciBvbGRlciBBbmRyb2lkIHZlcnNpb25cbiAgLy8gVE9ETzogZmluZCB2YWx1ZSBmb3IgdGhpcy4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL29zL0Vudmlyb25tZW50I2dldEV4dGVybmFsU3RvcmFnZVN0YXRlKGphdmEuaW8uRmlsZSlcbiAgLy8gRElSRUNUT1JZX01VU0lDLFxuICAvLyBESVJFQ1RPUllfUE9EQ0FTVFMsXG4gIC8vIERJUkVDVE9SWV9SSU5HVE9ORVMsXG4gIC8vIERJUkVDVE9SWV9BTEFSTVMsXG4gIC8vIERJUkVDVE9SWV9OT1RJRklDQVRJT05TLFxuICAvLyBESVJFQ1RPUllfUElDVFVSRVMsXG4gIC8vIERJUkVDVE9SWV9NT1ZJRVMsXG4gIC8vIERJUkVDVE9SWV9EQ0lNLFxuICAvLyBESVJFQ1RPUllfRE9DVU1FTlRTLFxuICAvLyBESVJFQ1RPUllfQVVESU9CT09LUyxcbn0pO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NvcmRvdmE6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NhcGFjaXRvcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaW9zOiBib29sZWFuO1xuICBwcml2YXRlIF9kb3dubG9hZGluZ0pvYnM6IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY2hlY2tBcHBWZXJzaW9uVGltZXI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGlvbmljUGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgY2RrUGxhdGZvcm06IENka1BsYXRmb3JtLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnRpdGllc1N0b3JhZ2U6IEVudGl0aWVzU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkb3dubG9hZGVyOiBEb3dubG9hZGVyXG4gICkge1xuICAgIHN1cGVyKGlvbmljUGxhdGZvcm0pO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cbiAgaXMocGxhdGZvcm1OYW1lOiBQbGF0Zm9ybXMpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtTmFtZSkge1xuICAgICAgY2FzZSAnbW9iaWxlJzpcbiAgICAgICAgLy8gRXhjbHVkZSBXaW5kb3dzIHRvdWNoIHNjcmVlbnMgLSBzZWUgc3VtYXJpcy1hcHAgaXNzdWVzICMzMjMgYW5kICMzNDZcbiAgICAgICAgcmV0dXJuIGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgICBjYXNlICdtb2JpbGV3ZWInOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSkgJiYgIWlzV2luZG93cyh3aW5kb3cpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5pcyhwbGF0Zm9ybU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX21vYmlsZSkgPyB0aGlzLl9tb2JpbGUgOiB0aGlzLmlzKCdtb2JpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXkgaWYgb3BlbmVkIGhhcyBiZWVuIG9wZW5lZCBpbnNpZGUgYW4gQW5kcm9pZCBvciBpT3MgQXBwLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNDYXBhY2l0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcGFjaXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXkgaWYgb3BlbmVkIGhhcyBiZWVuIG9wZW5lZCBpbnNpZGUgYW4gQW5kcm9pZCBvciBpT3MgQXBwLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jb3Jkb3ZhO1xuICB9XG5cbiAgaXNBbmRyb2lkQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYW5kcm9pZCAmJiB0aGlzLl9jb3Jkb3ZhIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNJT1NDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pb3MgJiYgdGhpcy5fY29yZG92YSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyBhIG5hdGl2ZSBBcHAgKGFuZCBOT1QgYSBtb2JpbGUgd2ViKVxuICAgKi9cbiAgaXNBcHAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpIHx8IHRoaXMuaXNJT1NDb3Jkb3ZhKCk7XG4gIH1cblxuICBpc1dlYigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNBcHAoKTtcbiAgfVxuXG4gIGlzTW9iaWxlV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vYmlsZSAmJiB0aGlzLmlzV2ViKCk7XG4gIH1cblxuICBnZXQgY2FuRG93bmxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZG93bmxvYWRlciAmJiB0aGlzLmlzQW5kcm9pZENvcmRvdmEoKTtcbiAgfVxuXG4gIGdldCBjYW5PcGVuRmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIFRPRE86IGZpeG1lIHVzaW5nIEBjYXBhY2l0b3IvZmlsZXN5c3RlbSA/XG4gIH1cblxuICB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0ud2lkdGgoKTtcbiAgfVxuXG4gIGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaGVpZ2h0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0uLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLmlzKCdtb2JpbGUnKTtcbiAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICB0aGlzLl9jYXBhY2l0b3IgPSB0aGlzLmlzKCdjYXBhY2l0b3InKTtcbiAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLmlzKCdhbmRyb2lkJyk7XG4gICAgICB0aGlzLl9pb3MgPSB0aGlzLmlzKCdpb3MnKTtcblxuICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIERldGVjdGVkIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgY29yZG92YTogJHt0aGlzLl9jb3Jkb3ZhfSwgY2FwYWNpdG9yOiAke3RoaXMuX2NhcGFjaXRvcn0sIGFuZHJvaWQ6ICR7dGhpcy5fYW5kcm9pZH0sIGlvczogJHt0aGlzLl9pb3N9YCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBDU1MgY2xhc3NcbiAgICAgIHRoaXMuY29uZmlndXJlR2xvYmFsQ3NzQ2xhc3ModGhpcy5fbW9iaWxlKTtcblxuICAgICAgLy8gQ29uZmlndXJlIENhcGFjaXRvciBwbHVnaW5zXG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKTtcblxuICAgICAgLy8gQ29uZmlndXJlIHRyYW5zbGF0aW9uXG4gICAgICB0aGlzLmNvbmZpZ3VyZVRyYW5zbGF0ZSgpO1xuXG4gICAgICAvLyBDb25maWd1cmUgY2FjaGVcbiAgICAgIHRoaXMuY29uZmlndXJlQ2FjaGUoKTtcblxuICAgICAgLy8gU3RhcnQgcm9vdCBzZXJ2aWNlc1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLmVudGl0aWVzU3RvcmFnZS5yZWFkeSgpLFxuICAgICAgICB0aGlzLnNldHRpbmdzLnJlYWR5KCksXG4gICAgICAgIHRoaXMubmV0d29ya1NlcnZpY2UucmVhZHkoKSxcbiAgICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KClcbiAgICAgIF0pO1xuXG4gICAgICAvLyBDaGVjayBpZiB3ZWIgYXBwIGhhcyB1cGRhdGUsIGFuZCByZWxvYWQgcGFnZSBpZiBuZWVkXG4gICAgICBpZiAodGhpcy5pc1dlYigpICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwVmVyc2lvbih7Y2FuUmVsb2FkOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSBjb25maWd1cmF0aW9uIHdoZW4gbmV0d29yayBjaGFuZ2VkXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXAoMSkgLy8gQWxyZWFkeSBkb25lIG9uY2UsIHNvIHdlIHNraXAgdGhlIGZpcnN0IGV2ZW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUodHlwZSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0gW09LXSB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCB3ZWI6ICR7dGhpcy5pc1dlYigpfSwgZG93bmxvYWRlcjogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhdXRoZW50aWNhdGlvbiB0eXBlXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoY29uZmlnID0+IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGUpLFxuICAgICAgICAgICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUodG9rZW5UeXBlID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdG9rZW5UeXBlO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBIaWRlIHRoZSBzcGxhc2hzY3JlZW4gKGlmIG1vYmlsZSkgLSBhZnRlciAxcyAtIGFuZCBwbGF5IHN0YXJ0IHNvdW5kXG4gICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZFxuICAgICAgICAgIHRoaXMuYXVkaW9Qcm92aWRlci5wbGF5U3RhcnR1cFNvdW5kKCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBuZXcgdmVyc2lvbiwgZXZlcnkgMSBtaW5cbiAgICAgIGNvbnN0IGNoZWNrSW50ZXJ2YWxNcyA9ICh0aGlzLmVudmlyb25tZW50LmNoZWNrQXBwVmVyc2lvbkludGVydmFsSW5TZWNvbmRzIHx8IDApICogMTAwMDtcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIGNoZWNrSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGltZXIoY2hlY2tJbnRlcnZhbE1zLCBjaGVja0ludGVydmFsTXMpXG4gICAgICAgICAgLnN1YnNjcmliZShfID0+IHRoaXMuY2hlY2tBcHBWZXJzaW9uKHtzaWxlbnQ6IHRydWUsIGNhblJlbG9hZDogZmFsc2UgLypkbyBOT1QgYXV0byByZWxvYWQsIHdoZW4gYXBwIGlzIHN0YXJ0ZWQqL30pKTtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lciA9IHN1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgLy8gTWFuYWdlIHN0YXJ0dXAgZXJyb3JcbiAgICAgIHJldHVybiB0aGlzLm9uU3RhcnR1cEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb3Blbih1cmw6IHN0cmluZywgb3B0cz86IE9wZW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIE9wZW5pbmcgbGluazogJHt1cmx9YCk7XG4gICAgaWYgKHRoaXMuX21vYmlsZSAmJiB0aGlzLl9jYXBhY2l0b3IpIHtcbiAgICAgIGF3YWl0IEJyb3dzZXIub3Blbih7dXJsLCAuLi5vcHRzfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsLCBvcHRzPy53aW5kb3dOYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXREb3dubG9hZGluZ0pvYih1cmk6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5nZXQodXJpKTtcbiAgfVxuXG4gIGRvd25sb2FkKHJlcXVlc3Q6IHt1cmk6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSAmIFBhcnRpYWw8RG93bmxvYWRSZXF1ZXN0Pik6IE9ic2VydmFibGU8c3RyaW5nfHVuZGVmaW5lZD4ge1xuICAgIGlmICghcmVxdWVzdCB8fCAhcmVxdWVzdC51cmkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdyZXF1ZXN0XFwnIG9yIFxcJ3JlcXVlc3QudXJpXFwnJyk7XG5cbiAgICBpZiAodGhpcy5jYW5Eb3dubG9hZCkge1xuXG4gICAgICAvLyBDaGVjayBpZiBub3QgYWxyZWFkeSBkb3dubG9hZGluZyBmaWxlXG4gICAgICBsZXQgam9iJCA9IHRoaXMuX2Rvd25sb2FkaW5nSm9icy5nZXQocmVxdWVzdC51cmkpO1xuICAgICAgaWYgKGpvYiQpIHJldHVybiBqb2IkO1xuXG4gICAgICAvLyBDb21wdXRlIHN1YlBhdGggKGZpbmFsIGZpbGVuYW1lKVxuICAgICAgbGV0IHN1YlBhdGggPSByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0Rpcj8uc3ViUGF0aFxuICAgICAgICB8fCByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyPy5zdWJQYXRoXG4gICAgICAgIHx8IHJlcXVlc3QuZmlsZW5hbWUgfHwgVXJpVXRpbHMuZ2V0RmlsZW5hbWUocmVxdWVzdC51cmkpXG4gICAgICAgIHx8IHJlcXVlc3QudGl0bGUgfHwgJ2Rvd25sb2FkJztcblxuICAgICAgc3ViUGF0aCA9IHN1YlBhdGgudG9Mb3dlckNhc2UoKVxuICAgICAgICAvLyBSZW1vdmUgc3BhY2VzXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7XG5cbiAgICAgIC8vIEZvcmNlIEFQSyB0byBmaW5pc2ggd2l0aCAnLmFwaydcbiAgICAgIGlmIChyZXF1ZXN0Lm1pbWVUeXBlID09PSBNaW1lVHlwZXMuQU5EUk9JRF9BUEsgJiYgIXN1YlBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgIHN1YlBhdGggKz0gJy5hcGsnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkb3dubG9hZFJlcXVlc3QgPSA8RG93bmxvYWRSZXF1ZXN0PntcbiAgICAgICAgdmlzaWJsZUluRG93bmxvYWRzVWk6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvblZpc2liaWxpdHk6IE5vdGlmaWNhdGlvblZpc2liaWxpdHkuVmlzaWJsZU5vdGlmeUNvbXBsZXRlZCxcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgZmlsZW5hbWU6IHVuZGVmaW5lZCwgLy8gRm9yY2UgdW5zZXRcbiAgICAgICAgZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyOiAhcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpclxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgZGlyVHlwZTogQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEUyxcbiAgICAgICAgICAgIC4uLnJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyLFxuICAgICAgICAgICAgc3ViUGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXI6IHJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyLFxuICAgICAgICAgICAgc3ViUGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgLy8gU3RhcnQgZG93bmxvYWRcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gRG93bmxvYWRpbmcsIHVzaW5nIHJlcXVlc3Q6ICcgKyBKU09OLnN0cmluZ2lmeShkb3dubG9hZFJlcXVlc3QpKTtcbiAgICAgIGpvYiQgPSBmcm9tKHRoaXMuZG93bmxvYWRlci5kb3dubG9hZChkb3dubG9hZFJlcXVlc3QpKTtcblxuICAgICAgLy8gUmVtZW1iZXIgdGhpcyByZXF1ZXN0IHVyaVxuICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLnNldChkb3dubG9hZFJlcXVlc3QudXJpLCBqb2IkKTtcbiAgICAgIHJldHVybiBqb2IkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcChsb2NhdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gRmlsZSBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBhdDonICsgbG9jYXRpb24pO1xuICAgICAgICAgICAgLy8gRm9yZ2V0IGpvYlxuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLmRlbGV0ZShkb3dubG9hZFJlcXVlc3QudXJpKTtcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIFVuYWJsZSB0byBkb3dubG9hZDogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSk7XG4gICAgICAgICAgICAvLyBGb3JnZXQgdGhlIHJlcXVlc3RcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG5cbiAgICAgICAgICAgIC8vIFJldHJ5IHdpdGggYW5vdGhlciBsb2NhdGlvbiAtIGlzc3VlIGluIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAgICAgICAgICAgaWYgKGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXI/LmRpclR5cGUgPT09IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMpIHtcbiAgICAgICAgICAgICAgZG93bmxvYWRSZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0Rpci5kaXJUeXBlID0gQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEU19PTEQ7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayAoaWYgbm90IEFuZHJvaWQgYW5kIENhcGFjaXRvcik6IG9wZW5pbmcgdGhlIFVSSVxuICAgIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gZG93bmxvYWQgdW5kZXIgaU9TIChzZWUgaHR0cHM6Ly93d3cuYy1zaGFycGNvcm5lci5jb20vYXJ0aWNsZS9ob3ctdG8tZG93bmxvYWQtYS1maWxlLXVzaW5nLWZpbGUtdHJhbnNmZXItcGx1Z2luLWluLWlvbmljLTMvKVxuICAgIGVsc2Uge1xuICAgICAgRmlsZXNVdGlscy5kb3dubG9hZFVyaShyZXF1ZXN0LnVyaSwgcmVxdWVzdC5maWxlbmFtZSk7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb25maWd1cmVHbG9iYWxDc3NDbGFzcyhtb2JpbGU6IGJvb2xlYW4sIHdpbjogYW55ID0gd2luZG93KSB7XG4gICAgaWYgKG1vYmlsZSkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXG5cbiAgICAvLyBXb3JrYXJvdW5kLCBmb3IgTVMgV2luZG93cyB0b3VjaCBzY3JlZW4gKGRldGVjdGVkIGFzIG1vYmlsZSwgYnV0IGZvcmNlZCBhcyBkZXNrdG9wKVxuICAgIGlmICghbW9iaWxlICYmICh3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3BsdC1tb2JpbGUnKVxuICAgICAgfHwgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdwbHQtbW9iaWxld2ViJykpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gRm9yY2UgY2xhc3MgbGlzdCB0bzogPGh0bWwgY2xhc3M9XCJwbHQtZGVza3RvcFwiPi4gV29ya2Fyb3VuZCBmb3IgV2luZG93cyB0b3VjaCBzY3JlZW4uJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3BsdC1tb2JpbGUnLCdwbHQtbW9iaWxld2ViJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BsdC1kZXNrdG9wJyk7XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucygpIHtcbiAgICBpZiAoIXRoaXMuX2NhcGFjaXRvcikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgQ2FwYWNpdG9yIHBsdWdpbnMuLi4nKTtcblxuICAgIGxldCBwbHVnaW46IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgcGx1Z2luID0gQ2FwYWNpdG9yUGx1Z2lucy5TdGF0dXNCYXI7XG4gICAgICBhd2FpdCBTdGF0dXNCYXIuc2V0T3ZlcmxheXNXZWJWaWV3KHtvdmVybGF5OiBmYWxzZX0pO1xuXG4gICAgICAvLyBIaWRlIGFjY2Vzc29yeSBiYXIgKGlPUyBvbmx5KVxuICAgICAgaWYgKHRoaXMuaXMoJ2lvcycpKSB7XG4gICAgICAgIHBsdWdpbiA9IENhcGFjaXRvclBsdWdpbnMuS2V5Ym9hcmQ7XG4gICAgICAgIGF3YWl0IEtleWJvYXJkLnNldEFjY2Vzc29yeUJhclZpc2libGUoe2lzVmlzaWJsZTogZmFsc2V9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbcGxhdGZvcm1dIEVycm9yIHdoaWxlIGNvbmZpZ3VyaW5nICR7cGx1Z2lufSBwbHVnaW46ICR7ZXJyLm1lc3NhZ2V8fGVycn1cXG4ke2Vycj8ub3JpZ2luYWxTdGFjayB8fCBKU09OLnN0cmluZ2lmeShlcnIpfWApO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAvLyBhcHBseSBsb2NhbGUgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmFwcGx5TG9jYWxlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG4gICAgICAgICAgdGhpcy5hcHBseUxvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2Uuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGlmIChkYXRhLmxvY2FsZSkge1xuICAgICAgICAgICAgaWYgKGRhdGEubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykge1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoZGF0YS5sb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFwcGx5aW5nIGRlZmF1bHQsIHdoZW4gc2V0dGluZ3MgaGFzIG5vIGxvY2FsZSBwcm9wZXJ0eSAoaG90Zml4IC0gbHVkb3ZpYy5wZWNxdW90QGUtaXMucHJvIC0gMTQvMTEvMjAyMSAtIHNpbmNlIHYxLjIwLjQyKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIE5vIGxvY2FsZSBmb3VuZCBpbiBzZXR0aW5nczogYXBwbHlpbmcgZGVmYXVsdExvY2FsZTogJywgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKVxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIHNldHRpbmdzLCAobGlrZSBsb2NhbGUpLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZFxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKGFjY291bnQgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncyAmJiB0aGlzLnNldHRpbmdzLnNldHRpbmdzLmFjY291bnRJbmhlcml0YW5jZSkge1xuICAgICAgICAgIGNvbnN0IGFjY291bnRTZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MuYXNMb2NhbFNldHRpbmdzKCk7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5hcHBseShhY2NvdW50U2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlMb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICBpZiAobG9jYWxlID09PSAnZW4nKSB7XG4gICAgICBsb2NhbGUgPSAnZW5fR0InO1xuICAgIH1cblxuICAgIC8vIGNvbmZpZyBtb21lbnQgbGliXG4gICAgdHJ5IHtcbiAgICAgIG1vbWVudExvY2FsZShsb2NhbGUpO1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBVc2UgbG9jYWxlIHsnICsgbG9jYWxlICsgJ30nKTtcbiAgICB9XG4gICAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIG1vbWVudExvY2FsZSgnZW4nKTtcbiAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBVbmtub3duIGxvY2FsZSBmb3IgbW9tZW50IGxpYi4gVXNpbmcgZGVmYXVsdCBbZW5dJyk7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlnIGRhdGUgYWRhcHRlclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKG1vbWVudExvY2FsZSgpKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNhY2hlKG9ubGluZT86IGJvb2xlYW4pIHtcbiAgICBvbmxpbmUgPSB0b0Jvb2xlYW4ob25saW5lLCB0aGlzLmNhY2hlLmlzT25saW5lKCkpO1xuICAgIGNvbnN0IGNhY2hlVFRMID0gb25saW5lID8gMzYwMCAvKiAxaCAqLyA6IDM2MDAgKiAyNCAqIDMwOyAvKiAxIG1vbnRoICovXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGNhY2hlIFtPS10ge29ubGluZTogJHtvbmxpbmV9LCB0aW1lVG9MaXZlOiAke2NhY2hlVFRMIC8gMzYwMH1oLCBvZmZsaW5lSW52YWxpZGF0ZTogZmFsc2V9YCk7XG4gICAgdGhpcy5jYWNoZS5zZXREZWZhdWx0VFRMKGNhY2hlVFRMKTtcbiAgICB0aGlzLmNhY2hlLnNldE9mZmxpbmVJbnZhbGlkYXRlKGZhbHNlKTsgLy8gRG8gbm90IGludmFsaWRhdGUgY2FjaGUgd2hlbiBvZmZsaW5lXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tBcHBWZXJzaW9uKG9wdHM/OiB7Y2FuUmVsb2FkPzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbn0pIHtcbiAgICBpZiAodGhpcy5uZXR3b3JrU2VydmljZS5vZmZsaW5lIHx8ICF0aGlzLmlzV2ViKCkpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc3Qgc2lsZW50ID0gb3B0cz8uc2lsZW50ID09PSB0cnVlO1xuICAgIGNvbnN0IHByb2R1Y3Rpb24gPSB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgY29uc3QgY2FuQXV0b1JlbG9hZCA9ICFvcHRzIHx8IG9wdHMuY2FuUmVsb2FkICE9PSBmYWxzZTtcblxuICAgIGlmICghc2lsZW50KSBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ2hlY2tpbmcgcmVtb3RlIGFwcCB2ZXJzaW9uLi4uJyk7XG5cbiAgICBjb25zdCBhY3R1YWxWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIGlmIChpc05pbE9yQmxhbmsoYWN0dWFsVmVyc2lvbikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gTWlzc2luZyByZXF1aXJlZCB2YWx1ZSBmb3IgXFwnZW52aXJvbm1lbnQudmVyc2lvblxcJy4gQ2Fubm90IGNoZWNrIHJlbW90ZSBhcHAgdmVyc2lvbi4nKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdGVWZXJzaW9uID0gYXdhaXQgdGhpcy5uZXR3b3JrU2VydmljZS5nZXRBcHBWZXJzaW9uKCk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhyZW1vdGVWZXJzaW9uKSkge1xuICAgICAgaWYgKHByb2R1Y3Rpb24gJiYgIXNpbGVudCkgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBDYW5ub3QgbG9hZCByZW1vdGUgYXBwIHZlcnNpb24uIFNraXBwaW5nIHZlcnNpb24gY2hlY2snKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUocmVtb3RlVmVyc2lvbiwgYWN0dWFsVmVyc2lvbikpIHtcbiAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ2hlY2tpbmcgcmVtb3RlIGFwcCB2ZXJzaW9uIFtPS10ge3JlbW90ZTogJyR7cmVtb3RlVmVyc2lvbn0nLCBhY3R1YWw6ICcke2FjdHVhbFZlcnNpb259J31gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXdlciB2ZXJzaW9uIGV4aXN0c1xuICAgIGxldCByZWxvYWRQYXRoID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC9bJl0/dmVyc2lvbj1bMC05Ll0rL2dpLCAnJyk7IC8vIFJlbW92ZSBvbGQgdmVyc2lvbiBpbiBxdWVyeSBwYXJhbXNcbiAgICByZWxvYWRQYXRoICs9IChyZWxvYWRQYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEpID8gJz8nIDogJyYnOyAvLyBBZGQgcXVlcnkgcGFyYW0gc2VwYXJhdG9yXG4gICAgcmVsb2FkUGF0aCArPSAndmVyc2lvbj0nICsgcmVtb3RlVmVyc2lvbjsgLy8gQWRkIHZlcnNpb24gKHRvIGF2b2lkIGEgcmVsb2FkIGluZmluaXRlIGxvb3ApXG5cbiAgICAvLyBBbHJlYWR5IHRyeSB0byByZWxvYWQsIGJ1dCB2ZXJzaW9uIHN0aWxsIGJhZFxuICAgIGlmIChyZWxvYWRQYXRoID09PSBsb2NhdGlvbi5ocmVmKSB7XG4gICAgICBpZiAoY2FuQXV0b1JlbG9hZCkgY29uc29sZS5lcnJvcihgW3BsYXRmb3JtXSBSZWxvYWRlZCBwYWdlIGZhaWxlZCwgYmVjYXVzZSB2ZXJzaW9uIHN0aWxsIG1pc21hdGNoISBQbGVhc2UgY2hlY2sgdmVyc2lvbi5hcHB1cCBmaWxlIChleHBlY3RlZCBhcHAgdmVyc2lvbjogJHthY3R1YWxWZXJzaW9ufSlgKTtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbcGxhdGZvcm1dIE1vcmUgcmVjZW50IHZlcnNpb24gZGV0ZWN0ZWQgKHJlbW90ZTogJHtyZW1vdGVWZXJzaW9ufSwgYWN0dWFsOiAke2FjdHVhbFZlcnNpb259YCk7XG5cbiAgICAvLyBBdXRvIHJlbG9hZFxuICAgIGlmIChjYW5BdXRvUmVsb2FkKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gV2lsbCByZWxvYWRpbmcgYXQgJyArIHJlbG9hZFBhdGgpO1xuICAgICAgbG9jYXRpb24uaHJlZiA9IHJlbG9hZFBhdGg7XG4gICAgICAvLyBBcHAgc3RvcFxuICAgIH1cbiAgICAvLyBBc2sgdXNlciB0byByZWxvYWRcbiAgICBlbHNlIHtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIERpc3BsYXkgYSByZWxvYWQgdG9hc3RcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ0NPTkZJUk0uUkVMT0FEX0FQUCcsXG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHt2ZXJzaW9uOiByZW1vdGVWZXJzaW9uLCBuYW1lOiB0aGlzLmVudmlyb25tZW50Lm5hbWV9LFxuICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgLy8gUmVsb2FkIGJ1dHRvblxuICAgICAgICAgIHt0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uQlROX1VQREFURScpLFxuICAgICAgICAgICAgc2lkZTogJ2VuZCcsXG4gICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF19KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPEhUTUxJb25Ub2FzdEVsZW1lbnQ+IHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgb25XaWxsUHJlc2VudDogKHQpID0+IHJlc29sdmUodClcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblN0YXJ0dXBFcnJvcihlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEZhaWxlZCBzdGFydGluZyB0aGUgcGxhdGZvcm0hICcgKyBKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICBsZXQgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgY29uc3QgZGV0YWlsc01lc3NhZ2UgPSBlcnIgJiYgKGVyci5kZXRhaWxzICYmIGVyci5kZXRhaWxzLm1lc3NhZ2UgfHwgZXJyLmRldGFpbHMpO1xuICAgIC8vIFNldCBzcGVjaWZpYyBlcnJvciB3aGVuIEZpcmVmb3ggaXMgaW4gcHJpdmF0ZSBtb2RlIG9yIGhpc3RvcnkgbmV2ZXIgcmVtZW1iZXJlZCAoc2VlIE1hbnRpcyBJZnJlbWVyICM1NjQ0MSlcbiAgICBpZiAoZXJyLmNvZGUgPT09IDExICYmIHRoaXMuY2RrUGxhdGZvcm0uRklSRUZPWCkge1xuICAgICAgbWVzc2FnZSA9ICdFUlJPUi5GSVJFRk9YX05PX1NUT1JBR0UnO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2xhdGUpIHtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSkge1xuICAgICAgICBtZXNzYWdlICs9IGAge2NvZGU6ICR7ZXJyLmNvZGV9fWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBGYXRhbCBlcnJvcjogUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlxcblxcbntjb2RlOiAke2VyciAmJiBlcnIuY29kZSB8fCAnbnVsbCd9LCBtZXNzYWdlOiBcIiR7bWVzc2FnZX1cIn1gO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2FzdENvbnRyb2xsZXIpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGA8YnIvPjxzbWFsbD4ke2RldGFpbHNNZXNzYWdlfTwvc21hbGw+YDtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh3aW5kb3cpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG57Y2F1c2U6IFwiJHtkZXRhaWxzTWVzc2FnZX1cIn1gO1xuICAgICAgfVxuICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5kZXRhaWxzKSBjb25zb2xlLmVycm9yKCdjYXVzZScsIGVyci5kZXRhaWxzKTtcbiAgICB9XG4gIH1cbn1cblxuIl19
@@ -19031,25 +19031,12 @@ class PlatformService extends StartableService {
19031
19031
  console.info('[platform] Configuring i18n ...');
19032
19032
  // this language will be used as a fallback when a translation isn't found in the current language
19033
19033
  this.translate.setDefaultLang(this.environment.defaultLocale);
19034
+ // apply locale immediately
19035
+ this.applyLocale(this.environment.defaultLocale);
19034
19036
  // When locale changes, apply to date adapter
19035
19037
  this.registerSubscription(this.translate.onLangChange.subscribe(event => {
19036
19038
  if (event && event.lang) {
19037
- // force 'en' as 'en_GB'
19038
- if (event.lang === 'en') {
19039
- event.lang = 'en_GB';
19040
- }
19041
- // config moment lib
19042
- try {
19043
- locale(event.lang);
19044
- console.debug('[platform] Use locale {' + event.lang + '}');
19045
- }
19046
- // If error, fallback to en
19047
- catch (err) {
19048
- locale('en');
19049
- console.warn('[platform] Unknown locale for moment lib. Using default [en]');
19050
- }
19051
- // Config date adapter
19052
- this.dateAdapter.setLocale(locale());
19039
+ this.applyLocale(event.lang);
19053
19040
  }
19054
19041
  }));
19055
19042
  this.registerSubscription(this.settings.onChange.subscribe(data => {
@@ -19074,6 +19061,24 @@ class PlatformService extends StartableService {
19074
19061
  }
19075
19062
  }));
19076
19063
  }
19064
+ applyLocale(locale$1) {
19065
+ // force 'en' as 'en_GB'
19066
+ if (locale$1 === 'en') {
19067
+ locale$1 = 'en_GB';
19068
+ }
19069
+ // config moment lib
19070
+ try {
19071
+ locale(locale$1);
19072
+ console.debug('[platform] Use locale {' + locale$1 + '}');
19073
+ }
19074
+ // If error, fallback to en
19075
+ catch (err) {
19076
+ locale('en');
19077
+ console.warn('[platform] Unknown locale for moment lib. Using default [en]');
19078
+ }
19079
+ // Config date adapter
19080
+ this.dateAdapter.setLocale(locale());
19081
+ }
19077
19082
  configureCache(online) {
19078
19083
  online = toBoolean(online, this.cache.isOnline());
19079
19084
  const cacheTTL = online ? 3600 /* 1h */ : 3600 * 24 * 30; /* 1 month */