@jubbio/core 1.3.3 → 1.3.5

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 (131) hide show
  1. package/dist/Client.js +50 -10
  2. package/dist/rest/REST.d.ts +1 -0
  3. package/dist/rest/REST.js +1 -1
  4. package/dist/structures/Channel.d.ts +1 -1
  5. package/dist/structures/Channel.js +11 -4
  6. package/dist/structures/Guild.d.ts +1 -1
  7. package/dist/structures/Guild.js +7 -3
  8. package/dist/structures/Interaction.js +11 -3
  9. package/dist/structures/Message.d.ts +2 -0
  10. package/dist/structures/Message.js +13 -33
  11. package/package.json +4 -14
  12. package/dist/cjs/Client.d.ts +0 -157
  13. package/dist/cjs/Client.js +0 -640
  14. package/dist/cjs/builders/ActionRowBuilder.d.ts +0 -53
  15. package/dist/cjs/builders/ActionRowBuilder.js +0 -68
  16. package/dist/cjs/builders/ButtonBuilder.d.ts +0 -77
  17. package/dist/cjs/builders/ButtonBuilder.js +0 -96
  18. package/dist/cjs/builders/EmbedBuilder.d.ts +0 -157
  19. package/dist/cjs/builders/EmbedBuilder.js +0 -208
  20. package/dist/cjs/builders/ModalBuilder.d.ts +0 -122
  21. package/dist/cjs/builders/ModalBuilder.js +0 -162
  22. package/dist/cjs/builders/SelectMenuBuilder.d.ts +0 -123
  23. package/dist/cjs/builders/SelectMenuBuilder.js +0 -165
  24. package/dist/cjs/builders/SlashCommandBuilder.d.ts +0 -197
  25. package/dist/cjs/builders/SlashCommandBuilder.js +0 -324
  26. package/dist/cjs/builders/index.d.ts +0 -9
  27. package/dist/cjs/builders/index.js +0 -26
  28. package/dist/cjs/enums.d.ts +0 -191
  29. package/dist/cjs/enums.js +0 -211
  30. package/dist/cjs/index.d.ts +0 -25
  31. package/dist/cjs/index.js +0 -130
  32. package/dist/cjs/managers/BaseManager.d.ts +0 -69
  33. package/dist/cjs/managers/BaseManager.js +0 -106
  34. package/dist/cjs/managers/ChannelManager.d.ts +0 -95
  35. package/dist/cjs/managers/ChannelManager.js +0 -205
  36. package/dist/cjs/managers/GuildMemberManager.d.ts +0 -74
  37. package/dist/cjs/managers/GuildMemberManager.js +0 -157
  38. package/dist/cjs/managers/RoleManager.d.ts +0 -84
  39. package/dist/cjs/managers/RoleManager.js +0 -207
  40. package/dist/cjs/managers/index.d.ts +0 -7
  41. package/dist/cjs/managers/index.js +0 -24
  42. package/dist/cjs/rest/REST.d.ts +0 -527
  43. package/dist/cjs/rest/REST.js +0 -904
  44. package/dist/cjs/rest/index.d.ts +0 -1
  45. package/dist/cjs/rest/index.js +0 -18
  46. package/dist/cjs/sharding/ShardingManager.d.ts +0 -179
  47. package/dist/cjs/sharding/ShardingManager.js +0 -375
  48. package/dist/cjs/sharding/index.d.ts +0 -4
  49. package/dist/cjs/sharding/index.js +0 -21
  50. package/dist/cjs/structures/Channel.d.ts +0 -122
  51. package/dist/cjs/structures/Channel.js +0 -240
  52. package/dist/cjs/structures/Collection.d.ts +0 -53
  53. package/dist/cjs/structures/Collection.js +0 -115
  54. package/dist/cjs/structures/Guild.d.ts +0 -59
  55. package/dist/cjs/structures/Guild.js +0 -94
  56. package/dist/cjs/structures/GuildMember.d.ts +0 -174
  57. package/dist/cjs/structures/GuildMember.js +0 -311
  58. package/dist/cjs/structures/Interaction.d.ts +0 -245
  59. package/dist/cjs/structures/Interaction.js +0 -450
  60. package/dist/cjs/structures/Message.d.ts +0 -98
  61. package/dist/cjs/structures/Message.js +0 -195
  62. package/dist/cjs/structures/User.d.ts +0 -37
  63. package/dist/cjs/structures/User.js +0 -65
  64. package/dist/cjs/structures/index.d.ts +0 -7
  65. package/dist/cjs/structures/index.js +0 -25
  66. package/dist/cjs/structures.d.ts +0 -1
  67. package/dist/cjs/structures.js +0 -19
  68. package/dist/cjs/types.d.ts +0 -255
  69. package/dist/cjs/types.js +0 -3
  70. package/dist/cjs/utils/BitField.d.ts +0 -66
  71. package/dist/cjs/utils/BitField.js +0 -138
  72. package/dist/cjs/utils/Collection.d.ts +0 -116
  73. package/dist/cjs/utils/Collection.js +0 -265
  74. package/dist/cjs/utils/Collector.d.ts +0 -152
  75. package/dist/cjs/utils/Collector.js +0 -314
  76. package/dist/cjs/utils/DataResolver.d.ts +0 -61
  77. package/dist/cjs/utils/DataResolver.js +0 -146
  78. package/dist/cjs/utils/Formatters.d.ts +0 -145
  79. package/dist/cjs/utils/Formatters.js +0 -213
  80. package/dist/cjs/utils/IntentsBitField.d.ts +0 -85
  81. package/dist/cjs/utils/IntentsBitField.js +0 -99
  82. package/dist/cjs/utils/Partials.d.ts +0 -104
  83. package/dist/cjs/utils/Partials.js +0 -148
  84. package/dist/cjs/utils/PermissionsBitField.d.ts +0 -118
  85. package/dist/cjs/utils/PermissionsBitField.js +0 -145
  86. package/dist/cjs/utils/SnowflakeUtil.d.ts +0 -63
  87. package/dist/cjs/utils/SnowflakeUtil.js +0 -93
  88. package/dist/cjs/utils/Sweepers.d.ts +0 -119
  89. package/dist/cjs/utils/Sweepers.js +0 -249
  90. package/dist/cjs/utils/index.d.ts +0 -13
  91. package/dist/cjs/utils/index.js +0 -30
  92. package/dist/esm/Client.js +0 -634
  93. package/dist/esm/builders/ActionRowBuilder.js +0 -64
  94. package/dist/esm/builders/ButtonBuilder.js +0 -92
  95. package/dist/esm/builders/EmbedBuilder.js +0 -204
  96. package/dist/esm/builders/ModalBuilder.js +0 -157
  97. package/dist/esm/builders/SelectMenuBuilder.js +0 -161
  98. package/dist/esm/builders/SlashCommandBuilder.js +0 -311
  99. package/dist/esm/builders/index.js +0 -10
  100. package/dist/esm/enums.js +0 -208
  101. package/dist/esm/index.js +0 -34
  102. package/dist/esm/managers/BaseManager.js +0 -100
  103. package/dist/esm/managers/ChannelManager.js +0 -200
  104. package/dist/esm/managers/GuildMemberManager.js +0 -153
  105. package/dist/esm/managers/RoleManager.js +0 -203
  106. package/dist/esm/managers/index.js +0 -8
  107. package/dist/esm/rest/REST.js +0 -900
  108. package/dist/esm/rest/index.js +0 -2
  109. package/dist/esm/sharding/ShardingManager.js +0 -366
  110. package/dist/esm/sharding/index.js +0 -5
  111. package/dist/esm/structures/Channel.js +0 -232
  112. package/dist/esm/structures/Collection.js +0 -111
  113. package/dist/esm/structures/Guild.js +0 -90
  114. package/dist/esm/structures/GuildMember.js +0 -306
  115. package/dist/esm/structures/Interaction.js +0 -438
  116. package/dist/esm/structures/Message.js +0 -191
  117. package/dist/esm/structures/User.js +0 -61
  118. package/dist/esm/structures/index.js +0 -9
  119. package/dist/esm/structures.js +0 -3
  120. package/dist/esm/types.js +0 -2
  121. package/dist/esm/utils/BitField.js +0 -134
  122. package/dist/esm/utils/Collection.js +0 -261
  123. package/dist/esm/utils/Collector.js +0 -305
  124. package/dist/esm/utils/DataResolver.js +0 -142
  125. package/dist/esm/utils/Formatters.js +0 -191
  126. package/dist/esm/utils/IntentsBitField.js +0 -93
  127. package/dist/esm/utils/Partials.js +0 -137
  128. package/dist/esm/utils/PermissionsBitField.js +0 -141
  129. package/dist/esm/utils/SnowflakeUtil.js +0 -89
  130. package/dist/esm/utils/Sweepers.js +0 -245
  131. package/dist/esm/utils/index.js +0 -14
@@ -1,66 +0,0 @@
1
- /**
2
- * Generic BitField class
3
- * API compatible with Discord.js BitField
4
- */
5
- export type BitFieldResolvable<S extends string, N extends bigint | number> = N | N[] | S | S[] | BitField<S, N>;
6
- /**
7
- * Data structure for bit fields
8
- */
9
- export declare class BitField<S extends string = string, N extends bigint | number = bigint> {
10
- /** The raw bits */
11
- bitfield: N;
12
- /** Flags for this bitfield (override in subclass) */
13
- static Flags: Record<string, bigint | number>;
14
- /** Default bit value */
15
- static DefaultBit: bigint | number;
16
- constructor(bits?: BitFieldResolvable<S, N>);
17
- /**
18
- * Check if this bitfield has a bit
19
- */
20
- has(bit: BitFieldResolvable<S, N>): boolean;
21
- /**
22
- * Check if this bitfield has any of the bits
23
- */
24
- any(bits: BitFieldResolvable<S, N>): boolean;
25
- /**
26
- * Add bits to this bitfield
27
- */
28
- add(...bits: BitFieldResolvable<S, N>[]): this;
29
- /**
30
- * Remove bits from this bitfield
31
- */
32
- remove(...bits: BitFieldResolvable<S, N>[]): this;
33
- /**
34
- * Serialize to array of flag names
35
- */
36
- toArray(): S[];
37
- /**
38
- * Serialize to JSON
39
- */
40
- toJSON(): string | number;
41
- /**
42
- * Get string representation
43
- */
44
- toString(): string;
45
- /**
46
- * Get iterator
47
- */
48
- [Symbol.iterator](): IterableIterator<S>;
49
- /**
50
- * Freeze this bitfield
51
- */
52
- freeze(): Readonly<this>;
53
- /**
54
- * Check equality
55
- */
56
- equals(other: BitFieldResolvable<S, N>): boolean;
57
- /**
58
- * Clone this bitfield
59
- */
60
- clone(): BitField<S, N>;
61
- /**
62
- * Resolve a bit to the numeric type
63
- */
64
- static resolve<S extends string, N extends bigint | number>(bit: BitFieldResolvable<S, N>): N;
65
- }
66
- export default BitField;
@@ -1,138 +0,0 @@
1
- "use strict";
2
- /**
3
- * Generic BitField class
4
- * API compatible with Discord.js BitField
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.BitField = void 0;
8
- /**
9
- * Data structure for bit fields
10
- */
11
- class BitField {
12
- /** The raw bits */
13
- bitfield;
14
- /** Flags for this bitfield (override in subclass) */
15
- static Flags = {};
16
- /** Default bit value */
17
- static DefaultBit = 0n;
18
- constructor(bits = BitField.DefaultBit) {
19
- this.bitfield = this.constructor.resolve(bits);
20
- }
21
- /**
22
- * Check if this bitfield has a bit
23
- */
24
- has(bit) {
25
- const resolved = this.constructor.resolve(bit);
26
- return (this.bitfield & resolved) === resolved;
27
- }
28
- /**
29
- * Check if this bitfield has any of the bits
30
- */
31
- any(bits) {
32
- const resolved = this.constructor.resolve(bits);
33
- return (this.bitfield & resolved) !== 0n;
34
- }
35
- /**
36
- * Add bits to this bitfield
37
- */
38
- add(...bits) {
39
- let total = 0n;
40
- for (const bit of bits) {
41
- total |= this.constructor.resolve(bit);
42
- }
43
- this.bitfield |= total;
44
- return this;
45
- }
46
- /**
47
- * Remove bits from this bitfield
48
- */
49
- remove(...bits) {
50
- let total = 0n;
51
- for (const bit of bits) {
52
- total |= this.constructor.resolve(bit);
53
- }
54
- this.bitfield &= ~total;
55
- return this;
56
- }
57
- /**
58
- * Serialize to array of flag names
59
- */
60
- toArray() {
61
- const flags = this.constructor.Flags;
62
- const result = [];
63
- for (const [name, bit] of Object.entries(flags)) {
64
- if (this.bitfield & bit) {
65
- result.push(name);
66
- }
67
- }
68
- return result;
69
- }
70
- /**
71
- * Serialize to JSON
72
- */
73
- toJSON() {
74
- return typeof this.bitfield === 'bigint'
75
- ? this.bitfield.toString()
76
- : this.bitfield;
77
- }
78
- /**
79
- * Get string representation
80
- */
81
- toString() {
82
- return this.bitfield.toString();
83
- }
84
- /**
85
- * Get iterator
86
- */
87
- *[Symbol.iterator]() {
88
- yield* this.toArray();
89
- }
90
- /**
91
- * Freeze this bitfield
92
- */
93
- freeze() {
94
- return Object.freeze(this);
95
- }
96
- /**
97
- * Check equality
98
- */
99
- equals(other) {
100
- return this.bitfield === this.constructor.resolve(other);
101
- }
102
- /**
103
- * Clone this bitfield
104
- */
105
- clone() {
106
- return new this.constructor(this.bitfield);
107
- }
108
- /**
109
- * Resolve a bit to the numeric type
110
- */
111
- static resolve(bit) {
112
- if (typeof bit === 'bigint' || typeof bit === 'number') {
113
- return bit;
114
- }
115
- if (bit instanceof BitField) {
116
- return bit.bitfield;
117
- }
118
- if (typeof bit === 'string') {
119
- const resolved = this.Flags[bit];
120
- if (resolved === undefined) {
121
- throw new Error(`Unknown bit: ${bit}`);
122
- }
123
- return resolved;
124
- }
125
- if (Array.isArray(bit)) {
126
- let result = this.DefaultBit;
127
- for (const b of bit) {
128
- const resolved = this.resolve(b);
129
- result |= resolved;
130
- }
131
- return result;
132
- }
133
- throw new Error(`Invalid bit: ${bit}`);
134
- }
135
- }
136
- exports.BitField = BitField;
137
- exports.default = BitField;
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvQml0RmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBU0g7O0dBRUc7QUFDSCxNQUFhLFFBQVE7SUFDbkIsbUJBQW1CO0lBQ1osUUFBUSxDQUFJO0lBRW5CLHFEQUFxRDtJQUNyRCxNQUFNLENBQUMsS0FBSyxHQUFvQyxFQUFFLENBQUM7SUFFbkQsd0JBQXdCO0lBQ3hCLE1BQU0sQ0FBQyxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUV4QyxZQUFZLE9BQWlDLFFBQVEsQ0FBQyxVQUFlO1FBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxDQUFPLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxHQUE2QjtRQUMvQixNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sR0FBRyxDQUFDLENBQUM7UUFDMUUsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBTSxRQUFtQixDQUFDO0lBQ3JGLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxJQUE4QjtRQUNoQyxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sSUFBSSxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFDLEdBQUcsSUFBZ0M7UUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLElBQUssSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxD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WUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQW9CLENBQUM7WUFDdkMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLFFBQWtCLENBQUM7WUFDL0IsQ0FBQztZQUNELE9BQU8sTUFBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7O0FBaEpILDRCQWlKQztBQUVELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyBCaXRGaWVsZCBjbGFzc1xuICogQVBJIGNvbXBhdGlibGUgd2l0aCBEaXNjb3JkLmpzIEJpdEZpZWxkXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0RmllbGRSZXNvbHZhYmxlPFMgZXh0ZW5kcyBzdHJpbmcsIE4gZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXI+ID0gXG4gIHwgTiBcbiAgfCBOW10gXG4gIHwgUyBcbiAgfCBTW10gXG4gIHwgQml0RmllbGQ8UywgTj47XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGJpdCBmaWVsZHNcbiAqL1xuZXhwb3J0IGNsYXNzIEJpdEZpZWxkPFMgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIE4gZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXIgPSBiaWdpbnQ+IHtcbiAgLyoqIFRoZSByYXcgYml0cyAqL1xuICBwdWJsaWMgYml0ZmllbGQ6IE47XG5cbiAgLyoqIEZsYWdzIGZvciB0aGlzIGJpdGZpZWxkIChvdmVycmlkZSBpbiBzdWJjbGFzcykgKi9cbiAgc3RhdGljIEZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBiaWdpbnQgfCBudW1iZXI+ID0ge307XG5cbiAgLyoqIERlZmF1bHQgYml0IHZhbHVlICovXG4gIHN0YXRpYyBEZWZhdWx0Qml0OiBiaWdpbnQgfCBudW1iZXIgPSAwbjtcblxuICBjb25zdHJ1Y3RvcihiaXRzOiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4gPSBCaXRGaWVsZC5EZWZhdWx0Qml0IGFzIE4pIHtcbiAgICB0aGlzLmJpdGZpZWxkID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEJpdEZpZWxkKS5yZXNvbHZlPFMsIE4+KGJpdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgYml0ZmllbGQgaGFzIGEgYml0XG4gICAqL1xuICBoYXMoYml0OiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNvbHZlZCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBCaXRGaWVsZCkucmVzb2x2ZTxTLCBOPihiaXQpO1xuICAgIHJldHVybiAoKHRoaXMuYml0ZmllbGQgYXMgYmlnaW50KSAmIChyZXNvbHZlZCBhcyBiaWdpbnQpKSA9PT0gKHJlc29sdmVkIGFzIGJpZ2ludCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBiaXRmaWVsZCBoYXMgYW55IG9mIHRoZSBiaXRzXG4gICAqL1xuICBhbnkoYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0cyk7XG4gICAgcmV0dXJuICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKHJlc29sdmVkIGFzIGJpZ2ludCkpICE9PSAwbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYml0cyB0byB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICBhZGQoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcbiAgICBsZXQgdG90YWwgPSAwbjtcbiAgICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XG4gICAgfVxuICAgICh0aGlzLmJpdGZpZWxkIGFzIGJpZ2ludCkgfD0gdG90YWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGJpdHMgZnJvbSB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICByZW1vdmUoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcbiAgICBsZXQgdG90YWwgPSAwbjtcbiAgICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XG4gICAgfVxuICAgICh0aGlzLmJpdGZpZWxkIGFzIGJpZ2ludCkgJj0gfnRvdGFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhcnJheSBvZiBmbGFnIG5hbWVzXG4gICAqL1xuICB0b0FycmF5KCk6IFNbXSB7XG4gICAgY29uc3QgZmxhZ3MgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLkZsYWdzO1xuICAgIGNvbnN0IHJlc3VsdDogU1tdID0gW107XG4gICAgXG4gICAgZm9yIChjb25zdCBbbmFtZSwgYml0XSBvZiBPYmplY3QuZW50cmllcyhmbGFncykpIHtcbiAgICAgIGlmICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKGJpdCBhcyBiaWdpbnQpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5hbWUgYXMgUyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT05cbiAgICovXG4gIHRvSlNPTigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5iaXRmaWVsZCA9PT0gJ2JpZ2ludCcgXG4gICAgICA/IHRoaXMuYml0ZmllbGQudG9TdHJpbmcoKSBcbiAgICAgIDogdGhpcy5iaXRmaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJpdGZpZWxkLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGl0ZXJhdG9yXG4gICAqL1xuICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxTPiB7XG4gICAgeWllbGQqIHRoaXMudG9BcnJheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyZWV6ZSB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICBmcmVlemUoKTogUmVhZG9ubHk8dGhpcz4ge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGVxdWFsaXR5XG4gICAqL1xuICBlcXVhbHMob3RoZXI6IEJpdEZpZWxkUmVzb2x2YWJsZTxTLCBOPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJpdGZpZWxkID09PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4ob3RoZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoaXMgYml0ZmllbGRcbiAgICovXG4gIGNsb25lKCk6IEJpdEZpZWxkPFMsIE4+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIG5ldyAoYml0czogTikgPT4gQml0RmllbGQ8UywgTj4pKHRoaXMuYml0ZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBiaXQgdG8gdGhlIG51bWVyaWMgdHlwZVxuICAgKi9cbiAgc3RhdGljIHJlc29sdmU8UyBleHRlbmRzIHN0cmluZywgTiBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oYml0OiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBOIHtcbiAgICBpZiAodHlwZW9mIGJpdCA9PT0gJ2JpZ2ludCcgfHwgdHlwZW9mIGJpdCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBiaXQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAoYml0IGluc3RhbmNlb2YgQml0RmllbGQpIHtcbiAgICAgIHJldHVybiBiaXQuYml0ZmllbGQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJpdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5GbGFnc1tiaXRdO1xuICAgICAgaWYgKHJlc29sdmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJpdDogJHtiaXR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShiaXQpKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5EZWZhdWx0Qml0IGFzIGJpZ2ludDtcbiAgICAgIGZvciAoY29uc3QgYiBvZiBiaXQpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmU8UywgTj4oYik7XG4gICAgICAgIHJlc3VsdCB8PSByZXNvbHZlZCBhcyBiaWdpbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0IGFzIE47XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJpdDogJHtiaXR9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQml0RmllbGQ7XG4iXX0=
@@ -1,116 +0,0 @@
1
- /**
2
- * A Map with additional utility methods
3
- */
4
- export declare class Collection<K, V> extends Map<K, V> {
5
- /**
6
- * Identical to Map.get()
7
- * Ensures the value exists
8
- */
9
- ensure(key: K, defaultValueGenerator: (key: K, collection: this) => V): V;
10
- /**
11
- * Checks if all items pass a test
12
- */
13
- every(fn: (value: V, key: K, collection: this) => boolean): boolean;
14
- /**
15
- * Checks if any item passes a test
16
- */
17
- some(fn: (value: V, key: K, collection: this) => boolean): boolean;
18
- /**
19
- * Identical to Array.filter(), but returns a Collection
20
- */
21
- filter(fn: (value: V, key: K, collection: this) => boolean): Collection<K, V>;
22
- /**
23
- * Partitions the collection into two collections
24
- */
25
- partition(fn: (value: V, key: K, collection: this) => boolean): [Collection<K, V>, Collection<K, V>];
26
- /**
27
- * Maps each item to another value
28
- */
29
- map<T>(fn: (value: V, key: K, collection: this) => T): T[];
30
- /**
31
- * Maps each item to another value into a Collection
32
- */
33
- mapValues<T>(fn: (value: V, key: K, collection: this) => T): Collection<K, T>;
34
- /**
35
- * Searches for a single item
36
- */
37
- find(fn: (value: V, key: K, collection: this) => boolean): V | undefined;
38
- /**
39
- * Searches for the key of a single item
40
- */
41
- findKey(fn: (value: V, key: K, collection: this) => boolean): K | undefined;
42
- /**
43
- * Removes items that satisfy the provided filter function
44
- */
45
- sweep(fn: (value: V, key: K, collection: this) => boolean): number;
46
- /**
47
- * Reduces the collection to a single value
48
- */
49
- reduce<T>(fn: (accumulator: T, value: V, key: K, collection: this) => T, initialValue: T): T;
50
- /**
51
- * Identical to Array.forEach()
52
- */
53
- each(fn: (value: V, key: K, collection: this) => void): this;
54
- /**
55
- * Returns the first item(s) in the collection
56
- */
57
- first(): V | undefined;
58
- first(amount: number): V[];
59
- /**
60
- * Returns the first key(s) in the collection
61
- */
62
- firstKey(): K | undefined;
63
- firstKey(amount: number): K[];
64
- /**
65
- * Returns the last item(s) in the collection
66
- */
67
- last(): V | undefined;
68
- last(amount: number): V[];
69
- /**
70
- * Returns the last key(s) in the collection
71
- */
72
- lastKey(): K | undefined;
73
- lastKey(amount: number): K[];
74
- /**
75
- * Returns a random item from the collection
76
- */
77
- random(): V | undefined;
78
- random(amount: number): V[];
79
- /**
80
- * Returns a random key from the collection
81
- */
82
- randomKey(): K | undefined;
83
- randomKey(amount: number): K[];
84
- /**
85
- * Combines this collection with others
86
- */
87
- concat(...collections: Collection<K, V>[]): Collection<K, V>;
88
- /**
89
- * Checks if this collection shares identical items with another
90
- */
91
- equals(collection: Collection<K, V>): boolean;
92
- /**
93
- * Creates an identical shallow copy of this collection
94
- */
95
- clone(): Collection<K, V>;
96
- /**
97
- * Sorts the collection and returns it
98
- */
99
- sort(compareFunction?: (firstValue: V, secondValue: V, firstKey: K, secondKey: K) => number): this;
100
- /**
101
- * Sorts the collection by keys and returns it
102
- */
103
- sortByKey(compareFunction?: (firstKey: K, secondKey: K, firstValue: V, secondValue: V) => number): this;
104
- /**
105
- * Returns an array of items
106
- */
107
- toJSON(): V[];
108
- /**
109
- * Default sort function
110
- */
111
- private static defaultSort;
112
- /**
113
- * Creates a Collection from an array
114
- */
115
- static from<K, V>(entries: Iterable<readonly [K, V]>): Collection<K, V>;
116
- }
@@ -1,265 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Collection = void 0;
4
- /**
5
- * A Map with additional utility methods
6
- */
7
- class Collection extends Map {
8
- /**
9
- * Identical to Map.get()
10
- * Ensures the value exists
11
- */
12
- ensure(key, defaultValueGenerator) {
13
- if (this.has(key))
14
- return this.get(key);
15
- const defaultValue = defaultValueGenerator(key, this);
16
- this.set(key, defaultValue);
17
- return defaultValue;
18
- }
19
- /**
20
- * Checks if all items pass a test
21
- */
22
- every(fn) {
23
- for (const [key, val] of this) {
24
- if (!fn(val, key, this))
25
- return false;
26
- }
27
- return true;
28
- }
29
- /**
30
- * Checks if any item passes a test
31
- */
32
- some(fn) {
33
- for (const [key, val] of this) {
34
- if (fn(val, key, this))
35
- return true;
36
- }
37
- return false;
38
- }
39
- /**
40
- * Identical to Array.filter(), but returns a Collection
41
- */
42
- filter(fn) {
43
- const results = new Collection();
44
- for (const [key, val] of this) {
45
- if (fn(val, key, this))
46
- results.set(key, val);
47
- }
48
- return results;
49
- }
50
- /**
51
- * Partitions the collection into two collections
52
- */
53
- partition(fn) {
54
- const results = [new Collection(), new Collection()];
55
- for (const [key, val] of this) {
56
- if (fn(val, key, this)) {
57
- results[0].set(key, val);
58
- }
59
- else {
60
- results[1].set(key, val);
61
- }
62
- }
63
- return results;
64
- }
65
- /**
66
- * Maps each item to another value
67
- */
68
- map(fn) {
69
- const results = [];
70
- for (const [key, val] of this) {
71
- results.push(fn(val, key, this));
72
- }
73
- return results;
74
- }
75
- /**
76
- * Maps each item to another value into a Collection
77
- */
78
- mapValues(fn) {
79
- const results = new Collection();
80
- for (const [key, val] of this) {
81
- results.set(key, fn(val, key, this));
82
- }
83
- return results;
84
- }
85
- /**
86
- * Searches for a single item
87
- */
88
- find(fn) {
89
- for (const [key, val] of this) {
90
- if (fn(val, key, this))
91
- return val;
92
- }
93
- return undefined;
94
- }
95
- /**
96
- * Searches for the key of a single item
97
- */
98
- findKey(fn) {
99
- for (const [key, val] of this) {
100
- if (fn(val, key, this))
101
- return key;
102
- }
103
- return undefined;
104
- }
105
- /**
106
- * Removes items that satisfy the provided filter function
107
- */
108
- sweep(fn) {
109
- const previousSize = this.size;
110
- for (const [key, val] of this) {
111
- if (fn(val, key, this))
112
- this.delete(key);
113
- }
114
- return previousSize - this.size;
115
- }
116
- /**
117
- * Reduces the collection to a single value
118
- */
119
- reduce(fn, initialValue) {
120
- let accumulator = initialValue;
121
- for (const [key, val] of this) {
122
- accumulator = fn(accumulator, val, key, this);
123
- }
124
- return accumulator;
125
- }
126
- /**
127
- * Identical to Array.forEach()
128
- */
129
- each(fn) {
130
- for (const [key, val] of this) {
131
- fn(val, key, this);
132
- }
133
- return this;
134
- }
135
- first(amount) {
136
- if (amount === undefined)
137
- return this.values().next().value;
138
- if (amount < 0)
139
- return this.last(amount * -1);
140
- amount = Math.min(this.size, amount);
141
- const iter = this.values();
142
- return Array.from({ length: amount }, () => iter.next().value);
143
- }
144
- firstKey(amount) {
145
- if (amount === undefined)
146
- return this.keys().next().value;
147
- if (amount < 0)
148
- return this.lastKey(amount * -1);
149
- amount = Math.min(this.size, amount);
150
- const iter = this.keys();
151
- return Array.from({ length: amount }, () => iter.next().value);
152
- }
153
- last(amount) {
154
- const arr = [...this.values()];
155
- if (amount === undefined)
156
- return arr[arr.length - 1];
157
- if (amount < 0)
158
- return this.first(amount * -1);
159
- if (!amount)
160
- return [];
161
- return arr.slice(-amount);
162
- }
163
- lastKey(amount) {
164
- const arr = [...this.keys()];
165
- if (amount === undefined)
166
- return arr[arr.length - 1];
167
- if (amount < 0)
168
- return this.firstKey(amount * -1);
169
- if (!amount)
170
- return [];
171
- return arr.slice(-amount);
172
- }
173
- random(amount) {
174
- const arr = [...this.values()];
175
- if (amount === undefined)
176
- return arr[Math.floor(Math.random() * arr.length)];
177
- if (!arr.length || !amount)
178
- return [];
179
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
180
- }
181
- randomKey(amount) {
182
- const arr = [...this.keys()];
183
- if (amount === undefined)
184
- return arr[Math.floor(Math.random() * arr.length)];
185
- if (!arr.length || !amount)
186
- return [];
187
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
188
- }
189
- /**
190
- * Combines this collection with others
191
- */
192
- concat(...collections) {
193
- const newColl = this.clone();
194
- for (const coll of collections) {
195
- for (const [key, val] of coll)
196
- newColl.set(key, val);
197
- }
198
- return newColl;
199
- }
200
- /**
201
- * Checks if this collection shares identical items with another
202
- */
203
- equals(collection) {
204
- if (this === collection)
205
- return true;
206
- if (this.size !== collection.size)
207
- return false;
208
- for (const [key, value] of this) {
209
- if (!collection.has(key) || value !== collection.get(key)) {
210
- return false;
211
- }
212
- }
213
- return true;
214
- }
215
- /**
216
- * Creates an identical shallow copy of this collection
217
- */
218
- clone() {
219
- return new Collection(this);
220
- }
221
- /**
222
- * Sorts the collection and returns it
223
- */
224
- sort(compareFunction = Collection.defaultSort) {
225
- const entries = [...this.entries()];
226
- entries.sort((a, b) => compareFunction(a[1], b[1], a[0], b[0]));
227
- this.clear();
228
- for (const [k, v] of entries) {
229
- this.set(k, v);
230
- }
231
- return this;
232
- }
233
- /**
234
- * Sorts the collection by keys and returns it
235
- */
236
- sortByKey(compareFunction = Collection.defaultSort) {
237
- const entries = [...this.entries()];
238
- entries.sort((a, b) => compareFunction(a[0], b[0], a[1], b[1]));
239
- this.clear();
240
- for (const [k, v] of entries) {
241
- this.set(k, v);
242
- }
243
- return this;
244
- }
245
- /**
246
- * Returns an array of items
247
- */
248
- toJSON() {
249
- return [...this.values()];
250
- }
251
- /**
252
- * Default sort function
253
- */
254
- static defaultSort(firstValue, secondValue) {
255
- return Number(firstValue > secondValue) || Number(firstValue === secondValue) - 1;
256
- }
257
- /**
258
- * Creates a Collection from an array
259
- */
260
- static from(entries) {
261
- return new Collection(entries);
262
- }
263
- }
264
- exports.Collection = Collection;
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9Db2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsTUFBYSxVQUFpQixTQUFRLEdBQVM7SUFDN0M7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQU0sRUFBRSxxQkFBc0Q7UUFDbkUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEVBQW1EO1FBQ3ZELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxFQUFtRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQW1EO1FBQ3hELE1BQU0sT0FBTyxH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QUFDO1FBQzdCLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBT0QsTUFBTSxDQUFDLE1BQWU7UUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBT0QsU0FBUyxDQUFDLE1BQWU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxLQUFL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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsV0FBVyxDQUFJLFVBQWEsRUFBRSxXQUFjO1FBQ3pELE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFPLE9BQWtDO1FBQ2xELE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBOVJELGdDQThSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBNYXAgd2l0aCBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kc1xuICovXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbjxLLCBWPiBleHRlbmRzIE1hcDxLLCBWPiB7XG4gIC8qKlxuICAgKiBJZGVudGljYWwgdG8gTWFwLmdldCgpXG4gICAqIEVuc3VyZXMgdGhlIHZhbHVlIGV4aXN0c1xuICAgKi9cbiAgZW5zdXJlKGtleTogSywgZGVmYXVsdFZhbHVlR2VuZXJhdG9yOiAoa2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBWKTogViB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHJldHVybiB0aGlzLmdldChrZXkpITtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWVHZW5lcmF0b3Ioa2V5LCB0aGlzKTtcbiAgICB0aGlzLnNldChrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWxsIGl0ZW1zIHBhc3MgYSB0ZXN0XG4gICAqL1xuICBldmVyeShmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKCFmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFueSBpdGVtIHBhc3NlcyBhIHRlc3RcbiAgICovXG4gIHNvbWUoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpY2FsIHRvIEFycmF5LmZpbHRlcigpLCBidXQgcmV0dXJucyBhIENvbGxlY3Rpb25cbiAgICovXG4gIGZpbHRlcihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBDb2xsZWN0aW9uPEssIFY+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVj4oKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmVzdWx0cy5zZXQoa2V5LCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb25zIHRoZSBjb2xsZWN0aW9uIGludG8gdHdvIGNvbGxlY3Rpb25zXG4gICAqL1xuICBwYXJ0aXRpb24oZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogW0NvbGxlY3Rpb248SywgVj4sIENvbGxlY3Rpb248SywgVj5dIHtcbiAgICBjb25zdCByZXN1bHRzOiBbQ29sbGVjdGlvbjxLLCBWPiwgQ29sbGVjdGlvbjxLLCBWPl0gPSBbbmV3IENvbGxlY3Rpb248SywgVj4oKSwgbmV3IENvbGxlY3Rpb248SywgVj4oKV07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHtcbiAgICAgICAgcmVzdWx0c1swXS5zZXQoa2V5LCB2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0c1sxXS5zZXQoa2V5LCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGVhY2ggaXRlbSB0byBhbm90aGVyIHZhbHVlXG4gICAqL1xuICBtYXA8VD4oZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBUKTogVFtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgcmVzdWx0cy5wdXNoKGZuKHZhbCwga2V5LCB0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgZWFjaCBpdGVtIHRvIGFub3RoZXIgdmFsdWUgaW50byBhIENvbGxlY3Rpb25cbiAgICovXG4gIG1hcFZhbHVlczxUPihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IFQpOiBDb2xsZWN0aW9uPEssIFQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVD4oKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgcmVzdWx0cy5zZXQoa2V5LCBmbih2YWwsIGtleSwgdGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgYSBzaW5nbGUgaXRlbVxuICAgKi9cbiAgZmluZChmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBWIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgdGhlIGtleSBvZiBhIHNpbmdsZSBpdGVtXG4gICAqL1xuICBmaW5kS2V5KGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IEsgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgaXRlbXMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBmaWx0ZXIgZnVuY3Rpb25cbiAgICovXG4gIHN3ZWVwKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgcHJldmlvdXNTaXplID0gdGhpcy5zaXplO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJldmlvdXNTaXplIC0gdGhpcy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZXMgdGhlIGNvbGxlY3Rpb24gdG8gYSBzaW5nbGUgdmFsdWVcbiAgICovXG4gIHJlZHVjZTxUPihmbjogKGFjY3VtdWxhdG9yOiBULCB2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBULCBpbml0aWFsVmFsdWU6IFQpOiBUIHtcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWU7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gZm4oYWNjdW11bGF0b3IsIHZhbCwga2V5LCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWNhbCB0byBBcnJheS5mb3JFYWNoKClcbiAgICovXG4gIGVhY2goZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGZuKHZhbCwga2V5LCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgaXRlbShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgZmlyc3QoKTogViB8IHVuZGVmaW5lZDtcbiAgZmlyc3QoYW1vdW50OiBudW1iZXIpOiBWW107XG4gIGZpcnN0KGFtb3VudD86IG51bWJlcik6IFYgfCBWW10gfCB1bmRlZmluZWQge1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5sYXN0KGFtb3VudCAqIC0xKTtcbiAgICBhbW91bnQgPSBNYXRoLm1pbih0aGlzLnNpemUsIGFtb3VudCk7XG4gICAgY29uc3QgaXRlciA9IHRoaXMudmFsdWVzKCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGFtb3VudCB9LCAoKSA9PiBpdGVyLm5leHQoKS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3Qga2V5KHMpIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBmaXJzdEtleSgpOiBLIHwgdW5kZWZpbmVkO1xuICBmaXJzdEtleShhbW91bnQ6IG51bWJlcik6IEtbXTtcbiAgZmlyc3RLZXkoYW1vdW50PzogbnVtYmVyKTogSyB8IEtbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5sYXN0S2V5KGFtb3VudCAqIC0xKTtcbiAgICBhbW91bnQgPSBNYXRoLm1pbih0aGlzLnNpemUsIGFtb3VudCk7XG4gICAgY29uc3QgaXRlciA9IHRoaXMua2V5cygpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhbW91bnQgfSwgKCkgPT4gaXRlci5uZXh0KCkudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3QgaXRlbShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgbGFzdCgpOiBWIHwgdW5kZWZpbmVkO1xuICBsYXN0KGFtb3VudDogbnVtYmVyKTogVltdO1xuICBsYXN0KGFtb3VudD86IG51bWJlcik6IFYgfCBWW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLnZhbHVlcygpXTtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5maXJzdChhbW91bnQgKiAtMSk7XG4gICAgaWYgKCFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKC1hbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3Qga2V5KHMpIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBsYXN0S2V5KCk6IEsgfCB1bmRlZmluZWQ7XG4gIGxhc3RLZXkoYW1vdW50OiBudW1iZXIpOiBLW107XG4gIGxhc3RLZXkoYW1vdW50PzogbnVtYmVyKTogSyB8IEtbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMua2V5cygpXTtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5maXJzdEtleShhbW91bnQgKiAtMSk7XG4gICAgaWYgKCFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKC1hbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByYW5kb20gaXRlbSBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICByYW5kb20oKTogViB8IHVuZGVmaW5lZDtcbiAgcmFuZG9tKGFtb3VudDogbnVtYmVyKTogVltdO1xuICByYW5kb20oYW1vdW50PzogbnVtYmVyKTogViB8IFZbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMudmFsdWVzKCldO1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XG4gICAgaWYgKCFhcnIubGVuZ3RoIHx8ICFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogTWF0aC5taW4oYW1vdW50LCBhcnIubGVuZ3RoKSB9LCAoKSA9PiBhcnIuc3BsaWNlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpLCAxKVswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJhbmRvbSBrZXkgZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgcmFuZG9tS2V5KCk6IEsgfCB1bmRlZmluZWQ7XG4gIHJhbmRvbUtleShhbW91bnQ6IG51bWJlcik6IEtbXTtcbiAgcmFuZG9tS2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLmtleXMoKV07XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYXJyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpXTtcbiAgICBpZiAoIWFyci5sZW5ndGggfHwgIWFtb3VudCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1pbihhbW91bnQsIGFyci5sZW5ndGgpIH0sICgpID0+IGFyci5zcGxpY2UoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCksIDEpWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyB0aGlzIGNvbGxlY3Rpb24gd2l0aCBvdGhlcnNcbiAgICovXG4gIGNvbmNhdCguLi5jb2xsZWN0aW9uczogQ29sbGVjdGlvbjxLLCBWPltdKTogQ29sbGVjdGlvbjxLLCBWPiB7XG4gICAgY29uc3QgbmV3Q29sbCA9IHRoaXMuY2xvbmUoKTtcbiAgICBmb3IgKGNvbnN0IGNvbGwgb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBjb2xsKSBuZXdDb2xsLnNldChrZXksIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGNvbGxlY3Rpb24gc2hhcmVzIGlkZW50aWNhbCBpdGVtcyB3aXRoIGFub3RoZXJcbiAgICovXG4gIGVxdWFscyhjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPEssIFY+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMgPT09IGNvbGxlY3Rpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLnNpemUgIT09IGNvbGxlY3Rpb24uc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGlmICghY29sbGVjdGlvbi5oYXMoa2V5KSB8fCB2YWx1ZSAhPT0gY29sbGVjdGlvbi5nZXQoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpY2FsIHNoYWxsb3cgY29weSBvZiB0aGlzIGNvbGxlY3Rpb25cbiAgICovXG4gIGNsb25lKCk6IENvbGxlY3Rpb248SywgVj4ge1xuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgY29sbGVjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKi9cbiAgc29ydChjb21wYXJlRnVuY3Rpb246IChmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogViwgZmlyc3RLZXk6IEssIHNlY29uZEtleTogSykgPT4gbnVtYmVyID0gQ29sbGVjdGlvbi5kZWZhdWx0U29ydCk6IHRoaXMge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gY29tcGFyZUZ1bmN0aW9uKGFbMV0sIGJbMV0sIGFbMF0sIGJbMF0pKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgZW50cmllcykge1xuICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBjb2xsZWN0aW9uIGJ5IGtleXMgYW5kIHJldHVybnMgaXRcbiAgICovXG4gIHNvcnRCeUtleShjb21wYXJlRnVuY3Rpb246IChmaXJzdEtleTogSywgc2Vjb25kS2V5OiBLLCBmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogVikgPT4gbnVtYmVyID0gQ29sbGVjdGlvbi5kZWZhdWx0U29ydCk6IHRoaXMge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gY29tcGFyZUZ1bmN0aW9uKGFbMF0sIGJbMF0sIGFbMV0sIGJbMV0pKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgZW50cmllcykge1xuICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXNcbiAgICovXG4gIHRvSlNPTigpOiBWW10ge1xuICAgIHJldHVybiBbLi4udGhpcy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBzb3J0IGZ1bmN0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0U29ydDxWPihmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogVik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihmaXJzdFZhbHVlID4gc2Vjb25kVmFsdWUpIHx8IE51bWJlcihmaXJzdFZhbHVlID09PSBzZWNvbmRWYWx1ZSkgLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDb2xsZWN0aW9uIGZyb20gYW4gYXJyYXlcbiAgICovXG4gIHN0YXRpYyBmcm9tPEssIFY+KGVudHJpZXM6IEl0ZXJhYmxlPHJlYWRvbmx5IFtLLCBWXT4pOiBDb2xsZWN0aW9uPEssIFY+IHtcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oZW50cmllcyk7XG4gIH1cbn1cbiJdfQ==