@jubbio/core 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/Client.d.ts +147 -0
- package/dist/Client.js +471 -0
- package/dist/builders/ActionRowBuilder.d.ts +53 -0
- package/dist/builders/ActionRowBuilder.js +68 -0
- package/dist/builders/ButtonBuilder.d.ts +77 -0
- package/dist/builders/ButtonBuilder.js +96 -0
- package/dist/builders/EmbedBuilder.d.ts +157 -0
- package/dist/builders/EmbedBuilder.js +199 -0
- package/dist/builders/ModalBuilder.d.ts +122 -0
- package/dist/builders/ModalBuilder.js +162 -0
- package/dist/builders/SelectMenuBuilder.d.ts +123 -0
- package/dist/builders/SelectMenuBuilder.js +165 -0
- package/dist/builders/SlashCommandBuilder.d.ts +197 -0
- package/dist/builders/SlashCommandBuilder.js +324 -0
- package/dist/builders/index.d.ts +9 -0
- package/dist/builders/index.js +26 -0
- package/dist/enums.d.ts +196 -0
- package/dist/enums.js +216 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +128 -0
- package/dist/managers/BaseManager.d.ts +69 -0
- package/dist/managers/BaseManager.js +106 -0
- package/dist/managers/ChannelManager.d.ts +98 -0
- package/dist/managers/ChannelManager.js +209 -0
- package/dist/managers/GuildMemberManager.d.ts +74 -0
- package/dist/managers/GuildMemberManager.js +156 -0
- package/dist/managers/RoleManager.d.ts +84 -0
- package/dist/managers/RoleManager.js +207 -0
- package/dist/managers/index.d.ts +7 -0
- package/dist/managers/index.js +24 -0
- package/dist/rest/REST.d.ts +483 -0
- package/dist/rest/REST.js +805 -0
- package/dist/rest/index.d.ts +1 -0
- package/dist/rest/index.js +18 -0
- package/dist/sharding/ShardingManager.d.ts +179 -0
- package/dist/sharding/ShardingManager.js +375 -0
- package/dist/sharding/index.d.ts +4 -0
- package/dist/sharding/index.js +21 -0
- package/dist/structures/Channel.d.ts +120 -0
- package/dist/structures/Channel.js +224 -0
- package/dist/structures/Collection.d.ts +53 -0
- package/dist/structures/Collection.js +115 -0
- package/dist/structures/Guild.d.ts +59 -0
- package/dist/structures/Guild.js +90 -0
- package/dist/structures/GuildMember.d.ts +130 -0
- package/dist/structures/GuildMember.js +208 -0
- package/dist/structures/Interaction.d.ts +224 -0
- package/dist/structures/Interaction.js +404 -0
- package/dist/structures/Message.d.ts +93 -0
- package/dist/structures/Message.js +145 -0
- package/dist/structures/User.d.ts +37 -0
- package/dist/structures/User.js +65 -0
- package/dist/structures/index.d.ts +7 -0
- package/dist/structures/index.js +25 -0
- package/dist/structures.d.ts +1 -0
- package/dist/structures.js +19 -0
- package/dist/types.d.ts +255 -0
- package/dist/types.js +3 -0
- package/dist/utils/BitField.d.ts +66 -0
- package/dist/utils/BitField.js +138 -0
- package/dist/utils/Collection.d.ts +116 -0
- package/dist/utils/Collection.js +265 -0
- package/dist/utils/Collector.d.ts +152 -0
- package/dist/utils/Collector.js +314 -0
- package/dist/utils/DataResolver.d.ts +61 -0
- package/dist/utils/DataResolver.js +146 -0
- package/dist/utils/Formatters.d.ts +145 -0
- package/dist/utils/Formatters.js +213 -0
- package/dist/utils/IntentsBitField.d.ts +85 -0
- package/dist/utils/IntentsBitField.js +99 -0
- package/dist/utils/Partials.d.ts +105 -0
- package/dist/utils/Partials.js +149 -0
- package/dist/utils/PermissionsBitField.d.ts +118 -0
- package/dist/utils/PermissionsBitField.js +145 -0
- package/dist/utils/SnowflakeUtil.d.ts +63 -0
- package/dist/utils/SnowflakeUtil.js +93 -0
- package/dist/utils/Sweepers.d.ts +127 -0
- package/dist/utils/Sweepers.js +270 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.js +30 -0
- package/package.json +37 -0
|
@@ -0,0 +1,138 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvQml0RmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBU0g7O0dBRUc7QUFDSCxNQUFhLFFBQVE7SUFDbkIsbUJBQW1CO0lBQ1osUUFBUSxDQUFJO0lBRW5CLHFEQUFxRDtJQUNyRCxNQUFNLENBQUMsS0FBSyxHQUFvQyxFQUFFLENBQUM7SUFFbkQsd0JBQXdCO0lBQ3hCLE1BQU0sQ0FBQyxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUV4QyxZQUFZLE9BQWlDLFFBQVEsQ0FBQyxVQUFlO1FBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxDQUFPLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxHQUE2QjtRQUMvQixNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sR0FBRyxDQUFDLENBQUM7UUFDMUUsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBTSxRQUFtQixDQUFDO0lBQ3JGLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxJQUE4QjtRQUNoQyxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sSUFBSSxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFDLEdBQUcsSUFBZ0M7UUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLElBQUssSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxDQUFP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dkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQW9CLENBQUM7WUFDdkMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLFFBQWtCLENBQUM7WUFDL0IsQ0FBQztZQUNELE9BQU8sTUFBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7O0FBaEpILDRCQWlKQztBQUVELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBHZW5lcmljIEJpdEZpZWxkIGNsYXNzXHJcbiAqIEFQSSBjb21wYXRpYmxlIHdpdGggRGlzY29yZC5qcyBCaXRGaWVsZFxyXG4gKi9cclxuXHJcbmV4cG9ydCB0eXBlIEJpdEZpZWxkUmVzb2x2YWJsZTxTIGV4dGVuZHMgc3RyaW5nLCBOIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPiA9IFxyXG4gIHwgTiBcclxuICB8IE5bXSBcclxuICB8IFMgXHJcbiAgfCBTW10gXHJcbiAgfCBCaXRGaWVsZDxTLCBOPjtcclxuXHJcbi8qKlxyXG4gKiBEYXRhIHN0cnVjdHVyZSBmb3IgYml0IGZpZWxkc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJpdEZpZWxkPFMgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIE4gZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXIgPSBiaWdpbnQ+IHtcclxuICAvKiogVGhlIHJhdyBiaXRzICovXHJcbiAgcHVibGljIGJpdGZpZWxkOiBOO1xyXG5cclxuICAvKiogRmxhZ3MgZm9yIHRoaXMgYml0ZmllbGQgKG92ZXJyaWRlIGluIHN1YmNsYXNzKSAqL1xyXG4gIHN0YXRpYyBGbGFnczogUmVjb3JkPHN0cmluZywgYmlnaW50IHwgbnVtYmVyPiA9IHt9O1xyXG5cclxuICAvKiogRGVmYXVsdCBiaXQgdmFsdWUgKi9cclxuICBzdGF0aWMgRGVmYXVsdEJpdDogYmlnaW50IHwgbnVtYmVyID0gMG47XHJcblxyXG4gIGNvbnN0cnVjdG9yKGJpdHM6IEJpdEZpZWxkUmVzb2x2YWJsZTxTLCBOPiA9IEJpdEZpZWxkLkRlZmF1bHRCaXQgYXMgTikge1xyXG4gICAgdGhpcy5iaXRmaWVsZCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBCaXRGaWVsZCkucmVzb2x2ZTxTLCBOPihiaXRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgYml0ZmllbGQgaGFzIGEgYml0XHJcbiAgICovXHJcbiAgaGFzKGJpdDogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZXNvbHZlZCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBCaXRGaWVsZCkucmVzb2x2ZTxTLCBOPihiaXQpO1xyXG4gICAgcmV0dXJuICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKHJlc29sdmVkIGFzIGJpZ2ludCkpID09PSAocmVzb2x2ZWQgYXMgYmlnaW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgYml0ZmllbGQgaGFzIGFueSBvZiB0aGUgYml0c1xyXG4gICAqL1xyXG4gIGFueShiaXRzOiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlc29sdmVkID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEJpdEZpZWxkKS5yZXNvbHZlPFMsIE4+KGJpdHMpO1xyXG4gICAgcmV0dXJuICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKHJlc29sdmVkIGFzIGJpZ2ludCkpICE9PSAwbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBiaXRzIHRvIHRoaXMgYml0ZmllbGRcclxuICAgKi9cclxuICBhZGQoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcclxuICAgIGxldCB0b3RhbCA9IDBuO1xyXG4gICAgZm9yIChjb25zdCBiaXQgb2YgYml0cykge1xyXG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XHJcbiAgICB9XHJcbiAgICAodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpIHw9IHRvdGFsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYml0cyBmcm9tIHRoaXMgYml0ZmllbGRcclxuICAgKi9cclxuICByZW1vdmUoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcclxuICAgIGxldCB0b3RhbCA9IDBuO1xyXG4gICAgZm9yIChjb25zdCBiaXQgb2YgYml0cykge1xyXG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XHJcbiAgICB9XHJcbiAgICAodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICY9IH50b3RhbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHRvIGFycmF5IG9mIGZsYWcgbmFtZXNcclxuICAgKi9cclxuICB0b0FycmF5KCk6IFNbXSB7XHJcbiAgICBjb25zdCBmbGFncyA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBCaXRGaWVsZCkuRmxhZ3M7XHJcbiAgICBjb25zdCByZXN1bHQ6IFNbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBiaXRdIG9mIE9iamVjdC5lbnRyaWVzKGZsYWdzKSkge1xyXG4gICAgICBpZiAoKHRoaXMuYml0ZmllbGQgYXMgYmlnaW50KSAmIChiaXQgYXMgYmlnaW50KSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKG5hbWUgYXMgUyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcmlhbGl6ZSB0byBKU09OXHJcbiAgICovXHJcbiAgdG9KU09OKCk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuYml0ZmllbGQgPT09ICdiaWdpbnQnIFxyXG4gICAgICA/IHRoaXMuYml0ZmllbGQudG9TdHJpbmcoKSBcclxuICAgICAgOiB0aGlzLmJpdGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxyXG4gICAqL1xyXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5iaXRmaWVsZC50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGl0ZXJhdG9yXHJcbiAgICovXHJcbiAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Uz4ge1xyXG4gICAgeWllbGQqIHRoaXMudG9BcnJheSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnJlZXplIHRoaXMgYml0ZmllbGRcclxuICAgKi9cclxuICBmcmVlemUoKTogUmVhZG9ubHk8dGhpcz4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBlcXVhbGl0eVxyXG4gICAqL1xyXG4gIGVxdWFscyhvdGhlcjogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5iaXRmaWVsZCA9PT0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEJpdEZpZWxkKS5yZXNvbHZlPFMsIE4+KG90aGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIHRoaXMgYml0ZmllbGRcclxuICAgKi9cclxuICBjbG9uZSgpOiBCaXRGaWVsZDxTLCBOPiB7XHJcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIG5ldyAoYml0czogTikgPT4gQml0RmllbGQ8UywgTj4pKHRoaXMuYml0ZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSBhIGJpdCB0byB0aGUgbnVtZXJpYyB0eXBlXHJcbiAgICovXHJcbiAgc3RhdGljIHJlc29sdmU8UyBleHRlbmRzIHN0cmluZywgTiBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oYml0OiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBOIHtcclxuICAgIGlmICh0eXBlb2YgYml0ID09PSAnYmlnaW50JyB8fCB0eXBlb2YgYml0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gYml0IGFzIE47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpdCBpbnN0YW5jZW9mIEJpdEZpZWxkKSB7XHJcbiAgICAgIHJldHVybiBiaXQuYml0ZmllbGQgYXMgTjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGJpdCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLkZsYWdzW2JpdF07XHJcbiAgICAgIGlmIChyZXNvbHZlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJpdDogJHtiaXR9YCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc29sdmVkIGFzIE47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYml0KSkge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5EZWZhdWx0Qml0IGFzIGJpZ2ludDtcclxuICAgICAgZm9yIChjb25zdCBiIG9mIGJpdCkge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlPFMsIE4+KGIpO1xyXG4gICAgICAgIHJlc3VsdCB8PSByZXNvbHZlZCBhcyBiaWdpbnQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBOO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiaXQ6ICR7Yml0fWApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQml0RmllbGQ7XHJcbiJdfQ==
|
|
@@ -0,0 +1,116 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9Db2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsTUFBYSxVQUFpQixTQUFRLEdBQVM7SUFDN0M7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQU0sRUFBRSxxQkFBc0Q7UUFDbkUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEVBQW1EO1FBQ3ZELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxFQUFtRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQW1EO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxFQUFRLENBQUM7UUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsRUFBbUQ7UUFDM0QsTUFBTSxPQUFPLEdBQXlDLENBQUMsSUFBSSxVQUFVLEVBQVEsRUFBRSxJQUFJLFVBQVUsRUFBUSxDQUFDLENBQUM7UUFDdkcsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFJLEVBQTZDO1FBQ2xELE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUksRUFBNkM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLEVBQVEsQ0FBQztRQUN2QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLEVBQW1EO1FBQ3RELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLEVBQW1EO1FBQ3pELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEVBQW1EO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE9BQU8sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFJLEVBQTZELEVBQUUsWUFBZTtRQUN0RixJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUM7UUFDL0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxFQUFnRDtRQUNuRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9ELEtBQUssQ0FBQyxNQUFlO1FBQ25CLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFPRCxRQUFRLENBQUMsTUFBZTtRQUN0QixJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzFELElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBT0QsSUFBSSxDQUFDLE1BQWU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBT0QsT0FBTyxDQUFDLE1BQWU7UUFDckIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBT0QsTUFBTSxDQUFDLE1BQWU7UUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBT0QsU0FBUyxDQUFDLE1BQWU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxLQUFLLFNB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsV0FBVyxDQUFJLFVBQWEsRUFBRSxXQUFjO1FBQ3pELE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFPLE9BQWtDO1FBQ2xELE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBOVJELGdDQThSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIE1hcCB3aXRoIGFkZGl0aW9uYWwgdXRpbGl0eSBtZXRob2RzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbjxLLCBWPiBleHRlbmRzIE1hcDxLLCBWPiB7XHJcbiAgLyoqXHJcbiAgICogSWRlbnRpY2FsIHRvIE1hcC5nZXQoKVxyXG4gICAqIEVuc3VyZXMgdGhlIHZhbHVlIGV4aXN0c1xyXG4gICAqL1xyXG4gIGVuc3VyZShrZXk6IEssIGRlZmF1bHRWYWx1ZUdlbmVyYXRvcjogKGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gVik6IFYge1xyXG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHJldHVybiB0aGlzLmdldChrZXkpITtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZUdlbmVyYXRvcihrZXksIHRoaXMpO1xyXG4gICAgdGhpcy5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpO1xyXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgcGFzcyBhIHRlc3RcclxuICAgKi9cclxuICBldmVyeShmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGlmICghZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBwYXNzZXMgYSB0ZXN0XHJcbiAgICovXHJcbiAgc29tZShmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWRlbnRpY2FsIHRvIEFycmF5LmZpbHRlcigpLCBidXQgcmV0dXJucyBhIENvbGxlY3Rpb25cclxuICAgKi9cclxuICBmaWx0ZXIoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogQ29sbGVjdGlvbjxLLCBWPiB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVj4oKTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJlc3VsdHMuc2V0KGtleSwgdmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFydGl0aW9ucyB0aGUgY29sbGVjdGlvbiBpbnRvIHR3byBjb2xsZWN0aW9uc1xyXG4gICAqL1xyXG4gIHBhcnRpdGlvbihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBbQ29sbGVjdGlvbjxLLCBWPiwgQ29sbGVjdGlvbjxLLCBWPl0ge1xyXG4gICAgY29uc3QgcmVzdWx0czogW0NvbGxlY3Rpb248SywgVj4sIENvbGxlY3Rpb248SywgVj5dID0gW25ldyBDb2xsZWN0aW9uPEssIFY+KCksIG5ldyBDb2xsZWN0aW9uPEssIFY+KCldO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcclxuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkge1xyXG4gICAgICAgIHJlc3VsdHNbMF0uc2V0KGtleSwgdmFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRzWzFdLnNldChrZXksIHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBlYWNoIGl0ZW0gdG8gYW5vdGhlciB2YWx1ZVxyXG4gICAqL1xyXG4gIG1hcDxUPihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IFQpOiBUW10ge1xyXG4gICAgY29uc3QgcmVzdWx0czogVFtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICByZXN1bHRzLnB1c2goZm4odmFsLCBrZXksIHRoaXMpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBlYWNoIGl0ZW0gdG8gYW5vdGhlciB2YWx1ZSBpbnRvIGEgQ29sbGVjdGlvblxyXG4gICAqL1xyXG4gIG1hcFZhbHVlczxUPihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IFQpOiBDb2xsZWN0aW9uPEssIFQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQ29sbGVjdGlvbjxLLCBUPigpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcclxuICAgICAgcmVzdWx0cy5zZXQoa2V5LCBmbih2YWwsIGtleSwgdGhpcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWFyY2hlcyBmb3IgYSBzaW5nbGUgaXRlbVxyXG4gICAqL1xyXG4gIGZpbmQoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogViB8IHVuZGVmaW5lZCB7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlYXJjaGVzIGZvciB0aGUga2V5IG9mIGEgc2luZ2xlIGl0ZW1cclxuICAgKi9cclxuICBmaW5kS2V5KGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IEsgfCB1bmRlZmluZWQge1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcclxuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIGtleTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGl0ZW1zIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgZmlsdGVyIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc3dlZXAoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHByZXZpb3VzU2l6ZSA9IHRoaXMuc2l6ZTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHRoaXMuZGVsZXRlKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJldmlvdXNTaXplIC0gdGhpcy5zaXplO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVkdWNlcyB0aGUgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZVxyXG4gICAqL1xyXG4gIHJlZHVjZTxUPihmbjogKGFjY3VtdWxhdG9yOiBULCB2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBULCBpbml0aWFsVmFsdWU6IFQpOiBUIHtcclxuICAgIGxldCBhY2N1bXVsYXRvciA9IGluaXRpYWxWYWx1ZTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGFjY3VtdWxhdG9yID0gZm4oYWNjdW11bGF0b3IsIHZhbCwga2V5LCB0aGlzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aWNhbCB0byBBcnJheS5mb3JFYWNoKClcclxuICAgKi9cclxuICBlYWNoKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gdm9pZCk6IHRoaXMge1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcclxuICAgICAgZm4odmFsLCBrZXksIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtKHMpIGluIHRoZSBjb2xsZWN0aW9uXHJcbiAgICovXHJcbiAgZmlyc3QoKTogViB8IHVuZGVmaW5lZDtcclxuICBmaXJzdChhbW91bnQ6IG51bWJlcik6IFZbXTtcclxuICBmaXJzdChhbW91bnQ/OiBudW1iZXIpOiBWIHwgVltdIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gICAgaWYgKGFtb3VudCA8IDApIHJldHVybiB0aGlzLmxhc3QoYW1vdW50ICogLTEpO1xyXG4gICAgYW1vdW50ID0gTWF0aC5taW4odGhpcy5zaXplLCBhbW91bnQpO1xyXG4gICAgY29uc3QgaXRlciA9IHRoaXMudmFsdWVzKCk7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogYW1vdW50IH0sICgpID0+IGl0ZXIubmV4dCgpLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGtleShzKSBpbiB0aGUgY29sbGVjdGlvblxyXG4gICAqL1xyXG4gIGZpcnN0S2V5KCk6IEsgfCB1bmRlZmluZWQ7XHJcbiAgZmlyc3RLZXkoYW1vdW50OiBudW1iZXIpOiBLW107XHJcbiAgZmlyc3RLZXkoYW1vdW50PzogbnVtYmVyKTogSyB8IEtbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmtleXMoKS5uZXh0KCkudmFsdWU7XHJcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMubGFzdEtleShhbW91bnQgKiAtMSk7XHJcbiAgICBhbW91bnQgPSBNYXRoLm1pbih0aGlzLnNpemUsIGFtb3VudCk7XHJcbiAgICBjb25zdCBpdGVyID0gdGhpcy5rZXlzKCk7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogYW1vdW50IH0sICgpID0+IGl0ZXIubmV4dCgpLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxhc3QgaXRlbShzKSBpbiB0aGUgY29sbGVjdGlvblxyXG4gICAqL1xyXG4gIGxhc3QoKTogViB8IHVuZGVmaW5lZDtcclxuICBsYXN0KGFtb3VudDogbnVtYmVyKTogVltdO1xyXG4gIGxhc3QoYW1vdW50PzogbnVtYmVyKTogViB8IFZbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy52YWx1ZXMoKV07XHJcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKGFtb3VudCA8IDApIHJldHVybiB0aGlzLmZpcnN0KGFtb3VudCAqIC0xKTtcclxuICAgIGlmICghYW1vdW50KSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gYXJyLnNsaWNlKC1hbW91bnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbGFzdCBrZXkocykgaW4gdGhlIGNvbGxlY3Rpb25cclxuICAgKi9cclxuICBsYXN0S2V5KCk6IEsgfCB1bmRlZmluZWQ7XHJcbiAgbGFzdEtleShhbW91bnQ6IG51bWJlcik6IEtbXTtcclxuICBsYXN0S2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMua2V5cygpXTtcclxuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XHJcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMuZmlyc3RLZXkoYW1vdW50ICogLTEpO1xyXG4gICAgaWYgKCFhbW91bnQpIHJldHVybiBbXTtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoLWFtb3VudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgcmFuZG9tIGl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvblxyXG4gICAqL1xyXG4gIHJhbmRvbSgpOiBWIHwgdW5kZWZpbmVkO1xyXG4gIHJhbmRvbShhbW91bnQ6IG51bWJlcik6IFZbXTtcclxuICByYW5kb20oYW1vdW50PzogbnVtYmVyKTogViB8IFZbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy52YWx1ZXMoKV07XHJcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCldO1xyXG4gICAgaWYgKCFhcnIubGVuZ3RoIHx8ICFhbW91bnQpIHJldHVybiBbXTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1pbihhbW91bnQsIGFyci5sZW5ndGgpIH0sICgpID0+IGFyci5zcGxpY2UoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCksIDEpWzBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSByYW5kb20ga2V5IGZyb20gdGhlIGNvbGxlY3Rpb25cclxuICAgKi9cclxuICByYW5kb21LZXkoKTogSyB8IHVuZGVmaW5lZDtcclxuICByYW5kb21LZXkoYW1vdW50OiBudW1iZXIpOiBLW107XHJcbiAgcmFuZG9tS2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMua2V5cygpXTtcclxuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XHJcbiAgICBpZiAoIWFyci5sZW5ndGggfHwgIWFtb3VudCkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGgubWluKGFtb3VudCwgYXJyLmxlbmd0aCkgfSwgKCkgPT4gYXJyLnNwbGljZShNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKSwgMSlbMF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tYmluZXMgdGhpcyBjb2xsZWN0aW9uIHdpdGggb3RoZXJzXHJcbiAgICovXHJcbiAgY29uY2F0KC4uLmNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uPEssIFY+W10pOiBDb2xsZWN0aW9uPEssIFY+IHtcclxuICAgIGNvbnN0IG5ld0NvbGwgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbGwgb2YgY29sbGVjdGlvbnMpIHtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGNvbGwpIG5ld0NvbGwuc2V0KGtleSwgdmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdDb2xsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHRoaXMgY29sbGVjdGlvbiBzaGFyZXMgaWRlbnRpY2FsIGl0ZW1zIHdpdGggYW5vdGhlclxyXG4gICAqL1xyXG4gIGVxdWFscyhjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPEssIFY+KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcyA9PT0gY29sbGVjdGlvbikgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodGhpcy5zaXplICE9PSBjb2xsZWN0aW9uLnNpemUpIHJldHVybiBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcclxuICAgICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhrZXkpIHx8IHZhbHVlICE9PSBjb2xsZWN0aW9uLmdldChrZXkpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpY2FsIHNoYWxsb3cgY29weSBvZiB0aGlzIGNvbGxlY3Rpb25cclxuICAgKi9cclxuICBjbG9uZSgpOiBDb2xsZWN0aW9uPEssIFY+IHtcclxuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSBjb2xsZWN0aW9uIGFuZCByZXR1cm5zIGl0XHJcbiAgICovXHJcbiAgc29ydChjb21wYXJlRnVuY3Rpb246IChmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogViwgZmlyc3RLZXk6IEssIHNlY29uZEtleTogSykgPT4gbnVtYmVyID0gQ29sbGVjdGlvbi5kZWZhdWx0U29ydCk6IHRoaXMge1xyXG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMoKV07XHJcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVGdW5jdGlvbihhWzFdLCBiWzFdLCBhWzBdLCBiWzBdKSk7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBlbnRyaWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0KGssIHYpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0cyB0aGUgY29sbGVjdGlvbiBieSBrZXlzIGFuZCByZXR1cm5zIGl0XHJcbiAgICovXHJcbiAgc29ydEJ5S2V5KGNvbXBhcmVGdW5jdGlvbjogKGZpcnN0S2V5OiBLLCBzZWNvbmRLZXk6IEssIGZpcnN0VmFsdWU6IFYsIHNlY29uZFZhbHVlOiBWKSA9PiBudW1iZXIgPSBDb2xsZWN0aW9uLmRlZmF1bHRTb3J0KTogdGhpcyB7XHJcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcygpXTtcclxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gY29tcGFyZUZ1bmN0aW9uKGFbMF0sIGJbMF0sIGFbMV0sIGJbMV0pKTtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIGVudHJpZXMpIHtcclxuICAgICAgdGhpcy5zZXQoaywgdik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXNcclxuICAgKi9cclxuICB0b0pTT04oKTogVltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy52YWx1ZXMoKV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHNvcnQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0U29ydDxWPihmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogVik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTnVtYmVyKGZpcnN0VmFsdWUgPiBzZWNvbmRWYWx1ZSkgfHwgTnVtYmVyKGZpcnN0VmFsdWUgPT09IHNlY29uZFZhbHVlKSAtIDE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgQ29sbGVjdGlvbiBmcm9tIGFuIGFycmF5XHJcbiAgICovXHJcbiAgc3RhdGljIGZyb208SywgVj4oZW50cmllczogSXRlcmFibGU8cmVhZG9ubHkgW0ssIFZdPik6IENvbGxlY3Rpb248SywgVj4ge1xyXG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGVudHJpZXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|