@sasjs/utils 2.40.1 → 2.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Converts a JavaScript date object to a SAS Date or Datetime, given the logic below:
3
+ *
4
+ * A JS Date contains the number of _milliseconds_ since 01/01/1970
5
+ * A SAS Date contains the number of _days_ since 01/01/1960
6
+ * A SAS Datetime contains the number of _seconds_ since 01/01/1960
7
+ *
8
+ * @param jsDate JS Date to be converted. The type is instance of `Date`
9
+ * @param unit Unit in which to return the SAS Date / datetime, eg `sasdate | sasdatetime`
10
+ * @returns SAS Date value based on `unit` param
11
+ */
12
+ export declare const convertJsDateToSasDate: (jsDate: Date, unit: 'sasdate' | 'sasdatetime') => number;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertJsDateToSasDate = void 0;
4
+ /**
5
+ * Converts a JavaScript date object to a SAS Date or Datetime, given the logic below:
6
+ *
7
+ * A JS Date contains the number of _milliseconds_ since 01/01/1970
8
+ * A SAS Date contains the number of _days_ since 01/01/1960
9
+ * A SAS Datetime contains the number of _seconds_ since 01/01/1960
10
+ *
11
+ * @param jsDate JS Date to be converted. The type is instance of `Date`
12
+ * @param unit Unit in which to return the SAS Date / datetime, eg `sasdate | sasdatetime`
13
+ * @returns SAS Date value based on `unit` param
14
+ */
15
+ var convertJsDateToSasDate = function (jsDate, unit) {
16
+ var valueInMilliseconds = new Date(Date.UTC(jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate(), jsDate.getHours(), jsDate.getMinutes(), jsDate.getSeconds())).valueOf();
17
+ var msInDay = 24 * 60 * 60 * 1000;
18
+ var msInTenYears = 315619200000; //calculating is not guaranteed to give the correct value, as this is parsed with: new Date(Date.UTC(1960, 0, 1)).getTime()
19
+ var ms1960 = valueInMilliseconds + msInTenYears;
20
+ switch (unit) {
21
+ case 'sasdate': {
22
+ // always in days from 1960
23
+ var valueInDays = ms1960 / msInDay;
24
+ valueInDays = Math.floor(valueInDays);
25
+ return valueInDays;
26
+ }
27
+ case 'sasdatetime': {
28
+ // always in seconds from 1960
29
+ return ms1960 / 1000;
30
+ }
31
+ }
32
+ };
33
+ exports.convertJsDateToSasDate = convertJsDateToSasDate;
34
+ //# sourceMappingURL=convertJsDateToSasDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertJsDateToSasDate.js","sourceRoot":"","sources":["../../src/conversion/convertJsDateToSasDate.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACI,IAAM,sBAAsB,GAAG,UACpC,MAAY,EACZ,IAA+B;IAE/B,IAAM,mBAAmB,GAAG,IAAI,IAAI,CAClC,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,WAAW,EAAE,EACpB,MAAM,CAAC,QAAQ,EAAE,EACjB,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,QAAQ,EAAE,EACjB,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,UAAU,EAAE,CACpB,CACF,CAAC,OAAO,EAAE,CAAA;IAEX,IAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnC,IAAM,YAAY,GAAG,YAAY,CAAA,CAAC,2HAA2H;IAE7J,IAAM,MAAM,GAAG,mBAAmB,GAAG,YAAY,CAAA;IAEjD,QAAQ,IAAI,EAAE;QACZ,KAAK,SAAS,CAAC,CAAC;YACd,2BAA2B;YAC3B,IAAI,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;YAElC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAErC,OAAO,WAAW,CAAA;SACnB;QACD,KAAK,aAAa,CAAC,CAAC;YAClB,8BAA8B;YAC9B,OAAO,MAAM,GAAG,IAAI,CAAA;SACrB;KACF;AACH,CAAC,CAAA;AAlCY,QAAA,sBAAsB,0BAkClC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Converts a SAS Date or Datetime to a JavaScript date object, given the logic below:
3
+ *
4
+ * A JS Date contains the number of _milliseconds_ since 01/01/1970
5
+ * A SAS Date contains the number of _days_ since 01/01/1960
6
+ * A SAS Datetime contains the number of _seconds_ since 01/01/1960
7
+ *
8
+ * @param sasValue SAS Date or Datetime to be converted. The type could be `number` or `string.
9
+ * @param unit Unit from which to convert the SAS Date / Datetime, eg `sasdate | sasdatetime`
10
+ * @returns JavaScript Date object
11
+ */
12
+ export declare const convertSasDateToJsDate: (sasValue: number | string, unit: 'sasdate' | 'sasdatetime') => Date;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertSasDateToJsDate = void 0;
4
+ /**
5
+ * Converts a SAS Date or Datetime to a JavaScript date object, given the logic below:
6
+ *
7
+ * A JS Date contains the number of _milliseconds_ since 01/01/1970
8
+ * A SAS Date contains the number of _days_ since 01/01/1960
9
+ * A SAS Datetime contains the number of _seconds_ since 01/01/1960
10
+ *
11
+ * @param sasValue SAS Date or Datetime to be converted. The type could be `number` or `string.
12
+ * @param unit Unit from which to convert the SAS Date / Datetime, eg `sasdate | sasdatetime`
13
+ * @returns JavaScript Date object
14
+ */
15
+ var convertSasDateToJsDate = function (sasValue, unit) {
16
+ var msInDay = 24 * 60 * 60 * 1000;
17
+ var msNegativeTenYears = -315619200000; //since calculating it is not practical/guarantee to get correct value, this is parsed with: new Date(Date.UTC(1960, 0, 1)).getTime()
18
+ if (typeof sasValue !== 'number')
19
+ sasValue = parseFloat(sasValue);
20
+ if (unit === 'sasdatetime') {
21
+ var ms1960 = sasValue * 1000;
22
+ var jsMs = msNegativeTenYears + ms1960;
23
+ var jsDate = new Date(jsMs);
24
+ var timezoneOffsetMs = jsDate.getTimezoneOffset() * 60 * 1000;
25
+ jsMs += timezoneOffsetMs;
26
+ jsDate = new Date(jsMs); // We create new Date object after the timezone correction
27
+ var jsDateUtcMs = Date.UTC(jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate(), jsDate.getHours(), jsDate.getMinutes(), jsDate.getSeconds());
28
+ return new Date(jsDateUtcMs);
29
+ }
30
+ return new Date(msNegativeTenYears + sasValue * msInDay);
31
+ };
32
+ exports.convertSasDateToJsDate = convertSasDateToJsDate;
33
+ //# sourceMappingURL=convertSasDateToJsDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertSasDateToJsDate.js","sourceRoot":"","sources":["../../src/conversion/convertSasDateToJsDate.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACI,IAAM,sBAAsB,GAAG,UACpC,QAAyB,EACzB,IAA+B;IAE/B,IAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnC,IAAM,kBAAkB,GAAG,CAAC,YAAY,CAAA,CAAC,qIAAqI;IAE9K,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAEjE,IAAI,IAAI,KAAK,aAAa,EAAE;QAC1B,IAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAA;QAE9B,IAAI,IAAI,GAAG,kBAAkB,GAAG,MAAM,CAAA;QACtC,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;QAE3B,IAAI,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;QAC7D,IAAI,IAAI,gBAAgB,CAAA;QAExB,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,0DAA0D;QAElF,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,MAAM,CAAC,WAAW,EAAE,EACpB,MAAM,CAAC,QAAQ,EAAE,EACjB,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,QAAQ,EAAE,EACjB,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,UAAU,EAAE,CACpB,CAAA;QAED,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,CAAA;KAC7B;IAED,OAAO,IAAI,IAAI,CAAC,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAC1D,CAAC,CAAA;AAjCY,QAAA,sBAAsB,0BAiClC"}
package/package.json CHANGED
@@ -60,5 +60,5 @@
60
60
  "rimraf": "3.0.2",
61
61
  "valid-url": "1.0.9"
62
62
  },
63
- "version": "2.40.1"
63
+ "version": "2.42.1"
64
64
  }
@@ -0,0 +1,23 @@
1
+ export declare enum MemberType {
2
+ service = "service",
3
+ file = "file",
4
+ folder = "folder"
5
+ }
6
+ export interface ServiceMember {
7
+ name: string;
8
+ type: MemberType.service;
9
+ code: string;
10
+ }
11
+ export interface FileMember {
12
+ name: string;
13
+ type: MemberType.file;
14
+ code: string;
15
+ }
16
+ export interface FolderMember {
17
+ name: string;
18
+ type: MemberType.folder;
19
+ members: (FolderMember | ServiceMember | FileMember)[];
20
+ }
21
+ export interface FileTree {
22
+ members: (FolderMember | ServiceMember | FileMember)[];
23
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemberType = void 0;
4
+ var MemberType;
5
+ (function (MemberType) {
6
+ MemberType["service"] = "service";
7
+ MemberType["file"] = "file";
8
+ MemberType["folder"] = "folder";
9
+ })(MemberType = exports.MemberType || (exports.MemberType = {}));
10
+ //# sourceMappingURL=fileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileTree.js","sourceRoot":"","sources":["../../src/types/fileTree.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,2BAAa,CAAA;IACb,+BAAiB,CAAA;AACnB,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB"}
package/types/index.d.ts CHANGED
@@ -2,10 +2,12 @@ export * from './config';
2
2
  export * from './configuration';
3
3
  export * from './decodedToken';
4
4
  export * from './extraResponseAttributes';
5
+ export * from './fileTree';
5
6
  export * from './httpsAgentOptions';
6
7
  export * from './macro';
7
8
  export * from './sasAuthResponse';
8
9
  export * from './sasJsFileType';
9
10
  export * from './serverError';
10
11
  export * from './serverType';
12
+ export * from './servicePack';
11
13
  export * from './target';
package/types/index.js CHANGED
@@ -14,11 +14,13 @@ __exportStar(require("./config"), exports);
14
14
  __exportStar(require("./configuration"), exports);
15
15
  __exportStar(require("./decodedToken"), exports);
16
16
  __exportStar(require("./extraResponseAttributes"), exports);
17
+ __exportStar(require("./fileTree"), exports);
17
18
  __exportStar(require("./httpsAgentOptions"), exports);
18
19
  __exportStar(require("./macro"), exports);
19
20
  __exportStar(require("./sasAuthResponse"), exports);
20
21
  __exportStar(require("./sasJsFileType"), exports);
21
22
  __exportStar(require("./serverError"), exports);
22
23
  __exportStar(require("./serverType"), exports);
24
+ __exportStar(require("./servicePack"), exports);
23
25
  __exportStar(require("./target"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwB;AACxB,kDAA+B;AAC/B,iDAA8B;AAC9B,4DAAyC;AACzC,sDAAmC;AACnC,0CAAuB;AACvB,oDAAiC;AACjC,kDAA+B;AAC/B,gDAA6B;AAC7B,+CAA4B;AAC5B,2CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwB;AACxB,kDAA+B;AAC/B,iDAA8B;AAC9B,4DAAyC;AACzC,6CAA0B;AAC1B,sDAAmC;AACnC,0CAAuB;AACvB,oDAAiC;AACjC,kDAA+B;AAC/B,gDAA6B;AAC7B,+CAA4B;AAC5B,gDAA6B;AAC7B,2CAAwB"}
@@ -0,0 +1,8 @@
1
+ import { FileTree } from './fileTree';
2
+ export interface ServicePackSASjs {
3
+ fileTree: FileTree;
4
+ appLoc: string;
5
+ streamServiceName?: string;
6
+ streamWebFolder?: string;
7
+ streamLogo?: string;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=servicePack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servicePack.js","sourceRoot":"","sources":["../../src/types/servicePack.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { FileTree } from '../types';
2
+ export declare const isFileTree: (arg: any) => arg is FileTree;
3
+ export declare const getTreeExample: () => FileTree;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTreeExample = exports.isFileTree = void 0;
4
+ var types_1 = require("../types");
5
+ var isFileTree = function (arg) {
6
+ return arg &&
7
+ arg.members &&
8
+ Array.isArray(arg.members) &&
9
+ arg.members.filter(function (member) {
10
+ return !isServiceMember(member) &&
11
+ !isFileMember(member) &&
12
+ !isFolderMember(member);
13
+ }).length === 0;
14
+ };
15
+ exports.isFileTree = isFileTree;
16
+ var isServiceMember = function (arg) {
17
+ return arg &&
18
+ typeof arg.name === 'string' &&
19
+ arg.type === types_1.MemberType.service &&
20
+ typeof arg.code === 'string';
21
+ };
22
+ var isFileMember = function (arg) {
23
+ return arg &&
24
+ typeof arg.name === 'string' &&
25
+ arg.type === types_1.MemberType.file &&
26
+ typeof arg.code === 'string';
27
+ };
28
+ var isFolderMember = function (arg) {
29
+ return arg &&
30
+ typeof arg.name === 'string' &&
31
+ arg.type === types_1.MemberType.folder &&
32
+ arg.members &&
33
+ Array.isArray(arg.members) &&
34
+ arg.members.filter(function (member) {
35
+ return !isServiceMember(member) &&
36
+ !isFileMember(member) &&
37
+ !isFolderMember(member);
38
+ }).length === 0;
39
+ };
40
+ var getTreeExample = function () { return ({
41
+ members: [
42
+ {
43
+ name: 'jobs',
44
+ type: types_1.MemberType.folder,
45
+ members: [
46
+ {
47
+ name: 'extract',
48
+ type: types_1.MemberType.folder,
49
+ members: [
50
+ {
51
+ name: 'makedata1',
52
+ type: types_1.MemberType.service,
53
+ code: '%put Hello World!;'
54
+ }
55
+ ]
56
+ }
57
+ ]
58
+ }
59
+ ]
60
+ }); };
61
+ exports.getTreeExample = getTreeExample;
62
+ //# sourceMappingURL=fileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileTree.js","sourceRoot":"","sources":["../../src/utils/fileTree.ts"],"names":[],"mappings":";;;AAAA,kCAMiB;AAEV,IAAM,UAAU,GAAG,UAAC,GAAQ;IACjC,OAAA,GAAG;QACH,GAAG,CAAC,OAAO;QACX,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,MAAM,CAChB,UAAC,MAAiD;YAChD,OAAA,CAAC,eAAe,CAAC,MAAM,CAAC;gBACxB,CAAC,YAAY,CAAC,MAAM,CAAC;gBACrB,CAAC,cAAc,CAAC,MAAM,CAAC;QAFvB,CAEuB,CAC1B,CAAC,MAAM,KAAK,CAAC;AARd,CAQc,CAAA;AATH,QAAA,UAAU,cASP;AAEhB,IAAM,eAAe,GAAG,UAAC,GAAQ;IAC/B,OAAA,GAAG;QACH,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,kBAAU,CAAC,OAAO;QAC/B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;AAH5B,CAG4B,CAAA;AAE9B,IAAM,YAAY,GAAG,UAAC,GAAQ;IAC5B,OAAA,GAAG;QACH,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,kBAAU,CAAC,IAAI;QAC5B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;AAH5B,CAG4B,CAAA;AAE9B,IAAM,cAAc,GAAG,UAAC,GAAQ;IAC9B,OAAA,GAAG;QACH,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,kBAAU,CAAC,MAAM;QAC9B,GAAG,CAAC,OAAO;QACX,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,MAAM,CAChB,UAAC,MAAoC;YACnC,OAAA,CAAC,eAAe,CAAC,MAAM,CAAC;gBACxB,CAAC,YAAY,CAAC,MAAM,CAAC;gBACrB,CAAC,cAAc,CAAC,MAAM,CAAC;QAFvB,CAEuB,CAC1B,CAAC,MAAM,KAAK,CAAC;AAVd,CAUc,CAAA;AAET,IAAM,cAAc,GAAG,cAAgB,OAAA,CAAC;IAC7C,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,kBAAU,CAAC,MAAM;YACvB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,kBAAU,CAAC,MAAM;oBACvB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,WAAW;4BACjB,IAAI,EAAE,kBAAU,CAAC,OAAO;4BACxB,IAAI,EAAE,oBAAoB;yBAC3B;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC,EApB4C,CAoB5C,CAAA;AApBW,QAAA,cAAc,kBAoBzB"}
package/utils/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export * from './utils';
1
+ export { uuidv4, asyncForEach, uniqArray, isWindows } from './utils';
2
+ export * from './fileTree';
2
3
  export { urlOrigin } from './url';
3
4
  export { encodeToBase64, decodeFromBase64 } from './base64';
4
5
  export { getExecutorPath } from './executor';
package/utils/index.js CHANGED
@@ -10,8 +10,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.chunk = exports.diff = exports.bytesToSize = exports.getExecutorPath = exports.decodeFromBase64 = exports.encodeToBase64 = exports.urlOrigin = void 0;
14
- __exportStar(require("./utils"), exports);
13
+ exports.chunk = exports.diff = exports.bytesToSize = exports.getExecutorPath = exports.decodeFromBase64 = exports.encodeToBase64 = exports.urlOrigin = exports.isWindows = exports.uniqArray = exports.asyncForEach = exports.uuidv4 = void 0;
14
+ var utils_1 = require("./utils");
15
+ Object.defineProperty(exports, "uuidv4", { enumerable: true, get: function () { return utils_1.uuidv4; } });
16
+ Object.defineProperty(exports, "asyncForEach", { enumerable: true, get: function () { return utils_1.asyncForEach; } });
17
+ Object.defineProperty(exports, "uniqArray", { enumerable: true, get: function () { return utils_1.uniqArray; } });
18
+ Object.defineProperty(exports, "isWindows", { enumerable: true, get: function () { return utils_1.isWindows; } });
19
+ __exportStar(require("./fileTree"), exports);
15
20
  var url_1 = require("./url");
16
21
  Object.defineProperty(exports, "urlOrigin", { enumerable: true, get: function () { return url_1.urlOrigin; } });
17
22
  var base64_1 = require("./base64");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,0CAAuB;AAEvB,6BAAiC;AAAxB,gGAAA,SAAS,OAAA;AAElB,mCAA2D;AAAlD,wGAAA,cAAc,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEzC,uCAA4C;AAAnC,2GAAA,eAAe,OAAA;AAExB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,iCAA+B;AAAtB,8FAAA,KAAK,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iCAAoE;AAA3D,+FAAA,MAAM,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,kGAAA,SAAS,OAAA;AACnD,6CAA0B;AAE1B,6BAAiC;AAAxB,gGAAA,SAAS,OAAA;AAElB,mCAA2D;AAAlD,wGAAA,cAAc,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEzC,uCAA4C;AAAnC,2GAAA,eAAe,OAAA;AAExB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,iCAA+B;AAAtB,8FAAA,KAAK,OAAA"}