@wavemaker/app-ng-runtime 11.11.0-next.27920 → 11.11.0-rc.6109

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 (61) hide show
  1. package/build-task/bundles/index.umd.js +1 -1
  2. package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +2 -2
  3. package/build-task/fesm2022/index.mjs +1 -1
  4. package/build-task/fesm2022/index.mjs.map +1 -1
  5. package/components/base/bundles/index.umd.js +11 -7
  6. package/components/base/esm2022/pipes/custom-pipes.mjs +3 -2
  7. package/components/base/esm2022/utils/form-utils.mjs +3 -2
  8. package/components/base/fesm2022/index.mjs +7 -4
  9. package/components/base/fesm2022/index.mjs.map +1 -1
  10. package/components/base/pipes/custom-pipes.d.ts +1 -1
  11. package/components/chart/bundles/index.umd.js +4 -2
  12. package/components/chart/esm2022/chart.utils.mjs +3 -2
  13. package/components/chart/fesm2022/index.mjs +2 -1
  14. package/components/chart/fesm2022/index.mjs.map +1 -1
  15. package/components/containers/wizard/bundles/index.umd.js +1 -1
  16. package/components/containers/wizard/esm2022/wizard.component.mjs +2 -2
  17. package/components/containers/wizard/fesm2022/index.mjs +1 -1
  18. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  19. package/components/data/table/bundles/index.umd.js +4 -2
  20. package/components/data/table/esm2022/table-filter.directive.mjs +3 -2
  21. package/components/data/table/fesm2022/index.mjs +2 -1
  22. package/components/data/table/fesm2022/index.mjs.map +1 -1
  23. package/components/input/calendar/bundles/index.umd.js +5 -3
  24. package/components/input/calendar/esm2022/calendar.component.mjs +4 -3
  25. package/components/input/calendar/fesm2022/index.mjs +3 -2
  26. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  27. package/components/input/epoch/bundles/index.umd.js +45 -39
  28. package/components/input/epoch/esm2022/base-date-time.component.mjs +3 -2
  29. package/components/input/epoch/esm2022/date/imaskUtil.mjs +3 -2
  30. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +5 -4
  31. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -3
  32. package/components/input/epoch/esm2022/time/time.component.mjs +4 -3
  33. package/components/input/epoch/fesm2022/index.mjs +43 -38
  34. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  35. package/core/bundles/index.umd.js +6 -4
  36. package/core/esm2022/types/types.mjs +1 -1
  37. package/core/esm2022/utils/utils.mjs +3 -2
  38. package/core/fesm2022/index.mjs +2 -1
  39. package/core/fesm2022/index.mjs.map +1 -1
  40. package/core/types/types.d.ts +1 -0
  41. package/npm-shrinkwrap.json +2 -2
  42. package/oAuth/bundles/index.umd.js +4 -2
  43. package/oAuth/esm2022/oAuth.utils.mjs +3 -2
  44. package/oAuth/fesm2022/index.mjs +2 -1
  45. package/oAuth/fesm2022/index.mjs.map +1 -1
  46. package/package-lock.json +2 -2
  47. package/package.json +1 -1
  48. package/runtime/base/bundles/index.umd.js +12 -4
  49. package/runtime/base/esm2022/services/app.service.mjs +8 -1
  50. package/runtime/base/esm2022/services/i18n.service.mjs +3 -2
  51. package/runtime/base/fesm2022/index.mjs +8 -1
  52. package/runtime/base/fesm2022/index.mjs.map +1 -1
  53. package/runtime/base/services/app.service.d.ts +1 -0
  54. package/transpiler/bundles/index.umd.js +1 -1
  55. package/transpiler/esm2022/imports.mjs +2 -2
  56. package/transpiler/fesm2022/index.mjs +1 -1
  57. package/transpiler/fesm2022/index.mjs.map +1 -1
  58. package/variables/bundles/index.umd.js +5 -2
  59. package/variables/esm2022/util/variable/variables.utils.mjs +3 -2
  60. package/variables/fesm2022/index.mjs +2 -1
  61. package/variables/fesm2022/index.mjs.map +1 -1
@@ -78,6 +78,7 @@ export declare abstract class App {
78
78
  reload: Function;
79
79
  on401: Function;
80
80
  notifyApp: Function;
81
+ importModule: Function;
81
82
  getDependency: Function;
82
83
  networkStatus: any;
83
84
  notify: (eventName: string, data?: any) => void;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.11.0-next.27920",
3
+ "version": "11.11.0-rc.6109",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.11.0-next.27920",
9
+ "version": "11.11.0-rc.6109",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@wm/core'), require('lodash-es'), require('moment')) :
3
3
  typeof define === 'function' && define.amd ? define(['exports', '@angular/core', 'rxjs', '@wm/core', 'lodash-es', 'moment'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.oAuth = {}), global.ng.core, global.rxjs, global.wm.core, global._, global.moment));
5
- })(this, (function (exports, i0, rxjs, i1, lodashEs, moment) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.oAuth = {}), global.ng.core, global.rxjs, global.wm.core, global._, global.momentLib));
5
+ })(this, (function (exports, i0, rxjs, i1, lodashEs, momentLib) { 'use strict';
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
8
  var n = Object.create(null);
@@ -23,7 +23,9 @@
23
23
 
24
24
  var i0__namespace = /*#__PURE__*/_interopNamespaceDefault(i0);
25
25
  var i1__namespace = /*#__PURE__*/_interopNamespaceDefault(i1);
26
+ var momentLib__namespace = /*#__PURE__*/_interopNamespaceDefault(momentLib);
26
27
 
28
+ const moment = momentLib__namespace.default || window['moment'];
27
29
  const accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';
28
30
  let code_verifier, redirectUri;
29
31
  const parseConfig = (serviceParams) => {
@@ -1,6 +1,7 @@
1
1
  import { _WM_APP_PROJECT, isIE, getWmProjectProperties } from '@wm/core';
2
2
  import { get, isUndefined } from "lodash-es";
3
- import moment from 'moment';
3
+ import * as momentLib from 'moment';
4
+ const moment = momentLib.default || window['moment'];
4
5
  const accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';
5
6
  let code_verifier, redirectUri;
6
7
  export const parseConfig = (serviceParams) => {
@@ -419,4 +420,4 @@ export const performAuthorization = (url, providerId, onSuccess, onError, http,
419
420
  }
420
421
  }
421
422
  };
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0F1dGgudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9vQXV0aC9zcmMvb0F1dGgudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRzVCLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxFQUFFLGNBQWMsR0FBRyxNQUFNLEVBQUUsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBRXBHLElBQUksYUFBYSxFQUFFLFdBQVcsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFrQixFQUFPLEVBQUU7SUFFbkQsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBRTFDLE1BQU0sR0FBRztRQUNMLEdBQUcsRUFBRSw4Q0FBOEM7UUFDbkQsTUFBTSxFQUFFLEtBQUs7S0FDaEIsQ0FBQztJQUVGLHFHQUFxRztJQUNyRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUMzRCxNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUV0QyxxQ0FBcUM7UUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUNELGlEQUFpRDtJQUNqRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ1osS0FBSyxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxvQkFBb0I7SUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUNELG1GQUFtRjtJQUNuRixJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFDRCx1QkFBdUI7SUFDdkIsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQzNDLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsTUFBTSxDQUFDLFlBQVksR0FBTSxhQUFhLENBQUMsWUFBWSxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxZQUFZLEdBQU0sYUFBYSxDQUFDLFlBQVksQ0FBQztJQUNwRCxNQUFNLENBQUMsUUFBUSxHQUFVLGFBQWEsQ0FBQyxRQUFRLENBQUM7SUFDaEQsTUFBTSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxZQUFZLEdBQU0sYUFBYSxDQUFDLFlBQVksQ0FBQztJQUVwRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQ2hCLHdCQUF3QixHQUFHO0lBQ3ZCLFFBQVEsRUFBRSxZQUFZO0lBQ3RCLEtBQUssRUFBRSxTQUFTO0NBQ25CLEVBQ0QsY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBRTVDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDMUMsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxRQUFRO0lBQ3ZDLElBQUksY0FBYyxDQUFDO0lBQ25CLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBQ3hHLE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsNkJBQTZCO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztJQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBUSxFQUFFLFdBQVc7SUFDekMsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxJQUFLLEVBQUUsV0FBWTtJQUNsSCxNQUFNLGNBQWMsR0FBRyxVQUFVLEdBQUcsaUJBQWlCLEVBQ2pELGlCQUFpQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE9BQU87SUFDWCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxpQkFBaUIsR0FBRywrQ0FBK0MsR0FBRyxhQUFhLEdBQUcsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1lBQ2xMLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ04sTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFO29CQUNMLGNBQWMsRUFBRSxtQ0FBbUM7aUJBQ3REO2dCQUNELEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsSUFBSSxFQUFFLEdBQUc7YUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVMsUUFBUTtnQkFDckIsaUNBQWlDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3SSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osaUNBQWlDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNwSSxDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUNBQWlDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxjQUFjLEVBQUUsS0FBSztJQUN2SCw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxZQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCO0lBQy9HLDZCQUE2QixFQUFFLENBQUM7SUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBYyxDQUFDLEVBQ3pFLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMxQyxXQUFXLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2QsUUFBUSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUN0QyxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsNEJBQTRCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO1NBQU0sQ0FBQztRQUNKLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWix3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDaEgsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBYTtJQUMzRSxJQUFJLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsK0hBQStIO1lBQ3RKLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdHLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNCLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ1gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUNEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVksRUFBRSxpQkFBa0IsRUFBRSxlQUFnQixFQUFFLFdBQVk7SUFDekosTUFBTSxRQUFRLEdBQUc7UUFDYix1QkFBdUIsRUFBRSxLQUFLO0tBQ2pDLENBQUM7SUFDRixJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztBQUNoSyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUk7SUFDcEMsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRCxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RCxJQUFJLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUMxQixJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLElBQUssRUFBRSxXQUFZO0lBQzNGLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLFNBQVMsb0JBQW9CO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxTQUFTLGdCQUFnQixDQUFDLEtBQUs7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQscUNBQXFDO0FBQ3JDLFNBQVMsZUFBZSxDQUFDLEdBQUc7SUFDeEIsdUZBQXVGO0lBQ3ZGLHNFQUFzRTtJQUN0RSx1REFBdUQ7SUFDdkQsMERBQTBEO0lBQzFELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsV0FBWSxFQUFFLGlCQUFrQixFQUFFLGVBQWdCLEVBQUUsV0FBWSxFQUFFLElBQUs7SUFDOUosSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsNkJBQTZCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BILGNBQWMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqSixDQUFDO1NBQU0sSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsMEVBQTBFO1FBQzFFLGFBQWEsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksY0FBYyxDQUFDO1FBQ25CLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzdELGNBQWMsR0FBRyxhQUFhLENBQUM7WUFDL0IsR0FBRyxHQUFHLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM5SCxjQUFjLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakosQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxjQUFjLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2hELGlDQUFpQztZQUNqQyxHQUFHLEdBQUcsNkJBQTZCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlILGNBQWMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqSixDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixjQUFjLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakosQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxXQUFZLEVBQUUsaUJBQWtCLEVBQUUsZUFBZ0IsRUFBRSxXQUFZLEVBQUUsSUFBSztJQUNySixJQUFJLFdBQVcsQ0FBQztJQUNaLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekYsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsZUFBZ0IsRUFBRSxXQUFZO0lBQzlILFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLENBQUM7SUFDM0UsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEYsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLHNCQUFzQixFQUFFLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xELFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyw0QkFBNEIsQ0FBQztJQUNqRyxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxXQUFXLEdBQUcsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0lBQ3JELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbEcsS0FBSyxHQUFHLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFDLENBQUM7SUFDdkksTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQiwwQkFBMEI7UUFDMUIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO1NBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkQsNENBQTRDO1FBQzVDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztTQUFNLENBQUM7UUFDSiwrREFBK0Q7UUFDL0QsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsUUFBUSxHQUFHLGdCQUFnQixHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4TixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3JGLEdBQUcsR0FBRyxTQUFTLEdBQUcsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0lBQ3ZELENBQUM7U0FBTSxDQUFDO1FBQ0osR0FBRyxHQUFHLFNBQVMsR0FBRyxxQ0FBcUMsR0FBRyxjQUFjLEdBQUcseUJBQXlCLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBQzNKLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixFQUNoQyxlQUFlLEdBQUcsV0FBVyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxvQkFBb0I7UUFDNUIsTUFBTSxFQUFFLE1BQU07UUFDZCxTQUFTLEVBQUU7WUFDUCxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUU7WUFDN0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFO1lBQ0osbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtTQUNoRDtLQUNKLENBQUMsQ0FBQztJQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXO0lBQ25NLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDNUgseUJBQXlCLENBQUM7UUFDdEIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsR0FBRyxFQUFFLE9BQU87UUFDWixNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1QsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsa0JBQWtCO2dCQUM1QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN0SixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osdUJBQXVCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUosQ0FBQztRQUNMLENBQUM7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO0lBQzFELE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNwQixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFHRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsV0FBWSxFQUFFLGVBQWdCLEVBQUUsV0FBWSxFQUFFLEVBQUU7SUFDckwsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNOLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtZQUM1QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUN4RixDQUFDO2FBQU0sQ0FBQztZQUNKLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDRCQUE0QixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1SCxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDN0YsNkJBQTZCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSw0QkFBNEIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BNLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxtQkFBbUIsQ0FBQztnQkFDdkIsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLG1CQUFtQixFQUFFLGlCQUFpQjthQUN6QyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN2Qiw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDek0sQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9XTV9BUFBfUFJPSkVDVCwgaXNJRSwgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Z2V0LCBpc1VuZGVmaW5lZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5kZWNsYXJlIGNvbnN0IGpzU0hBO1xuXG5jb25zdCBhY2Nlc3NUb2tlblN1ZmZpeCA9ICcuYWNjZXNzX3Rva2VuJywgcGtjZUlkZW50aWZpZXIgPSAncGtjZScsIGltcGxpY2l0SWRlbnRpZmllciA9ICdpbXBsaWNpdCc7XG5cbmxldCBjb2RlX3ZlcmlmaWVyLCByZWRpcmVjdFVyaTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29uZmlnID0gKHNlcnZpY2VQYXJhbXM6IGFueSk6IGFueSA9PiB7XG5cbiAgICBsZXQgdmFsLCBwYXJhbSwgY29uZmlnO1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IHNlcnZpY2VQYXJhbXMudXJsUGFyYW1zO1xuXG4gICAgY29uZmlnID0ge1xuICAgICAgICB1cmw6ICdzZXJ2aWNlcy9vYXV0aDIvOnByb3ZpZGVySWQvYXV0aG9yaXphdGlvblVybCcsXG4gICAgICAgIG1ldGhvZDogJ0dFVCdcbiAgICB9O1xuXG4gICAgLypUbyBoYW5kbGUgZHluYW1pYyB1cmxzLCBhcHBlbmQgdGhlIHNlcnZpY2VQYXJhbXMuY29uZmlnLnVybCB3aXRoIHRoZSBzdGF0aWMgdXJsKGkuZS4sIGNvbmZpZy51cmwpKi9cbiAgICBpZiAoc2VydmljZVBhcmFtcy5jb25maWcpIHtcbiAgICAgICAgY29uZmlnLnVybCA9IChzZXJ2aWNlUGFyYW1zLmNvbmZpZy51cmwgfHwgJycpICsgY29uZmlnLnVybDtcbiAgICAgICAgY29uZmlnLm1ldGhvZCA9IHNlcnZpY2VQYXJhbXMuY29uZmlnLm1ldGhvZCB8fCBjb25maWcubWV0aG9kO1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIFRPRE9bU2h1YmhhbV0gLSBjaGFuZ2UgdG8gZm9yIC0gb2ZcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2VydmljZVBhcmFtcy5jb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgdmFsID0gc2VydmljZVBhcmFtcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBjaGVjayBmb3IgdXJsIHBhcmFtZXRlcnMgdG8gcmVwbGFjZSB0aGUgdXJsICovXG4gICAgaWYgKHVybFBhcmFtcykge1xuICAgICAgICBmb3IgKHBhcmFtIGluIHVybFBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB1cmxQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGNvbmZpZy51cmwucmVwbGFjZShuZXcgUmVnRXhwKCc6JyArIHBhcmFtLCAnZycpLCB2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIGNoZWNrIGZvciBkYXRhICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMucGFyYW1zKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXMgPSBzZXJ2aWNlUGFyYW1zLnBhcmFtcztcbiAgICB9XG4gICAgLyogY2hlY2sgZm9yIGRhdGEgKi9cbiAgICBpZiAoIWlzVW5kZWZpbmVkKHNlcnZpY2VQYXJhbXMuZGF0YSkpIHtcbiAgICAgICAgY29uZmlnLmRhdGEgPSBzZXJ2aWNlUGFyYW1zLmRhdGE7XG4gICAgfVxuICAgIC8qIGNoZWNrIGZvciBkYXRhIHBhcmFtZXRlcnMsIHdyaXR0ZW4gdG8gc3VwcG9ydCBvbGQgc2VydmljZSBjYWxscyAoLmpzb24gY2FsbHMpICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMuZGF0YVBhcmFtcykge1xuICAgICAgICBjb25maWcuZGF0YS5wYXJhbXMgPSBzZXJ2aWNlUGFyYW1zLmRhdGFQYXJhbXM7XG4gICAgfVxuICAgIC8qIGNoZWNrIGZvciBoZWFkZXJzICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMuaGVhZGVycykge1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHNlcnZpY2VQYXJhbXMuaGVhZGVycztcbiAgICB9XG5cbiAgICAvKiBzZXQgZXh0cmEgY29uZmlnIGZsYWdzICovXG4gICAgY29uZmlnLmJ5UGFzc1Jlc3VsdCAgICA9IHNlcnZpY2VQYXJhbXMuYnlQYXNzUmVzdWx0O1xuICAgIGNvbmZpZy5pc0RpcmVjdENhbGwgICAgPSBzZXJ2aWNlUGFyYW1zLmlzRGlyZWN0Q2FsbDtcbiAgICBjb25maWcuaXNFeHRVUkwgICAgICAgID0gc2VydmljZVBhcmFtcy5pc0V4dFVSTDtcbiAgICBjb25maWcucHJldmVudE11bHRpcGxlID0gc2VydmljZVBhcmFtcy5wcmV2ZW50TXVsdGlwbGU7XG4gICAgY29uZmlnLnJlc3BvbnNlVHlwZSAgICA9IHNlcnZpY2VQYXJhbXMucmVzcG9uc2VUeXBlO1xuXG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5cbmNvbnN0IGxpc3RlbmVycyA9IHt9LFxuICAgIEFDQ0VTU1RPS0VOX1BMQUNFSE9MREVSUyA9IHtcbiAgICAgICAgJ1NUVURJTyc6ICdXTV9TVFVESU9fJyxcbiAgICAgICAgJ1JVTic6ICdXTV9SVU5fJ1xuICAgIH0sXG4gICAgbmV3V2luZG93UHJvcHMgPSAnd2lkdGg9NDAwLGhlaWdodD02MDAnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlIHRoZSBhY2Nlc3NUb2tlbiBmb3IgYSBwcm92aWRlclxuICogQHBhcmFtIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBY2Nlc3NUb2tlbiA9IChwcm92aWRlcikgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5ID0gZ2V0QWNjZXNzVG9rZW5QbGFjZWhvbGRlcihwcm92aWRlcik7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYWNjZXNzVG9rZW5LZXkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFjY2Vzc3Rva2VuIHBsYWNlaG9sZGVyIGJhc2VkIG9uIHRoZSBzdHVkaW8gb3IgcnVuIG1vZGUgZm9yIHRoZSBwcm9qZWN0XG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblBsYWNlaG9sZGVyKHByb3ZpZGVyKSB7XG4gICAgbGV0IGFjY2Vzc1Rva2VuS2V5O1xuICAgIGFjY2Vzc1Rva2VuS2V5ID0gQUNDRVNTVE9LRU5fUExBQ0VIT0xERVJTLlJVTiArIF9XTV9BUFBfUFJPSkVDVC5pZCArICdfJyArIHByb3ZpZGVyICsgYWNjZXNzVG9rZW5TdWZmaXg7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuS2V5O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZha2UgbG9jYWwgc3RvcmFnZSB1cGRhdGUsIHNvIHRoZSBJRSBnZXRzIHRoZSBsYXRlc3QgdG9rZW4gaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIGNhY2hlZCBsb2NhbFN0b3JhZ2VWYWx1ZVxuICovXG5mdW5jdGlvbiBwZXJmb3JtRmFrZUxvY2FsU3RvcmFnZVVwZGF0ZSgpIHtcbiAgICBjb25zdCBkdW1teV9rZXkgPSAnZHVtbXlfa2V5JztcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkdW1teV9rZXksIGR1bW15X2tleSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZHVtbXlfa2V5KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGFjY2Vzc1Rva2VuXG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEBwYXJhbSBhY2Nlc3N0b2tlblxuICovXG5mdW5jdGlvbiBzZXRBY2Nlc3NUb2tlbihwcm92aWRlciwgYWNjZXNzdG9rZW4pIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbktleSA9IGdldEFjY2Vzc1Rva2VuUGxhY2Vob2xkZXIocHJvdmlkZXIpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGFjY2Vzc1Rva2VuS2V5LCBhY2Nlc3N0b2tlbik7XG59XG5cbi8qKlxuICogdGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBkb25lIGFuZCBpbnZva2VzIHRoZSBzdWNjZXNzQ2FsbGJhY2tcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrXG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrQXV0aGVudGljYXRpb25TdGF0dXMocHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBldnQsIGh0dHA/LCBzZWN1cml0eU9iaj8pIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbktleSA9IHByb3ZpZGVySWQgKyBhY2Nlc3NUb2tlblN1ZmZpeCxcbiAgICAgICAgYWNjZXNzVG9rZW5PckNvZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShhY2Nlc3NUb2tlbktleSk7XG4gICAgaWYgKGV2dCAmJiBldnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGFjY2Vzc1Rva2VuT3JDb2RlKSB7XG4gICAgICAgIGlmIChpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgY29uc3QgcmVxID0gJ2NsaWVudF9pZD0nICsgc2VjdXJpdHlPYmouY2xpZW50SWQgKyAnJmNvZGU9JyArIGFjY2Vzc1Rva2VuT3JDb2RlICsgJyZncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSZjb2RlX3ZlcmlmaWVyPScgKyBjb2RlX3ZlcmlmaWVyICsgJyZyZWRpcmVjdF91cmk9JyArIHJlZGlyZWN0VXJpO1xuICAgICAgICAgICAgaHR0cC5zZW5kKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiBzZWN1cml0eU9iai5hY2Nlc3NUb2tlblVybCxcbiAgICAgICAgICAgICAgICBkYXRhOiByZXFcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyQWNjZXNzVG9rZW5TdWNjZXNzQ2FsbGJhY2socHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBhY2Nlc3NUb2tlbktleSwgcmVzcG9uc2UuYm9keS5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmlnZ2VyQWNjZXNzVG9rZW5TdWNjZXNzQ2FsbGJhY2socHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBhY2Nlc3NUb2tlbktleSwgYWNjZXNzVG9rZW5PckNvZGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIGZ1bmN0aW9uIHRyaWdnZXIgdGhlIHN1Y2Nlc3NDYWxsYmFjayBhZnRlciBnZXR0aW5nIHRoZSBhY2Nlc3MgdG9rZW5cbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckFjY2Vzc1Rva2VuU3VjY2Vzc0NhbGxiYWNrKHByb3ZpZGVySWQsIHN1Y2Nlc3NDYWxsYmFjaywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgYWNjZXNzVG9rZW5LZXksIHRva2VuKSB7XG4gICAgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayhwcm92aWRlcklkKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShhY2Nlc3NUb2tlbktleSk7XG4gICAgc2V0QWNjZXNzVG9rZW4ocHJvdmlkZXJJZCwgdG9rZW4pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXJzW3Byb3ZpZGVySWRdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1twcm92aWRlcklkXTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24ga2VlcHMgb24gY2hlY2tpbmcgdGhlIGFjY2Vzc3Rva2VuIGluIHRoZSBMb2NhbFN0b3JhZ2UgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nbHlcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gb25TdWNjZXNzXG4gKiBAcGFyYW0gb25FcnJvclxuICogQHBhcmFtIHN0YXJ0VGltZVxuICogQHBhcmFtIGxvZ2luT2JqXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWNjZXNzVG9rZW5JbldpbmRvdyhwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIHN0YXJ0VGltZSwgbG9naW5PYmosIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2spIHtcbiAgICBwZXJmb3JtRmFrZUxvY2FsU3RvcmFnZVVwZGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbW9tZW50LmR1cmF0aW9uKG1vbWVudCgpLmZvcm1hdCgnSEg6bW0nKSwgJ0hIOm1tJyBhcyBhbnkpLFxuICAgICAgICB0aW1lRGlmZiA9IGN1cnJlbnRUaW1lLnN1YnRyYWN0KHN0YXJ0VGltZSksXG4gICAgICAgIGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4ocHJvdmlkZXJJZCwgdHJ1ZSk7XG4gICAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGxvZ2luT2JqLmFjY2Vzc3Rva2VuX3JldHJpZXZlZCA9IHRydWU7XG4gICAgICAgIHNldEFjY2Vzc1Rva2VuKHByb3ZpZGVySWQsIGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocHJvdmlkZXJJZCArIGFjY2Vzc1Rva2VuU3VmZml4KTtcbiAgICAgICAgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayhwcm92aWRlcklkKTtcbiAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRpbWVEaWZmLm1pbnV0ZXMoKSA+IDEgJiYgb25TdWNjZXNzICYmICFsb2dpbk9iai5hY2Nlc3N0b2tlbl9yZXRyaWV2ZWQpIHtcbiAgICAgICAgb25TdWNjZXNzKCdlcnJvcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2hlY2tBY2Nlc3NUb2tlbkluV2luZG93KHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgc3RhcnRUaW1lLCBsb2dpbk9iaiwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBjaGVja3MgZm9yIHRoZSB3aW5kb3cgZXhpc3RlbmNlIGkuZSBpZiB0aGUgd2luZG93IGlzIG1hbnVhbGx5IGNsb3NlZCBieSB0aGUgdXNlciBvciBhbnkgc3VjaFxuICogQHBhcmFtIG9BdXRoV2luZG93XG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEBwYXJhbSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZShvQXV0aFdpbmRvdywgcHJvdmlkZXIsIGNhbGxiYWNrLCBwcm92aWRlckluZm8/KSB7XG4gICAgaWYgKG9BdXRoV2luZG93ICYmIGxpc3RlbmVyc1twcm92aWRlcl0pIHtcbiAgICAgICAgaWYgKCFvQXV0aFdpbmRvdy5jbG9zZWQpIHsgLy8gLmNsb3NlZCBpcyBzdXBwb3J0ZWQgYWNyb3NzIG1ham9yIGJyb3dzZXIgdmVuZG9ycyBob3dldmVyIGZvciBJRSB0aGUgdXNlciBoYXMgdG8gZW5hYmxlIHByb3RlY3RlZCBtb2RlIGZyb20gc2VjdXJpdHkgb3B0aW9uc1xuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZS5iaW5kKHVuZGVmaW5lZCwgb0F1dGhXaW5kb3csIHByb3ZpZGVyLCBjYWxsYmFjaywgcHJvdmlkZXJJbmZvKSwgMzAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWlzUGFzc2VkRmxvdyhwcm92aWRlckluZm8sIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXJzW3Byb3ZpZGVyXSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1twcm92aWRlcl07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogdGhpcyBmdW5jdGlvbnMgaGFuZGxlcyB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGUgd2luZG93IG9wZXJhdGlvbnMgaW4gSUVcbiAqIEBwYXJhbSB1cmxcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gb25TdWNjZXNzXG4gKiBAcGFyYW0gb25FcnJvclxuICovXG5mdW5jdGlvbiBoYW5kbGVMb2dpbkZvcklFKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBvbkVycm9yLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaj8sIHJlcXVlc3RTb3VyY2VUeXBlPywgY3VzdG9tVXJpU2NoZW1lPywgZGVwbG95ZWRVUkw/KSB7XG4gICAgY29uc3QgbG9naW5PYmogPSB7XG4gICAgICAgICdhY2Nlc3N0b2tlbl9yZXRyaWV2ZWQnOiBmYWxzZVxuICAgIH07XG4gICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSkge1xuICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIG51bGwsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwpO1xuICAgIH1cbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnLCBuZXdXaW5kb3dQcm9wcyk7XG4gICAgY2hlY2tBY2Nlc3NUb2tlbkluV2luZG93KHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgbW9tZW50LmR1cmF0aW9uKG1vbWVudCgpLmZvcm1hdCgnSEg6bW0nKSwgJ0hIOm1tJyBhcyBhbnkpLCBsb2dpbk9iaiwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayk7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbnMgcmV0dXJucyBpZiB0aGUgY3VycmVudCBvQXV0aCBGbG93IG1hdGNoZXMgdGhlIHBhc3NlZCBmbG93IG9yIG5vdFxuICogQHBhcmFtIHByb3ZpZGVySW5mb1xuICovXG5mdW5jdGlvbiBpc1Bhc3NlZEZsb3cocHJvdmlkZXJJbmZvLCBmbG93KSB7XG4gICAgbGV0IG9BdXRoRmxvdyA9IGdldChwcm92aWRlckluZm8sICdvYXV0aDJGbG93Jyk7XG4gICAgb0F1dGhGbG93ID0gb0F1dGhGbG93ID8gb0F1dGhGbG93LnRvTG93ZXJDYXNlKCkgOiBvQXV0aEZsb3c7XG4gICAgaWYgKGZsb3cgPT09IHBrY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChnZXQocHJvdmlkZXJJbmZvLCAnb0F1dGgyUGtjZS5lbmFibGVkJykgPT09IHRydWUpIHtcbiAgICAgICAgICAgIG9BdXRoRmxvdyA9IHBrY2VJZGVudGlmaWVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvQXV0aEZsb3cgPT09IGZsb3c7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBsaXN0ZW5lciBvbiB0aGUgd2luZG93IGFuZCBhc3NpZ25zIHRoZSBsaXN0ZW5lclxuICogQHBhcmFtIHByb3ZpZGVyXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gb25BdXRoV2luZG93T3Blbihwcm92aWRlciwgY2FsbGJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIGh0dHA/LCBzZWN1cml0eU9iaj8pIHtcbiAgICBsaXN0ZW5lcnNbcHJvdmlkZXJdID0gY2hlY2tBdXRoZW50aWNhdGlvblN0YXR1cy5iaW5kKHVuZGVmaW5lZCwgcHJvdmlkZXIsIGNhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBudWxsLCBodHRwLCBzZWN1cml0eU9iaik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lcnNbcHJvdmlkZXJdLCBmYWxzZSk7XG59XG5cbi8vIEdlbmVyYXRlIGEgc2VjdXJlIHJhbmRvbSBzdHJpbmcgdXNpbmcgdGhlIGJyb3dzZXIgY3J5cHRvIGZ1bmN0aW9uc1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21TdHJpbmcoKSB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMjgpO1xuICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnJheSwgZGVjID0+ICgnMCcgKyBkZWMudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpKS5qb2luKCcnKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBBcnJheUJ1ZmZlclxuZnVuY3Rpb24gZ2V0RW5jcnlwdGVkQ29kZShwbGFpbikge1xuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUocGxhaW4pO1xuICAgIGNvbnN0IHNoYU9iaiA9IG5ldyBqc1NIQShcIlNIQS0yNTZcIiwgXCJVSU5UOEFSUkFZXCIsIHsgZW5jb2Rpbmc6IFwiVVRGOFwiIH0pO1xuICAgIHNoYU9iai51cGRhdGUoZGF0YSk7XG4gICAgcmV0dXJuIHNoYU9iai5nZXRIYXNoKFwiQVJSQVlCVUZGRVJcIik7XG59XG5cbi8vIEJhc2U2NC11cmxlbmNvZGVzIHRoZSBpbnB1dCBzdHJpbmdcbmZ1bmN0aW9uIGJhc2U2NHVybGVuY29kZShzdHIpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBBcnJheUJ1ZmZlciB0byBzdHJpbmcgdXNpbmcgVWludDggYXJyYXkgdG8gY29udmVydCB0byB3aGF0IGJ0b2EgYWNjZXB0cy5cbiAgICAvLyBidG9hIGFjY2VwdHMgY2hhcnMgb25seSB3aXRoaW4gYXNjaWkgMC0yNTUgYW5kIGJhc2U2NCBlbmNvZGVzIHRoZW0uXG4gICAgLy8gVGhlbiBjb252ZXJ0IHRoZSBiYXNlNjQgZW5jb2RlZCB0byBiYXNlNjR1cmwgZW5jb2RlZFxuICAgIC8vICAgKHJlcGxhY2UgKyB3aXRoIC0sIHJlcGxhY2UgLyB3aXRoIF8sIHRyaW0gdHJhaWxpbmcgPSlcbiAgICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KHN0cikpKVxuICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBlbmFibGVzIHRoZSBsaXN0ZW5lciBhbmQgY2hlY2tzIGZvciB0aGUgd2luZG93IGV4aXN0ZW5jZVxuICogQHBhcmFtIHByb3ZpZGVySWRcbiAqIEBwYXJhbSBvblN1Y2Nlc3NcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gcG9zdEdldEF1dGhvcml6YXRpb25VUkwodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqPywgcmVxdWVzdFNvdXJjZVR5cGU/LCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8sIGh0dHA/KSB7XG4gICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSkge1xuICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIG51bGwsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwpO1xuICAgICAgICBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMLCBodHRwKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgcGtjZUlkZW50aWZpZXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbmQgc3RvcmUgYSBuZXcgUEtDRSBjb2RlX3ZlcmlmaWVyICh0aGUgcGxhaW50ZXh0IHJhbmRvbSBzZWNyZXQpXG4gICAgICAgIGNvZGVfdmVyaWZpZXIgPSBnZW5lcmF0ZVJhbmRvbVN0cmluZygpO1xuICAgICAgICBsZXQgY29kZV9jaGFsbGVuZ2U7XG4gICAgICAgIGlmIChnZXQoc2VjdXJpdHlPYmosICdvQXV0aDJQa2NlLmNoYWxsZW5nZU1ldGhvZCcpID09PSAncGxhaW4nKSB7XG4gICAgICAgICAgICBjb2RlX2NoYWxsZW5nZSA9IGNvZGVfdmVyaWZpZXI7XG4gICAgICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGNvZGVfY2hhbGxlbmdlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMKTtcbiAgICAgICAgICAgIHN0YXJ0b0F1dGhGbG93KHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwsIGh0dHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkQ29kZSA9IGdldEVuY3J5cHRlZENvZGUoY29kZV92ZXJpZmllcik7XG4gICAgICAgICAgICBjb2RlX2NoYWxsZW5nZSA9IGJhc2U2NHVybGVuY29kZShlbmNyeXB0ZWRDb2RlKTtcbiAgICAgICAgICAgIC8vY29kZV9jaGFsbGVuZ2UgPSBlbmNyeXB0ZWRDb2RlO1xuICAgICAgICAgICAgdXJsID0gY29uc3RydWN0VVJMRm9ySW1wbGljaXRPclBLQ0UocHJvdmlkZXJJZCwgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjb2RlX2NoYWxsZW5nZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgICAgICBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMLCBodHRwKTtcblxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRvQXV0aEZsb3codXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCwgaHR0cCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmo/LCByZXF1ZXN0U291cmNlVHlwZT8sIGN1c3RvbVVyaVNjaGVtZT8sIGRlcGxveWVkVVJMPywgaHR0cD8pIHtcbiAgICBsZXQgb0F1dGhXaW5kb3c7XG4gICAgICAgIG9BdXRoV2luZG93ID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJywgbmV3V2luZG93UHJvcHMpO1xuICAgICAgICBvbkF1dGhXaW5kb3dPcGVuKHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgaHR0cCwgc2VjdXJpdHlPYmopO1xuICAgICAgICBjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZShvQXV0aFdpbmRvdywgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBzZWN1cml0eU9iaik7XG59XG5cbi8qKlxuICogZnVuY3Rpb24gdG8gY29uc3RydWN0IHRoZSB1cmwgZm9yIGltcGxpY2l0IGZsb3cuXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCBwcm92aWRlciBpZCBmb3Igd2hpY2ggdGhlIHVybCBoYXMgdG8gYmUgc2V0XG4gKiBAcGFyYW0gcHJvdmlkZXJJbmZvIHByb3ZpZGVyIG9iamVjdCB3aGljaCBjb250YWlucyBkZXRhaWxzIHN1Y2ggYXMgc2NvcGUsIGNsaWVudCBpZCBldGNcbiAqIEBwYXJhbSByZXF1ZXN0U291cmNlVHlwZSByZXF1ZXN0aW5nIHNvdXJjZSBpcyB3ZWIgb3IgbW9iaWxlXG4gKiBAcmV0dXJucyB1cmwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFVSTEZvckltcGxpY2l0T3JQS0NFKHByb3ZpZGVySWQsIHByb3ZpZGVySW5mbywgcmVxdWVzdFNvdXJjZVR5cGUsIGNvZGVfY2hhbGxlbmdlLCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8pIHtcbiAgICByZWRpcmVjdFVyaSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcvIy8nKVswXSArICcvb0F1dGhDYWxsYmFjay5odG1sJztcbiAgICBjb25zdCBjbGllbnRJZCA9IHByb3ZpZGVySW5mby5jbGllbnRJZDtcbiAgICBjb25zdCBzY29wZXMgPSBwcm92aWRlckluZm8uc2NvcGVzLm1hcChmdW5jdGlvbihzY29wZSkgeyByZXR1cm4gc2NvcGUubmFtZSB9KS5qb2luKCcgJyk7XG4gICAgbGV0IHN0YXRlO1xuICAgIGlmIChnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaXNUZXN0UnVudGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZWRpcmVjdFVyaSA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9zdHVkaW8vb0F1dGhDYWxsYmFjay5odG1sJztcbiAgICB9XG4gICAgaWYgKHJlcXVlc3RTb3VyY2VUeXBlID09PSAnTU9CSUxFJykge1xuICAgICAgICByZWRpcmVjdFVyaSA9IGRlcGxveWVkVVJMICsgJ29BdXRoQ2FsbGJhY2suaHRtbCc7XG4gICAgfVxuICAgIGNvbnN0IGZsb3cgPSBpc1Bhc3NlZEZsb3cocHJvdmlkZXJJbmZvLCBpbXBsaWNpdElkZW50aWZpZXIpID8gaW1wbGljaXRJZGVudGlmaWVyIDogcGtjZUlkZW50aWZpZXI7XG4gICAgc3RhdGUgPSB7cHJvdmlkZXJJZDogcHJvdmlkZXJJZCwgc3VmZml4OiBhY2Nlc3NUb2tlblN1ZmZpeCwgcmVxdWVzdFNvdXJjZVR5cGU6IHJlcXVlc3RTb3VyY2VUeXBlLCBmbG93OiBmbG93LCBzY2hlbWU6IGN1c3RvbVVyaVNjaGVtZX07XG4gICAgY29uc3QgYXV0aFVybEFyciA9IHByb3ZpZGVySW5mby5hdXRob3JpemF0aW9uVXJsLnNwbGl0KCc/Jyk7XG4gICAgbGV0IGNvbm5lY3RvcjtcbiAgICBpZiAoYXV0aFVybEFyci5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy9xdWVyeSBwYXJhbXMgZG9uJ3QgZXhpc3RcbiAgICAgICAgY29ubmVjdG9yID0gJz8nO1xuICAgIH0gZWxzZSBpZiAoYXV0aFVybEFyci5sZW5ndGggPiAxICYmIGF1dGhVcmxBcnJbMV0gIT09ICcnKSB7XG4gICAgICAgIC8vcXVlcnkgcGFyYW1zIGV4aXN0LiBBcHBlbmQgJiBpbnN0ZWFkIG9mID8uXG4gICAgICAgIGNvbm5lY3RvciA9ICcmJztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvL25vdGhpbmcgZXhpc3RzIGFmdGVyICc/Jy4gY2xpZW50X2lkIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZDtcbiAgICAgICAgY29ubmVjdG9yID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1vblVybCA9IHByb3ZpZGVySW5mby5hdXRob3JpemF0aW9uVXJsICsgY29ubmVjdG9yICsgJ2NsaWVudF9pZD0nICsgY2xpZW50SWQgKyAnJnJlZGlyZWN0X3VyaT0nICsgcmVkaXJlY3RVcmkgKyAnJnN0YXRlPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKSArICcmc2NvcGU9JyArIGVuY29kZVVSSUNvbXBvbmVudChzY29wZXMpO1xuICAgIGxldCB1cmw7XG4gICAgaWYgKGZsb3cgPT09IGltcGxpY2l0SWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBwcm92aWRlckluZm8ucmVzcG9uc2VUeXBlID8gcHJvdmlkZXJJbmZvLnJlc3BvbnNlVHlwZSA6ICd0b2tlbic7XG4gICAgICAgIHVybCA9IGNvbW1vblVybCArICcmcmVzcG9uc2VfdHlwZT0nICsgcmVzcG9uc2VUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGNvbW1vblVybCArICcmcmVzcG9uc2VfdHlwZT1jb2RlJmNvZGVfY2hhbGxlbmdlPScgKyBjb2RlX2NoYWxsZW5nZSArICcmY29kZV9jaGFsbGVuZ2VfbWV0aG9kPScgKyBnZXQocHJvdmlkZXJJbmZvLCAnb0F1dGgyUGtjZS5jaGFsbGVuZ2VNZXRob2QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBmdW5jdGlvbiB0byBnZXQgdGhlIGF1dGhvcml6YXRpb24gdXJsXG4gKiBAcGFyYW0gcGFyYW1zIHByb3ZpZGVyIGlkIGZvciB3aGljaCB0aGUgYXV0aCB1cmwgaGFzIHRvIGJlIGZldGNoZWRcbiAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB1cG9uIHN1Y2Nlc3NmdWwgZmV0Y2ggb2YgdGhlIHByb3ZpZGVyc1xuICogQHBhcmFtIGZhaWx1cmVDYWxsYmFjayBjYWxsYmFjayB0byBiZSBpbnZva2VkIHVwb24gZXJyb3JcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKHBhcmFtcywgaHR0cCkge1xuICAgIGNvbnN0IGFjdGlvbiA9ICdnZXRBdXRob3JpemF0aW9uVXJsJyxcbiAgICAgICAgc2VydmljZVNldHRpbmdzID0gcGFyc2VDb25maWcoe1xuICAgICAgICAgICAgdGFyZ2V0OiAnb2F1dGhDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgdXJsUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBfV01fQVBQX1BST0pFQ1QuaWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJJZDogcGFyYW1zLnByb3ZpZGVySWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdFNvdXJjZVR5cGUnOiBwYXJhbXMucmVxdWVzdFNvdXJjZVR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIGh0dHAuc2VuZChzZXJ2aWNlU2V0dGluZ3MpO1xufVxuXG4vKipcbiAqIGZ1bmN0aW9uIHRyaWdnZXIgdGhlIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sgYWZ0ZXIgZ2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiB1cmxcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlclByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCkge1xuICAgIGNvbnN0IHVybEJvZHkgPSBpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIGltcGxpY2l0SWRlbnRpZmllcikgfHwgaXNQYXNzZWRGbG93KHNlY3VyaXR5T2JqLCBwa2NlSWRlbnRpZmllcikgPyB1cmwgOiB1cmwuYm9keTtcbiAgICBhZGRQcm92aWRlckNvbmZpZ0NhbGxCYWNrKHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJJZCxcbiAgICAgICAgdXJsOiB1cmxCb2R5LFxuICAgICAgICBpbnZva2U6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0lFKCkpIHsgLy8gaGFuZGxpbmcgZm9yIElFXG4gICAgICAgICAgICAgICAgaGFuZGxlTG9naW5Gb3JJRSh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9zdEdldEF1dGhvcml6YXRpb25VUkwodXJsQm9keSwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwsIGh0dHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGFjY2Vzc1Rva2VuIGJhc2VkIG9uIHRoZSBydW4vc3R1ZGlvbW9kZVxuICogQHBhcmFtIHByb3ZpZGVyXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gKHByb3ZpZGVyLCBjaGVja0xvY2FsU3RvcmFnZSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5ID0gZ2V0QWNjZXNzVG9rZW5QbGFjZWhvbGRlcihwcm92aWRlcik7XG4gICAgaWYgKGNoZWNrTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShwcm92aWRlciArIGFjY2Vzc1Rva2VuU3VmZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGFjY2Vzc1Rva2VuS2V5KTtcbn07XG5cblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGVyZm9ybSB0aGUgYXV0aG9yaXphdGlvbiBieSBvcGVuaW5nIHRoZSB3aW5kb3cgYW5kIGhhdmluZyBhY3RpdmUgbGlzdGVuZXJzXG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gcHJvdmlkZXJJZFxuICogQHBhcmFtIG9uU3VjY2Vzc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBwZXJmb3JtQXV0aG9yaXphdGlvbiA9ICh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgaHR0cCwgYWRkUHJvdmlkZXJDb25maWdDYWxsQmFjaywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmo/LCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8pID0+IHtcbiAgICBsZXQgcmVxdWVzdFNvdXJjZVR5cGUgPSAnV0VCJztcbiAgICBpZiAodXJsKSB7XG4gICAgICAgIGlmIChpc0lFKCkpIHsgLy8gaGFuZGxpbmcgZm9yIElFXG4gICAgICAgICAgICBoYW5kbGVMb2dpbkZvcklFKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBvbkVycm9yLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3RHZXRBdXRob3JpemF0aW9uVVJMKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGh0dHApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSB8fCBpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdHJpZ2dlclByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXV0aG9yaXphdGlvblVybCh7XG4gICAgICAgICAgICAgICAgJ3Byb3ZpZGVySWQnOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgICdyZXF1ZXN0U291cmNlVHlwZSc6IHJlcXVlc3RTb3VyY2VUeXBlXG4gICAgICAgICAgICB9LCBodHRwKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQcm92aWRlckNvbmZpZ0NhbGxCYWNrKHJlc3BvbnNlLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0F1dGgudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9vQXV0aC9zcmMvb0F1dGgudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFM0MsT0FBTyxLQUFLLFNBQVMsTUFBTyxRQUFRLENBQUM7QUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFHckQsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLEVBQUUsY0FBYyxHQUFHLE1BQU0sRUFBRSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFFcEcsSUFBSSxhQUFhLEVBQUUsV0FBVyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLGFBQWtCLEVBQU8sRUFBRTtJQUVuRCxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFFMUMsTUFBTSxHQUFHO1FBQ0wsR0FBRyxFQUFFLDhDQUE4QztRQUNuRCxNQUFNLEVBQUUsS0FBSztLQUNoQixDQUFDO0lBRUYscUdBQXFHO0lBQ3JHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3RCxNQUFNLENBQUMsT0FBTyxH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V0FBVyxDQUFDLENBQUM7UUFDcE0sQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLG1CQUFtQixDQUFDO2dCQUN2QixZQUFZLEVBQUUsVUFBVTtnQkFDeEIsbUJBQW1CLEVBQUUsaUJBQWlCO2FBQ3pDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZCLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN6TSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX1dNX0FQUF9QUk9KRUNULCBpc0lFLCBnZXRXbVByb2plY3RQcm9wZXJ0aWVzIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtnZXQsIGlzVW5kZWZpbmVkfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmltcG9ydCAqIGFzIG1vbWVudExpYiAgZnJvbSAnbW9tZW50JztcbmNvbnN0IG1vbWVudCA9IG1vbWVudExpYi5kZWZhdWx0IHx8IHdpbmRvd1snbW9tZW50J107XG5kZWNsYXJlIGNvbnN0IGpzU0hBO1xuXG5jb25zdCBhY2Nlc3NUb2tlblN1ZmZpeCA9ICcuYWNjZXNzX3Rva2VuJywgcGtjZUlkZW50aWZpZXIgPSAncGtjZScsIGltcGxpY2l0SWRlbnRpZmllciA9ICdpbXBsaWNpdCc7XG5cbmxldCBjb2RlX3ZlcmlmaWVyLCByZWRpcmVjdFVyaTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29uZmlnID0gKHNlcnZpY2VQYXJhbXM6IGFueSk6IGFueSA9PiB7XG5cbiAgICBsZXQgdmFsLCBwYXJhbSwgY29uZmlnO1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IHNlcnZpY2VQYXJhbXMudXJsUGFyYW1zO1xuXG4gICAgY29uZmlnID0ge1xuICAgICAgICB1cmw6ICdzZXJ2aWNlcy9vYXV0aDIvOnByb3ZpZGVySWQvYXV0aG9yaXphdGlvblVybCcsXG4gICAgICAgIG1ldGhvZDogJ0dFVCdcbiAgICB9O1xuXG4gICAgLypUbyBoYW5kbGUgZHluYW1pYyB1cmxzLCBhcHBlbmQgdGhlIHNlcnZpY2VQYXJhbXMuY29uZmlnLnVybCB3aXRoIHRoZSBzdGF0aWMgdXJsKGkuZS4sIGNvbmZpZy51cmwpKi9cbiAgICBpZiAoc2VydmljZVBhcmFtcy5jb25maWcpIHtcbiAgICAgICAgY29uZmlnLnVybCA9IChzZXJ2aWNlUGFyYW1zLmNvbmZpZy51cmwgfHwgJycpICsgY29uZmlnLnVybDtcbiAgICAgICAgY29uZmlnLm1ldGhvZCA9IHNlcnZpY2VQYXJhbXMuY29uZmlnLm1ldGhvZCB8fCBjb25maWcubWV0aG9kO1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIFRPRE9bU2h1YmhhbV0gLSBjaGFuZ2UgdG8gZm9yIC0gb2ZcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2VydmljZVBhcmFtcy5jb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgdmFsID0gc2VydmljZVBhcmFtcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBjaGVjayBmb3IgdXJsIHBhcmFtZXRlcnMgdG8gcmVwbGFjZSB0aGUgdXJsICovXG4gICAgaWYgKHVybFBhcmFtcykge1xuICAgICAgICBmb3IgKHBhcmFtIGluIHVybFBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB1cmxQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGNvbmZpZy51cmwucmVwbGFjZShuZXcgUmVnRXhwKCc6JyArIHBhcmFtLCAnZycpLCB2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIGNoZWNrIGZvciBkYXRhICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMucGFyYW1zKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXMgPSBzZXJ2aWNlUGFyYW1zLnBhcmFtcztcbiAgICB9XG4gICAgLyogY2hlY2sgZm9yIGRhdGEgKi9cbiAgICBpZiAoIWlzVW5kZWZpbmVkKHNlcnZpY2VQYXJhbXMuZGF0YSkpIHtcbiAgICAgICAgY29uZmlnLmRhdGEgPSBzZXJ2aWNlUGFyYW1zLmRhdGE7XG4gICAgfVxuICAgIC8qIGNoZWNrIGZvciBkYXRhIHBhcmFtZXRlcnMsIHdyaXR0ZW4gdG8gc3VwcG9ydCBvbGQgc2VydmljZSBjYWxscyAoLmpzb24gY2FsbHMpICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMuZGF0YVBhcmFtcykge1xuICAgICAgICBjb25maWcuZGF0YS5wYXJhbXMgPSBzZXJ2aWNlUGFyYW1zLmRhdGFQYXJhbXM7XG4gICAgfVxuICAgIC8qIGNoZWNrIGZvciBoZWFkZXJzICovXG4gICAgaWYgKHNlcnZpY2VQYXJhbXMuaGVhZGVycykge1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHNlcnZpY2VQYXJhbXMuaGVhZGVycztcbiAgICB9XG5cbiAgICAvKiBzZXQgZXh0cmEgY29uZmlnIGZsYWdzICovXG4gICAgY29uZmlnLmJ5UGFzc1Jlc3VsdCAgICA9IHNlcnZpY2VQYXJhbXMuYnlQYXNzUmVzdWx0O1xuICAgIGNvbmZpZy5pc0RpcmVjdENhbGwgICAgPSBzZXJ2aWNlUGFyYW1zLmlzRGlyZWN0Q2FsbDtcbiAgICBjb25maWcuaXNFeHRVUkwgICAgICAgID0gc2VydmljZVBhcmFtcy5pc0V4dFVSTDtcbiAgICBjb25maWcucHJldmVudE11bHRpcGxlID0gc2VydmljZVBhcmFtcy5wcmV2ZW50TXVsdGlwbGU7XG4gICAgY29uZmlnLnJlc3BvbnNlVHlwZSAgICA9IHNlcnZpY2VQYXJhbXMucmVzcG9uc2VUeXBlO1xuXG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5cbmNvbnN0IGxpc3RlbmVycyA9IHt9LFxuICAgIEFDQ0VTU1RPS0VOX1BMQUNFSE9MREVSUyA9IHtcbiAgICAgICAgJ1NUVURJTyc6ICdXTV9TVFVESU9fJyxcbiAgICAgICAgJ1JVTic6ICdXTV9SVU5fJ1xuICAgIH0sXG4gICAgbmV3V2luZG93UHJvcHMgPSAnd2lkdGg9NDAwLGhlaWdodD02MDAnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlIHRoZSBhY2Nlc3NUb2tlbiBmb3IgYSBwcm92aWRlclxuICogQHBhcmFtIHByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBY2Nlc3NUb2tlbiA9IChwcm92aWRlcikgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5ID0gZ2V0QWNjZXNzVG9rZW5QbGFjZWhvbGRlcihwcm92aWRlcik7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYWNjZXNzVG9rZW5LZXkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFjY2Vzc3Rva2VuIHBsYWNlaG9sZGVyIGJhc2VkIG9uIHRoZSBzdHVkaW8gb3IgcnVuIG1vZGUgZm9yIHRoZSBwcm9qZWN0XG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblBsYWNlaG9sZGVyKHByb3ZpZGVyKSB7XG4gICAgbGV0IGFjY2Vzc1Rva2VuS2V5O1xuICAgIGFjY2Vzc1Rva2VuS2V5ID0gQUNDRVNTVE9LRU5fUExBQ0VIT0xERVJTLlJVTiArIF9XTV9BUFBfUFJPSkVDVC5pZCArICdfJyArIHByb3ZpZGVyICsgYWNjZXNzVG9rZW5TdWZmaXg7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuS2V5O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZha2UgbG9jYWwgc3RvcmFnZSB1cGRhdGUsIHNvIHRoZSBJRSBnZXRzIHRoZSBsYXRlc3QgdG9rZW4gaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIGNhY2hlZCBsb2NhbFN0b3JhZ2VWYWx1ZVxuICovXG5mdW5jdGlvbiBwZXJmb3JtRmFrZUxvY2FsU3RvcmFnZVVwZGF0ZSgpIHtcbiAgICBjb25zdCBkdW1teV9rZXkgPSAnZHVtbXlfa2V5JztcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkdW1teV9rZXksIGR1bW15X2tleSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZHVtbXlfa2V5KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGFjY2Vzc1Rva2VuXG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEBwYXJhbSBhY2Nlc3N0b2tlblxuICovXG5mdW5jdGlvbiBzZXRBY2Nlc3NUb2tlbihwcm92aWRlciwgYWNjZXNzdG9rZW4pIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbktleSA9IGdldEFjY2Vzc1Rva2VuUGxhY2Vob2xkZXIocHJvdmlkZXIpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGFjY2Vzc1Rva2VuS2V5LCBhY2Nlc3N0b2tlbik7XG59XG5cbi8qKlxuICogdGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBkb25lIGFuZCBpbnZva2VzIHRoZSBzdWNjZXNzQ2FsbGJhY2tcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrXG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrQXV0aGVudGljYXRpb25TdGF0dXMocHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBldnQsIGh0dHA/LCBzZWN1cml0eU9iaj8pIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbktleSA9IHByb3ZpZGVySWQgKyBhY2Nlc3NUb2tlblN1ZmZpeCxcbiAgICAgICAgYWNjZXNzVG9rZW5PckNvZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShhY2Nlc3NUb2tlbktleSk7XG4gICAgaWYgKGV2dCAmJiBldnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGFjY2Vzc1Rva2VuT3JDb2RlKSB7XG4gICAgICAgIGlmIChpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgY29uc3QgcmVxID0gJ2NsaWVudF9pZD0nICsgc2VjdXJpdHlPYmouY2xpZW50SWQgKyAnJmNvZGU9JyArIGFjY2Vzc1Rva2VuT3JDb2RlICsgJyZncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSZjb2RlX3ZlcmlmaWVyPScgKyBjb2RlX3ZlcmlmaWVyICsgJyZyZWRpcmVjdF91cmk9JyArIHJlZGlyZWN0VXJpO1xuICAgICAgICAgICAgaHR0cC5zZW5kKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiBzZWN1cml0eU9iai5hY2Nlc3NUb2tlblVybCxcbiAgICAgICAgICAgICAgICBkYXRhOiByZXFcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyQWNjZXNzVG9rZW5TdWNjZXNzQ2FsbGJhY2socHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBhY2Nlc3NUb2tlbktleSwgcmVzcG9uc2UuYm9keS5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmlnZ2VyQWNjZXNzVG9rZW5TdWNjZXNzQ2FsbGJhY2socHJvdmlkZXJJZCwgc3VjY2Vzc0NhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBhY2Nlc3NUb2tlbktleSwgYWNjZXNzVG9rZW5PckNvZGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIGZ1bmN0aW9uIHRyaWdnZXIgdGhlIHN1Y2Nlc3NDYWxsYmFjayBhZnRlciBnZXR0aW5nIHRoZSBhY2Nlc3MgdG9rZW5cbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckFjY2Vzc1Rva2VuU3VjY2Vzc0NhbGxiYWNrKHByb3ZpZGVySWQsIHN1Y2Nlc3NDYWxsYmFjaywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgYWNjZXNzVG9rZW5LZXksIHRva2VuKSB7XG4gICAgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayhwcm92aWRlcklkKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShhY2Nlc3NUb2tlbktleSk7XG4gICAgc2V0QWNjZXNzVG9rZW4ocHJvdmlkZXJJZCwgdG9rZW4pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXJzW3Byb3ZpZGVySWRdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1twcm92aWRlcklkXTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24ga2VlcHMgb24gY2hlY2tpbmcgdGhlIGFjY2Vzc3Rva2VuIGluIHRoZSBMb2NhbFN0b3JhZ2UgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nbHlcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gb25TdWNjZXNzXG4gKiBAcGFyYW0gb25FcnJvclxuICogQHBhcmFtIHN0YXJ0VGltZVxuICogQHBhcmFtIGxvZ2luT2JqXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWNjZXNzVG9rZW5JbldpbmRvdyhwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIHN0YXJ0VGltZSwgbG9naW5PYmosIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2spIHtcbiAgICBwZXJmb3JtRmFrZUxvY2FsU3RvcmFnZVVwZGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbW9tZW50LmR1cmF0aW9uKG1vbWVudCgpLmZvcm1hdCgnSEg6bW0nKSwgJ0hIOm1tJyBhcyBhbnkpLFxuICAgICAgICB0aW1lRGlmZiA9IGN1cnJlbnRUaW1lLnN1YnRyYWN0KHN0YXJ0VGltZSksXG4gICAgICAgIGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4ocHJvdmlkZXJJZCwgdHJ1ZSk7XG4gICAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGxvZ2luT2JqLmFjY2Vzc3Rva2VuX3JldHJpZXZlZCA9IHRydWU7XG4gICAgICAgIHNldEFjY2Vzc1Rva2VuKHByb3ZpZGVySWQsIGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocHJvdmlkZXJJZCArIGFjY2Vzc1Rva2VuU3VmZml4KTtcbiAgICAgICAgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayhwcm92aWRlcklkKTtcbiAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRpbWVEaWZmLm1pbnV0ZXMoKSA+IDEgJiYgb25TdWNjZXNzICYmICFsb2dpbk9iai5hY2Nlc3N0b2tlbl9yZXRyaWV2ZWQpIHtcbiAgICAgICAgb25TdWNjZXNzKCdlcnJvcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2hlY2tBY2Nlc3NUb2tlbkluV2luZG93KHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgc3RhcnRUaW1lLCBsb2dpbk9iaiwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBjaGVja3MgZm9yIHRoZSB3aW5kb3cgZXhpc3RlbmNlIGkuZSBpZiB0aGUgd2luZG93IGlzIG1hbnVhbGx5IGNsb3NlZCBieSB0aGUgdXNlciBvciBhbnkgc3VjaFxuICogQHBhcmFtIG9BdXRoV2luZG93XG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEBwYXJhbSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZShvQXV0aFdpbmRvdywgcHJvdmlkZXIsIGNhbGxiYWNrLCBwcm92aWRlckluZm8/KSB7XG4gICAgaWYgKG9BdXRoV2luZG93ICYmIGxpc3RlbmVyc1twcm92aWRlcl0pIHtcbiAgICAgICAgaWYgKCFvQXV0aFdpbmRvdy5jbG9zZWQpIHsgLy8gLmNsb3NlZCBpcyBzdXBwb3J0ZWQgYWNyb3NzIG1ham9yIGJyb3dzZXIgdmVuZG9ycyBob3dldmVyIGZvciBJRSB0aGUgdXNlciBoYXMgdG8gZW5hYmxlIHByb3RlY3RlZCBtb2RlIGZyb20gc2VjdXJpdHkgb3B0aW9uc1xuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZS5iaW5kKHVuZGVmaW5lZCwgb0F1dGhXaW5kb3csIHByb3ZpZGVyLCBjYWxsYmFjaywgcHJvdmlkZXJJbmZvKSwgMzAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWlzUGFzc2VkRmxvdyhwcm92aWRlckluZm8sIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXJzW3Byb3ZpZGVyXSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1twcm92aWRlcl07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogdGhpcyBmdW5jdGlvbnMgaGFuZGxlcyB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGUgd2luZG93IG9wZXJhdGlvbnMgaW4gSUVcbiAqIEBwYXJhbSB1cmxcbiAqIEBwYXJhbSBwcm92aWRlcklkXG4gKiBAcGFyYW0gb25TdWNjZXNzXG4gKiBAcGFyYW0gb25FcnJvclxuICovXG5mdW5jdGlvbiBoYW5kbGVMb2dpbkZvcklFKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBvbkVycm9yLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaj8sIHJlcXVlc3RTb3VyY2VUeXBlPywgY3VzdG9tVXJpU2NoZW1lPywgZGVwbG95ZWRVUkw/KSB7XG4gICAgY29uc3QgbG9naW5PYmogPSB7XG4gICAgICAgICdhY2Nlc3N0b2tlbl9yZXRyaWV2ZWQnOiBmYWxzZVxuICAgIH07XG4gICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSkge1xuICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIG51bGwsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwpO1xuICAgIH1cbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnLCBuZXdXaW5kb3dQcm9wcyk7XG4gICAgY2hlY2tBY2Nlc3NUb2tlbkluV2luZG93KHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgbW9tZW50LmR1cmF0aW9uKG1vbWVudCgpLmZvcm1hdCgnSEg6bW0nKSwgJ0hIOm1tJyBhcyBhbnkpLCBsb2dpbk9iaiwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjayk7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbnMgcmV0dXJucyBpZiB0aGUgY3VycmVudCBvQXV0aCBGbG93IG1hdGNoZXMgdGhlIHBhc3NlZCBmbG93IG9yIG5vdFxuICogQHBhcmFtIHByb3ZpZGVySW5mb1xuICovXG5mdW5jdGlvbiBpc1Bhc3NlZEZsb3cocHJvdmlkZXJJbmZvLCBmbG93KSB7XG4gICAgbGV0IG9BdXRoRmxvdyA9IGdldChwcm92aWRlckluZm8sICdvYXV0aDJGbG93Jyk7XG4gICAgb0F1dGhGbG93ID0gb0F1dGhGbG93ID8gb0F1dGhGbG93LnRvTG93ZXJDYXNlKCkgOiBvQXV0aEZsb3c7XG4gICAgaWYgKGZsb3cgPT09IHBrY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChnZXQocHJvdmlkZXJJbmZvLCAnb0F1dGgyUGtjZS5lbmFibGVkJykgPT09IHRydWUpIHtcbiAgICAgICAgICAgIG9BdXRoRmxvdyA9IHBrY2VJZGVudGlmaWVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvQXV0aEZsb3cgPT09IGZsb3c7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBsaXN0ZW5lciBvbiB0aGUgd2luZG93IGFuZCBhc3NpZ25zIHRoZSBsaXN0ZW5lclxuICogQHBhcmFtIHByb3ZpZGVyXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gb25BdXRoV2luZG93T3Blbihwcm92aWRlciwgY2FsbGJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIGh0dHA/LCBzZWN1cml0eU9iaj8pIHtcbiAgICBsaXN0ZW5lcnNbcHJvdmlkZXJdID0gY2hlY2tBdXRoZW50aWNhdGlvblN0YXR1cy5iaW5kKHVuZGVmaW5lZCwgcHJvdmlkZXIsIGNhbGxiYWNrLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBudWxsLCBodHRwLCBzZWN1cml0eU9iaik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lcnNbcHJvdmlkZXJdLCBmYWxzZSk7XG59XG5cbi8vIEdlbmVyYXRlIGEgc2VjdXJlIHJhbmRvbSBzdHJpbmcgdXNpbmcgdGhlIGJyb3dzZXIgY3J5cHRvIGZ1bmN0aW9uc1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21TdHJpbmcoKSB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMjgpO1xuICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnJheSwgZGVjID0+ICgnMCcgKyBkZWMudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpKS5qb2luKCcnKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBBcnJheUJ1ZmZlclxuZnVuY3Rpb24gZ2V0RW5jcnlwdGVkQ29kZShwbGFpbikge1xuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUocGxhaW4pO1xuICAgIGNvbnN0IHNoYU9iaiA9IG5ldyBqc1NIQShcIlNIQS0yNTZcIiwgXCJVSU5UOEFSUkFZXCIsIHsgZW5jb2Rpbmc6IFwiVVRGOFwiIH0pO1xuICAgIHNoYU9iai51cGRhdGUoZGF0YSk7XG4gICAgcmV0dXJuIHNoYU9iai5nZXRIYXNoKFwiQVJSQVlCVUZGRVJcIik7XG59XG5cbi8vIEJhc2U2NC11cmxlbmNvZGVzIHRoZSBpbnB1dCBzdHJpbmdcbmZ1bmN0aW9uIGJhc2U2NHVybGVuY29kZShzdHIpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBBcnJheUJ1ZmZlciB0byBzdHJpbmcgdXNpbmcgVWludDggYXJyYXkgdG8gY29udmVydCB0byB3aGF0IGJ0b2EgYWNjZXB0cy5cbiAgICAvLyBidG9hIGFjY2VwdHMgY2hhcnMgb25seSB3aXRoaW4gYXNjaWkgMC0yNTUgYW5kIGJhc2U2NCBlbmNvZGVzIHRoZW0uXG4gICAgLy8gVGhlbiBjb252ZXJ0IHRoZSBiYXNlNjQgZW5jb2RlZCB0byBiYXNlNjR1cmwgZW5jb2RlZFxuICAgIC8vICAgKHJlcGxhY2UgKyB3aXRoIC0sIHJlcGxhY2UgLyB3aXRoIF8sIHRyaW0gdHJhaWxpbmcgPSlcbiAgICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KHN0cikpKVxuICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBlbmFibGVzIHRoZSBsaXN0ZW5lciBhbmQgY2hlY2tzIGZvciB0aGUgd2luZG93IGV4aXN0ZW5jZVxuICogQHBhcmFtIHByb3ZpZGVySWRcbiAqIEBwYXJhbSBvblN1Y2Nlc3NcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gcG9zdEdldEF1dGhvcml6YXRpb25VUkwodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqPywgcmVxdWVzdFNvdXJjZVR5cGU/LCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8sIGh0dHA/KSB7XG4gICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSkge1xuICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIG51bGwsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwpO1xuICAgICAgICBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMLCBodHRwKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgcGtjZUlkZW50aWZpZXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbmQgc3RvcmUgYSBuZXcgUEtDRSBjb2RlX3ZlcmlmaWVyICh0aGUgcGxhaW50ZXh0IHJhbmRvbSBzZWNyZXQpXG4gICAgICAgIGNvZGVfdmVyaWZpZXIgPSBnZW5lcmF0ZVJhbmRvbVN0cmluZygpO1xuICAgICAgICBsZXQgY29kZV9jaGFsbGVuZ2U7XG4gICAgICAgIGlmIChnZXQoc2VjdXJpdHlPYmosICdvQXV0aDJQa2NlLmNoYWxsZW5nZU1ldGhvZCcpID09PSAncGxhaW4nKSB7XG4gICAgICAgICAgICBjb2RlX2NoYWxsZW5nZSA9IGNvZGVfdmVyaWZpZXI7XG4gICAgICAgICAgICB1cmwgPSBjb25zdHJ1Y3RVUkxGb3JJbXBsaWNpdE9yUEtDRShwcm92aWRlcklkLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGNvZGVfY2hhbGxlbmdlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMKTtcbiAgICAgICAgICAgIHN0YXJ0b0F1dGhGbG93KHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwsIGh0dHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkQ29kZSA9IGdldEVuY3J5cHRlZENvZGUoY29kZV92ZXJpZmllcik7XG4gICAgICAgICAgICBjb2RlX2NoYWxsZW5nZSA9IGJhc2U2NHVybGVuY29kZShlbmNyeXB0ZWRDb2RlKTtcbiAgICAgICAgICAgIC8vY29kZV9jaGFsbGVuZ2UgPSBlbmNyeXB0ZWRDb2RlO1xuICAgICAgICAgICAgdXJsID0gY29uc3RydWN0VVJMRm9ySW1wbGljaXRPclBLQ0UocHJvdmlkZXJJZCwgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjb2RlX2NoYWxsZW5nZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgICAgICBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMLCBodHRwKTtcblxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRvQXV0aEZsb3codXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCwgaHR0cCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdGFydG9BdXRoRmxvdyh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmo/LCByZXF1ZXN0U291cmNlVHlwZT8sIGN1c3RvbVVyaVNjaGVtZT8sIGRlcGxveWVkVVJMPywgaHR0cD8pIHtcbiAgICBsZXQgb0F1dGhXaW5kb3c7XG4gICAgICAgIG9BdXRoV2luZG93ID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJywgbmV3V2luZG93UHJvcHMpO1xuICAgICAgICBvbkF1dGhXaW5kb3dPcGVuKHByb3ZpZGVySWQsIG9uU3VjY2VzcywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgaHR0cCwgc2VjdXJpdHlPYmopO1xuICAgICAgICBjaGVja0ZvcldpbmRvd0V4aXN0ZW5jZShvQXV0aFdpbmRvdywgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBzZWN1cml0eU9iaik7XG59XG5cbi8qKlxuICogZnVuY3Rpb24gdG8gY29uc3RydWN0IHRoZSB1cmwgZm9yIGltcGxpY2l0IGZsb3cuXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCBwcm92aWRlciBpZCBmb3Igd2hpY2ggdGhlIHVybCBoYXMgdG8gYmUgc2V0XG4gKiBAcGFyYW0gcHJvdmlkZXJJbmZvIHByb3ZpZGVyIG9iamVjdCB3aGljaCBjb250YWlucyBkZXRhaWxzIHN1Y2ggYXMgc2NvcGUsIGNsaWVudCBpZCBldGNcbiAqIEBwYXJhbSByZXF1ZXN0U291cmNlVHlwZSByZXF1ZXN0aW5nIHNvdXJjZSBpcyB3ZWIgb3IgbW9iaWxlXG4gKiBAcmV0dXJucyB1cmwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFVSTEZvckltcGxpY2l0T3JQS0NFKHByb3ZpZGVySWQsIHByb3ZpZGVySW5mbywgcmVxdWVzdFNvdXJjZVR5cGUsIGNvZGVfY2hhbGxlbmdlLCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8pIHtcbiAgICByZWRpcmVjdFVyaSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcvIy8nKVswXSArICcvb0F1dGhDYWxsYmFjay5odG1sJztcbiAgICBjb25zdCBjbGllbnRJZCA9IHByb3ZpZGVySW5mby5jbGllbnRJZDtcbiAgICBjb25zdCBzY29wZXMgPSBwcm92aWRlckluZm8uc2NvcGVzLm1hcChmdW5jdGlvbihzY29wZSkgeyByZXR1cm4gc2NvcGUubmFtZSB9KS5qb2luKCcgJyk7XG4gICAgbGV0IHN0YXRlO1xuICAgIGlmIChnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaXNUZXN0UnVudGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZWRpcmVjdFVyaSA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9zdHVkaW8vb0F1dGhDYWxsYmFjay5odG1sJztcbiAgICB9XG4gICAgaWYgKHJlcXVlc3RTb3VyY2VUeXBlID09PSAnTU9CSUxFJykge1xuICAgICAgICByZWRpcmVjdFVyaSA9IGRlcGxveWVkVVJMICsgJ29BdXRoQ2FsbGJhY2suaHRtbCc7XG4gICAgfVxuICAgIGNvbnN0IGZsb3cgPSBpc1Bhc3NlZEZsb3cocHJvdmlkZXJJbmZvLCBpbXBsaWNpdElkZW50aWZpZXIpID8gaW1wbGljaXRJZGVudGlmaWVyIDogcGtjZUlkZW50aWZpZXI7XG4gICAgc3RhdGUgPSB7cHJvdmlkZXJJZDogcHJvdmlkZXJJZCwgc3VmZml4OiBhY2Nlc3NUb2tlblN1ZmZpeCwgcmVxdWVzdFNvdXJjZVR5cGU6IHJlcXVlc3RTb3VyY2VUeXBlLCBmbG93OiBmbG93LCBzY2hlbWU6IGN1c3RvbVVyaVNjaGVtZX07XG4gICAgY29uc3QgYXV0aFVybEFyciA9IHByb3ZpZGVySW5mby5hdXRob3JpemF0aW9uVXJsLnNwbGl0KCc/Jyk7XG4gICAgbGV0IGNvbm5lY3RvcjtcbiAgICBpZiAoYXV0aFVybEFyci5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy9xdWVyeSBwYXJhbXMgZG9uJ3QgZXhpc3RcbiAgICAgICAgY29ubmVjdG9yID0gJz8nO1xuICAgIH0gZWxzZSBpZiAoYXV0aFVybEFyci5sZW5ndGggPiAxICYmIGF1dGhVcmxBcnJbMV0gIT09ICcnKSB7XG4gICAgICAgIC8vcXVlcnkgcGFyYW1zIGV4aXN0LiBBcHBlbmQgJiBpbnN0ZWFkIG9mID8uXG4gICAgICAgIGNvbm5lY3RvciA9ICcmJztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvL25vdGhpbmcgZXhpc3RzIGFmdGVyICc/Jy4gY2xpZW50X2lkIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZDtcbiAgICAgICAgY29ubmVjdG9yID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1vblVybCA9IHByb3ZpZGVySW5mby5hdXRob3JpemF0aW9uVXJsICsgY29ubmVjdG9yICsgJ2NsaWVudF9pZD0nICsgY2xpZW50SWQgKyAnJnJlZGlyZWN0X3VyaT0nICsgcmVkaXJlY3RVcmkgKyAnJnN0YXRlPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKSArICcmc2NvcGU9JyArIGVuY29kZVVSSUNvbXBvbmVudChzY29wZXMpO1xuICAgIGxldCB1cmw7XG4gICAgaWYgKGZsb3cgPT09IGltcGxpY2l0SWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBwcm92aWRlckluZm8ucmVzcG9uc2VUeXBlID8gcHJvdmlkZXJJbmZvLnJlc3BvbnNlVHlwZSA6ICd0b2tlbic7XG4gICAgICAgIHVybCA9IGNvbW1vblVybCArICcmcmVzcG9uc2VfdHlwZT0nICsgcmVzcG9uc2VUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGNvbW1vblVybCArICcmcmVzcG9uc2VfdHlwZT1jb2RlJmNvZGVfY2hhbGxlbmdlPScgKyBjb2RlX2NoYWxsZW5nZSArICcmY29kZV9jaGFsbGVuZ2VfbWV0aG9kPScgKyBnZXQocHJvdmlkZXJJbmZvLCAnb0F1dGgyUGtjZS5jaGFsbGVuZ2VNZXRob2QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBmdW5jdGlvbiB0byBnZXQgdGhlIGF1dGhvcml6YXRpb24gdXJsXG4gKiBAcGFyYW0gcGFyYW1zIHByb3ZpZGVyIGlkIGZvciB3aGljaCB0aGUgYXV0aCB1cmwgaGFzIHRvIGJlIGZldGNoZWRcbiAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB1cG9uIHN1Y2Nlc3NmdWwgZmV0Y2ggb2YgdGhlIHByb3ZpZGVyc1xuICogQHBhcmFtIGZhaWx1cmVDYWxsYmFjayBjYWxsYmFjayB0byBiZSBpbnZva2VkIHVwb24gZXJyb3JcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKHBhcmFtcywgaHR0cCkge1xuICAgIGNvbnN0IGFjdGlvbiA9ICdnZXRBdXRob3JpemF0aW9uVXJsJyxcbiAgICAgICAgc2VydmljZVNldHRpbmdzID0gcGFyc2VDb25maWcoe1xuICAgICAgICAgICAgdGFyZ2V0OiAnb2F1dGhDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgdXJsUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBfV01fQVBQX1BST0pFQ1QuaWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJJZDogcGFyYW1zLnByb3ZpZGVySWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdFNvdXJjZVR5cGUnOiBwYXJhbXMucmVxdWVzdFNvdXJjZVR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIGh0dHAuc2VuZChzZXJ2aWNlU2V0dGluZ3MpO1xufVxuXG4vKipcbiAqIGZ1bmN0aW9uIHRyaWdnZXIgdGhlIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sgYWZ0ZXIgZ2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiB1cmxcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlclByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCkge1xuICAgIGNvbnN0IHVybEJvZHkgPSBpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIGltcGxpY2l0SWRlbnRpZmllcikgfHwgaXNQYXNzZWRGbG93KHNlY3VyaXR5T2JqLCBwa2NlSWRlbnRpZmllcikgPyB1cmwgOiB1cmwuYm9keTtcbiAgICBhZGRQcm92aWRlckNvbmZpZ0NhbGxCYWNrKHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJJZCxcbiAgICAgICAgdXJsOiB1cmxCb2R5LFxuICAgICAgICBpbnZva2U6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0lFKCkpIHsgLy8gaGFuZGxpbmcgZm9yIElFXG4gICAgICAgICAgICAgICAgaGFuZGxlTG9naW5Gb3JJRSh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmosIHJlcXVlc3RTb3VyY2VUeXBlLCBjdXN0b21VcmlTY2hlbWUsIGRlcGxveWVkVVJMKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9zdEdldEF1dGhvcml6YXRpb25VUkwodXJsQm9keSwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGN1c3RvbVVyaVNjaGVtZSwgZGVwbG95ZWRVUkwsIGh0dHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGFjY2Vzc1Rva2VuIGJhc2VkIG9uIHRoZSBydW4vc3R1ZGlvbW9kZVxuICogQHBhcmFtIHByb3ZpZGVyXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gKHByb3ZpZGVyLCBjaGVja0xvY2FsU3RvcmFnZSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5ID0gZ2V0QWNjZXNzVG9rZW5QbGFjZWhvbGRlcihwcm92aWRlcik7XG4gICAgaWYgKGNoZWNrTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShwcm92aWRlciArIGFjY2Vzc1Rva2VuU3VmZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGFjY2Vzc1Rva2VuS2V5KTtcbn07XG5cblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGVyZm9ybSB0aGUgYXV0aG9yaXphdGlvbiBieSBvcGVuaW5nIHRoZSB3aW5kb3cgYW5kIGhhdmluZyBhY3RpdmUgbGlzdGVuZXJzXG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gcHJvdmlkZXJJZFxuICogQHBhcmFtIG9uU3VjY2Vzc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBwZXJmb3JtQXV0aG9yaXphdGlvbiA9ICh1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgaHR0cCwgYWRkUHJvdmlkZXJDb25maWdDYWxsQmFjaywgcmVtb3ZlUHJvdmlkZXJDb25maWdDYWxsQmFjaywgc2VjdXJpdHlPYmo/LCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8pID0+IHtcbiAgICBsZXQgcmVxdWVzdFNvdXJjZVR5cGUgPSAnV0VCJztcbiAgICBpZiAodXJsKSB7XG4gICAgICAgIGlmIChpc0lFKCkpIHsgLy8gaGFuZGxpbmcgZm9yIElFXG4gICAgICAgICAgICBoYW5kbGVMb2dpbkZvcklFKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCBvbkVycm9yLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3RHZXRBdXRob3JpemF0aW9uVVJMKHVybCwgcHJvdmlkZXJJZCwgb25TdWNjZXNzLCByZW1vdmVQcm92aWRlckNvbmZpZ0NhbGxCYWNrLCBzZWN1cml0eU9iaiwgcmVxdWVzdFNvdXJjZVR5cGUsIGh0dHApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUGFzc2VkRmxvdyhzZWN1cml0eU9iaiwgaW1wbGljaXRJZGVudGlmaWVyKSB8fCBpc1Bhc3NlZEZsb3coc2VjdXJpdHlPYmosIHBrY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdHJpZ2dlclByb3ZpZGVyQ29uZmlnQ2FsbEJhY2sodXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXV0aG9yaXphdGlvblVybCh7XG4gICAgICAgICAgICAgICAgJ3Byb3ZpZGVySWQnOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgICdyZXF1ZXN0U291cmNlVHlwZSc6IHJlcXVlc3RTb3VyY2VUeXBlXG4gICAgICAgICAgICB9LCBodHRwKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQcm92aWRlckNvbmZpZ0NhbGxCYWNrKHJlc3BvbnNlLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGh0dHAsIGFkZFByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHJlbW92ZVByb3ZpZGVyQ29uZmlnQ2FsbEJhY2ssIHNlY3VyaXR5T2JqLCByZXF1ZXN0U291cmNlVHlwZSwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
@@ -4,8 +4,9 @@ import { Subject } from 'rxjs';
4
4
  import * as i1 from '@wm/core';
5
5
  import { _WM_APP_PROJECT, getWmProjectProperties, isIE } from '@wm/core';
6
6
  import { isUndefined, get, find, remove } from 'lodash-es';
7
- import moment from 'moment';
7
+ import * as momentLib from 'moment';
8
8
 
9
+ const moment = momentLib.default || window['moment'];
9
10
  const accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';
10
11
  let code_verifier, redirectUri;
11
12
  const parseConfig = (serviceParams) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../projects/oAuth/src/oAuth.utils.ts","../../../projects/oAuth/src/oAuth.service.ts","../../../projects/oAuth/src/index.ts"],"sourcesContent":["import { _WM_APP_PROJECT, isIE, getWmProjectProperties } from '@wm/core';\nimport {get, isUndefined} from \"lodash-es\";\n\nimport moment from 'moment';\ndeclare const jsSHA;\n\nconst accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';\n\nlet code_verifier, redirectUri;\n\nexport const parseConfig = (serviceParams: any): any => {\n\n let val, param, config;\n const urlParams = serviceParams.urlParams;\n\n config = {\n url: 'services/oauth2/:providerId/authorizationUrl',\n method: 'GET'\n };\n\n /*To handle dynamic urls, append the serviceParams.config.url with the static url(i.e., config.url)*/\n if (serviceParams.config) {\n config.url = (serviceParams.config.url || '') + config.url;\n config.method = serviceParams.config.method || config.method;\n config.headers = config.headers || {};\n\n // TODO[Shubham] - change to for - of\n for (const key in serviceParams.config.headers) {\n val = serviceParams.config.headers[key];\n config.headers[key] = val;\n }\n }\n /* check for url parameters to replace the url */\n if (urlParams) {\n for (param in urlParams) {\n if (urlParams.hasOwnProperty(param)) {\n val = urlParams[param];\n if (!isUndefined(val) && val !== null) {\n config.url = config.url.replace(new RegExp(':' + param, 'g'), val);\n }\n }\n }\n }\n\n /* check for data */\n if (serviceParams.params) {\n config.params = serviceParams.params;\n }\n /* check for data */\n if (!isUndefined(serviceParams.data)) {\n config.data = serviceParams.data;\n }\n /* check for data parameters, written to support old service calls (.json calls) */\n if (serviceParams.dataParams) {\n config.data.params = serviceParams.dataParams;\n }\n /* check for headers */\n if (serviceParams.headers) {\n config.headers = serviceParams.headers;\n }\n\n /* set extra config flags */\n config.byPassResult = serviceParams.byPassResult;\n config.isDirectCall = serviceParams.isDirectCall;\n config.isExtURL = serviceParams.isExtURL;\n config.preventMultiple = serviceParams.preventMultiple;\n config.responseType = serviceParams.responseType;\n\n return config;\n};\n\nconst listeners = {},\n ACCESSTOKEN_PLACEHOLDERS = {\n 'STUDIO': 'WM_STUDIO_',\n 'RUN': 'WM_RUN_'\n },\n newWindowProps = 'width=400,height=600';\n\n/**\n * This function remove the accessToken for a provider\n * @param provider\n */\nexport const removeAccessToken = (provider) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.removeItem(accessTokenKey);\n};\n\n/**\n * This function returns the accesstoken placeholder based on the studio or run mode for the project\n * @param provider\n * @returns {*}\n */\nfunction getAccessTokenPlaceholder(provider) {\n let accessTokenKey;\n accessTokenKey = ACCESSTOKEN_PLACEHOLDERS.RUN + _WM_APP_PROJECT.id + '_' + provider + accessTokenSuffix;\n return accessTokenKey;\n}\n\n/**\n * This function performs the fake local storage update, so the IE gets the latest token instead of returning the cached localStorageValue\n */\nfunction performFakeLocalStorageUpdate() {\n const dummy_key = 'dummy_key';\n localStorage.setItem(dummy_key, dummy_key);\n localStorage.removeItem(dummy_key);\n}\n\n/**\n * This function sets the accessToken\n * @param provider\n * @param accesstoken\n */\nfunction setAccessToken(provider, accesstoken) {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.setItem(accessTokenKey, accesstoken);\n}\n\n/**\n * this is a callback function to check if the authentication is done and invokes the successCallback\n * @param providerId\n * @param successCallback\n * @param evt\n */\nfunction checkAuthenticationStatus(providerId, successCallback, removeProviderConfigCallBack, evt, http?, securityObj?) {\n const accessTokenKey = providerId + accessTokenSuffix,\n accessTokenOrCode = localStorage.getItem(accessTokenKey);\n if (evt && evt.origin !== window.location.origin) {\n return;\n }\n if (accessTokenOrCode) {\n if (isPassedFlow(securityObj, pkceIdentifier)) {\n const req = 'client_id=' + securityObj.clientId + '&code=' + accessTokenOrCode + '&grant_type=authorization_code&code_verifier=' + code_verifier + '&redirect_uri=' + redirectUri;\n http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: securityObj.accessTokenUrl,\n data: req\n }).then(function(response) {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, response.body.access_token);\n });\n } else {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, accessTokenOrCode);\n }\n }\n}\n\n/**\n * function trigger the successCallback after getting the access token\n */\nfunction triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, token) {\n removeProviderConfigCallBack(providerId);\n localStorage.removeItem(accessTokenKey);\n setAccessToken(providerId, token);\n window.removeEventListener('message', listeners[providerId]);\n setTimeout(() => {\n delete listeners[providerId];\n if (successCallback) {\n successCallback(token);\n }\n });\n}\n\n/**\n * this function keeps on checking the accesstoken in the LocalStorage and updates it accordingly\n * @param providerId\n * @param onSuccess\n * @param onError\n * @param startTime\n * @param loginObj\n */\nfunction checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack) {\n performFakeLocalStorageUpdate();\n const currentTime = moment.duration(moment().format('HH:mm'), 'HH:mm' as any),\n timeDiff = currentTime.subtract(startTime),\n accessToken = getAccessToken(providerId, true);\n if (accessToken) {\n loginObj.accesstoken_retrieved = true;\n setAccessToken(providerId, accessToken);\n localStorage.removeItem(providerId + accessTokenSuffix);\n removeProviderConfigCallBack(providerId);\n if (onSuccess) {\n onSuccess();\n }\n } else if (timeDiff.minutes() > 1 && onSuccess && !loginObj.accesstoken_retrieved) {\n onSuccess('error');\n } else {\n setTimeout(() => {\n checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack);\n }, 3000);\n }\n}\n\n/**\n * checks for the window existence i.e if the window is manually closed by the user or any such\n * @param oAuthWindow\n * @param provider\n * @param callback\n */\nfunction checkForWindowExistence(oAuthWindow, provider, callback, providerInfo?) {\n if (oAuthWindow && listeners[provider]) {\n if (!oAuthWindow.closed) { // .closed is supported across major browser vendors however for IE the user has to enable protected mode from security options\n setTimeout(checkForWindowExistence.bind(undefined, oAuthWindow, provider, callback, providerInfo), 3000);\n } else {\n if (!isPassedFlow(providerInfo, pkceIdentifier)) {\n window.removeEventListener('message', listeners[provider]);\n delete listeners[provider];\n if (callback) {\n callback('error');\n }\n }\n }\n }\n}\n/**\n * this functions handles the logic related to the window operations in IE\n * @param url\n * @param providerId\n * @param onSuccess\n * @param onError\n */\nfunction handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?) {\n const loginObj = {\n 'accesstoken_retrieved': false\n };\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n }\n window.open(url, '_blank', newWindowProps);\n checkAccessTokenInWindow(providerId, onSuccess, onError, moment.duration(moment().format('HH:mm'), 'HH:mm' as any), loginObj, removeProviderConfigCallBack);\n}\n\n/**\n * this functions returns if the current oAuth Flow matches the passed flow or not\n * @param providerInfo\n */\nfunction isPassedFlow(providerInfo, flow) {\n let oAuthFlow = get(providerInfo, 'oauth2Flow');\n oAuthFlow = oAuthFlow ? oAuthFlow.toLowerCase() : oAuthFlow;\n if (flow === pkceIdentifier) {\n if (get(providerInfo, 'oAuth2Pkce.enabled') === true) {\n oAuthFlow = pkceIdentifier;\n }\n }\n return oAuthFlow === flow;\n}\n\n/**\n * this function adds the listener on the window and assigns the listener\n * @param provider\n * @param callback\n */\nfunction onAuthWindowOpen(provider, callback, removeProviderConfigCallBack, http?, securityObj?) {\n listeners[provider] = checkAuthenticationStatus.bind(undefined, provider, callback, removeProviderConfigCallBack, null, http, securityObj);\n window.addEventListener('message', listeners[provider], false);\n}\n\n// Generate a secure random string using the browser crypto functions\nfunction generateRandomString() {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, dec => ('0' + dec.toString(16)).substr(-2)).join('');\n}\n\n// Returns a promise that resolves to an ArrayBuffer\nfunction getEncryptedCode(plain) {\n const encoder = new TextEncoder();\n const data = encoder.encode(plain);\n const shaObj = new jsSHA(\"SHA-256\", \"UINT8ARRAY\", { encoding: \"UTF8\" });\n shaObj.update(data);\n return shaObj.getHash(\"ARRAYBUFFER\");\n}\n\n// Base64-urlencodes the input string\nfunction base64urlencode(str) {\n // Convert the ArrayBuffer to string using Uint8 array to convert to what btoa accepts.\n // btoa accepts chars only within ascii 0-255 and base64 encodes them.\n // Then convert the base64 encoded to base64url encoded\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.apply(null, new Uint8Array(str)))\n .replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * this function is a callback function which enables the listener and checks for the window existence\n * @param providerId\n * @param onSuccess\n * @param url\n */\nfunction postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else if (isPassedFlow(securityObj, pkceIdentifier)) {\n // Create and store a new PKCE code_verifier (the plaintext random secret)\n code_verifier = generateRandomString();\n let code_challenge;\n if (get(securityObj, 'oAuth2Pkce.challengeMethod') === 'plain') {\n code_challenge = code_verifier;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else {\n const encryptedCode = getEncryptedCode(code_verifier);\n code_challenge = base64urlencode(encryptedCode);\n //code_challenge = encryptedCode;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n\n }\n } else {\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n}\n\nfunction startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n let oAuthWindow;\n oAuthWindow = window.open(url, '_blank', newWindowProps);\n onAuthWindowOpen(providerId, onSuccess, removeProviderConfigCallBack, http, securityObj);\n checkForWindowExistence(oAuthWindow, providerId, onSuccess, securityObj);\n}\n\n/**\n * function to construct the url for implicit flow.\n * @param providerId provider id for which the url has to be set\n * @param providerInfo provider object which contains details such as scope, client id etc\n * @param requestSourceType requesting source is web or mobile\n * @returns url string\n */\nfunction constructURLForImplicitOrPKCE(providerId, providerInfo, requestSourceType, code_challenge, customUriScheme?, deployedURL?) {\n redirectUri = window.location.href.split('/#/')[0] + '/oAuthCallback.html';\n const clientId = providerInfo.clientId;\n const scopes = providerInfo.scopes.map(function(scope) { return scope.name }).join(' ');\n let state;\n if (getWmProjectProperties().isTestRuntime === true) {\n redirectUri = location.protocol + '//' + window.location.host + '/studio/oAuthCallback.html';\n }\n if (requestSourceType === 'MOBILE') {\n redirectUri = deployedURL + 'oAuthCallback.html';\n }\n const flow = isPassedFlow(providerInfo, implicitIdentifier) ? implicitIdentifier : pkceIdentifier;\n state = {providerId: providerId, suffix: accessTokenSuffix, requestSourceType: requestSourceType, flow: flow, scheme: customUriScheme};\n const authUrlArr = providerInfo.authorizationUrl.split('?');\n let connector;\n if (authUrlArr.length === 1) {\n //query params don't exist\n connector = '?';\n } else if (authUrlArr.length > 1 && authUrlArr[1] !== '') {\n //query params exist. Append & instead of ?.\n connector = '&';\n } else {\n //nothing exists after '?'. client_id can be directly appended;\n connector = '';\n }\n const commonUrl = providerInfo.authorizationUrl + connector + 'client_id=' + clientId + '&redirect_uri=' + redirectUri + '&state=' + encodeURIComponent(JSON.stringify(state)) + '&scope=' + encodeURIComponent(scopes);\n let url;\n if (flow === implicitIdentifier) {\n const responseType = providerInfo.responseType ? providerInfo.responseType : 'token';\n url = commonUrl + '&response_type=' + responseType;\n } else {\n url = commonUrl + '&response_type=code&code_challenge=' + code_challenge + '&code_challenge_method=' + get(providerInfo, 'oAuth2Pkce.challengeMethod');\n }\n return url;\n}\n\n/**\n * function to get the authorization url\n * @param params provider id for which the auth url has to be fetched\n * @param successCallback callback to be invoked upon successful fetch of the providers\n * @param failureCallback callback to be invoked upon error\n * @returns {*}\n */\nfunction getAuthorizationUrl(params, http) {\n const action = 'getAuthorizationUrl',\n serviceSettings = parseConfig({\n target: 'oauthConfiguration',\n action: action,\n urlParams: {\n projectId: _WM_APP_PROJECT.id,\n providerId: params.providerId\n },\n params: {\n 'requestSourceType': params.requestSourceType\n }\n });\n return http.send(serviceSettings);\n}\n\n/**\n * function trigger the addProviderConfigCallBack after getting the authorization url\n */\nfunction triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL) {\n const urlBody = isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier) ? url : url.body;\n addProviderConfigCallBack({\n name: providerId,\n url: urlBody,\n invoke: () => {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n postGetAuthorizationURL(urlBody, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n }\n });\n}\n\n/**\n * this function retrieves the accessToken based on the run/studiomode\n * @param provider\n * @returns {*}\n */\nexport const getAccessToken = (provider, checkLocalStorage) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n if (checkLocalStorage) {\n return localStorage.getItem(provider + accessTokenSuffix);\n }\n return localStorage.getItem(accessTokenKey);\n};\n\n\n/**\n * this function is used to perform the authorization by opening the window and having active listeners\n * @param url\n * @param providerId\n * @param onSuccess\n * @returns {*}\n */\nexport const performAuthorization = (url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj?, customUriScheme?, deployedURL?) => {\n let requestSourceType = 'WEB';\n if (url) {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack);\n } else {\n postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, http);\n }\n } else {\n if (isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier)) {\n triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n return getAuthorizationUrl({\n 'providerId': providerId,\n 'requestSourceType': requestSourceType\n }, http).then((response) => {\n triggerProviderConfigCallBack(response, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n });\n }\n }\n};\n","import { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { AbstractHttpService } from '@wm/core';\n\nimport { getAccessToken, performAuthorization, removeAccessToken } from './oAuth.utils';\nimport {find, remove} from \"lodash-es\";\n\n@Injectable()\nexport class OAuthService {\n constructor(private httpService: AbstractHttpService) {}\n\n providers = new Subject();\n\n providersConfig = [];\n\n getOAuthProvidersAsObservable(): Observable<any> {\n return this.providers.asObservable();\n }\n\n addProviderConfig(provider) {\n if (!(find(this.providersConfig, {'name': provider.name}))) {\n this.providersConfig.push(provider);\n }\n this.providers.next(this.providersConfig);\n }\n\n removeProviderConfig(providerId) {\n remove(this.providersConfig, provider => provider.name === providerId);\n this.providers.next(this.providersConfig);\n }\n\n perfromOAuthorization(url, providerId, onSuccess, onError, securityObj?, customUriScheme?, deployedURL?) {\n performAuthorization(url, providerId, onSuccess, onError, this.httpService, this.addProviderConfig.bind(this), this.removeProviderConfig.bind(this), securityObj, customUriScheme, deployedURL);\n }\n\n getAccessToken(provider, checkLocalStorage) {\n return getAccessToken(provider, checkLocalStorage);\n }\n\n removeAccessToken(provider) {\n removeAccessToken(provider);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../projects/oAuth/src/oAuth.utils.ts","../../../projects/oAuth/src/oAuth.service.ts","../../../projects/oAuth/src/index.ts"],"sourcesContent":["import { _WM_APP_PROJECT, isIE, getWmProjectProperties } from '@wm/core';\nimport {get, isUndefined} from \"lodash-es\";\n\nimport * as momentLib from 'moment';\nconst moment = momentLib.default || window['moment'];\ndeclare const jsSHA;\n\nconst accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';\n\nlet code_verifier, redirectUri;\n\nexport const parseConfig = (serviceParams: any): any => {\n\n let val, param, config;\n const urlParams = serviceParams.urlParams;\n\n config = {\n url: 'services/oauth2/:providerId/authorizationUrl',\n method: 'GET'\n };\n\n /*To handle dynamic urls, append the serviceParams.config.url with the static url(i.e., config.url)*/\n if (serviceParams.config) {\n config.url = (serviceParams.config.url || '') + config.url;\n config.method = serviceParams.config.method || config.method;\n config.headers = config.headers || {};\n\n // TODO[Shubham] - change to for - of\n for (const key in serviceParams.config.headers) {\n val = serviceParams.config.headers[key];\n config.headers[key] = val;\n }\n }\n /* check for url parameters to replace the url */\n if (urlParams) {\n for (param in urlParams) {\n if (urlParams.hasOwnProperty(param)) {\n val = urlParams[param];\n if (!isUndefined(val) && val !== null) {\n config.url = config.url.replace(new RegExp(':' + param, 'g'), val);\n }\n }\n }\n }\n\n /* check for data */\n if (serviceParams.params) {\n config.params = serviceParams.params;\n }\n /* check for data */\n if (!isUndefined(serviceParams.data)) {\n config.data = serviceParams.data;\n }\n /* check for data parameters, written to support old service calls (.json calls) */\n if (serviceParams.dataParams) {\n config.data.params = serviceParams.dataParams;\n }\n /* check for headers */\n if (serviceParams.headers) {\n config.headers = serviceParams.headers;\n }\n\n /* set extra config flags */\n config.byPassResult = serviceParams.byPassResult;\n config.isDirectCall = serviceParams.isDirectCall;\n config.isExtURL = serviceParams.isExtURL;\n config.preventMultiple = serviceParams.preventMultiple;\n config.responseType = serviceParams.responseType;\n\n return config;\n};\n\nconst listeners = {},\n ACCESSTOKEN_PLACEHOLDERS = {\n 'STUDIO': 'WM_STUDIO_',\n 'RUN': 'WM_RUN_'\n },\n newWindowProps = 'width=400,height=600';\n\n/**\n * This function remove the accessToken for a provider\n * @param provider\n */\nexport const removeAccessToken = (provider) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.removeItem(accessTokenKey);\n};\n\n/**\n * This function returns the accesstoken placeholder based on the studio or run mode for the project\n * @param provider\n * @returns {*}\n */\nfunction getAccessTokenPlaceholder(provider) {\n let accessTokenKey;\n accessTokenKey = ACCESSTOKEN_PLACEHOLDERS.RUN + _WM_APP_PROJECT.id + '_' + provider + accessTokenSuffix;\n return accessTokenKey;\n}\n\n/**\n * This function performs the fake local storage update, so the IE gets the latest token instead of returning the cached localStorageValue\n */\nfunction performFakeLocalStorageUpdate() {\n const dummy_key = 'dummy_key';\n localStorage.setItem(dummy_key, dummy_key);\n localStorage.removeItem(dummy_key);\n}\n\n/**\n * This function sets the accessToken\n * @param provider\n * @param accesstoken\n */\nfunction setAccessToken(provider, accesstoken) {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.setItem(accessTokenKey, accesstoken);\n}\n\n/**\n * this is a callback function to check if the authentication is done and invokes the successCallback\n * @param providerId\n * @param successCallback\n * @param evt\n */\nfunction checkAuthenticationStatus(providerId, successCallback, removeProviderConfigCallBack, evt, http?, securityObj?) {\n const accessTokenKey = providerId + accessTokenSuffix,\n accessTokenOrCode = localStorage.getItem(accessTokenKey);\n if (evt && evt.origin !== window.location.origin) {\n return;\n }\n if (accessTokenOrCode) {\n if (isPassedFlow(securityObj, pkceIdentifier)) {\n const req = 'client_id=' + securityObj.clientId + '&code=' + accessTokenOrCode + '&grant_type=authorization_code&code_verifier=' + code_verifier + '&redirect_uri=' + redirectUri;\n http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: securityObj.accessTokenUrl,\n data: req\n }).then(function(response) {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, response.body.access_token);\n });\n } else {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, accessTokenOrCode);\n }\n }\n}\n\n/**\n * function trigger the successCallback after getting the access token\n */\nfunction triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, token) {\n removeProviderConfigCallBack(providerId);\n localStorage.removeItem(accessTokenKey);\n setAccessToken(providerId, token);\n window.removeEventListener('message', listeners[providerId]);\n setTimeout(() => {\n delete listeners[providerId];\n if (successCallback) {\n successCallback(token);\n }\n });\n}\n\n/**\n * this function keeps on checking the accesstoken in the LocalStorage and updates it accordingly\n * @param providerId\n * @param onSuccess\n * @param onError\n * @param startTime\n * @param loginObj\n */\nfunction checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack) {\n performFakeLocalStorageUpdate();\n const currentTime = moment.duration(moment().format('HH:mm'), 'HH:mm' as any),\n timeDiff = currentTime.subtract(startTime),\n accessToken = getAccessToken(providerId, true);\n if (accessToken) {\n loginObj.accesstoken_retrieved = true;\n setAccessToken(providerId, accessToken);\n localStorage.removeItem(providerId + accessTokenSuffix);\n removeProviderConfigCallBack(providerId);\n if (onSuccess) {\n onSuccess();\n }\n } else if (timeDiff.minutes() > 1 && onSuccess && !loginObj.accesstoken_retrieved) {\n onSuccess('error');\n } else {\n setTimeout(() => {\n checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack);\n }, 3000);\n }\n}\n\n/**\n * checks for the window existence i.e if the window is manually closed by the user or any such\n * @param oAuthWindow\n * @param provider\n * @param callback\n */\nfunction checkForWindowExistence(oAuthWindow, provider, callback, providerInfo?) {\n if (oAuthWindow && listeners[provider]) {\n if (!oAuthWindow.closed) { // .closed is supported across major browser vendors however for IE the user has to enable protected mode from security options\n setTimeout(checkForWindowExistence.bind(undefined, oAuthWindow, provider, callback, providerInfo), 3000);\n } else {\n if (!isPassedFlow(providerInfo, pkceIdentifier)) {\n window.removeEventListener('message', listeners[provider]);\n delete listeners[provider];\n if (callback) {\n callback('error');\n }\n }\n }\n }\n}\n/**\n * this functions handles the logic related to the window operations in IE\n * @param url\n * @param providerId\n * @param onSuccess\n * @param onError\n */\nfunction handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?) {\n const loginObj = {\n 'accesstoken_retrieved': false\n };\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n }\n window.open(url, '_blank', newWindowProps);\n checkAccessTokenInWindow(providerId, onSuccess, onError, moment.duration(moment().format('HH:mm'), 'HH:mm' as any), loginObj, removeProviderConfigCallBack);\n}\n\n/**\n * this functions returns if the current oAuth Flow matches the passed flow or not\n * @param providerInfo\n */\nfunction isPassedFlow(providerInfo, flow) {\n let oAuthFlow = get(providerInfo, 'oauth2Flow');\n oAuthFlow = oAuthFlow ? oAuthFlow.toLowerCase() : oAuthFlow;\n if (flow === pkceIdentifier) {\n if (get(providerInfo, 'oAuth2Pkce.enabled') === true) {\n oAuthFlow = pkceIdentifier;\n }\n }\n return oAuthFlow === flow;\n}\n\n/**\n * this function adds the listener on the window and assigns the listener\n * @param provider\n * @param callback\n */\nfunction onAuthWindowOpen(provider, callback, removeProviderConfigCallBack, http?, securityObj?) {\n listeners[provider] = checkAuthenticationStatus.bind(undefined, provider, callback, removeProviderConfigCallBack, null, http, securityObj);\n window.addEventListener('message', listeners[provider], false);\n}\n\n// Generate a secure random string using the browser crypto functions\nfunction generateRandomString() {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, dec => ('0' + dec.toString(16)).substr(-2)).join('');\n}\n\n// Returns a promise that resolves to an ArrayBuffer\nfunction getEncryptedCode(plain) {\n const encoder = new TextEncoder();\n const data = encoder.encode(plain);\n const shaObj = new jsSHA(\"SHA-256\", \"UINT8ARRAY\", { encoding: \"UTF8\" });\n shaObj.update(data);\n return shaObj.getHash(\"ARRAYBUFFER\");\n}\n\n// Base64-urlencodes the input string\nfunction base64urlencode(str) {\n // Convert the ArrayBuffer to string using Uint8 array to convert to what btoa accepts.\n // btoa accepts chars only within ascii 0-255 and base64 encodes them.\n // Then convert the base64 encoded to base64url encoded\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.apply(null, new Uint8Array(str)))\n .replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * this function is a callback function which enables the listener and checks for the window existence\n * @param providerId\n * @param onSuccess\n * @param url\n */\nfunction postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else if (isPassedFlow(securityObj, pkceIdentifier)) {\n // Create and store a new PKCE code_verifier (the plaintext random secret)\n code_verifier = generateRandomString();\n let code_challenge;\n if (get(securityObj, 'oAuth2Pkce.challengeMethod') === 'plain') {\n code_challenge = code_verifier;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else {\n const encryptedCode = getEncryptedCode(code_verifier);\n code_challenge = base64urlencode(encryptedCode);\n //code_challenge = encryptedCode;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n\n }\n } else {\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n}\n\nfunction startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n let oAuthWindow;\n oAuthWindow = window.open(url, '_blank', newWindowProps);\n onAuthWindowOpen(providerId, onSuccess, removeProviderConfigCallBack, http, securityObj);\n checkForWindowExistence(oAuthWindow, providerId, onSuccess, securityObj);\n}\n\n/**\n * function to construct the url for implicit flow.\n * @param providerId provider id for which the url has to be set\n * @param providerInfo provider object which contains details such as scope, client id etc\n * @param requestSourceType requesting source is web or mobile\n * @returns url string\n */\nfunction constructURLForImplicitOrPKCE(providerId, providerInfo, requestSourceType, code_challenge, customUriScheme?, deployedURL?) {\n redirectUri = window.location.href.split('/#/')[0] + '/oAuthCallback.html';\n const clientId = providerInfo.clientId;\n const scopes = providerInfo.scopes.map(function(scope) { return scope.name }).join(' ');\n let state;\n if (getWmProjectProperties().isTestRuntime === true) {\n redirectUri = location.protocol + '//' + window.location.host + '/studio/oAuthCallback.html';\n }\n if (requestSourceType === 'MOBILE') {\n redirectUri = deployedURL + 'oAuthCallback.html';\n }\n const flow = isPassedFlow(providerInfo, implicitIdentifier) ? implicitIdentifier : pkceIdentifier;\n state = {providerId: providerId, suffix: accessTokenSuffix, requestSourceType: requestSourceType, flow: flow, scheme: customUriScheme};\n const authUrlArr = providerInfo.authorizationUrl.split('?');\n let connector;\n if (authUrlArr.length === 1) {\n //query params don't exist\n connector = '?';\n } else if (authUrlArr.length > 1 && authUrlArr[1] !== '') {\n //query params exist. Append & instead of ?.\n connector = '&';\n } else {\n //nothing exists after '?'. client_id can be directly appended;\n connector = '';\n }\n const commonUrl = providerInfo.authorizationUrl + connector + 'client_id=' + clientId + '&redirect_uri=' + redirectUri + '&state=' + encodeURIComponent(JSON.stringify(state)) + '&scope=' + encodeURIComponent(scopes);\n let url;\n if (flow === implicitIdentifier) {\n const responseType = providerInfo.responseType ? providerInfo.responseType : 'token';\n url = commonUrl + '&response_type=' + responseType;\n } else {\n url = commonUrl + '&response_type=code&code_challenge=' + code_challenge + '&code_challenge_method=' + get(providerInfo, 'oAuth2Pkce.challengeMethod');\n }\n return url;\n}\n\n/**\n * function to get the authorization url\n * @param params provider id for which the auth url has to be fetched\n * @param successCallback callback to be invoked upon successful fetch of the providers\n * @param failureCallback callback to be invoked upon error\n * @returns {*}\n */\nfunction getAuthorizationUrl(params, http) {\n const action = 'getAuthorizationUrl',\n serviceSettings = parseConfig({\n target: 'oauthConfiguration',\n action: action,\n urlParams: {\n projectId: _WM_APP_PROJECT.id,\n providerId: params.providerId\n },\n params: {\n 'requestSourceType': params.requestSourceType\n }\n });\n return http.send(serviceSettings);\n}\n\n/**\n * function trigger the addProviderConfigCallBack after getting the authorization url\n */\nfunction triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL) {\n const urlBody = isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier) ? url : url.body;\n addProviderConfigCallBack({\n name: providerId,\n url: urlBody,\n invoke: () => {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n postGetAuthorizationURL(urlBody, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n }\n });\n}\n\n/**\n * this function retrieves the accessToken based on the run/studiomode\n * @param provider\n * @returns {*}\n */\nexport const getAccessToken = (provider, checkLocalStorage) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n if (checkLocalStorage) {\n return localStorage.getItem(provider + accessTokenSuffix);\n }\n return localStorage.getItem(accessTokenKey);\n};\n\n\n/**\n * this function is used to perform the authorization by opening the window and having active listeners\n * @param url\n * @param providerId\n * @param onSuccess\n * @returns {*}\n */\nexport const performAuthorization = (url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj?, customUriScheme?, deployedURL?) => {\n let requestSourceType = 'WEB';\n if (url) {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack);\n } else {\n postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, http);\n }\n } else {\n if (isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier)) {\n triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n return getAuthorizationUrl({\n 'providerId': providerId,\n 'requestSourceType': requestSourceType\n }, http).then((response) => {\n triggerProviderConfigCallBack(response, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n });\n }\n }\n};\n","import { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { AbstractHttpService } from '@wm/core';\n\nimport { getAccessToken, performAuthorization, removeAccessToken } from './oAuth.utils';\nimport {find, remove} from \"lodash-es\";\n\n@Injectable()\nexport class OAuthService {\n constructor(private httpService: AbstractHttpService) {}\n\n providers = new Subject();\n\n providersConfig = [];\n\n getOAuthProvidersAsObservable(): Observable<any> {\n return this.providers.asObservable();\n }\n\n addProviderConfig(provider) {\n if (!(find(this.providersConfig, {'name': provider.name}))) {\n this.providersConfig.push(provider);\n }\n this.providers.next(this.providersConfig);\n }\n\n removeProviderConfig(providerId) {\n remove(this.providersConfig, provider => provider.name === providerId);\n this.providers.next(this.providersConfig);\n }\n\n perfromOAuthorization(url, providerId, onSuccess, onError, securityObj?, customUriScheme?, deployedURL?) {\n performAuthorization(url, providerId, onSuccess, onError, this.httpService, this.addProviderConfig.bind(this), this.removeProviderConfig.bind(this), securityObj, customUriScheme, deployedURL);\n }\n\n getAccessToken(provider, checkLocalStorage) {\n return getAccessToken(provider, checkLocalStorage);\n }\n\n removeAccessToken(provider) {\n removeAccessToken(provider);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.11.0-next.27920",
3
+ "version": "11.11.0-rc.6109",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@wavemaker/app-ng-runtime",
9
- "version": "11.11.0-next.27920",
9
+ "version": "11.11.0-rc.6109",
10
10
  "license": "MIT",
11
11
  "engines": {
12
12
  "node": ">=18.16.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.11.0-next.27920",
3
+ "version": "11.11.0-rc.6109",
4
4
  "description": "All modules required for a WaveMaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/router'), require('@angular/common'), require('@wm/core'), require('@wm/security'), require('@wm/variables'), require('lodash-es'), require('@wm/components/page'), require('rxjs'), require('@wm/components/base'), require('tslib'), require('@wm/components/input'), require('@wm/components/prefab'), require('@angular/common/http'), require('@angular/platform-browser'), require('@angular/forms'), require('ngx-toastr'), require('@wm/components/dialogs'), require('@wm/components/dialogs/confirm-dialog'), require('@wm/components/dialogs/design-dialog'), require('@wm/http'), require('@wm/oAuth'), require('ngx-bootstrap/chronos'), require('ngx-bootstrap/datepicker'), require('moment'), require('@wm/components/dialogs/alert-dialog'), require('ngx-bootstrap/utils'), require('rxjs/operators'), require('@wm/transpiler'), require('@wm/build-task'), require('@wm/components/page/footer'), require('@wm/components/page/header'), require('@wm/components/page/left-panel'), require('@wm/components/page/right-panel'), require('@wm/components/page/top-nav'), require('@wm/components/basic'), require('@wm/components/basic/progress'), require('@wm/components/basic/rich-text-editor'), require('@wm/components/basic/search'), require('@wm/components/basic/tree'), require('@wm/components/input/calendar'), require('@wm/components/input/chips'), require('@wm/components/input/color-picker'), require('@wm/components/input/currency'), require('@wm/components/input/epoch'), require('@wm/components/input/file-upload'), require('@wm/components/input/rating'), require('@wm/components/input/slider'), require('@wm/components/data/card'), require('@wm/components/data/form'), require('@wm/components/data/list'), require('@wm/components/data/live-table'), require('@wm/components/data/pagination'), require('@wm/components/data/table'), require('@wm/components/chart'), require('@wm/components/containers/accordion'), require('@wm/components/containers/linear-layout'), require('@wm/components/containers/layout-grid'), require('@wm/components/containers/panel'), require('@wm/components/containers/tabs'), require('@wm/components/containers/tile'), require('@wm/components/containers/wizard'), require('@wm/components/dialogs/iframe-dialog'), require('@wm/components/dialogs/login-dialog'), require('@wm/components/dialogs/partial-dialog'), require('@wm/components/navigation/breadcrumb'), require('@wm/components/navigation/menu'), require('@wm/components/navigation/navbar'), require('@wm/components/navigation/popover'), require('@wm/components/advanced/carousel'), require('@wm/components/advanced/login'), require('@wm/components/advanced/marquee'), require('@wm/components/advanced/custom'), require('ngx-bootstrap/timepicker'), require('ngx-bootstrap/dropdown'), require('ngx-bootstrap/pagination'), require('ngx-bootstrap/typeahead'), require('ngx-bootstrap/progressbar'), require('ngx-bootstrap/carousel'), require('ngx-bootstrap/popover'), require('ng-circle-progress'), require('ngx-bootstrap/tooltip')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@angular/router', '@angular/common', '@wm/core', '@wm/security', '@wm/variables', 'lodash-es', '@wm/components/page', 'rxjs', '@wm/components/base', 'tslib', '@wm/components/input', '@wm/components/prefab', '@angular/common/http', '@angular/platform-browser', '@angular/forms', 'ngx-toastr', '@wm/components/dialogs', '@wm/components/dialogs/confirm-dialog', '@wm/components/dialogs/design-dialog', '@wm/http', '@wm/oAuth', 'ngx-bootstrap/chronos', 'ngx-bootstrap/datepicker', 'moment', '@wm/components/dialogs/alert-dialog', 'ngx-bootstrap/utils', 'rxjs/operators', '@wm/transpiler', '@wm/build-task', '@wm/components/page/footer', '@wm/components/page/header', '@wm/components/page/left-panel', '@wm/components/page/right-panel', '@wm/components/page/top-nav', '@wm/components/basic', '@wm/components/basic/progress', '@wm/components/basic/rich-text-editor', '@wm/components/basic/search', '@wm/components/basic/tree', '@wm/components/input/calendar', '@wm/components/input/chips', '@wm/components/input/color-picker', '@wm/components/input/currency', '@wm/components/input/epoch', '@wm/components/input/file-upload', '@wm/components/input/rating', '@wm/components/input/slider', '@wm/components/data/card', '@wm/components/data/form', '@wm/components/data/list', '@wm/components/data/live-table', '@wm/components/data/pagination', '@wm/components/data/table', '@wm/components/chart', '@wm/components/containers/accordion', '@wm/components/containers/linear-layout', '@wm/components/containers/layout-grid', '@wm/components/containers/panel', '@wm/components/containers/tabs', '@wm/components/containers/tile', '@wm/components/containers/wizard', '@wm/components/dialogs/iframe-dialog', '@wm/components/dialogs/login-dialog', '@wm/components/dialogs/partial-dialog', '@wm/components/navigation/breadcrumb', '@wm/components/navigation/menu', '@wm/components/navigation/navbar', '@wm/components/navigation/popover', '@wm/components/advanced/carousel', '@wm/components/advanced/login', '@wm/components/advanced/marquee', '@wm/components/advanced/custom', 'ngx-bootstrap/timepicker', 'ngx-bootstrap/dropdown', 'ngx-bootstrap/pagination', 'ngx-bootstrap/typeahead', 'ngx-bootstrap/progressbar', 'ngx-bootstrap/carousel', 'ngx-bootstrap/popover', 'ng-circle-progress', 'ngx-bootstrap/tooltip'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.runtime = global.wm.runtime || {}, global.wm.runtime.base = {}), global.ng.core, global.ng.router, global.ng.common, global.wm.core, global.wm.security, global.wm.variables, global._, global.wm.components.page, global.rxjs, global.wm.components.base, global.tslib, global.wm.components.input, global.wm.components.prefab, global.ng.common.http, global.ng.platformBrowser, global.ng.forms, global.ngxToastr, global.wm.components.dialogs, global.wm.components.dialogs.confirmdialog, global.wm.components.dialogs.designdialog, global.wm.http, global.wm.oAuth, global.chronos, global.datepicker, global.moment, global.wm.components.dialogs.alertdialog, global.utils, global.rxjs.operators, global.wm.transpiler, global.wm.buildTask, global.wm.components.page.footer, global.wm.components.page.header, global.wm.components.page.leftpanel, global.wm.components.page.rightpanel, global.wm.components.page.topnav, global.wm.components.basic, global.wm.components.basic.progress, global.wm.components.basic.richtexteditor, global.wm.components.basic.search, global.wm.components.basic.tree, global.wm.components.input.calendar, global.wm.components.input.chips, global.wm.components.input.colorpicker, global.wm.components.input.currency, global.wm.components.input.epoch, global.wm.components.input.fileupload, global.wm.components.input.rating, global.wm.components.input.slider, global.wm.components.data.card, global.wm.components.data.form, global.wm.components.data.list, global.wm.components.data.livetable, global.wm.components.data.pagination, global.wm.components.data.table, global.wm.components.chart, global.wm.components.containers.accordion, global.wm.components.containers.linearlayout, global.wm.components.containers.layoutgrid, global.wm.components.containers.panel, global.wm.components.containers.tabs, global.wm.components.containers.tile, global.wm.components.containers.wizard, global.wm.components.dialogs.iframedialog, global.wm.components.dialogs.logindialog, global.wm.components.dialogs.partialdialog, global.wm.components.navigation.breadcrumb, global.wm.components.navigation.menu, global.wm.components.navigation.navbar, global.wm.components.navigation.popover, global.wm.components.advanced.carousel, global.wm.components.advanced.login, global.wm.components.advanced.marquee, global.wm.components.advanced.custom, global.timepicker, global.dropdown, global.pagination, global.typeahead, global.progressbar, global.carousel, global.popover, global.ngCircleProgress, global.tooltip));
5
- })(this, (function (exports, i0, i1$1, i5, i1, i2, i4, lodashEs, page, rxjs, i3, tslib, input, prefab, i1$4, i1$3, forms, i1$2, dialogs, confirmDialog, designDialog, http, i2$2, chronos, i2$1, moment, alertDialog, utils, operators, transpiler, buildTask, footer, header, leftPanel, rightPanel, topNav, basic, progress, richTextEditor, search, tree, calendar, chips, colorPicker, currency, epoch, fileUpload, rating, slider, card, form, list, liveTable, pagination$1, table, chart, accordion, linearLayout, layoutGrid, panel, tabs, tile, wizard, iframeDialog, loginDialog, partialDialog, breadcrumb, menu, navbar, popover$1, carousel$1, login, marquee, custom, timepicker, dropdown, pagination, typeahead, progressbar, carousel, popover, ngCircleProgress, tooltip) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/router'), require('@angular/common'), require('@wm/core'), require('@wm/security'), require('@wm/variables'), require('lodash-es'), require('@wm/components/page'), require('rxjs'), require('@wm/components/base'), require('tslib'), require('@wm/components/input'), require('@wm/components/prefab'), require('@angular/common/http'), require('@angular/platform-browser'), require('@angular/forms'), require('ngx-toastr'), require('@wm/components/dialogs'), require('@wm/components/dialogs/confirm-dialog'), require('@wm/components/dialogs/design-dialog'), require('@wm/http'), require('@wm/oAuth'), require('moment-timezone/moment-timezone'), require('ngx-bootstrap/chronos'), require('ngx-bootstrap/datepicker'), require('@wm/components/dialogs/alert-dialog'), require('ngx-bootstrap/utils'), require('rxjs/operators'), require('@wm/transpiler'), require('@wm/build-task'), require('@wm/components/page/footer'), require('@wm/components/page/header'), require('@wm/components/page/left-panel'), require('@wm/components/page/right-panel'), require('@wm/components/page/top-nav'), require('@wm/components/basic'), require('@wm/components/basic/progress'), require('@wm/components/basic/rich-text-editor'), require('@wm/components/basic/search'), require('@wm/components/basic/tree'), require('@wm/components/input/calendar'), require('@wm/components/input/chips'), require('@wm/components/input/color-picker'), require('@wm/components/input/currency'), require('@wm/components/input/epoch'), require('@wm/components/input/file-upload'), require('@wm/components/input/rating'), require('@wm/components/input/slider'), require('@wm/components/data/card'), require('@wm/components/data/form'), require('@wm/components/data/list'), require('@wm/components/data/live-table'), require('@wm/components/data/pagination'), require('@wm/components/data/table'), require('@wm/components/chart'), require('@wm/components/containers/accordion'), require('@wm/components/containers/linear-layout'), require('@wm/components/containers/layout-grid'), require('@wm/components/containers/panel'), require('@wm/components/containers/tabs'), require('@wm/components/containers/tile'), require('@wm/components/containers/wizard'), require('@wm/components/dialogs/iframe-dialog'), require('@wm/components/dialogs/login-dialog'), require('@wm/components/dialogs/partial-dialog'), require('@wm/components/navigation/breadcrumb'), require('@wm/components/navigation/menu'), require('@wm/components/navigation/navbar'), require('@wm/components/navigation/popover'), require('@wm/components/advanced/carousel'), require('@wm/components/advanced/login'), require('@wm/components/advanced/marquee'), require('@wm/components/advanced/custom'), require('ngx-bootstrap/timepicker'), require('ngx-bootstrap/dropdown'), require('ngx-bootstrap/pagination'), require('ngx-bootstrap/typeahead'), require('ngx-bootstrap/progressbar'), require('ngx-bootstrap/carousel'), require('ngx-bootstrap/popover'), require('ng-circle-progress'), require('ngx-bootstrap/tooltip')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@angular/router', '@angular/common', '@wm/core', '@wm/security', '@wm/variables', 'lodash-es', '@wm/components/page', 'rxjs', '@wm/components/base', 'tslib', '@wm/components/input', '@wm/components/prefab', '@angular/common/http', '@angular/platform-browser', '@angular/forms', 'ngx-toastr', '@wm/components/dialogs', '@wm/components/dialogs/confirm-dialog', '@wm/components/dialogs/design-dialog', '@wm/http', '@wm/oAuth', 'moment-timezone/moment-timezone', 'ngx-bootstrap/chronos', 'ngx-bootstrap/datepicker', '@wm/components/dialogs/alert-dialog', 'ngx-bootstrap/utils', 'rxjs/operators', '@wm/transpiler', '@wm/build-task', '@wm/components/page/footer', '@wm/components/page/header', '@wm/components/page/left-panel', '@wm/components/page/right-panel', '@wm/components/page/top-nav', '@wm/components/basic', '@wm/components/basic/progress', '@wm/components/basic/rich-text-editor', '@wm/components/basic/search', '@wm/components/basic/tree', '@wm/components/input/calendar', '@wm/components/input/chips', '@wm/components/input/color-picker', '@wm/components/input/currency', '@wm/components/input/epoch', '@wm/components/input/file-upload', '@wm/components/input/rating', '@wm/components/input/slider', '@wm/components/data/card', '@wm/components/data/form', '@wm/components/data/list', '@wm/components/data/live-table', '@wm/components/data/pagination', '@wm/components/data/table', '@wm/components/chart', '@wm/components/containers/accordion', '@wm/components/containers/linear-layout', '@wm/components/containers/layout-grid', '@wm/components/containers/panel', '@wm/components/containers/tabs', '@wm/components/containers/tile', '@wm/components/containers/wizard', '@wm/components/dialogs/iframe-dialog', '@wm/components/dialogs/login-dialog', '@wm/components/dialogs/partial-dialog', '@wm/components/navigation/breadcrumb', '@wm/components/navigation/menu', '@wm/components/navigation/navbar', '@wm/components/navigation/popover', '@wm/components/advanced/carousel', '@wm/components/advanced/login', '@wm/components/advanced/marquee', '@wm/components/advanced/custom', 'ngx-bootstrap/timepicker', 'ngx-bootstrap/dropdown', 'ngx-bootstrap/pagination', 'ngx-bootstrap/typeahead', 'ngx-bootstrap/progressbar', 'ngx-bootstrap/carousel', 'ngx-bootstrap/popover', 'ng-circle-progress', 'ngx-bootstrap/tooltip'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.runtime = global.wm.runtime || {}, global.wm.runtime.base = {}), global.ng.core, global.ng.router, global.ng.common, global.wm.core, global.wm.security, global.wm.variables, global._, global.wm.components.page, global.rxjs, global.wm.components.base, global.tslib, global.wm.components.input, global.wm.components.prefab, global.ng.common.http, global.ng.platformBrowser, global.ng.forms, global.ngxToastr, global.wm.components.dialogs, global.wm.components.dialogs.confirmdialog, global.wm.components.dialogs.designdialog, global.wm.http, global.wm.oAuth, global.momentLib, global.chronos, global.datepicker, global.wm.components.dialogs.alertdialog, global.utils, global.rxjs.operators, global.wm.transpiler, global.wm.buildTask, global.wm.components.page.footer, global.wm.components.page.header, global.wm.components.page.leftpanel, global.wm.components.page.rightpanel, global.wm.components.page.topnav, global.wm.components.basic, global.wm.components.basic.progress, global.wm.components.basic.richtexteditor, global.wm.components.basic.search, global.wm.components.basic.tree, global.wm.components.input.calendar, global.wm.components.input.chips, global.wm.components.input.colorpicker, global.wm.components.input.currency, global.wm.components.input.epoch, global.wm.components.input.fileupload, global.wm.components.input.rating, global.wm.components.input.slider, global.wm.components.data.card, global.wm.components.data.form, global.wm.components.data.list, global.wm.components.data.livetable, global.wm.components.data.pagination, global.wm.components.data.table, global.wm.components.chart, global.wm.components.containers.accordion, global.wm.components.containers.linearlayout, global.wm.components.containers.layoutgrid, global.wm.components.containers.panel, global.wm.components.containers.tabs, global.wm.components.containers.tile, global.wm.components.containers.wizard, global.wm.components.dialogs.iframedialog, global.wm.components.dialogs.logindialog, global.wm.components.dialogs.partialdialog, global.wm.components.navigation.breadcrumb, global.wm.components.navigation.menu, global.wm.components.navigation.navbar, global.wm.components.navigation.popover, global.wm.components.advanced.carousel, global.wm.components.advanced.login, global.wm.components.advanced.marquee, global.wm.components.advanced.custom, global.timepicker, global.dropdown, global.pagination, global.typeahead, global.progressbar, global.carousel, global.popover, global.ngCircleProgress, global.tooltip));
5
+ })(this, (function (exports, i0, i1$1, i5, i1, i2, i4, lodashEs, page, rxjs, i3, tslib, input, prefab, i1$4, i1$3, forms, i1$2, dialogs, confirmDialog, designDialog, http, i2$2, momentLib, chronos, i2$1, alertDialog, utils, operators, transpiler, buildTask, footer, header, leftPanel, rightPanel, topNav, basic, progress, richTextEditor, search, tree, calendar, chips, colorPicker, currency, epoch, fileUpload, rating, slider, card, form, list, liveTable, pagination$1, table, chart, accordion, linearLayout, layoutGrid, panel, tabs, tile, wizard, iframeDialog, loginDialog, partialDialog, breadcrumb, menu, navbar, popover$1, carousel$1, login, marquee, custom, timepicker, dropdown, pagination, typeahead, progressbar, carousel, popover, ngCircleProgress, tooltip) { 'use strict';
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
8
  var n = Object.create(null);
@@ -32,6 +32,7 @@
32
32
  var i1$3__namespace = /*#__PURE__*/_interopNamespaceDefault(i1$3);
33
33
  var i1$2__namespace = /*#__PURE__*/_interopNamespaceDefault(i1$2);
34
34
  var i2$2__namespace = /*#__PURE__*/_interopNamespaceDefault(i2$2);
35
+ var momentLib__namespace = /*#__PURE__*/_interopNamespaceDefault(momentLib);
35
36
  var i2$1__namespace = /*#__PURE__*/_interopNamespaceDefault(i2$1);
36
37
 
37
38
  exports.ComponentType = void 0;
@@ -2717,6 +2718,7 @@
2717
2718
  args: [{ providedIn: 'root' }]
2718
2719
  }], () => [{ type: PipeProvider }, { type: i1__namespace.App }], null); })();
2719
2720
 
2721
+ const moment$1 = momentLib__namespace.default || window['moment'];
2720
2722
  const injectorMap = {
2721
2723
  DialogService: i1.AbstractDialogService,
2722
2724
  i18nService: i1.AbstractI18nService,
@@ -2803,6 +2805,11 @@
2803
2805
  notify(eventName, ...data) {
2804
2806
  this._eventNotifier.notify.apply(this._eventNotifier, arguments);
2805
2807
  }
2808
+ importModule(moduleName) {
2809
+ if (moduleName === 'moment') {
2810
+ return moment$1;
2811
+ }
2812
+ }
2806
2813
  getDependency(injToken) {
2807
2814
  if (lodashEs.isString(injToken)) {
2808
2815
  if (injToken === 'HttpService') {
@@ -2960,6 +2967,7 @@
2960
2967
  type: i0.Injectable
2961
2968
  }], () => [{ type: i1$2__namespace.ToastrService }], null); })();
2962
2969
 
2970
+ const moment = momentLib__namespace.default || window['moment'];
2963
2971
  const APP_LOCALE_ROOT_PATH = 'resources/i18n';
2964
2972
  const RTL_LANGUAGE_CODES = ['ar', 'ar-001', 'ar-ae', 'ar-bh', 'ar-dz', 'ar-eg', 'ar-iq', 'ar-jo', 'ar-kw', 'ar-lb', 'ar-ly',
2965
2973
  'ar-ma', 'ar-om', 'ar-qa', 'ar-sa', 'ar-sd', 'ar-sy', 'ar-tn', 'ar-ye', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk',