@sumaris-net/ngx-components 2.0.0-rc11 → 2.0.0-rc13

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 (29) hide show
  1. package/esm2020/src/app/core/services/account.service.mjs +18 -19
  2. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +5 -5
  3. package/esm2020/src/app/core/services/base58.mjs +2 -2
  4. package/esm2020/src/app/core/services/crypto.service.mjs +79 -94
  5. package/esm2020/src/app/core/services/local-settings.service.mjs +2 -3
  6. package/esm2020/src/app/core/services/model/peer.model.mjs +3 -3
  7. package/esm2020/src/app/core/services/platform.service.mjs +2 -3
  8. package/esm2020/src/app/core/table/table.class.mjs +4 -12
  9. package/esm2020/src/app/shared/dates.mjs +2 -3
  10. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +2 -3
  11. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +2 -3
  12. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +2 -3
  13. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +2 -3
  14. package/esm2020/src/app/shared/validator/validators.mjs +2 -3
  15. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +2 -3
  16. package/esm2020/src/app/social/user-event/user-event.service.mjs +2 -3
  17. package/esm2020/src/app/vendor.mjs +3 -5
  18. package/fesm2015/sumaris-net.ngx-components.mjs +132 -161
  19. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  20. package/fesm2020/sumaris-net.ngx-components.mjs +127 -164
  21. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  22. package/package.json +2 -1
  23. package/src/app/core/services/account.service.d.ts +5 -6
  24. package/src/app/core/services/base-graphql-service.class.d.ts +9 -8
  25. package/src/app/core/services/crypto.service.d.ts +23 -18
  26. package/src/app/core/table/table.class.d.ts +2 -6
  27. package/src/app/shared/dates.d.ts +2 -3
  28. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -2
  29. package/src/app/vendor.d.ts +0 -2
@@ -3,9 +3,9 @@ import { isNotEmptyArray, isNotNil, toBoolean } from '../../shared/functions';
3
3
  import { environment } from '../../../environments/environment';
4
4
  import { Directive, Optional } from '@angular/core';
5
5
  import { StartableService } from '../../shared/services/startable-service.class';
6
+ import { CryptoService } from './crypto.service';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "../graphql/graphql.service";
8
- const sha256 = require('hash.js/lib/hash/sha/256');
9
9
  export class BaseGraphqlServiceOptions {
10
10
  }
11
11
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
@@ -78,7 +78,7 @@ export class BaseGraphqlService extends StartableService {
78
78
  queries.forEach(query => {
79
79
  if (Array.isArray(opts.data)) {
80
80
  // Filter values, if a filter function exists
81
- const data = query.insertFilterFn ? opts.data.filter(i => query.insertFilterFn(i)) : opts.data;
81
+ const data = query.insertFilterFn ? opts.data.filter(d => query.insertFilterFn(d)) : opts.data;
82
82
  if (isNotEmptyArray(data)) {
83
83
  if (this._debug)
84
84
  console.debug(`[base-data-service] Inserting data into watching query: `, query.id);
@@ -154,8 +154,8 @@ export class BaseGraphqlService extends StartableService {
154
154
  }
155
155
  /* -- protected methods -- */
156
156
  computeMutableWatchQueryId(opts) {
157
- const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
158
- const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
157
+ const queryName = opts.queryName || CryptoService.sha256(JSON.stringify(opts.query)).substring(0, 8);
158
+ const variablesKey = opts.variables && CryptoService.sha256(JSON.stringify(opts.variables)).substring(0, 8) || '';
159
159
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
160
160
  }
161
161
  findMutableWatchQueries(opts) {
@@ -216,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
216
216
  }], ctorParameters: function () { return [{ type: i1.GraphqlService }, { type: BaseGraphqlServiceOptions, decorators: [{
217
217
  type: Optional
218
218
  }] }]; } });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQzs7O0FBRS9FLE1BQU0sTUFBTSxHQUFJLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBOENwRCxNQUFNLE9BQU8seUJBQXlCO0NBRXJDO0FBR0Qsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0Isa0JBQXlELFNBQVEsZ0JBQW1CO0lBV3hHLFlBQ1ksT0FBdUIsRUFDckIsT0FBbUM7UUFFL0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEwsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFUekIseUJBQW9CLEdBQXdDLEVBQUUsQ0FBQztRQUV6RSx3Q0FBd0M7UUFDeEMsbURBQW1EO1FBQ25ELGlDQUFpQztRQUNqQyw2R0FBNkc7UUFDbkcsaUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBUXpDLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxVQUFVLEdBQUcseUJBQXlCLENBQUM7SUFDOUMsQ0FB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QVM7OzBCQWVMLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dyYXBocWxTZXJ2aWNlLCBNdXRhdGVRdWVyeU9wdGlvbnMsIFdhdGNoUXVlcnlPcHRpb25zfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0VtcHR5T2JqZWN0fSBmcm9tICdhcG9sbG8tYW5ndWxhci90eXBlcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFJlc3VsdH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb3JlJztcbmltcG9ydCB7RW50aXR5VXRpbHN9IGZyb20gJy4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7QXBvbGxvQ2FjaGUsIEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtRdWVyeVJlZn0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtQdXJlUXVlcnlPcHRpb25zfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL3R5cGVzJztcbmltcG9ydCB7RG9jdW1lbnROb2RlfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuY29uc3Qgc2hhMjU2ID0gIHJlcXVpcmUoJ2hhc2guanMvbGliL2hhc2gvc2hhLzI1NicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VmFyaWFibGVzPEY9IGFueT4gZXh0ZW5kcyBQYXJ0aWFsPFBhZ2U+IHtcbiAgZmlsdGVyPzogRjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0ZVF1ZXJ5V2l0aENhY2hlVXBkYXRlT3B0aW9uczxUID0gYW55LCBWID0gRW1wdHlPYmplY3Q+IGV4dGVuZHMgTXV0YXRlUXVlcnlPcHRpb25zPFQsIFY+IHtcbiAgY2FjaGVJbnNlcnQ/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaERhdGE6ICh2YXJpYWJsZXM6IFYsIG11dGF0aW9uUmVzdWx0OiBGZXRjaFJlc3VsdDxUPikgPT4gYW55O1xuICB9W107XG5cbiAgY2FjaGVSZW1vdmU/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaElkczogKHZhcmlhYmxlczogVikgPT4gbnVtYmVyIHwgbnVtYmVyW107XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdXRhYmxlV2F0Y2hRdWVyeU9wdGlvbnM8RCwgVCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFdhdGNoUXVlcnlPcHRpb25zPFY+IHtcbiAgcXVlcnlOYW1lOiBzdHJpbmc7XG4gIGFycmF5RmllbGROYW1lOiBrZXlvZiBEO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIEQgO1xuICBpbnNlcnRGaWx0ZXJGbj86IChkYXRhOiBUKSA9PiBib29sZWFuO1xuICBzb3J0Rm4/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248RCwgVCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFB1cmVRdWVyeU9wdGlvbnMge1xuICBpZD86IHN0cmluZztcbiAgcXVlcnk6IERvY3VtZW50Tm9kZTtcbiAgcXVlcnlSZWY6IFF1ZXJ5UmVmPEQsIFY+O1xuICB2YXJpYWJsZXM6IFY7XG4gIGFycmF5RmllbGROYW1lOiBrZXlvZiBEO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIEQ7XG4gIGluc2VydEZpbHRlckZuPzogKGRhdGE6IFQpID0+IGJvb2xlYW47XG4gIHNvcnRGbj86IChhOiBULCBiOiBUKSA9PiBudW1iZXI7XG4gIGNvdW50ZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5kTXV0YWJsZVdhdGNoUXVlcmllc09wdGlvbnMge1xuICBxdWVyeT86IERvY3VtZW50Tm9kZTtcbiAgcXVlcmllcz86IERvY3VtZW50Tm9kZVtdO1xuICBxdWVyeU5hbWU/OiBzdHJpbmc7XG4gIHF1ZXJ5TmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnMge1xuICBwcm9kdWN0aW9uPzogYm9vbGVhbjtcbn1cblxuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlR3JhcGhxbFNlcnZpY2U8VCA9IGFueSwgRiA9IGFueSwgSUQgPSBhbnksIFMgPSB2b2lkPiBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8Uz4ge1xuXG4gIHByb3RlY3RlZCBfbG9nUHJlZml4OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfbXV0YWJsZVdhdGNoUXVlcmllczogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxhbnk+W10gPSBbXTtcblxuICAvLyBNYXggdXBkYXRlZCBxdWVyaWVzLCBmb3IgdGhpcyBlbnRpdHkuXG4gIC8vIC0gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMgKGluIGNvbnN0cnVjdG9yKVxuICAvLyAtIFVzZSB2YWx1ZSAtMSBmb3Igbm8gbWF4IHNpemVcbiAgLy8gLSBEZWZhdWx0IHZhbHVlIHRvIDMsIGJlY2F1c2UgaXQgdXN1YWxseSBlbm91Z2ggKGUuZy4gT3BlcmF0aW9uU2VydmljZSBhbmQgTGFuZGluZ1NlcnZpY2UgbmVlZCBhdCBsZWFzdCAyKVxuICBwcm90ZWN0ZWQgX211dGFibGVXYXRjaFF1ZXJpZXNNYXhDb3VudCA9IDM7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihncmFwaHFsKTtcblxuICAgIC8vIGZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gdG9Cb29sZWFuKG9wdGlvbnMgJiYgIW9wdGlvbnMucHJvZHVjdGlvbiwgIWVudmlyb25tZW50LnByb2R1Y3Rpb24pO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9IGBbYmFzZS1ncmFwaHFsLXNlcnZpY2VdIGA7XG4gIH1cblxuICBtdXRhYmxlV2F0Y2hRdWVyeTxELCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IE11dGFibGVXYXRjaFF1ZXJ5T3B0aW9uczxELCBULCBWPik6IE9ic2VydmFibGU8RD4ge1xuICAgIG9wdHMuZmV0Y2hQb2xpY3kgPSBvcHRzLmZldGNoUG9saWN5IHx8IHRoaXMuZ3JhcGhxbC5kZWZhdWx0RmV0Y2hQb2xpY3k7XG5cbiAgICAvLyBTdGFuZGFyZCBxdWVyeSAobm8gY2FjaGUpXG4gICAgaWYgKG9wdHMuZmV0Y2hQb2xpY3kgPT09ICduby1jYWNoZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeShvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBObyBhcnJheUZpZWxkTmFtZVxuICAgIGlmICghb3B0cy5hcnJheUZpZWxkTmFtZSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgJ8yATWlzc2luZyBcXCdvcHRzLmFycmF5RmllbGROYW1lXFwnIDogdW5hYmxlIHRvIGNyZWF0ZSBhIG11dGFibGUgd2F0Y2ggcXVlcnknKTtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeShvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHF1ZXJ5IGlkXG4gICAgY29uc3QgcXVlcnlJZCA9IHRoaXMuY29tcHV0ZU11dGFibGVXYXRjaFF1ZXJ5SWQob3B0cyk7XG4gICAgY29uc3QgZXhhY3RNYXRjaFF1ZXJpZXMgPSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmZpbHRlcihxID0+IHEuaWQgPT09IHF1ZXJ5SWQpO1xuXG4gICAgbGV0IG11dGFibGVRdWVyeTogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxELCBULCBWPjtcbiAgICBsZXQgcXVlcnlSZWY6IFF1ZXJ5UmVmPEQsIFY+O1xuXG4gICAgaWYgKGV4YWN0TWF0Y2hRdWVyaWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbXV0YWJsZVF1ZXJ5ID0gZXhhY3RNYXRjaFF1ZXJpZXNbMF0gYXMgTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxELCBULCBWPjtcbiAgICAgIG11dGFibGVRdWVyeS5jb3VudGVyICs9IDE7XG4gICAgICBxdWVyeVJlZiA9IG11dGFibGVRdWVyeS5xdWVyeVJlZjtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRmluZCBzYW1lIG11dGFibGUgd2F0Y2ggcXVlcnkgKHNhbWUgdmFyaWFibGVzKSB7JHtxdWVyeUlkfX0uIFNraXAgcmVnaXN0ZXJgKTtcblxuICAgICAgLy8gUmVmZXRjaCBpZiBuZWVkIGRhdGEgZnJvbSBuZXR3b3JrXG4gICAgICBpZiAob3B0cy5mZXRjaFBvbGljeSA9PT0gJ25ldHdvcmstb25seScgfHwgb3B0cy5mZXRjaFBvbGljeSA9PT0gJ2NhY2hlLWFuZC1uZXR3b3JrJykge1xuICAgICAgICBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgJyBNdXRhYmxlIHF1ZXJ5IGFscmVhZHkgZXhpc3RzLCBhbmQgZmV0Y2hQb2xpY3k9JyArIG9wdHMuZmV0Y2hQb2xpY3kgKyAnLiBGb3JjZSByZWZldGNoIHF1ZXJ5Li4uJyk7XG4gICAgICAgIHF1ZXJ5UmVmLnJlZmV0Y2gobXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcyk7XG4gICAgICB9XG4gICAgICAvL2lmIChtdXRhYmxlUXVlcnkuY291bnRlciA+IDMpIHtcbiAgICAgIC8vICBjb25zb2xlLndhcm4odGhpcy5fZGVidWdQcmVmaXggKyAnVE9ETzogY2xlYW4gcHJldmlvdXMgcXVlcmllcyB3aXRoIG5hbWU6ICcgKyBxdWVyeU5hbWUpO1xuICAgICAgLy99XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcXVlcnlSZWYgPSB0aGlzLmdyYXBocWwud2F0Y2hRdWVyeVJlZjxELCBWPihvcHRzKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJOZXdNdXRhYmxlV2F0Y2hRdWVyeSh7XG4gICAgICAgIGlkOiBxdWVyeUlkLFxuICAgICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgICAgcXVlcnlSZWYsXG4gICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgIGFycmF5RmllbGROYW1lOiBvcHRzLmFycmF5RmllbGROYW1lLFxuICAgICAgICB0b3RhbEZpZWxkTmFtZTogb3B0cy50b3RhbEZpZWxkTmFtZSxcbiAgICAgICAgaW5zZXJ0RmlsdGVyRm46IG9wdHMuaW5zZXJ0RmlsdGVyRm4sXG4gICAgICAgIHNvcnRGbjogb3B0cy5zb3J0Rm4sXG4gICAgICAgIGNvdW50ZXI6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwucXVlcnlSZWZWYWx1ZXNDaGFuZ2VzKHF1ZXJ5UmVmLCBvcHRzKTtcbiAgfVxuXG4gIGluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZTogQXBvbGxvQ2FjaGU8YW55Piwgb3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYge1xuICAgIGRhdGE6IFRbXSB8IFQ7XG4gIH0pIHtcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5maW5kTXV0YWJsZVdhdGNoUXVlcmllcyhvcHRzKTtcbiAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSAgcmV0dXJuO1xuXG4gICAgcXVlcmllcy5mb3JFYWNoKHF1ZXJ5ID0+IHtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmRhdGEpKSB7XG4gICAgICAgICAgLy8gRmlsdGVyIHZhbHVlcywgaWYgYSBmaWx0ZXIgZnVuY3Rpb24gZXhpc3RzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHF1ZXJ5Lmluc2VydEZpbHRlckZuID8gb3B0cy5kYXRhLmZpbHRlcihpID0+IHF1ZXJ5Lmluc2VydEZpbHRlckZuKGkpKSA6IG9wdHMuZGF0YTtcbiAgICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtiYXNlLWRhdGEtc2VydmljZV0gSW5zZXJ0aW5nIGRhdGEgaW50byB3YXRjaGluZyBxdWVyeTogYCwgcXVlcnkuaWQpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaHFsLmFkZE1hbnlUb1F1ZXJ5Q2FjaGUoY2FjaGUsIHtcbiAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHF1ZXJ5LmFycmF5RmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU6IHF1ZXJ5LnRvdGFsRmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgc29ydEZuOiBxdWVyeS5zb3J0Rm4sXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaWx0ZXIgdmFsdWUsIGlmIGEgZmlsdGVyIGZ1bmN0aW9uIGV4aXN0c1xuICAgICAgICBlbHNlIGlmICghcXVlcnkuaW5zZXJ0RmlsdGVyRm4gfHwgcXVlcnkuaW5zZXJ0RmlsdGVyRm4ob3B0cy5kYXRhKSkge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2Jhc2UtZGF0YS1zZXJ2aWNlXSBJbnNlcnRpbmcgZGF0YSBpbnRvIHdhdGNoaW5nIHF1ZXJ5OiBgLCBxdWVyeS5pZCk7XG4gICAgICAgICAgdGhpcy5ncmFwaHFsLmluc2VydEludG9RdWVyeUNhY2hlKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyeTogcXVlcnkucXVlcnksXG4gICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBxdWVyeS5hcnJheUZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICB0b3RhbEZpZWxkTmFtZTogcXVlcnkudG90YWxGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgc29ydEZuOiBxdWVyeS5zb3J0Rm4sXG4gICAgICAgICAgICBkYXRhOiBvcHRzLmRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICByZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhjYWNoZTogQXBvbGxvQ2FjaGU8YW55Piwgb3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYge1xuICAgIGlkczogSUR8SURbXTtcbiAgfSk6IG51bWJlciB7XG4gICAgY29uc3QgcXVlcmllcyA9IHRoaXMuZmluZE11dGFibGVXYXRjaFF1ZXJpZXMob3B0cyk7XG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZyhgW2Jhc2UtZGF0YS1zZXJ2aWNlXSBSZW1vdmluZyBkYXRhIGZyb20gd2F0Y2hpbmcgcXVlcmllczogYCwgcXVlcmllcyk7XG4gICAgcmV0dXJuIHF1ZXJpZXMubWFwKHF1ZXJ5ID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuaWRzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnJlbW92ZUZyb21DYWNoZWRRdWVyeUJ5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogcXVlcnkudmFyaWFibGVzLFxuICAgICAgICAgIGFycmF5RmllbGROYW1lOiBxdWVyeS5hcnJheUZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgdG90YWxGaWVsZE5hbWU6IHF1ZXJ5LnRvdGFsRmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICBpZHM6IG9wdHMuaWRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXBocWwucmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZChjYWNoZSwge1xuICAgICAgICAgIHF1ZXJ5OiBxdWVyeS5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICBhcnJheUZpZWxkTmFtZTogcXVlcnkuYXJyYXlGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgIHRvdGFsRmllbGROYW1lOiBxdWVyeS50b3RhbEZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgaWRzOiBvcHRzLmlkc1xuICAgICAgICB9KSA/IDEgOiAwO1xuICAgICAgfVxuICAgIH0pXG4gICAgLy8gU3VtXG4gICAgLnJlZHVjZSgocmVzLCBjb3VudCkgPT4gcmVzICsgY291bnQsIDApO1xuICB9XG5cbiAgYXN5bmMgcmVmZXRjaE11dGFibGVXYXRjaFF1ZXJpZXMob3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zICYgeyB2YXJpYWJsZXM/OiBhbnkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJldHJpZXZlIHF1ZXJpZXMgdG8gcmVmZXRjaFxuICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLmZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHMpO1xuXG4gICAgLy8gU2tpcCBpZiBub3RoaW5nIHRvIHJlZmV0Y2hcbiAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcy5tYXAocXVlcnkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFJlZmV0Y2hpbmcgbXV0YWJsZSB3YXRjaCBxdWVyeSB7JHtxdWVyeS5pZH19YCk7XG4gICAgICAgIHJldHVybiBxdWVyeS5xdWVyeVJlZi5yZWZldGNoKHsuLi5xdWVyeS52YXJpYWJsZXMsIC4uLm9wdHMudmFyaWFibGVzfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy5fbG9nUHJlZml4ICsgJ0Vycm9yIHdoaWxlIHJlZmV0Y2hpbmcgbXV0YWJsZSB3YXRjaCBxdWVyaWVzJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb21wdXRlTXV0YWJsZVdhdGNoUXVlcnlJZDxELCBULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IE11dGFibGVXYXRjaFF1ZXJ5T3B0aW9uczxELCBULCBWPikge1xuICAgIGNvbnN0IHF1ZXJ5TmFtZSA9IG9wdHMucXVlcnlOYW1lIHx8IHNoYTI1NigpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShvcHRzLnF1ZXJ5KSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgOCk7XG4gICAgY29uc3QgdmFyaWFibGVzS2V5ID0gb3B0cy52YXJpYWJsZXMgJiYgc2hhMjU2KCkudXBkYXRlKEpTT04uc3RyaW5naWZ5KG9wdHMudmFyaWFibGVzKSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgOCkgfHwgJyc7XG4gICAgcmV0dXJuIFtxdWVyeU5hbWUsIG9wdHMuYXJyYXlGaWVsZE5hbWUsIHZhcmlhYmxlc0tleV0uam9pbignfCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHM6IEZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzT3B0aW9ucyk6IE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248YW55PltdIHtcbiAgICAvLyBTZWFyY2ggYnkgcXVlcnlOYW1lXG4gICAgaWYgKG9wdHMucXVlcnlOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLmlkLnN0YXJ0c1dpdGgob3B0cy5xdWVyeU5hbWUgKyAnfCcpKTtcbiAgICB9XG4gICAgaWYgKG9wdHMucXVlcnlOYW1lcykge1xuICAgICAgcmV0dXJuIG9wdHMucXVlcnlOYW1lcy5tYXAocXVlcnlOYW1lID0+IHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMuZmlsdGVyKHEgPT4gcS5pZC5zdGFydHNXaXRoKHF1ZXJ5TmFtZSArICd8JykpKVxuICAgICAgICAvLyBmbGF0TWFwXG4gICAgICAgIC5yZWR1Y2UoKHJlcywgYXJyYXkpID0+IHJlcy5jb25jYXQoLi4uYXJyYXkpLCBbXSk7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGJ5IHF1ZXJ5XG4gICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmZpbHRlcihxID0+IHEucXVlcnkgPT09IG9wdHMucXVlcnkpO1xuICAgIH1cbiAgICBpZiAob3B0cy5xdWVyaWVzKSB7XG4gICAgICByZXR1cm4gb3B0cy5xdWVyaWVzXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIC5tYXAocXVlcnkgPT4gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLnF1ZXJ5ID09PSBxdWVyeSkpXG4gICAgICAgIC8vIGZsYXRNYXBcbiAgICAgICAgLnJlZHVjZSgocmVzLCBhcnJheSkgPT4gcmVzLmNvbmNhdCguLi5hcnJheSksIFtdKTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgb3B0aW9uczogb25seSBvbmUgcHJvcGVydHkgbXVzdCBiZSBzZXQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3Rlck5ld011dGFibGVXYXRjaFF1ZXJ5KG11dGFibGVRdWVyeTogTXV0YWJsZVdhdGNoUXVlcnlEZXNjcmlwdGlvbjxhbnk+KSB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFJlZ2lzdGVyIG5ldyBtdXRhYmxlIHdhdGNoIHF1ZXJ5IHske211dGFibGVRdWVyeS5pZH19YCk7XG5cbiAgICAvLyBJZiBleGNlZWQgdGhlIG1heCBzaXplIG9mIG11dGFibGUgcXVlcmllczogcmVtb3ZlIHNvbWVcbiAgICBpZiAodGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50ID4gMCAmJiB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmxlbmd0aCA+PSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQpIHtcbiAgICAgIGNvbnN0IHJlbW92ZWRXYXRjaFF1ZXJpZXMgPSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLnNwbGljZSgwLCAxICsgdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5sZW5ndGggLSB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQpO1xuXG4gICAgICAvLyBXYXJuLCBhcyBpdCBzaG91bGRuJ3QgYmUgaGFwcGVuIG9mdGVuLCB3aGVuIG1heCBpcyBjb3JyZWN0bHkgc2V0XG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFJlbW92aW5nIG9sZGVyIG11dGFibGUgd2F0Y2hpbmcgcXVlcmllcyAoc3RhY2sgZXhjZWVkIG1heCBvZiAke3RoaXMuX211dGFibGVXYXRjaFF1ZXJpZXNNYXhDb3VudH0pOiBgLFxuICAgICAgICByZW1vdmVkV2F0Y2hRdWVyaWVzLm1hcChxID0+IHEuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHNvcnQgZnVuY3Rpb24gKHRvIGJlIHVzZWQgaW4gaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyeSgpKVxuICAgIGlmICghbXV0YWJsZVF1ZXJ5LnNvcnRGbiAmJiBtdXRhYmxlUXVlcnkudmFyaWFibGVzICYmIG11dGFibGVRdWVyeS52YXJpYWJsZXMuc29ydEJ5KSB7XG4gICAgICBtdXRhYmxlUXVlcnkuc29ydEZuID0gbXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcyAmJiBtdXRhYmxlUXVlcnkudmFyaWFibGVzLnNvcnRCeVxuICAgICAgJiYgRW50aXR5VXRpbHMuc29ydENvbXBhcmF0b3IobXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcy5zb3J0QnksIG11dGFibGVRdWVyeS52YXJpYWJsZXMuc29ydERpcmVjdGlvbiB8fCAnYXNjJyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBuZXcgbXV0YWJsZSBxdWVyeSB0byBhcnJheVxuICAgIHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMucHVzaChtdXRhYmxlUXVlcnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRSZWZldGNoUXVlcmllcyhvcHRzOiBGaW5kTXV0YWJsZVdhdGNoUXVlcmllc09wdGlvbnMpOiBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE11dGFibGVXYXRjaFF1ZXJpZXMob3B0cylcbiAgICAgIC8vIFdvcmthcm91bmQsIHRvIG1ha2UgcmVmZXRjaCBxdWVyaWVzIHdvcmtzOiB0cmFuc2Zvcm0gaW50byBhIHNpbXBsZSB7cXVlcnksIHZhcmlhYmxlc31cbiAgICAgIC5tYXAoKHtxdWVyeSwgdmFyaWFibGVzfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBxdWVyeSwgdmFyaWFibGVzIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RhcnQoKTogUHJvbWlzZTxTPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsIGFzIFMpO1xuICB9XG59XG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUUvRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7OztBQThDL0MsTUFBTSxPQUFPLHlCQUF5QjtDQUVyQztBQUdELGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLGtCQUF5RCxTQUFRLGdCQUFtQjtJQVd4RyxZQUNZLE9BQXVCLEVBQ3JCLE9BQW1DO1FBRS9DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhMLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBVHpCLHlCQUFvQixHQUF3QyxFQUFFLENBQUM7UUFFekUsd0NBQXdDO1FBQ3hDLG1EQUFtRDtRQUNuRCxpQ0FBaUM7UUFDakMsNkdBQTZHO1FBQ25HLGlDQUE0QixHQUFHLENBQUMsQ0FBQztRQVF6QyxlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsVUFBVSxHQUFHLHlCQUF5QixDQUFDO0lBQzlDLENBQUM7SUFFRCxpQkFBaUIsQ0FBcUIsSUFBdUM7UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFFdkUsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QztRQUVELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRywyRUFBMkUsQ0FBQyxDQUFDO1lBQzdILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUM7UUFFbEYsSUFBSSxZQUFtRCxDQUFDO1FBQ3hELElBQUksUUFBd0IsQ0FBQztRQUU3QixJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBMEMsQ0FBQztZQUM3RSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUMxQixRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxtREFBbUQsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDO1lBRS9ILG9DQUFvQztZQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssbUJBQW1CLEVBQUU7Z0JBQ25GLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxpREFBaUQsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDLENBQUM7Z0JBQ2xJLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsaUNBQWlDO1lBQ2pDLDZGQUE2RjtZQUM3RixHQUFHO1NBQ0o7YUFDSTtZQUNILFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBTyxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsNEJBQTRCLENBQUM7Z0JBQ2hDLEVBQUUsRUFBRSxPQUFPO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUTtnQkFDUixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLENBQUM7YUFDWCxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQXVCLEVBQUUsSUFFdkQ7UUFDQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQUcsT0FBTztRQUU3QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBRXBCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVCLDZDQUE2QztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQy9GLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNyRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTt3QkFDdEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO3dCQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7d0JBQzFCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBd0I7d0JBQzlDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBd0I7d0JBQzlDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTt3QkFDcEIsSUFBSTtxQkFDTCxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELDRDQUE0QztpQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO29CQUN2QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztvQkFDMUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUF3QjtvQkFDOUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUF3QjtvQkFDOUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUNBQW1DLENBQUMsS0FBdUIsRUFBRSxJQUU1RDtRQUNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUU7b0JBQ3BELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO29CQUMxQixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQXdCO29CQUM5QyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQXdCO29CQUM5QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7aUJBQ2QsQ0FBQyxDQUFDO2FBQ0o7aUJBQ0k7Z0JBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRTtvQkFDbkQsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzFCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBd0I7b0JBQzlDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBd0I7b0JBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztpQkFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUM7WUFDRixNQUFNO2FBQ0wsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLDBCQUEwQixDQUFDLElBQTBEO1FBQ3pGLDhCQUE4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFNUIsSUFBSTtZQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxtQ0FBbUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2pHLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztZQUN6RSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyw4Q0FBOEMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRCw2QkFBNkI7SUFFbkIsMEJBQTBCLENBQXdCLElBQXVDO1FBQ2pHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEgsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsdUJBQXVCLENBQUMsSUFBb0M7UUFDcEUsc0JBQXNCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckY7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUcsVUFBVTtpQkFDVCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTztpQkFDaEIsTUFBTSxDQUFDLFFBQVEsQ0FBQztpQkFDaEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ3ZFLFVBQVU7aUJBQ1QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsTUFBTSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRVMsNEJBQTRCLENBQUMsWUFBK0M7UUFFcEYsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQ0FBcUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFMUcseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLDRCQUE0QixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNsSCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRTFJLG1FQUFtRTtZQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0VBQWdFLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxFQUNuSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUVELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ25GLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU07bUJBQzFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLENBQUM7U0FDN0c7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVMsa0JBQWtCLENBQUMsSUFBb0M7UUFDL0QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLHdGQUF3RjthQUN2RixHQUFHLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBRSxFQUFFO1lBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsU0FBUztRQUNqQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7K0dBck9tQixrQkFBa0I7bUdBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUZ2QyxTQUFTOzswQkFlTCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHcmFwaHFsU2VydmljZSwgTXV0YXRlUXVlcnlPcHRpb25zLCBXYXRjaFF1ZXJ5T3B0aW9uc30gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtQYWdlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFbXB0eU9iamVjdH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvdHlwZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hSZXN1bHR9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvY29yZSc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0Fwb2xsb0NhY2hlLCBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZX0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge2lzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UXVlcnlSZWZ9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7T3BlcmF0aW9uVmFyaWFibGVzLCBQdXJlUXVlcnlPcHRpb25zfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL3R5cGVzJztcbmltcG9ydCB7RG9jdW1lbnROb2RlfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7VHlwZWREb2N1bWVudE5vZGV9IGZyb20gJ0BncmFwaHFsLXR5cGVkLWRvY3VtZW50LW5vZGUvY29yZSc7XG5pbXBvcnQge0NyeXB0b1NlcnZpY2V9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VmFyaWFibGVzPEY9IGFueT4gZXh0ZW5kcyBQYXJ0aWFsPFBhZ2U+IHtcbiAgZmlsdGVyPzogRjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0ZVF1ZXJ5V2l0aENhY2hlVXBkYXRlT3B0aW9uczxUID0gYW55LCBWID0gRW1wdHlPYmplY3Q+IGV4dGVuZHMgTXV0YXRlUXVlcnlPcHRpb25zPFQsIFY+IHtcbiAgY2FjaGVJbnNlcnQ/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaERhdGE6ICh2YXJpYWJsZXM6IFYsIG11dGF0aW9uUmVzdWx0OiBGZXRjaFJlc3VsdDxUPikgPT4gYW55O1xuICB9W107XG5cbiAgY2FjaGVSZW1vdmU/OiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICBmZXRjaElkczogKHZhcmlhYmxlczogVikgPT4gbnVtYmVyIHwgbnVtYmVyW107XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdXRhYmxlV2F0Y2hRdWVyeU9wdGlvbnM8RCwgVCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFdhdGNoUXVlcnlPcHRpb25zPFY+IHtcbiAgcXVlcnlOYW1lOiBzdHJpbmc7XG4gIGFycmF5RmllbGROYW1lOiBrZXlvZiBEO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIEQgO1xuICBpbnNlcnRGaWx0ZXJGbj86IChkYXRhOiBUKSA9PiBib29sZWFuO1xuICBzb3J0Rm4/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248VERhdGEsIFRFbnRpdHlDbGFzcyA9IGFueSwgVFZhcmlhYmxlcyA9IEVtcHR5T2JqZWN0PiBleHRlbmRzIFB1cmVRdWVyeU9wdGlvbnM8VFZhcmlhYmxlcywgVERhdGE+IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBUeXBlZERvY3VtZW50Tm9kZTxURGF0YSwgVFZhcmlhYmxlcz47XG4gIHF1ZXJ5UmVmOiBRdWVyeVJlZjxURGF0YSwgVFZhcmlhYmxlcz47XG4gIHZhcmlhYmxlczogVFZhcmlhYmxlcztcbiAgYXJyYXlGaWVsZE5hbWU6IGtleW9mIFREYXRhO1xuICB0b3RhbEZpZWxkTmFtZT86IGtleW9mIFREYXRhO1xuICBpbnNlcnRGaWx0ZXJGbj86IChkYXRhOiBURW50aXR5Q2xhc3MpID0+IGJvb2xlYW47XG4gIHNvcnRGbj86IChhOiBURW50aXR5Q2xhc3MsIGI6IFRFbnRpdHlDbGFzcykgPT4gbnVtYmVyO1xuICBjb3VudGVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zIHtcbiAgcXVlcnk/OiBEb2N1bWVudE5vZGU7XG4gIHF1ZXJpZXM/OiBEb2N1bWVudE5vZGVbXTtcbiAgcXVlcnlOYW1lPzogc3RyaW5nO1xuICBxdWVyeU5hbWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlR3JhcGhxbFNlcnZpY2VPcHRpb25zIHtcbiAgcHJvZHVjdGlvbj86IGJvb2xlYW47XG59XG5cbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUdyYXBocWxTZXJ2aWNlPFQgPSBhbnksIEYgPSBhbnksIElEID0gYW55LCBTID0gdm9pZD4gZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPFM+IHtcblxuICBwcm90ZWN0ZWQgX2xvZ1ByZWZpeDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX211dGFibGVXYXRjaFF1ZXJpZXM6IE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248YW55PltdID0gW107XG5cbiAgLy8gTWF4IHVwZGF0ZWQgcXVlcmllcywgZm9yIHRoaXMgZW50aXR5LlxuICAvLyAtIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzIChpbiBjb25zdHJ1Y3RvcilcbiAgLy8gLSBVc2UgdmFsdWUgLTEgZm9yIG5vIG1heCBzaXplXG4gIC8vIC0gRGVmYXVsdCB2YWx1ZSB0byAzLCBiZWNhdXNlIGl0IHVzdWFsbHkgZW5vdWdoIChlLmcuIE9wZXJhdGlvblNlcnZpY2UgYW5kIExhbmRpbmdTZXJ2aWNlIG5lZWQgYXQgbGVhc3QgMilcbiAgcHJvdGVjdGVkIF9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQgPSAzO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCk7XG5cbiAgICAvLyBmb3IgREVWIG9ubHlcbiAgICB0aGlzLl9kZWJ1ZyA9IHRvQm9vbGVhbihvcHRpb25zICYmICFvcHRpb25zLnByb2R1Y3Rpb24sICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uKTtcbiAgICB0aGlzLl9sb2dQcmVmaXggPSBgW2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlXSBgO1xuICB9XG5cbiAgbXV0YWJsZVdhdGNoUXVlcnk8RCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBNdXRhYmxlV2F0Y2hRdWVyeU9wdGlvbnM8RCwgVCwgVj4pOiBPYnNlcnZhYmxlPEQ+IHtcbiAgICBvcHRzLmZldGNoUG9saWN5ID0gb3B0cy5mZXRjaFBvbGljeSB8fCB0aGlzLmdyYXBocWwuZGVmYXVsdEZldGNoUG9saWN5O1xuXG4gICAgLy8gU3RhbmRhcmQgcXVlcnkgKG5vIGNhY2hlKVxuICAgIGlmIChvcHRzLmZldGNoUG9saWN5ID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncmFwaHFsLndhdGNoUXVlcnkob3B0cyk7XG4gICAgfVxuXG4gICAgLy8gTm8gYXJyYXlGaWVsZE5hbWVcbiAgICBpZiAoIW9wdHMuYXJyYXlGaWVsZE5hbWUpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKHRoaXMuX2xvZ1ByZWZpeCArICfMgE1pc3NpbmcgXFwnb3B0cy5hcnJheUZpZWxkTmFtZVxcJyA6IHVuYWJsZSB0byBjcmVhdGUgYSBtdXRhYmxlIHdhdGNoIHF1ZXJ5Jyk7XG4gICAgICByZXR1cm4gdGhpcy5ncmFwaHFsLndhdGNoUXVlcnkob3B0cyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBxdWVyeSBpZFxuICAgIGNvbnN0IHF1ZXJ5SWQgPSB0aGlzLmNvbXB1dGVNdXRhYmxlV2F0Y2hRdWVyeUlkKG9wdHMpO1xuICAgIGNvbnN0IGV4YWN0TWF0Y2hRdWVyaWVzID0gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLmlkID09PSBxdWVyeUlkKTtcblxuICAgIGxldCBtdXRhYmxlUXVlcnk6IE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248RCwgVCwgVj47XG4gICAgbGV0IHF1ZXJ5UmVmOiBRdWVyeVJlZjxELCBWPjtcblxuICAgIGlmIChleGFjdE1hdGNoUXVlcmllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG11dGFibGVRdWVyeSA9IGV4YWN0TWF0Y2hRdWVyaWVzWzBdIGFzIE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248RCwgVCwgVj47XG4gICAgICBtdXRhYmxlUXVlcnkuY291bnRlciArPSAxO1xuICAgICAgcXVlcnlSZWYgPSBtdXRhYmxlUXVlcnkucXVlcnlSZWY7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYEZpbmQgc2FtZSBtdXRhYmxlIHdhdGNoIHF1ZXJ5IChzYW1lIHZhcmlhYmxlcykgeyR7cXVlcnlJZH19LiBTa2lwIHJlZ2lzdGVyYCk7XG5cbiAgICAgIC8vIFJlZmV0Y2ggaWYgbmVlZCBkYXRhIGZyb20gbmV0d29ya1xuICAgICAgaWYgKG9wdHMuZmV0Y2hQb2xpY3kgPT09ICduZXR3b3JrLW9ubHknIHx8IG9wdHMuZmV0Y2hQb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKHRoaXMuX2xvZ1ByZWZpeCArICcgTXV0YWJsZSBxdWVyeSBhbHJlYWR5IGV4aXN0cywgYW5kIGZldGNoUG9saWN5PScgKyBvcHRzLmZldGNoUG9saWN5ICsgJy4gRm9yY2UgcmVmZXRjaCBxdWVyeS4uLicpO1xuICAgICAgICBxdWVyeVJlZi5yZWZldGNoKG11dGFibGVRdWVyeS52YXJpYWJsZXMpO1xuICAgICAgfVxuICAgICAgLy9pZiAobXV0YWJsZVF1ZXJ5LmNvdW50ZXIgPiAzKSB7XG4gICAgICAvLyAgY29uc29sZS53YXJuKHRoaXMuX2RlYnVnUHJlZml4ICsgJ1RPRE86IGNsZWFuIHByZXZpb3VzIHF1ZXJpZXMgd2l0aCBuYW1lOiAnICsgcXVlcnlOYW1lKTtcbiAgICAgIC8vfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHF1ZXJ5UmVmID0gdGhpcy5ncmFwaHFsLndhdGNoUXVlcnlSZWY8RCwgVj4ob3B0cyk7XG4gICAgICB0aGlzLnJlZ2lzdGVyTmV3TXV0YWJsZVdhdGNoUXVlcnkoe1xuICAgICAgICBpZDogcXVlcnlJZCxcbiAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgIHF1ZXJ5UmVmLFxuICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICBhcnJheUZpZWxkTmFtZTogb3B0cy5hcnJheUZpZWxkTmFtZSxcbiAgICAgICAgdG90YWxGaWVsZE5hbWU6IG9wdHMudG90YWxGaWVsZE5hbWUsXG4gICAgICAgIGluc2VydEZpbHRlckZuOiBvcHRzLmluc2VydEZpbHRlckZuLFxuICAgICAgICBzb3J0Rm46IG9wdHMuc29ydEZuLFxuICAgICAgICBjb3VudGVyOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnF1ZXJ5UmVmVmFsdWVzQ2hhbmdlcyhxdWVyeVJlZiwgb3B0cyk7XG4gIH1cblxuICBpbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sIG9wdHM6IEZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzT3B0aW9ucyAmIHtcbiAgICBkYXRhOiBUW10gfCBUO1xuICB9KSB7XG4gICAgY29uc3QgcXVlcmllcyA9IHRoaXMuZmluZE11dGFibGVXYXRjaFF1ZXJpZXMob3B0cyk7XG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgIHJldHVybjtcblxuICAgIHF1ZXJpZXMuZm9yRWFjaChxdWVyeSA9PiB7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5kYXRhKSkge1xuICAgICAgICAgIC8vIEZpbHRlciB2YWx1ZXMsIGlmIGEgZmlsdGVyIGZ1bmN0aW9uIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBxdWVyeS5pbnNlcnRGaWx0ZXJGbiA/IG9wdHMuZGF0YS5maWx0ZXIoZCA9PiBxdWVyeS5pbnNlcnRGaWx0ZXJGbihkKSkgOiBvcHRzLmRhdGE7XG4gICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYmFzZS1kYXRhLXNlcnZpY2VdIEluc2VydGluZyBkYXRhIGludG8gd2F0Y2hpbmcgcXVlcnk6IGAsIHF1ZXJ5LmlkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhxbC5hZGRNYW55VG9RdWVyeUNhY2hlKGNhY2hlLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeS5xdWVyeSxcbiAgICAgICAgICAgICAgdmFyaWFibGVzOiBxdWVyeS52YXJpYWJsZXMsXG4gICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBxdWVyeS5hcnJheUZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lOiBxdWVyeS50b3RhbEZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHNvcnRGbjogcXVlcnkuc29ydEZuLFxuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsdGVyIHZhbHVlLCBpZiBhIGZpbHRlciBmdW5jdGlvbiBleGlzdHNcbiAgICAgICAgZWxzZSBpZiAoIXF1ZXJ5Lmluc2VydEZpbHRlckZuIHx8IHF1ZXJ5Lmluc2VydEZpbHRlckZuKG9wdHMuZGF0YSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtiYXNlLWRhdGEtc2VydmljZV0gSW5zZXJ0aW5nIGRhdGEgaW50byB3YXRjaGluZyBxdWVyeTogYCwgcXVlcnkuaWQpO1xuICAgICAgICAgIHRoaXMuZ3JhcGhxbC5pbnNlcnRJbnRvUXVlcnlDYWNoZShjYWNoZSwge1xuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgICAgdmFyaWFibGVzOiBxdWVyeS52YXJpYWJsZXMsXG4gICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogcXVlcnkuYXJyYXlGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU6IHF1ZXJ5LnRvdGFsRmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgIHNvcnRGbjogcXVlcnkuc29ydEZuLFxuICAgICAgICAgICAgZGF0YTogb3B0cy5kYXRhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRnJvbU11dGFibGVDYWNoZWRRdWVyaWVzQnlJZHMoY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sIG9wdHM6IEZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzT3B0aW9ucyAmIHtcbiAgICBpZHM6IElEfElEW107XG4gIH0pOiBudW1iZXIge1xuICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLmZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHMpO1xuICAgIGlmICghcXVlcmllcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoYFtiYXNlLWRhdGEtc2VydmljZV0gUmVtb3ZpbmcgZGF0YSBmcm9tIHdhdGNoaW5nIHF1ZXJpZXM6IGAsIHF1ZXJpZXMpO1xuICAgIHJldHVybiBxdWVyaWVzLm1hcChxdWVyeSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmlkcykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5yZW1vdmVGcm9tQ2FjaGVkUXVlcnlCeUlkcyhjYWNoZSwge1xuICAgICAgICAgIHF1ZXJ5OiBxdWVyeS5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5LnZhcmlhYmxlcyxcbiAgICAgICAgICBhcnJheUZpZWxkTmFtZTogcXVlcnkuYXJyYXlGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgIHRvdGFsRmllbGROYW1lOiBxdWVyeS50b3RhbEZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgaWRzOiBvcHRzLmlkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnJlbW92ZUZyb21DYWNoZWRRdWVyeUJ5SWQoY2FjaGUsIHtcbiAgICAgICAgICBxdWVyeTogcXVlcnkucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiBxdWVyeS52YXJpYWJsZXMsXG4gICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHF1ZXJ5LmFycmF5RmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICB0b3RhbEZpZWxkTmFtZTogcXVlcnkudG90YWxGaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgIGlkczogb3B0cy5pZHNcbiAgICAgICAgfSkgPyAxIDogMDtcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIFN1bVxuICAgIC5yZWR1Y2UoKHJlcywgY291bnQpID0+IHJlcyArIGNvdW50LCAwKTtcbiAgfVxuXG4gIGFzeW5jIHJlZmV0Y2hNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHM6IEZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzT3B0aW9ucyAmIHsgdmFyaWFibGVzPzogYW55IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBSZXRyaWV2ZSBxdWVyaWVzIHRvIHJlZmV0Y2hcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5maW5kTXV0YWJsZVdhdGNoUXVlcmllcyhvcHRzKTtcblxuICAgIC8vIFNraXAgaWYgbm90aGluZyB0byByZWZldGNoXG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHF1ZXJpZXMubWFwKHF1ZXJ5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBSZWZldGNoaW5nIG11dGFibGUgd2F0Y2ggcXVlcnkgeyR7cXVlcnkuaWR9fWApO1xuICAgICAgICByZXR1cm4gcXVlcnkucXVlcnlSZWYucmVmZXRjaCh7Li4ucXVlcnkudmFyaWFibGVzLCAuLi5vcHRzLnZhcmlhYmxlc30pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuX2xvZ1ByZWZpeCArICdFcnJvciB3aGlsZSByZWZldGNoaW5nIG11dGFibGUgd2F0Y2ggcXVlcmllcycsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29tcHV0ZU11dGFibGVXYXRjaFF1ZXJ5SWQ8RCwgVCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBNdXRhYmxlV2F0Y2hRdWVyeU9wdGlvbnM8RCwgVCwgVj4pIHtcbiAgICBjb25zdCBxdWVyeU5hbWUgPSBvcHRzLnF1ZXJ5TmFtZSB8fCBDcnlwdG9TZXJ2aWNlLnNoYTI1NihKU09OLnN0cmluZ2lmeShvcHRzLnF1ZXJ5KSkuc3Vic3RyaW5nKDAsIDgpO1xuICAgIGNvbnN0IHZhcmlhYmxlc0tleSA9IG9wdHMudmFyaWFibGVzICYmIENyeXB0b1NlcnZpY2Uuc2hhMjU2KEpTT04uc3RyaW5naWZ5KG9wdHMudmFyaWFibGVzKSkuc3Vic3RyaW5nKDAsIDgpIHx8ICcnO1xuICAgIHJldHVybiBbcXVlcnlOYW1lLCBvcHRzLmFycmF5RmllbGROYW1lLCB2YXJpYWJsZXNLZXldLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaW5kTXV0YWJsZVdhdGNoUXVlcmllcyhvcHRzOiBGaW5kTXV0YWJsZVdhdGNoUXVlcmllc09wdGlvbnMpOiBNdXRhYmxlV2F0Y2hRdWVyeURlc2NyaXB0aW9uPGFueT5bXSB7XG4gICAgLy8gU2VhcmNoIGJ5IHF1ZXJ5TmFtZVxuICAgIGlmIChvcHRzLnF1ZXJ5TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMuZmlsdGVyKHEgPT4gcS5pZC5zdGFydHNXaXRoKG9wdHMucXVlcnlOYW1lICsgJ3wnKSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnF1ZXJ5TmFtZXMpIHtcbiAgICAgIHJldHVybiBvcHRzLnF1ZXJ5TmFtZXMubWFwKHF1ZXJ5TmFtZSA9PiB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLmZpbHRlcihxID0+IHEuaWQuc3RhcnRzV2l0aChxdWVyeU5hbWUgKyAnfCcpKSlcbiAgICAgICAgLy8gZmxhdE1hcFxuICAgICAgICAucmVkdWNlKChyZXMsIGFycmF5KSA9PiByZXMuY29uY2F0KC4uLmFycmF5KSwgW10pO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBieSBxdWVyeVxuICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5maWx0ZXIocSA9PiBxLnF1ZXJ5ID09PSBvcHRzLnF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKG9wdHMucXVlcmllcykge1xuICAgICAgcmV0dXJuIG9wdHMucXVlcmllc1xuICAgICAgICAuZmlsdGVyKGlzTm90TmlsKVxuICAgICAgICAubWFwKHF1ZXJ5ID0+IHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMuZmlsdGVyKHEgPT4gcS5xdWVyeSA9PT0gcXVlcnkpKVxuICAgICAgICAvLyBmbGF0TWFwXG4gICAgICAgIC5yZWR1Y2UoKHJlcywgYXJyYXkpID0+IHJlcy5jb25jYXQoLi4uYXJyYXkpLCBbXSk7XG4gICAgfVxuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIG9wdGlvbnM6IG9ubHkgb25lIHByb3BlcnR5IG11c3QgYmUgc2V0Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJOZXdNdXRhYmxlV2F0Y2hRdWVyeShtdXRhYmxlUXVlcnk6IE11dGFibGVXYXRjaFF1ZXJ5RGVzY3JpcHRpb248YW55Pikge1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBSZWdpc3RlciBuZXcgbXV0YWJsZSB3YXRjaCBxdWVyeSB7JHttdXRhYmxlUXVlcnkuaWR9fWApO1xuXG4gICAgLy8gSWYgZXhjZWVkIHRoZSBtYXggc2l6ZSBvZiBtdXRhYmxlIHF1ZXJpZXM6IHJlbW92ZSBzb21lXG4gICAgaWYgKHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXNNYXhDb3VudCA+IDAgJiYgdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5sZW5ndGggPj0gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50KSB7XG4gICAgICBjb25zdCByZW1vdmVkV2F0Y2hRdWVyaWVzID0gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllcy5zcGxpY2UoMCwgMSArIHRoaXMuX211dGFibGVXYXRjaFF1ZXJpZXMubGVuZ3RoIC0gdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50KTtcblxuICAgICAgLy8gV2FybiwgYXMgaXQgc2hvdWxkbid0IGJlIGhhcHBlbiBvZnRlbiwgd2hlbiBtYXggaXMgY29ycmVjdGx5IHNldFxuICAgICAgY29uc29sZS53YXJuKHRoaXMuX2xvZ1ByZWZpeCArIGBSZW1vdmluZyBvbGRlciBtdXRhYmxlIHdhdGNoaW5nIHF1ZXJpZXMgKHN0YWNrIGV4Y2VlZCBtYXggb2YgJHt0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnR9KTogYCxcbiAgICAgICAgcmVtb3ZlZFdhdGNoUXVlcmllcy5tYXAocSA9PiBxLmlkKSk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSBzb3J0IGZ1bmN0aW9uICh0byBiZSB1c2VkIGluIGluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcnkoKSlcbiAgICBpZiAoIW11dGFibGVRdWVyeS5zb3J0Rm4gJiYgbXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcyAmJiBtdXRhYmxlUXVlcnkudmFyaWFibGVzLnNvcnRCeSkge1xuICAgICAgbXV0YWJsZVF1ZXJ5LnNvcnRGbiA9IG11dGFibGVRdWVyeS52YXJpYWJsZXMgJiYgbXV0YWJsZVF1ZXJ5LnZhcmlhYmxlcy5zb3J0QnlcbiAgICAgICYmIEVudGl0eVV0aWxzLnNvcnRDb21wYXJhdG9yKG11dGFibGVRdWVyeS52YXJpYWJsZXMuc29ydEJ5LCBtdXRhYmxlUXVlcnkudmFyaWFibGVzLnNvcnREaXJlY3Rpb24gfHwgJ2FzYycpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IG11dGFibGUgcXVlcnkgdG8gYXJyYXlcbiAgICB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzLnB1c2gobXV0YWJsZVF1ZXJ5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaW5kUmVmZXRjaFF1ZXJpZXMob3B0czogRmluZE11dGFibGVXYXRjaFF1ZXJpZXNPcHRpb25zKTogSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUge1xuICAgIHJldHVybiB0aGlzLmZpbmRNdXRhYmxlV2F0Y2hRdWVyaWVzKG9wdHMpXG4gICAgICAvLyBXb3JrYXJvdW5kLCB0byBtYWtlIHJlZmV0Y2ggcXVlcmllcyB3b3JrczogdHJhbnNmb3JtIGludG8gYSBzaW1wbGUge3F1ZXJ5LCB2YXJpYWJsZXN9XG4gICAgICAubWFwKCh7cXVlcnksIHZhcmlhYmxlc30pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcXVlcnksIHZhcmlhYmxlcyB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPblN0YXJ0KCk6IFByb21pc2U8Uz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCBhcyBTKTtcbiAgfVxufVxuIl19
@@ -45,7 +45,7 @@ export class Base58 {
45
45
  }
46
46
  static decode(string) {
47
47
  if (string.length === 0)
48
- return (new Uint8Array());
48
+ return (new Uint8Array(0));
49
49
  const input = string.split('').map(function (c) {
50
50
  return Base58.getAlphabetMap()[c];
51
51
  });
@@ -75,4 +75,4 @@ export class Base58 {
75
75
  }
76
76
  }
77
77
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTU4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Jhc2U1OC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsZ0RBQWdEO0FBQ2hELGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsZ0VBQWdFO0FBQ2hFLGdDQUFnQztBQUNoQyw2Q0FBNkM7QUFFN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxNQUFNO0lBS1QsTUFBTSxDQUFDLGNBQWM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBa0I7UUFDckMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1FBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFBRSxN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O2dCQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQzthQUNsQjtTQUNGO1FBRUQsMEJBQTBCO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0FBdEVjLGVBQVEsR0FBRyw0REFBNEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEJhc2U1OCBlbmNvZGluZy9kZWNvZGluZ1xuLy8gT3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2UgSGVhcm4gZm9yIEJpdGNvaW5KXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluY1xuLy8gUG9ydGVkIHRvIEphdmFTY3JpcHQgYnkgU3RlZmFuIFRob21hc1xuLy8gTWVyZ2VkIEJ1ZmZlciByZWZhY3RvcmluZ3MgZnJvbSBiYXNlNTgtbmF0aXZlIGJ5IFN0ZXBoZW4gUGFpclxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEJpdFBheSBJbmNcbi8vIFJld3JpdHRlbiBpbiBUeXBlU2NyaXB0IGJ5IEx1ZG92aWMgUGVjcXVvdFxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIEJhc2U1OCB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWxwaGFiZXQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eic7XG4gIHByaXZhdGUgc3RhdGljIGFscGhhYmV0TWFwO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEFscGhhYmV0TWFwKCkge1xuICAgIGlmICghQmFzZTU4LmFscGhhYmV0TWFwKXtcbiAgICAgIHRoaXMuYWxwaGFiZXRNYXAgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQmFzZTU4LmFscGhhYmV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIEJhc2U1OC5hbHBoYWJldE1hcFtCYXNlNTguYWxwaGFiZXQuY2hhckF0KGkpXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBCYXNlNTguYWxwaGFiZXRNYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVuY29kZShidWZmZXI6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgICBsZXQgaTsgbGV0IGo7IGNvbnN0IGRpZ2l0cyA9IFswXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgZGlnaXRzLmxlbmd0aDsgaisrKSBkaWdpdHNbal0gPDw9IDg7XG4gICAgICBkaWdpdHNbZGlnaXRzLmxlbmd0aCAtIDFdICs9IGJ1ZmZlcltpXTtcblxuICAgICAgbGV0IGNhcnJ5ID0gMDtcbiAgICAgIGZvciAoaiA9IGRpZ2l0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSl7XG4gICAgICAgIGRpZ2l0c1tqXSArPSBjYXJyeTtcbiAgICAgICAgY2FycnkgPSAoZGlnaXRzW2pdIC8gNTgpIHwgMDtcbiAgICAgICAgZGlnaXRzW2pdICU9IDU4O1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkpIHtcbiAgICAgICAgZGlnaXRzLnVuc2hpZnQoY2FycnkpO1xuICAgICAgICBjYXJyeSA9IChkaWdpdHNbMF0gLyA1OCkgfCAwO1xuICAgICAgICBkaWdpdHNbMF0gJT0gNTg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVhbCB3aXRoIGxlYWRpbmcgemVyb3NcbiAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aCAtIDEgJiYgYnVmZmVyW2ldID09PSAwOyBpKyspIGRpZ2l0cy51bnNoaWZ0KDApO1xuXG4gICAgcmV0dXJuIGRpZ2l0cy5tYXAoZnVuY3Rpb24oZGlnaXQpIHsgcmV0dXJuIEJhc2U1OC5hbHBoYWJldFtkaWdpdF07IH0pLmpvaW4oJycpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkZWNvZGUoc3RyaW5nOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIChuZXcgVWludDhBcnJheSgpKTtcblxuICAgIGNvbnN0IGlucHV0ID0gc3RyaW5nLnNwbGl0KCcnKS5tYXAoZnVuY3Rpb24oYyl7XG4gICAgICByZXR1cm4gQmFzZTU4LmdldEFscGhhYmV0TWFwKClbY107XG4gICAgfSk7XG5cbiAgICBsZXQgaTsgbGV0IGo7IGNvbnN0IGJ5dGVzID0gWzBdO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGJ5dGVzLmxlbmd0aDsgaisrKSBieXRlc1tqXSAqPSA1ODtcbiAgICAgIGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICs9IGlucHV0W2ldO1xuXG4gICAgICBsZXQgY2FycnkgPSAwO1xuICAgICAgZm9yIChqID0gYnl0ZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pe1xuICAgICAgICBieXRlc1tqXSArPSBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBieXRlc1tqXSA+PiA4O1xuICAgICAgICBieXRlc1tqXSAmPSAweGZmO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkpIHtcbiAgICAgICAgYnl0ZXMudW5zaGlmdChjYXJyeSk7XG4gICAgICAgIGNhcnJ5ID0gYnl0ZXNbMF0gPj4gODtcbiAgICAgICAgYnl0ZXNbMF0gJj0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWFsIHdpdGggbGVhZGluZyB6ZXJvc1xuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGggLSAxICYmIGlucHV0W2ldID09PSAwOyBpKyspIGJ5dGVzLnVuc2hpZnQoMCk7XG4gICAgcmV0dXJuIChuZXcgVWludDhBcnJheShieXRlcykpO1xuICB9XG59XG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTU4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Jhc2U1OC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsZ0RBQWdEO0FBQ2hELGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsZ0VBQWdFO0FBQ2hFLGdDQUFnQztBQUNoQyw2Q0FBNkM7QUFFN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxNQUFNO0lBS1QsTUFBTSxDQUFDLGNBQWM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBa0I7UUFDckMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1FBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFBRSxN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LENBQUMsQ0FBQztnQkFDckIsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7YUFDbEI7U0FDRjtRQUVELDBCQUEwQjtRQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDOztBQXRFYyxlQUFRLEdBQUcsNERBQTRELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCYXNlNTggZW5jb2RpbmcvZGVjb2Rpbmdcbi8vIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWtlIEhlYXJuIGZvciBCaXRjb2luSlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmNcbi8vIFBvcnRlZCB0byBKYXZhU2NyaXB0IGJ5IFN0ZWZhbiBUaG9tYXNcbi8vIE1lcmdlZCBCdWZmZXIgcmVmYWN0b3JpbmdzIGZyb20gYmFzZTU4LW5hdGl2ZSBieSBTdGVwaGVuIFBhaXJcbi8vIENvcHlyaWdodCAoYykgMjAxMyBCaXRQYXkgSW5jXG4vLyBSZXdyaXR0ZW4gaW4gVHlwZVNjcmlwdCBieSBMdWRvdmljIFBlY3F1b3RcblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCYXNlNTgge1xuXG4gIHByaXZhdGUgc3RhdGljIGFscGhhYmV0ID0gJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonO1xuICBwcml2YXRlIHN0YXRpYyBhbHBoYWJldE1hcDtcblxuICBwcml2YXRlIHN0YXRpYyBnZXRBbHBoYWJldE1hcCgpIHtcbiAgICBpZiAoIUJhc2U1OC5hbHBoYWJldE1hcCl7XG4gICAgICB0aGlzLmFscGhhYmV0TWFwID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEJhc2U1OC5hbHBoYWJldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBCYXNlNTguYWxwaGFiZXRNYXBbQmFzZTU4LmFscGhhYmV0LmNoYXJBdChpKV0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQmFzZTU4LmFscGhhYmV0TWFwO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbmNvZGUoYnVmZmVyOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuXG4gICAgbGV0IGk7IGxldCBqOyBjb25zdCBkaWdpdHMgPSBbMF07XG4gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGRpZ2l0cy5sZW5ndGg7IGorKykgZGlnaXRzW2pdIDw8PSA4O1xuICAgICAgZGlnaXRzW2RpZ2l0cy5sZW5ndGggLSAxXSArPSBidWZmZXJbaV07XG5cbiAgICAgIGxldCBjYXJyeSA9IDA7XG4gICAgICBmb3IgKGogPSBkaWdpdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pe1xuICAgICAgICBkaWdpdHNbal0gKz0gY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gKGRpZ2l0c1tqXSAvIDU4KSB8IDA7XG4gICAgICAgIGRpZ2l0c1tqXSAlPSA1ODtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNhcnJ5KSB7XG4gICAgICAgIGRpZ2l0cy51bnNoaWZ0KGNhcnJ5KTtcbiAgICAgICAgY2FycnkgPSAoZGlnaXRzWzBdIC8gNTgpIHwgMDtcbiAgICAgICAgZGlnaXRzWzBdICU9IDU4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGggLSAxICYmIGJ1ZmZlcltpXSA9PT0gMDsgaSsrKSBkaWdpdHMudW5zaGlmdCgwKTtcblxuICAgIHJldHVybiBkaWdpdHMubWFwKGZ1bmN0aW9uKGRpZ2l0KSB7IHJldHVybiBCYXNlNTguYWxwaGFiZXRbZGlnaXRdOyB9KS5qb2luKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGVjb2RlKHN0cmluZzogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHJldHVybiAobmV3IFVpbnQ4QXJyYXkoMCkpO1xuXG4gICAgY29uc3QgaW5wdXQgPSBzdHJpbmcuc3BsaXQoJycpLm1hcChmdW5jdGlvbihjKXtcbiAgICAgIHJldHVybiBCYXNlNTguZ2V0QWxwaGFiZXRNYXAoKVtjXTtcbiAgICB9KTtcblxuICAgIGxldCBpOyBsZXQgajsgY29uc3QgYnl0ZXMgPSBbMF07XG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgYnl0ZXMubGVuZ3RoOyBqKyspIGJ5dGVzW2pdICo9IDU4O1xuICAgICAgYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMV0gKz0gaW5wdXRbaV07XG5cbiAgICAgIGxldCBjYXJyeSA9IDA7XG4gICAgICBmb3IgKGogPSBieXRlcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSl7XG4gICAgICAgIGJ5dGVzW2pdICs9IGNhcnJ5O1xuICAgICAgICBjYXJyeSA9IGJ5dGVzW2pdID4+IDg7XG4gICAgICAgIGJ5dGVzW2pdICY9IDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChjYXJyeSkge1xuICAgICAgICBieXRlcy51bnNoaWZ0KGNhcnJ5KTtcbiAgICAgICAgY2FycnkgPSBieXRlc1swXSA+PiA4O1xuICAgICAgICBieXRlc1swXSAmPSAweGZmO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAtIDEgJiYgaW5wdXRbaV0gPT09IDA7IGkrKykgYnl0ZXMudW5zaGlmdCgwKTtcbiAgICByZXR1cm4gKG5ldyBVaW50OEFycmF5KGJ5dGVzKSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,129 +1,114 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { box, sign, verify, hash } from 'tweetnacl';
3
2
  import { Base58 } from './base58';
3
+ import { scryptEncode } from '@polkadot/util-crypto/scrypt/encode';
4
+ import { cryptoWaitReady, ed25519PairFromSeed, ed25519Sign, ed25519Verify } from '@polkadot/util-crypto';
5
+ import { sha512 } from '@noble/hashes/sha512';
6
+ import { sha256 } from '@noble/hashes/sha256';
7
+ import { utils } from '@noble/ed25519';
8
+ import { bytesToHex as toHex } from '@noble/hashes/utils';
9
+ import { decodeUTF8, decodeBase64, encodeBase64 } from 'tweetnacl-util';
4
10
  import * as i0 from "@angular/core";
5
- const scrypt = require('scrypt-async');
6
- const sha256 = require('hash.js/lib/hash/sha/256');
7
- const sha512 = require('hash.js/lib/hash/sha/512');
8
- const nacl = {
9
- sign,
10
- box,
11
- hash,
12
- verify,
13
- util: require('tweetnacl-util'),
14
- constants: {
15
- crypto_sign_BYTES: 64,
16
- SEED_LENGTH: 32,
17
- SCRYPT_PARAMS: {
18
- SIMPLE: {
19
- N: 2048,
20
- r: 8,
21
- p: 1,
22
- memory: -1 // default
23
- },
24
- DEFAULT: {
25
- N: 4096,
26
- r: 16,
27
- p: 1,
28
- memory: -1 // default
29
- },
30
- SECURE: {
31
- N: 16384,
32
- r: 32,
33
- p: 2,
34
- memory: -1 // default
35
- },
36
- HARDEST: {
37
- N: 65536,
38
- r: 32,
39
- p: 4,
40
- memory: -1 // default
41
- },
42
- EXTREME: {
43
- N: 262144,
44
- r: 64,
45
- p: 8,
46
- memory: -1 // default
47
- }
48
- }
11
+ export const ED25519_SEED_LENGTH = 32; // Length of a ED25519 seed
12
+ export const SCRYPT_PARAMS = {
13
+ SIMPLE: {
14
+ N: 2048,
15
+ r: 8,
16
+ p: 1
17
+ },
18
+ DEFAULT: {
19
+ N: 4096,
20
+ r: 16,
21
+ p: 1
22
+ },
23
+ SECURE: {
24
+ N: 16384,
25
+ r: 32,
26
+ p: 2
27
+ },
28
+ HARDEST: {
29
+ N: 65536,
30
+ r: 32,
31
+ p: 4
32
+ },
33
+ EXTREME: {
34
+ N: 262144,
35
+ r: 64,
36
+ p: 8
49
37
  }
50
38
  };
51
39
  export class CryptoService {
40
+ static get started() {
41
+ return this._ready;
42
+ }
43
+ static async ready() {
44
+ if (this._ready)
45
+ return; // OK
46
+ await cryptoWaitReady();
47
+ this._ready = true;
48
+ }
52
49
  /**
53
- * Generate sign keypair, sugin scrypt, from a salt and a password
50
+ * Generate a sign keypair, using scrypt, from a salt and a password
54
51
  *
55
52
  * @param salt
56
53
  * @param password
57
54
  * @param scryptParams
58
55
  */
59
- scryptKeypair(salt, password, scryptParams) {
60
- return new Promise((resolve) => {
61
- scrypt(password, salt, {
62
- N: scryptParams && scryptParams.N || nacl.constants.SCRYPT_PARAMS.DEFAULT.N,
63
- r: scryptParams && scryptParams.r || nacl.constants.SCRYPT_PARAMS.DEFAULT.r,
64
- p: scryptParams && scryptParams.p || nacl.constants.SCRYPT_PARAMS.DEFAULT.p,
65
- dkLen: nacl.constants.SEED_LENGTH,
66
- encoding: 'base64'
67
- }, function (derivedKey) {
68
- resolve(derivedKey);
69
- });
70
- })
71
- .then((seed) => {
72
- const byteseed = nacl.util.decodeBase64(seed);
73
- const signKeypair = nacl.sign.keyPair.fromSeed(byteseed);
74
- return {
75
- publicKey: signKeypair.publicKey,
76
- secretKey: signKeypair.secretKey
77
- };
78
- });
56
+ static async scryptKeypair(salt, password, scryptParams) {
57
+ if (!this.started)
58
+ await this.ready();
59
+ const passwordU8a = decodeUTF8(password);
60
+ const saltU8a = decodeUTF8(salt);
61
+ const result = scryptEncode(passwordU8a, saltU8a, scryptParams || SCRYPT_PARAMS.DEFAULT);
62
+ const seed = result.password.slice(0, ED25519_SEED_LENGTH);
63
+ return ed25519PairFromSeed(seed);
79
64
  }
80
65
  /**
81
66
  * Sign a message, from a key pair
82
67
  */
83
- sign(message, keypair) {
84
- return new Promise((resolve) => {
85
- const m = nacl.util.decodeUTF8(message);
86
- const signedMsg = nacl.sign(m, keypair.secretKey);
87
- const sig = new Uint8Array(nacl.constants.crypto_sign_BYTES);
88
- for (let i = 0; i < sig.length; i++)
89
- sig[i] = signedMsg[i];
90
- const signature = nacl.util.encodeBase64(sig);
91
- resolve(signature);
92
- });
68
+ static async sign(message, keypair) {
69
+ if (!this.started)
70
+ await this.ready();
71
+ const m = decodeUTF8(message);
72
+ const sig = ed25519Sign(m, keypair);
73
+ return encodeBase64(sig);
93
74
  }
94
75
  /**
95
76
  * Sign a message, from a key pair
96
77
  */
97
- verify(message, signature, pubkey) {
98
- return new Promise((resolve) => {
99
- const m = nacl.util.decodeUTF8(message);
100
- const sig = nacl.util.decodeBase64(signature);
101
- const pub = Base58.decode(pubkey);
102
- const res = nacl.sign.detached.verify(m, sig, pub);
103
- resolve(res);
104
- });
78
+ static async verify(message, signature, publicKey) {
79
+ if (!this.started)
80
+ await this.ready();
81
+ const m = decodeUTF8(message);
82
+ const sig = decodeBase64(signature);
83
+ const pub = Base58.decode(publicKey);
84
+ return ed25519Verify(m, sig, pub);
105
85
  }
106
86
  /**
107
- * Hash (using SHA256) a message
87
+ * Hash (using SHA256) a message, as Hex
108
88
  */
109
- sha256(message) {
110
- return sha256().update(message).digest('hex');
89
+ static sha256(message) {
90
+ const m = decodeUTF8(message);
91
+ const bytes = sha256(utils.concatBytes(m));
92
+ return toHex(bytes);
111
93
  }
112
94
  /**
113
- * Hash (using SHA512) a message
95
+ * Hash (using SHA512) a message, as Hex
114
96
  */
115
- sha512(message) {
116
- return sha512().update(message).digest('hex');
97
+ static sha512(message) {
98
+ const m = decodeUTF8(message);
99
+ const bytes = sha512(utils.concatBytes(m));
100
+ return toHex(bytes);
117
101
  }
118
- encodeBase64(message) {
119
- const m = nacl.util.decodeUTF8(message);
120
- return nacl.util.encodeBase64(m);
102
+ static encodeBase64(message) {
103
+ const m = decodeUTF8(message);
104
+ return encodeBase64(m);
121
105
  }
122
106
  }
107
+ CryptoService._ready = false;
123
108
  CryptoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
124
109
  CryptoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, providedIn: 'root' });
125
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, decorators: [{
126
111
  type: Injectable,
127
112
  args: [{ providedIn: 'root' }]
128
113
  }] });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7O0FBRWhDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2QyxNQUFNLE1BQU0sR0FBSSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUNwRCxNQUFNLE1BQU0sR0FBSSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVwRCxNQUFNLElBQUksR0FBRztJQUNYLElBQUk7SUFDSixHQUFHO0lBQ0gsSUFBSTtJQUNKLE1BQU07SUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLFNBQVMsRUFBRTtRQUNULGlCQUFpQixFQUFFLEVBQUU7UUFDckIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUU7WUFDYixNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxFQUFFLElBQUk7Z0JBQ1AsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVU7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsQ0FBQyxFQUFFLElBQUk7Z0JBQ1AsQ0FBQyxFQUFFLEVBQUU7Z0JBQ0wsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVU7YUFDdEI7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxFQUFFLEtBQUs7Z0JBQ1Is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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2JveCwgc2lnbiwgdmVyaWZ5LCBoYXNofSBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHtCYXNlNTh9IGZyb20gJy4vYmFzZTU4JztcblxuY29uc3Qgc2NyeXB0ID0gcmVxdWlyZSgnc2NyeXB0LWFzeW5jJyk7XG5jb25zdCBzaGEyNTYgPSAgcmVxdWlyZSgnaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2Jyk7XG5jb25zdCBzaGE1MTIgPSAgcmVxdWlyZSgnaGFzaC5qcy9saWIvaGFzaC9zaGEvNTEyJyk7XG5cbmNvbnN0IG5hY2wgPSB7XG4gIHNpZ24sXG4gIGJveCxcbiAgaGFzaCxcbiAgdmVyaWZ5LFxuICB1dGlsOiByZXF1aXJlKCd0d2VldG5hY2wtdXRpbCcpLFxuICBjb25zdGFudHM6IHtcbiAgICBjcnlwdG9fc2lnbl9CWVRFUzogNjQsXG4gICAgU0VFRF9MRU5HVEg6IDMyLCAvLyBMZW5ndGggb2YgdGhlIGtleVxuICAgIFNDUllQVF9QQVJBTVM6IHtcbiAgICAgIFNJTVBMRToge1xuICAgICAgICBOOiAyMDQ4LFxuICAgICAgICByOiA4LFxuICAgICAgICBwOiAxLFxuICAgICAgICBtZW1vcnk6IC0xIC8vIGRlZmF1bHRcbiAgICAgIH0sXG4gICAgICBERUZBVUxUOiB7XG4gICAgICAgIE46IDQwOTYsXG4gICAgICAgIHI6IDE2LFxuICAgICAgICBwOiAxLFxuICAgICAgICBtZW1vcnk6IC0xIC8vIGRlZmF1bHRcbiAgICAgIH0sXG4gICAgICBTRUNVUkU6IHtcbiAgICAgICAgTjogMTYzODQsXG4gICAgICAgIHI6IDMyLFxuICAgICAgICBwOiAyLFxuICAgICAgICBtZW1vcnk6IC0xIC8vIGRlZmF1bHRcbiAgICAgIH0sXG4gICAgICBIQVJERVNUOiB7XG4gICAgICAgIE46IDY1NTM2LFxuICAgICAgICByOiAzMixcbiAgICAgICAgcDogNCxcbiAgICAgICAgbWVtb3J5OiAtMSAvLyBkZWZhdWx0XG4gICAgICB9LFxuICAgICAgRVhUUkVNRToge1xuICAgICAgICBOOiAyNjIxNDQsXG4gICAgICAgIHI6IDY0LFxuICAgICAgICBwOiA4LFxuICAgICAgICBtZW1vcnk6IC0xIC8vIGRlZmF1bHRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3J5cHRvU2FsdFBhcmFtcyB7XG4gIE46IG51bWJlcjtcbiAgcjogbnVtYmVyO1xuICBwOiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXIge1xuICBwdWJsaWNLZXk6IFVpbnQ4QXJyYXk7XG4gIHNlY3JldEtleTogVWludDhBcnJheTtcbn1cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQ3J5cHRvU2VydmljZSB7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNpZ24ga2V5cGFpciwgc3VnaW4gc2NyeXB0LCBmcm9tIGEgc2FsdCBhbmQgYSBwYXNzd29yZFxuICAgKlxuICAgKiBAcGFyYW0gc2FsdFxuICAgKiBAcGFyYW0gcGFzc3dvcmRcbiAgICogQHBhcmFtIHNjcnlwdFBhcmFtc1xuICAgKi9cbiAgcHVibGljIHNjcnlwdEtleXBhaXIoc2FsdDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBzY3J5cHRQYXJhbXM/OiBDcnlwdG9TYWx0UGFyYW1zKTogUHJvbWlzZTxLZXlQYWlyPiB7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNjcnlwdChwYXNzd29yZCwgc2FsdCwge1xuICAgICAgICBOOiBzY3J5cHRQYXJhbXMgJiYgc2NyeXB0UGFyYW1zLk4gfHwgbmFjbC5jb25zdGFudHMuU0NSWVBUX1BBUkFNUy5ERUZBVUxULk4sXG4gICAgICAgIHI6IHNjcnlwdFBhcmFtcyAmJiBzY3J5cHRQYXJhbXMuciB8fCBuYWNsLmNvbnN0YW50cy5TQ1JZUFRfUEFSQU1TLkRFRkFVTFQucixcbiAgICAgICAgcDogc2NyeXB0UGFyYW1zICYmIHNjcnlwdFBhcmFtcy5wIHx8IG5hY2wuY29uc3RhbnRzLlNDUllQVF9QQVJBTVMuREVGQVVMVC5wLFxuICAgICAgICBka0xlbjogbmFjbC5jb25zdGFudHMuU0VFRF9MRU5HVEgsXG4gICAgICAgIGVuY29kaW5nOiAnYmFzZTY0J1xuICAgICAgfSwgZnVuY3Rpb24oZGVyaXZlZEtleSkge1xuICAgICAgICByZXNvbHZlKGRlcml2ZWRLZXkpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgICAgIC50aGVuKChzZWVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzZWVkID0gbmFjbC51dGlsLmRlY29kZUJhc2U2NChzZWVkKTtcbiAgICAgICAgY29uc3Qgc2lnbktleXBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChieXRlc2VlZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHVibGljS2V5OiBzaWduS2V5cGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgc2VjcmV0S2V5OiBzaWduS2V5cGFpci5zZWNyZXRLZXlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBtZXNzYWdlLCBmcm9tIGEga2V5IHBhaXJcbiAgICovXG4gIHB1YmxpYyBzaWduKG1lc3NhZ2U6IHN0cmluZywga2V5cGFpcjogS2V5UGFpcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBtID0gbmFjbC51dGlsLmRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgICBjb25zdCBzaWduZWRNc2cgPSBuYWNsLnNpZ24obSwga2V5cGFpci5zZWNyZXRLZXkpO1xuICAgICAgY29uc3Qgc2lnID0gbmV3IFVpbnQ4QXJyYXkobmFjbC5jb25zdGFudHMuY3J5cHRvX3NpZ25fQllURVMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWcubGVuZ3RoOyBpKyspIHNpZ1tpXSA9IHNpZ25lZE1zZ1tpXTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQoc2lnKTtcbiAgICAgIHJlc29sdmUoc2lnbmF0dXJlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgbWVzc2FnZSwgZnJvbSBhIGtleSBwYWlyXG4gICAqL1xuICBwdWJsaWMgdmVyaWZ5KG1lc3NhZ2U6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIHB1YmtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBtID0gbmFjbC51dGlsLmRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgICBjb25zdCBzaWcgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0KHNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBwdWIgPSBCYXNlNTguZGVjb2RlKHB1YmtleSk7XG4gICAgICBjb25zdCByZXMgPSBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG0sIHNpZywgcHViKTtcbiAgICAgIHJlc29sdmUocmVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEEyNTYpIGEgbWVzc2FnZVxuICAgKi9cbiAgc2hhMjU2KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNoYTI1NigpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhc2ggKHVzaW5nIFNIQTUxMikgYSBtZXNzYWdlXG4gICAqL1xuICBzaGE1MTIobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2hhNTEyKCkudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgnaGV4Jyk7XG4gIH1cblxuICBlbmNvZGVCYXNlNjQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtID0gbmFjbC51dGlsLmRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgcmV0dXJuIG5hY2wudXRpbC5lbmNvZGVCYXNlNjQobSk7XG4gIH1cbn1cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMsVUFBVSxJQUFJLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUV0RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBQywyQkFBMkI7QUFFbEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLE1BQU0sRUFBVTtRQUNkLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFVO1FBQ2YsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxNQUFNLEVBQVU7UUFDZCxDQUFDLEVBQUUsS0FBSztRQUNSLENBQUMsRUFBRSxFQUFFO1FB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QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDakMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O0FBekVjLG9CQUFNLEdBQUcsS0FBTSxDQUFBOzBHQUZuQixhQUFhOzhHQUFiLGFBQWEsY0FERCxNQUFNOzJGQUNsQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Jhc2U1OH0gZnJvbSAnLi9iYXNlNTgnO1xuXG5pbXBvcnQge3NjcnlwdEVuY29kZX0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3NjcnlwdC9lbmNvZGUnO1xuaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0by9zY3J5cHQvdHlwZXMnO1xuaW1wb3J0IHtjcnlwdG9XYWl0UmVhZHksIGVkMjU1MTlQYWlyRnJvbVNlZWQsIGVkMjU1MTlTaWduLCBlZDI1NTE5VmVyaWZ5fSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuXG5pbXBvcnQge3NoYTUxMn0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGE1MTInO1xuaW1wb3J0IHtzaGEyNTZ9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JztcbmltcG9ydCB7dXRpbHN9IGZyb20gJ0Bub2JsZS9lZDI1NTE5JztcblxuaW1wb3J0IHtieXRlc1RvSGV4IGFzIHRvSGV4fSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7S2V5cGFpcn0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3R5cGVzJztcbmltcG9ydCB7ZGVjb2RlVVRGOCwgZGVjb2RlQmFzZTY0LCBlbmNvZGVCYXNlNjR9IGZyb20gJ3R3ZWV0bmFjbC11dGlsJztcblxuZXhwb3J0IGNvbnN0IEVEMjU1MTlfU0VFRF9MRU5HVEggPSAzMjsgLy8gTGVuZ3RoIG9mIGEgRUQyNTUxOSBzZWVkXG5cbmV4cG9ydCBjb25zdCBTQ1JZUFRfUEFSQU1TID0ge1xuICBTSU1QTEU6IDxQYXJhbXM+e1xuICAgIE46IDIwNDgsXG4gICAgcjogOCxcbiAgICBwOiAxXG4gIH0sXG4gIERFRkFVTFQ6IDxQYXJhbXM+e1xuICAgIE46IDQwOTYsXG4gICAgcjogMTYsXG4gICAgcDogMVxuICB9LFxuICBTRUNVUkU6IDxQYXJhbXM+e1xuICAgIE46IDE2Mzg0LFxuICAgIHI6IDMyLFxuICAgIHA6IDJcbiAgfSxcbiAgSEFSREVTVDogPFBhcmFtcz57XG4gICAgTjogNjU1MzYsXG4gICAgcjogMzIsXG4gICAgcDogNFxuICB9LFxuICBFWFRSRU1FOiA8UGFyYW1zPntcbiAgICBOOiAyNjIxNDQsXG4gICAgcjogNjQsXG4gICAgcDogOFxuICB9XG59O1xuXG5cbmV4cG9ydCB7S2V5cGFpcn07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIENyeXB0b1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGljIF9yZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldCBzdGFydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9yZWFkeSkgcmV0dXJuOyAvLyBPS1xuXG4gICAgYXdhaXQgY3J5cHRvV2FpdFJlYWR5KCk7XG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc2lnbiBrZXlwYWlyLCB1c2luZyBzY3J5cHQsIGZyb20gYSBzYWx0IGFuZCBhIHBhc3N3b3JkXG4gICAqXG4gICAqIEBwYXJhbSBzYWx0XG4gICAqIEBwYXJhbSBwYXNzd29yZFxuICAgKiBAcGFyYW0gc2NyeXB0UGFyYW1zXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2NyeXB0S2V5cGFpcihzYWx0OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIHNjcnlwdFBhcmFtcz86IFBhcmFtcyk6IFByb21pc2U8S2V5cGFpcj4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgY29uc3QgcGFzc3dvcmRVOGEgPSBkZWNvZGVVVEY4KHBhc3N3b3JkKTtcbiAgICBjb25zdCBzYWx0VThhID0gZGVjb2RlVVRGOChzYWx0KTtcbiAgICBjb25zdCByZXN1bHQgPSBzY3J5cHRFbmNvZGUocGFzc3dvcmRVOGEsIHNhbHRVOGEsIHNjcnlwdFBhcmFtcyB8fCBTQ1JZUFRfUEFSQU1TLkRFRkFVTFQpO1xuICAgIGNvbnN0IHNlZWQgPSByZXN1bHQucGFzc3dvcmQuc2xpY2UoMCwgRUQyNTUxOV9TRUVEX0xFTkdUSCk7XG4gICAgcmV0dXJuIGVkMjU1MTlQYWlyRnJvbVNlZWQoc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UsIGZyb20gYSBrZXkgcGFpclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ24obWVzc2FnZTogc3RyaW5nLCBrZXlwYWlyOiBLZXlwYWlyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZWQyNTUxOVNpZ24obSwga2V5cGFpcik7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChzaWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBtZXNzYWdlLCBmcm9tIGEga2V5IHBhaXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnkobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnID0gZGVjb2RlQmFzZTY0KHNpZ25hdHVyZSk7XG4gICAgY29uc3QgcHViID0gQmFzZTU4LmRlY29kZShwdWJsaWNLZXkpO1xuICAgIHJldHVybiBlZDI1NTE5VmVyaWZ5KG0sIHNpZywgcHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEEyNTYpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhMjU2KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSkgYXMgVWludDhBcnJheTtcbiAgICBjb25zdCBieXRlcyA9IHNoYTI1Nih1dGlscy5jb25jYXRCeXRlcyhtKSk7XG4gICAgcmV0dXJuIHRvSGV4KGJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEE1MTIpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgY29uc3QgYnl0ZXMgPSBzaGE1MTIodXRpbHMuY29uY2F0Qnl0ZXMobSkpO1xuICAgIHJldHVybiB0b0hleChieXRlcyk7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlQmFzZTY0KG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGRlY29kZVVURjgobWVzc2FnZSk7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NChtKTtcbiAgfVxufVxuIl19