@bitgo-beta/sdk-coin-iota 1.0.1-beta.333 → 1.0.1-beta.334
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,oBAAoB,EAAmB,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAajG,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAA2B;gBAEvC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO5C,IAAI,UAAU,IAAI,oBAAoB,EAAE,CAEvC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAG3C;IAED,IAAI,cAAc,IAAI,sBAAsB,EAAE,GAAG,SAAS,CAEzD;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAG7D;IAED;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAmB3B,MAAM,IAAI,cAAc;IAQxB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAO3C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAanD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI5D;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAK7C;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,oBAAoB,EAAmB,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAajG,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAA2B;gBAEvC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO5C,IAAI,UAAU,IAAI,oBAAoB,EAAE,CAEvC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAG3C;IAED,IAAI,cAAc,IAAI,sBAAsB,EAAE,GAAG,SAAS,CAEzD;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAG7D;IAED;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAmB3B,MAAM,IAAI,cAAc;IAQxB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAO3C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAanD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI5D;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAK7C;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IASpC;;;OAGG;IACH,SAAS,CAAC,4BAA4B,IAAI,IAAI;IAM9C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAmBnC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAwBlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,SAAS,CAAC,gCAAgC,CACxC,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAWzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAKnC"}
|
|
@@ -196,11 +196,11 @@ class TransferTransaction extends transaction_1.Transaction {
|
|
|
196
196
|
}
|
|
197
197
|
const firstObject = this._iotaTransaction.object(transactions_1.Inputs.ObjectRef(this.paymentObjects[0]));
|
|
198
198
|
// Single object doesn't need consolidation
|
|
199
|
-
if (this.paymentObjects.length
|
|
200
|
-
|
|
199
|
+
if (this.paymentObjects.length > 1) {
|
|
200
|
+
// Merge extra objects into the first one
|
|
201
|
+
this.mergeObjectsInBatches(firstObject, this.paymentObjects.slice(1), constants_1.MAX_INPUT_OBJECTS);
|
|
201
202
|
}
|
|
202
|
-
|
|
203
|
-
return this.mergeObjectsInBatches(firstObject, this.paymentObjects.slice(1), constants_1.MAX_INPUT_OBJECTS);
|
|
203
|
+
return firstObject;
|
|
204
204
|
}
|
|
205
205
|
/**
|
|
206
206
|
* Consolidates gas payment objects into a single coin object.
|
|
@@ -211,12 +211,11 @@ class TransferTransaction extends transaction_1.Transaction {
|
|
|
211
211
|
throw new sdk_core_1.InvalidTransactionError('Gas payment objects are required');
|
|
212
212
|
}
|
|
213
213
|
const gasObject = this._iotaTransaction.gas;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
if (this.gasPaymentObjects.length > constants_1.MAX_GAS_PAYMENT_OBJECTS) {
|
|
215
|
+
// Merge excess gas objects to stay within limits
|
|
216
|
+
this.mergeObjectsInBatches(gasObject, this.gasPaymentObjects, constants_1.MAX_INPUT_OBJECTS);
|
|
217
217
|
}
|
|
218
|
-
|
|
219
|
-
return this.mergeObjectsInBatches(gasObject, this.gasPaymentObjects, constants_1.MAX_INPUT_OBJECTS);
|
|
218
|
+
return gasObject;
|
|
220
219
|
}
|
|
221
220
|
/**
|
|
222
221
|
* Merges multiple coin objects into a target coin in batches.
|
|
@@ -228,13 +227,11 @@ class TransferTransaction extends transaction_1.Transaction {
|
|
|
228
227
|
* @returns The consolidated coin object
|
|
229
228
|
*/
|
|
230
229
|
mergeObjectsInBatches(targetCoin, objectsToMerge, batchSize) {
|
|
231
|
-
let consolidatedCoin = targetCoin;
|
|
232
230
|
for (let startIndex = 0; startIndex < objectsToMerge.length; startIndex += batchSize) {
|
|
233
231
|
const batch = objectsToMerge.slice(startIndex, startIndex + batchSize);
|
|
234
232
|
const batchAsTransactionObjects = batch.map((obj) => this._iotaTransaction.object(transactions_1.Inputs.ObjectRef(obj)));
|
|
235
|
-
|
|
233
|
+
this._iotaTransaction.mergeCoins(targetCoin, batchAsTransactionObjects);
|
|
236
234
|
}
|
|
237
|
-
return consolidatedCoin;
|
|
238
235
|
}
|
|
239
236
|
/**
|
|
240
237
|
* Splits the source coin into the amounts needed for each recipient and transfers them.
|
|
@@ -341,4 +338,4 @@ class TransferTransaction extends transaction_1.Transaction {
|
|
|
341
338
|
}
|
|
342
339
|
}
|
|
343
340
|
exports.TransferTransaction = TransferTransaction;
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBNkc7QUFFN0csK0NBQTRDO0FBRTVDLDhEQUlxQztBQUNyQyxnREFBa0Q7QUFDbEQsOERBQXlGO0FBQ3pGLG1DQUFzQztBQUN0QywyQ0FBd0g7QUFDeEgsb0RBQTRCO0FBQzVCLGdFQUFxQztBQUVyQyxNQUFhLG1CQUFvQixTQUFRLHlCQUFXO0lBSWxELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBNkI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBMkM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxX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Q0ssMEJBQTBCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BGLFFBQVEsRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQWpaRCxrREFpWkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgdG9IZXgsIFRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHJhbnNhY3Rpb25PYmplY3RJbnB1dCwgVHJhbnNmZXJUeERhdGEsIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHtcbiAgSW5wdXRzIGFzIElvdGFJbnB1dHMsXG4gIFRyYW5zYWN0aW9uT2JqZWN0QXJndW1lbnQsXG4gIFRyYW5zYWN0aW9uIGFzIElvdGFUcmFuc2FjdGlvbixcbn0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IGZyb21CYXNlNjQgfSBmcm9tICdAaW90YS9pb3RhLXNkay91dGlscyc7XG5pbXBvcnQgeyBtZXNzYWdlV2l0aEludGVudCBhcyBpb3RhTWVzc2FnZVdpdGhJbnRlbnQgfSBmcm9tICdAaW90YS9pb3RhLXNkay9jcnlwdG9ncmFwaHknO1xuaW1wb3J0IHsgQmNzUmVhZGVyIH0gZnJvbSAnQGlvdGEvYmNzJztcbmltcG9ydCB7IE1BWF9HQVNfUEFZTUVOVF9PQkpFQ1RTLCBNQVhfSU5QVVRfT0JKRUNUUywgTUFYX1JFQ0lQSUVOVFMsIFRSQU5TRkVSX1RSQU5TQUNUSU9OX0NPTU1BTkRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNmZXJUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfcmVjaXBpZW50czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgcHJpdmF0ZSBfcGF5bWVudE9iamVjdHM/OiBUcmFuc2FjdGlvbk9iamVjdElucHV0W107XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgdGhpcy5faW5wdXRzID0gW107XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtdO1xuICB9XG5cbiAgZ2V0IHJlY2lwaWVudHMoKTogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY2lwaWVudHM7XG4gIH1cblxuICBzZXQgcmVjaXBpZW50cyh2YWx1ZTogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSkge1xuICAgIHRoaXMuX3JlY2lwaWVudHMgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IHBheW1lbnRPYmplY3RzKCk6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BheW1lbnRPYmplY3RzO1xuICB9XG5cbiAgc2V0IHBheW1lbnRPYmplY3RzKHZhbHVlOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYXltZW50T2JqZWN0cyA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIGFkZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pb3RhVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG90YWxBbW91bnQgPSB0aGlzLnJlY2lwaWVudHMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IgKyBOdW1iZXIoY3VycmVudC5hbW91bnQpLCAwKTtcbiAgICB0aGlzLl9vdXRwdXRzID0gdGhpcy5yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50LCBpbmRleCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KSk7XG4gICAgdGhpcy5faW5wdXRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHRvdGFsQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUcmFuc2ZlclR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnRvSnNvbigpLFxuICAgICAgcmVjaXBpZW50czogdGhpcy5yZWNpcGllbnRzLFxuICAgICAgcGF5bWVudE9iamVjdHM6IHRoaXMucGF5bWVudE9iamVjdHMsXG4gICAgfTtcbiAgfVxuXG4gIHBhcnNlRnJvbUpTT04odHhEYXRhOiBUcmFuc2ZlclR4RGF0YSk6IHZvaWQge1xuICAgIHN1cGVyLnBhcnNlRnJvbUpTT04odHhEYXRhKTtcbiAgICB0aGlzLnJlY2lwaWVudHMgPSB0eERhdGEucmVjaXBpZW50cztcbiAgICB0aGlzLnBheW1lbnRPYmplY3RzID0gdHhEYXRhLnBheW1lbnRPYmplY3RzO1xuICAgIHRoaXMudXBkYXRlSXNTaW11bGF0ZVR4KCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZnJvbSBpdHMgYnJvYWRjYXN0IGZvcm1hdCAoYmFzZTY0IG9yIHJhdyBieXRlcykuXG4gICAqIEV4dHJhY3RzIHJlY2lwaWVudHMsIGFtb3VudHMsIGFuZCBwYXltZW50IG9iamVjdHMgZnJvbSB0aGUgdHJhbnNhY3Rpb24gZGF0YS5cbiAgICovXG4gIHBhcnNlRnJvbUJyb2FkY2FzdFR4KHR4OiBzdHJpbmcgfCBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgY29uc3QgdHhEYXRhID0gSW90YVRyYW5zYWN0aW9uLmZyb20odHgpLmdldERhdGEoKTtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNmZXJDb21tYW5kcyh0eERhdGEpO1xuXG4gICAgc3VwZXIucGFyc2VGcm9tQnJvYWRjYXN0VHgodHgpO1xuXG4gICAgY29uc3QgeyBpbnB1dE9iamVjdHMsIGFtb3VudHMsIHJlY2VpdmVycyB9ID0gdGhpcy5wYXJzZVRyYW5zYWN0aW9uSW5wdXRzKHR4RGF0YSk7XG4gICAgdGhpcy52YWxpZGF0ZUFtb3VudHNNYXRjaFJlY2VpdmVycyhhbW91bnRzLCByZWNlaXZlcnMpO1xuICAgIHRoaXMuYXNzaWduUGFyc2VkT2JqZWN0cyhpbnB1dE9iamVjdHMpO1xuICAgIHRoaXMuYXNzaWduUmVjaXBpZW50cyhyZWNlaXZlcnMsIGFtb3VudHMpO1xuICAgIHRoaXMudXBkYXRlSXNTaW11bGF0ZVR4KCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHRyYW5zYWN0aW9uIG9ubHkgY29udGFpbnMgc3VwcG9ydGVkIHRyYW5zZmVyIGNvbW1hbmRzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zZmVyQ29tbWFuZHModHhEYXRhOiBSZXR1cm5UeXBlPElvdGFUcmFuc2FjdGlvblsnZ2V0RGF0YSddPik6IHZvaWQge1xuICAgIGNvbnN0IGhhc1Vuc3VwcG9ydGVkQ29tbWFuZHMgPSB0eERhdGEuY29tbWFuZHMuc29tZShcbiAgICAgIChjb21tYW5kKSA9PiAhVFJBTlNGRVJfVFJBTlNBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMoY29tbWFuZC4ka2luZClcbiAgICApO1xuXG4gICAgaWYgKGhhc1Vuc3VwcG9ydGVkQ29tbWFuZHMpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVW5zdXBwb3J0ZWQgY29tbWFuZHMgaW4gdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0cmFuc2FjdGlvbiBpbnB1dHMgdG8gZXh0cmFjdCBvYmplY3RzLCBhbW91bnRzLCBhbmQgcmVjZWl2ZXIgYWRkcmVzc2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zYWN0aW9uSW5wdXRzKHR4RGF0YTogUmV0dXJuVHlwZTxJb3RhVHJhbnNhY3Rpb25bJ2dldERhdGEnXT4pOiB7XG4gICAgaW5wdXRPYmplY3RzOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W107XG4gICAgYW1vdW50czogc3RyaW5nW107XG4gICAgcmVjZWl2ZXJzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgaW5wdXRPYmplY3RzOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W10gPSBbXTtcbiAgICBjb25zdCBhbW91bnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlY2VpdmVyczogc3RyaW5nW10gPSBbXTtcblxuICAgIHR4RGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dC4ka2luZCA9PT0gJ09iamVjdCcgJiYgJ0ltbU9yT3duZWRPYmplY3QnIGluIGlucHV0Lk9iamVjdCkge1xuICAgICAgICBpbnB1dE9iamVjdHMucHVzaChpbnB1dC5PYmplY3QuSW1tT3JPd25lZE9iamVjdCBhcyBUcmFuc2FjdGlvbk9iamVjdElucHV0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LiRraW5kID09PSAnUHVyZScgJiYgJ2J5dGVzJyBpbiBpbnB1dC5QdXJlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZnJvbUJhc2U2NChpbnB1dC5QdXJlLmJ5dGVzKTtcbiAgICAgICAgY29uc3QgaGV4VmFsdWUgPSAnMHgnICsgdG9IZXgodmFsdWUpO1xuXG4gICAgICAgIGlmICh1dGlscy5pc1ZhbGlkQWRkcmVzcyhoZXhWYWx1ZSkpIHtcbiAgICAgICAgICByZWNlaXZlcnMucHVzaChoZXhWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYW1vdW50cy5wdXNoKG5ldyBCY3NSZWFkZXIodmFsdWUpLnJlYWQ2NCgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBpbnB1dE9iamVjdHMsIGFtb3VudHMsIHJlY2VpdmVycyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBudW1iZXIgb2YgYW1vdW50cyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFtb3VudHNNYXRjaFJlY2VpdmVycyhhbW91bnRzOiBzdHJpbmdbXSwgcmVjZWl2ZXJzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChhbW91bnRzLmxlbmd0aCAhPT0gcmVjZWl2ZXJzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdDb3VudCBvZiBhbW91bnRzIGRvZXMgbm90IG1hdGNoIGNvdW50IG9mIHJlY2VpdmVycycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25zIHBhcnNlZCBpbnB1dCBvYmplY3RzIHRvIGVpdGhlciBnYXMgcGF5bWVudCBvYmplY3RzIG9yIHBheW1lbnQgb2JqZWN0cy5cbiAgICogSWYgbm8gZ2FzIG9iamVjdHMgZXhpc3QgYW5kIHNlbmRlciBwYXlzIG93biBnYXMsIG9iamVjdHMgYmVjb21lIGdhcyBvYmplY3RzLlxuICAgKiBPdGhlcndpc2UsIHRoZXkgYmVjb21lIHBheW1lbnQgb2JqZWN0cy5cbiAgICovXG4gIHByaXZhdGUgYXNzaWduUGFyc2VkT2JqZWN0cyhpbnB1dE9iamVjdHM6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSk6IHZvaWQge1xuICAgIGlmIChpbnB1dE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9HYXNPYmplY3RzRXhpc3QgPSAhdGhpcy5nYXNQYXltZW50T2JqZWN0cyB8fCB0aGlzLmdhc1BheW1lbnRPYmplY3RzLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBzZW5kZXJQYXlzT3duR2FzID0gIXRoaXMuZ2FzU3BvbnNvciB8fCB0aGlzLnNlbmRlciA9PT0gdGhpcy5nYXNTcG9uc29yO1xuXG4gICAgaWYgKG5vR2FzT2JqZWN0c0V4aXN0ICYmIHNlbmRlclBheXNPd25HYXMpIHtcbiAgICAgIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMgPSBpbnB1dE9iamVjdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BheW1lbnRPYmplY3RzID0gaW5wdXRPYmplY3RzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBhc3NpZ25zIHJlY2lwaWVudHMgZnJvbSBwYXJzZWQgYWRkcmVzc2VzIGFuZCBhbW91bnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NpZ25SZWNpcGllbnRzKHJlY2VpdmVyczogc3RyaW5nW10sIGFtb3VudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHJlY2VpdmVycy5tYXAoKGFkZHJlc3MsIGluZGV4KSA9PiAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFtb3VudDogYW1vdW50c1tpbmRleF0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VXaXRoSW50ZW50KG1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gaW90YU1lc3NhZ2VXaXRoSW50ZW50KCdUcmFuc2FjdGlvbkRhdGEnLCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgdGhlIElPVEEgdHJhbnNhY3Rpb24gd2l0aCBpbnB1dHMgYW5kIGNvbW1hbmRzIGZvciB0aGUgdHJhbnNmZXIuXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBvYmplY3RzIHRvIHVzZSBmb3IgcGF5bWVudCAoZWl0aGVyIHBheW1lbnQgb2JqZWN0cyBvciBnYXMgb2JqZWN0cyksXG4gICAqIGNvbnNvbGlkYXRlcyB0aGVtIGludG8gYSBzaW5nbGUgY29pbiwgYW5kIHRoZW4gc3BsaXRzL3RyYW5zZmVycyB0byByZWNpcGllbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHBvcHVsYXRlVHhJbnB1dHNBbmRDb21tYW5kcygpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2VDb2luID0gdGhpcy5nZXRDb25zb2xpZGF0ZWRTb3VyY2VDb2luKCk7XG4gICAgdGhpcy5zcGxpdEFuZFRyYW5zZmVyVG9SZWNpcGllbnRzKHNvdXJjZUNvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hpY2ggb2JqZWN0cyB0byB1c2UgYXMgdGhlIHBheW1lbnQgc291cmNlIGFuZCBjb25zb2xpZGF0ZXMgdGhlbS5cbiAgICogSWYgcGF5bWVudCBvYmplY3RzIGFyZSBwcm92aWRlZCwgdXNlIHRob3NlLiBPdGhlcndpc2UsIGlmIHRoZSBzZW5kZXIgaXMgcGF5aW5nXG4gICAqIHRoZWlyIG93biBnYXMsIHVzZSB0aGUgZ2FzIG9iamVjdHMgZm9yIHBheW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGdldENvbnNvbGlkYXRlZFNvdXJjZUNvaW4oKTogVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCB7XG4gICAgaWYgKHRoaXMuaGFzUGF5bWVudE9iamVjdHMoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc29saWRhdGVQYXltZW50T2JqZWN0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25zb2xpZGF0ZUdhc09iamVjdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcGF5bWVudCBvYmplY3RzIGV4aXN0IGFuZCBpZiBnYXMgb2JqZWN0cyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKiBHYXMgb2JqZWN0cyBhcmUgdXNlZCB3aGVuOiBubyBwYXltZW50IG9iamVjdHMgZXhpc3QgQU5EIHNlbmRlciBwYXlzIHRoZWlyIG93biBnYXMuXG4gICAqL1xuICBwcml2YXRlIGhhc1BheW1lbnRPYmplY3RzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc1BheW1lbnRPYmplY3RzID0gdGhpcy5wYXltZW50T2JqZWN0cyAmJiB0aGlzLnBheW1lbnRPYmplY3RzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc1BheW1lbnRPYmplY3RzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBwYXltZW50IG9iamVjdHMsIG9ubHkgdXNlIGdhcyBvYmplY3RzIGlmIHNlbmRlciBwYXlzIG93biBnYXNcbiAgICBjb25zdCBzZW5kZXJQYXlzT3duR2FzID0gIXRoaXMuZ2FzU3BvbnNvciB8fCB0aGlzLmdhc1Nwb25zb3IgPT09IHRoaXMuc2VuZGVyO1xuICAgIHJldHVybiAhc2VuZGVyUGF5c093bkdhcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zb2xpZGF0ZXMgcGF5bWVudCBvYmplY3RzIGludG8gYSBzaW5nbGUgY29pbiBvYmplY3QuXG4gICAqIElmIG11bHRpcGxlIHBheW1lbnQgb2JqZWN0cyBleGlzdCwgdGhleSBhcmUgbWVyZ2VkIGluIGJhdGNoZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbnNvbGlkYXRlUGF5bWVudE9iamVjdHMoKTogVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCB7XG4gICAgaWYgKCF0aGlzLnBheW1lbnRPYmplY3RzIHx8IHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1BheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdE9iamVjdCA9IHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5vYmplY3QoSW90YUlucHV0cy5PYmplY3RSZWYodGhpcy5wYXltZW50T2JqZWN0c1swXSkpO1xuXG4gICAgLy8gU2luZ2xlIG9iamVjdCBkb2Vzbid0IG5lZWQgY29uc29saWRhdGlvblxuICAgIGlmICh0aGlzLnBheW1lbnRPYmplY3RzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGZpcnN0T2JqZWN0O1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHJlbWFpbmluZyBvYmplY3RzIGludG8gdGhlIGZpcnN0IG9uZVxuICAgIHJldHVybiB0aGlzLm1lcmdlT2JqZWN0c0luQmF0Y2hlcyhmaXJzdE9iamVjdCwgdGhpcy5wYXltZW50T2JqZWN0cy5zbGljZSgxKSwgTUFYX0lOUFVUX09CSkVDVFMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlcyBnYXMgcGF5bWVudCBvYmplY3RzIGludG8gYSBzaW5nbGUgY29pbiBvYmplY3QuXG4gICAqIElmIHRoZSBudW1iZXIgb2YgZ2FzIG9iamVjdHMgZXhjZWVkcyB0aGUgbWF4aW11bSwgdGhleSBhcmUgbWVyZ2VkIGluIGJhdGNoZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbnNvbGlkYXRlR2FzT2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAoIXRoaXMuZ2FzUGF5bWVudE9iamVjdHMgfHwgdGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHBheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNPYmplY3QgPSB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uZ2FzO1xuXG4gICAgLy8gSWYgd2l0aGluIHRoZSBsaW1pdCwgbm8gY29uc29saWRhdGlvbiBuZWVkZWRcbiAgICBpZiAodGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPD0gTUFYX0dBU19QQVlNRU5UX09CSkVDVFMpIHtcbiAgICAgIHJldHVybiBnYXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgZXhjZXNzIGdhcyBvYmplY3RzIHRvIHN0YXkgd2l0aGluIGxpbWl0c1xuICAgIHJldHVybiB0aGlzLm1lcmdlT2JqZWN0c0luQmF0Y2hlcyhnYXNPYmplY3QsIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMsIE1BWF9JTlBVVF9PQkpFQ1RTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgbXVsdGlwbGUgY29pbiBvYmplY3RzIGludG8gYSB0YXJnZXQgY29pbiBpbiBiYXRjaGVzLlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIElPVEEgaGFzIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgcGVyIG1lcmdlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXRDb2luIC0gVGhlIGNvaW4gdG8gbWVyZ2UgaW50b1xuICAgKiBAcGFyYW0gb2JqZWN0c1RvTWVyZ2UgLSBBcnJheSBvZiBvYmplY3RzIHRvIG1lcmdlXG4gICAqIEBwYXJhbSBiYXRjaFNpemUgLSBNYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIHRvIG1lcmdlIHBlciBiYXRjaFxuICAgKiBAcmV0dXJucyBUaGUgY29uc29saWRhdGVkIGNvaW4gb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIG1lcmdlT2JqZWN0c0luQmF0Y2hlcyhcbiAgICB0YXJnZXRDb2luOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50LFxuICAgIG9iamVjdHNUb01lcmdlOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W10sXG4gICAgYmF0Y2hTaXplOiBudW1iZXJcbiAgKTogVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCB7XG4gICAgbGV0IGNvbnNvbGlkYXRlZENvaW4gPSB0YXJnZXRDb2luO1xuXG4gICAgZm9yIChsZXQgc3RhcnRJbmRleCA9IDA7IHN0YXJ0SW5kZXggPCBvYmplY3RzVG9NZXJnZS5sZW5ndGg7IHN0YXJ0SW5kZXggKz0gYmF0Y2hTaXplKSB7XG4gICAgICBjb25zdCBiYXRjaCA9IG9iamVjdHNUb01lcmdlLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBiYXRjaFNpemUpO1xuICAgICAgY29uc3QgYmF0Y2hBc1RyYW5zYWN0aW9uT2JqZWN0cyA9IGJhdGNoLm1hcCgob2JqKSA9PiB0aGlzLl9pb3RhVHJhbnNhY3Rpb24ub2JqZWN0KElvdGFJbnB1dHMuT2JqZWN0UmVmKG9iaikpKTtcblxuICAgICAgW2NvbnNvbGlkYXRlZENvaW5dID0gdGhpcy5faW90YVRyYW5zYWN0aW9uLm1lcmdlQ29pbnMoY29uc29saWRhdGVkQ29pbiwgYmF0Y2hBc1RyYW5zYWN0aW9uT2JqZWN0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnNvbGlkYXRlZENvaW47XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIHRoZSBzb3VyY2UgY29pbiBpbnRvIHRoZSBhbW91bnRzIG5lZWRlZCBmb3IgZWFjaCByZWNpcGllbnQgYW5kIHRyYW5zZmVycyB0aGVtLlxuICAgKiBUaGlzIGNyZWF0ZXMgc3BsaXQgY29pbiBjb21tYW5kcyBmb3IgYWxsIHJlY2lwaWVudCBhbW91bnRzLCB0aGVuIHRyYW5zZmVyIGNvbW1hbmRzXG4gICAqIHRvIHNlbmQgZWFjaCBzcGxpdCBjb2luIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlY2lwaWVudC5cbiAgICovXG4gIHByaXZhdGUgc3BsaXRBbmRUcmFuc2ZlclRvUmVjaXBpZW50cyhzb3VyY2VDb2luOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcmVjaXBpZW50QW1vdW50cyA9IHRoaXMuX3JlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHJlY2lwaWVudC5hbW91bnQpO1xuICAgIGNvbnN0IHNwbGl0Q29pbnMgPSB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc3BsaXRDb2lucyhzb3VyY2VDb2luLCByZWNpcGllbnRBbW91bnRzKTtcblxuICAgIHRoaXMuX3JlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50LCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRDb2luc1tpbmRleF1dLCByZWNpcGllbnQuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCB0cmFuc2ZlciB0cmFuc2FjdGlvbiBkYXRhIGJlZm9yZSBidWlsZGluZy5cbiAgICogQ2hlY2tzIHJlY2lwaWVudHMsIHBheW1lbnQgb2JqZWN0cywgYW5kIGVuc3VyZXMgbm8gZHVwbGljYXRlIG9iamVjdCBJRHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVUeERhdGFJbXBsZW1lbnRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjaXBpZW50c0xpc3QoKTtcbiAgICB0aGlzLnZhbGlkYXRlUGF5bWVudE9iamVjdHNFeGlzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVOb0R1cGxpY2F0ZU9iamVjdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCByZWNpcGllbnRzIGV4aXN0IGFuZCBkb24ndCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZWNpcGllbnRzTGlzdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjaXBpZW50cyB8fCB0aGlzLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHJlY2lwaWVudHMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVjaXBpZW50cy5sZW5ndGggPiBNQVhfUkVDSVBJRU5UUykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgUmVjaXBpZW50cyBjb3VudCAoJHt0aGlzLnJlY2lwaWVudHMubGVuZ3RofSkgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgKCR7TUFYX1JFQ0lQSUVOVFN9KWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGVpdGhlciBwYXltZW50IG9iamVjdHMgb3IgZ2FzIG9iamVjdHMgZXhpc3QgZm9yIGZ1bmRpbmcgdGhlIHRyYW5zZmVyLlxuICAgKiBXaGVuIGEgZ2FzIHNwb25zb3IgaXMgdXNlZCwgcGF5bWVudCBvYmplY3RzIGFyZSByZXF1aXJlZC5cbiAgICogT3RoZXJ3aXNlLCBlaXRoZXIgcGF5bWVudCBvYmplY3RzIG9yIGdhcyBvYmplY3RzIGNhbiBiZSB1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVBheW1lbnRPYmplY3RzRXhpc3QoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzUGF5bWVudE9iamVjdHMgPSB0aGlzLnBheW1lbnRPYmplY3RzICYmIHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzUGF5bWVudE9iamVjdHMpIHtcbiAgICAgIHJldHVybjsgLy8gUGF5bWVudCBvYmplY3RzIGV4aXN0LCB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgIH1cblxuICAgIC8vIE5vIHBheW1lbnQgb2JqZWN0cyAtIGNoZWNrIGlmIGdhcyBvYmplY3RzIGNhbiBiZSB1c2VkIGluc3RlYWRcbiAgICBjb25zdCBoYXNHYXNTcG9uc29yID0gdGhpcy5nYXNTcG9uc29yICYmIHRoaXMuZ2FzU3BvbnNvciAhPT0gdGhpcy5zZW5kZXI7XG4gICAgaWYgKGhhc0dhc1Nwb25zb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUGF5bWVudCBvYmplY3RzIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIGEgZ2FzIHNwb25zb3InKTtcbiAgICB9XG5cbiAgICAvLyBObyBnYXMgc3BvbnNvciAtIGdhcyBvYmplY3RzIG11c3QgZXhpc3RcbiAgICBjb25zdCBoYXNHYXNPYmplY3RzID0gdGhpcy5nYXNQYXltZW50T2JqZWN0cyAmJiB0aGlzLmdhc1BheW1lbnRPYmplY3RzLmxlbmd0aCA+IDA7XG4gICAgaWYgKCFoYXNHYXNPYmplY3RzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1BheW1lbnQgb3IgR2FzIG9iamVjdHMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgb2JqZWN0IElEcyB3aXRoaW4gcGF5bWVudCBvYmplY3RzLFxuICAgKiBnYXMgcGF5bWVudCBvYmplY3RzLCBvciBiZXR3ZWVuIHRoZSB0d28gZ3JvdXBzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vRHVwbGljYXRlT2JqZWN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBwYXltZW50T2JqZWN0SWRzID0gdGhpcy5wYXltZW50T2JqZWN0cz8ubWFwKChvYmopID0+IG9iai5vYmplY3RJZCkgPz8gW107XG5cbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyB3aXRoaW4gcGF5bWVudCBvYmplY3RzXG4gICAgdGhpcy5jaGVja0ZvckR1cGxpY2F0ZUlkcyhwYXltZW50T2JqZWN0SWRzLCAncGF5bWVudCBvYmplY3RzJyk7XG5cbiAgICBpZiAoIXRoaXMuZ2FzUGF5bWVudE9iamVjdHMgfHwgdGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNPYmplY3RJZHMgPSB0aGlzLmdhc1BheW1lbnRPYmplY3RzLm1hcCgoZ2FzKSA9PiBnYXMub2JqZWN0SWQpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgd2l0aGluIGdhcyBwYXltZW50IG9iamVjdHNcbiAgICB0aGlzLmNoZWNrRm9yRHVwbGljYXRlSWRzKGdhc09iamVjdElkcywgJ2dhcyBwYXltZW50IG9iamVjdHMnKTtcblxuICAgIC8vIENoZWNrIGZvciBvdmVybGFwcyBiZXR3ZWVuIHBheW1lbnQgYW5kIGdhcyBvYmplY3RzXG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdJZHMgPSBwYXltZW50T2JqZWN0SWRzLmZpbHRlcigoaWQpID0+IGdhc09iamVjdElkcy5pbmNsdWRlcyhpZCkpO1xuICAgIGlmIChvdmVybGFwcGluZ0lkcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICdQYXltZW50IG9iamVjdHMgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGdhcyBwYXltZW50IG9iamVjdHM6ICcgKyBvdmVybGFwcGluZ0lkcy5qb2luKCcsICcpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBJRHMgaW4gYW4gYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRm9yRHVwbGljYXRlSWRzKGlkczogc3RyaW5nW10sIG9iamVjdFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHVuaXF1ZUlkcyA9IG5ldyBTZXQoaWRzKTtcbiAgICBpZiAodW5pcXVlSWRzLnNpemUgIT09IGlkcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgRHVwbGljYXRlIG9iamVjdCBJRHMgZm91bmQgaW4gJHtvYmplY3RUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uIG9mIHRoZSB0cmFuc2ZlciB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBleHBsYWluVHJhbnNhY3Rpb25JbXBsZW1lbnRhdGlvbihcbiAgICBfanNvbjogVHhEYXRhLFxuICAgIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHJlY2lwaWVudCk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdGhpcy5jYWxjdWxhdGVUb3RhbE91dHB1dEFtb3VudCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRvdGFsIGFtb3VudCBiZWluZyB0cmFuc2ZlcnJlZCB0byBhbGwgcmVjaXBpZW50cy5cbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlVG90YWxPdXRwdXRBbW91bnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWNpcGllbnRzXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IucGx1cyhjdXJyZW50LmFtb3VudCksIG5ldyBCaWdOdW1iZXIoMCkpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBNkc7QUFFN0csK0NBQTRDO0FBRTVDLDhEQUlxQztBQUNyQyxnREFBa0Q7QUFDbEQsOERBQXlGO0FBQ3pGLG1DQUFzQztBQUN0QywyQ0FBd0g7QUFDeEgsb0RBQTRCO0FBQzVCLGdFQUFxQztBQUVyQyxNQUFhLG1CQUFvQixTQUFRLHlCQUFXO0lBSWxELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBNkI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBMkM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxX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QUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEYsUUFBUSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBNVlELGtEQTRZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCB0b0hleCwgVHJhbnNhY3Rpb25SZWNpcGllbnQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmFuc2FjdGlvbk9iamVjdElucHV0LCBUcmFuc2ZlclR4RGF0YSwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBJbnB1dHMgYXMgSW90YUlucHV0cyxcbiAgVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCxcbiAgVHJhbnNhY3Rpb24gYXMgSW90YVRyYW5zYWN0aW9uLFxufSBmcm9tICdAaW90YS9pb3RhLXNkay90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgZnJvbUJhc2U2NCB9IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL3V0aWxzJztcbmltcG9ydCB7IG1lc3NhZ2VXaXRoSW50ZW50IGFzIGlvdGFNZXNzYWdlV2l0aEludGVudCB9IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL2NyeXB0b2dyYXBoeSc7XG5pbXBvcnQgeyBCY3NSZWFkZXIgfSBmcm9tICdAaW90YS9iY3MnO1xuaW1wb3J0IHsgTUFYX0dBU19QQVlNRU5UX09CSkVDVFMsIE1BWF9JTlBVVF9PQkpFQ1RTLCBNQVhfUkVDSVBJRU5UUywgVFJBTlNGRVJfVFJBTlNBQ1RJT05fQ09NTUFORFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlclRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9yZWNpcGllbnRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICBwcml2YXRlIF9wYXltZW50T2JqZWN0cz86IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gIH1cblxuICBnZXQgcmVjaXBpZW50cygpOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50cztcbiAgfVxuXG4gIHNldCByZWNpcGllbnRzKHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdKSB7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgcGF5bWVudE9iamVjdHMoKTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGF5bWVudE9iamVjdHM7XG4gIH1cblxuICBzZXQgcGF5bWVudE9iamVjdHModmFsdWU6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BheW1lbnRPYmplY3RzID0gdmFsdWU7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgYWRkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lvdGFUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRoaXMucmVjaXBpZW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvciArIE51bWJlcihjdXJyZW50LmFtb3VudCksIDApO1xuICAgIHRoaXMuX291dHB1dHMgPSB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQsIGluZGV4KSA9PiAoe1xuICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogcmVjaXBpZW50LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc2VuZGVyLFxuICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgdG9Kc29uKCk6IFRyYW5zZmVyVHhEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIudG9Kc29uKCksXG4gICAgICByZWNpcGllbnRzOiB0aGlzLnJlY2lwaWVudHMsXG4gICAgICBwYXltZW50T2JqZWN0czogdGhpcy5wYXltZW50T2JqZWN0cyxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VGcm9tSlNPTih0eERhdGE6IFRyYW5zZmVyVHhEYXRhKTogdm9pZCB7XG4gICAgc3VwZXIucGFyc2VGcm9tSlNPTih0eERhdGEpO1xuICAgIHRoaXMucmVjaXBpZW50cyA9IHR4RGF0YS5yZWNpcGllbnRzO1xuICAgIHRoaXMucGF5bWVudE9iamVjdHMgPSB0eERhdGEucGF5bWVudE9iamVjdHM7XG4gICAgdGhpcy51cGRhdGVJc1NpbXVsYXRlVHgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiBmcm9tIGl0cyBicm9hZGNhc3QgZm9ybWF0IChiYXNlNjQgb3IgcmF3IGJ5dGVzKS5cbiAgICogRXh0cmFjdHMgcmVjaXBpZW50cywgYW1vdW50cywgYW5kIHBheW1lbnQgb2JqZWN0cyBmcm9tIHRoZSB0cmFuc2FjdGlvbiBkYXRhLlxuICAgKi9cbiAgcGFyc2VGcm9tQnJvYWRjYXN0VHgodHg6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICBjb25zdCB0eERhdGEgPSBJb3RhVHJhbnNhY3Rpb24uZnJvbSh0eCkuZ2V0RGF0YSgpO1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2ZlckNvbW1hbmRzKHR4RGF0YSk7XG5cbiAgICBzdXBlci5wYXJzZUZyb21Ccm9hZGNhc3RUeCh0eCk7XG5cbiAgICBjb25zdCB7IGlucHV0T2JqZWN0cywgYW1vdW50cywgcmVjZWl2ZXJzIH0gPSB0aGlzLnBhcnNlVHJhbnNhY3Rpb25JbnB1dHModHhEYXRhKTtcbiAgICB0aGlzLnZhbGlkYXRlQW1vdW50c01hdGNoUmVjZWl2ZXJzKGFtb3VudHMsIHJlY2VpdmVycyk7XG4gICAgdGhpcy5hc3NpZ25QYXJzZWRPYmplY3RzKGlucHV0T2JqZWN0cyk7XG4gICAgdGhpcy5hc3NpZ25SZWNpcGllbnRzKHJlY2VpdmVycywgYW1vdW50cyk7XG4gICAgdGhpcy51cGRhdGVJc1NpbXVsYXRlVHgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gb25seSBjb250YWlucyBzdXBwb3J0ZWQgdHJhbnNmZXIgY29tbWFuZHMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNmZXJDb21tYW5kcyh0eERhdGE6IFJldHVyblR5cGU8SW90YVRyYW5zYWN0aW9uWydnZXREYXRhJ10+KTogdm9pZCB7XG4gICAgY29uc3QgaGFzVW5zdXBwb3J0ZWRDb21tYW5kcyA9IHR4RGF0YS5jb21tYW5kcy5zb21lKFxuICAgICAgKGNvbW1hbmQpID0+ICFUUkFOU0ZFUl9UUkFOU0FDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhjb21tYW5kLiRraW5kKVxuICAgICk7XG5cbiAgICBpZiAoaGFzVW5zdXBwb3J0ZWRDb21tYW5kcykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCBjb21tYW5kcyBpbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRyYW5zYWN0aW9uIGlucHV0cyB0byBleHRyYWN0IG9iamVjdHMsIGFtb3VudHMsIGFuZCByZWNlaXZlciBhZGRyZXNzZXMuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVHJhbnNhY3Rpb25JbnB1dHModHhEYXRhOiBSZXR1cm5UeXBlPElvdGFUcmFuc2FjdGlvblsnZ2V0RGF0YSddPik6IHtcbiAgICBpbnB1dE9iamVjdHM6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXTtcbiAgICBhbW91bnRzOiBzdHJpbmdbXTtcbiAgICByZWNlaXZlcnM6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBpbnB1dE9iamVjdHM6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGFtb3VudHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVjZWl2ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdHhEYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKGlucHV0LiRraW5kID09PSAnT2JqZWN0JyAmJiAnSW1tT3JPd25lZE9iamVjdCcgaW4gaW5wdXQuT2JqZWN0KSB7XG4gICAgICAgIGlucHV0T2JqZWN0cy5wdXNoKGlucHV0Lk9iamVjdC5JbW1Pck93bmVkT2JqZWN0IGFzIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuJGtpbmQgPT09ICdQdXJlJyAmJiAnYnl0ZXMnIGluIGlucHV0LlB1cmUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tQmFzZTY0KGlucHV0LlB1cmUuYnl0ZXMpO1xuICAgICAgICBjb25zdCBoZXhWYWx1ZSA9ICcweCcgKyB0b0hleCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGhleFZhbHVlKSkge1xuICAgICAgICAgIHJlY2VpdmVycy5wdXNoKGhleFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbW91bnRzLnB1c2gobmV3IEJjc1JlYWRlcih2YWx1ZSkucmVhZDY0KCkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGlucHV0T2JqZWN0cywgYW1vdW50cywgcmVjZWl2ZXJzIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIG51bWJlciBvZiBhbW91bnRzIG1hdGNoZXMgdGhlIG51bWJlciBvZiByZWNlaXZlcnMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW1vdW50c01hdGNoUmVjZWl2ZXJzKGFtb3VudHM6IHN0cmluZ1tdLCByZWNlaXZlcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKGFtb3VudHMubGVuZ3RoICE9PSByZWNlaXZlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0NvdW50IG9mIGFtb3VudHMgZG9lcyBub3QgbWF0Y2ggY291bnQgb2YgcmVjZWl2ZXJzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbnMgcGFyc2VkIGlucHV0IG9iamVjdHMgdG8gZWl0aGVyIGdhcyBwYXltZW50IG9iamVjdHMgb3IgcGF5bWVudCBvYmplY3RzLlxuICAgKiBJZiBubyBnYXMgb2JqZWN0cyBleGlzdCBhbmQgc2VuZGVyIHBheXMgb3duIGdhcywgb2JqZWN0cyBiZWNvbWUgZ2FzIG9iamVjdHMuXG4gICAqIE90aGVyd2lzZSwgdGhleSBiZWNvbWUgcGF5bWVudCBvYmplY3RzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NpZ25QYXJzZWRPYmplY3RzKGlucHV0T2JqZWN0czogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdKTogdm9pZCB7XG4gICAgaWYgKGlucHV0T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub0dhc09iamVjdHNFeGlzdCA9ICF0aGlzLmdhc1BheW1lbnRPYmplY3RzIHx8IHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IHNlbmRlclBheXNPd25HYXMgPSAhdGhpcy5nYXNTcG9uc29yIHx8IHRoaXMuc2VuZGVyID09PSB0aGlzLmdhc1Nwb25zb3I7XG5cbiAgICBpZiAobm9HYXNPYmplY3RzRXhpc3QgJiYgc2VuZGVyUGF5c093bkdhcykge1xuICAgICAgdGhpcy5nYXNQYXltZW50T2JqZWN0cyA9IGlucHV0T2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGF5bWVudE9iamVjdHMgPSBpbnB1dE9iamVjdHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGFzc2lnbnMgcmVjaXBpZW50cyBmcm9tIHBhcnNlZCBhZGRyZXNzZXMgYW5kIGFtb3VudHMuXG4gICAqL1xuICBwcml2YXRlIGFzc2lnblJlY2lwaWVudHMocmVjZWl2ZXJzOiBzdHJpbmdbXSwgYW1vdW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gcmVjZWl2ZXJzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYW1vdW50OiBhbW91bnRzW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWVzc2FnZVdpdGhJbnRlbnQobWVzc2FnZTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBpb3RhTWVzc2FnZVdpdGhJbnRlbnQoJ1RyYW5zYWN0aW9uRGF0YScsIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlcyB0aGUgSU9UQSB0cmFuc2FjdGlvbiB3aXRoIGlucHV0cyBhbmQgY29tbWFuZHMgZm9yIHRoZSB0cmFuc2Zlci5cbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIG9iamVjdHMgdG8gdXNlIGZvciBwYXltZW50IChlaXRoZXIgcGF5bWVudCBvYmplY3RzIG9yIGdhcyBvYmplY3RzKSxcbiAgICogY29uc29saWRhdGVzIHRoZW0gaW50byBhIHNpbmdsZSBjb2luLCBhbmQgdGhlbiBzcGxpdHMvdHJhbnNmZXJzIHRvIHJlY2lwaWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcG9wdWxhdGVUeElucHV0c0FuZENvbW1hbmRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZUNvaW4gPSB0aGlzLmdldENvbnNvbGlkYXRlZFNvdXJjZUNvaW4oKTtcbiAgICB0aGlzLnNwbGl0QW5kVHJhbnNmZXJUb1JlY2lwaWVudHMoc291cmNlQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGljaCBvYmplY3RzIHRvIHVzZSBhcyB0aGUgcGF5bWVudCBzb3VyY2UgYW5kIGNvbnNvbGlkYXRlcyB0aGVtLlxuICAgKiBJZiBwYXltZW50IG9iamVjdHMgYXJlIHByb3ZpZGVkLCB1c2UgdGhvc2UuIE90aGVyd2lzZSwgaWYgdGhlIHNlbmRlciBpcyBwYXlpbmdcbiAgICogdGhlaXIgb3duIGdhcywgdXNlIHRoZSBnYXMgb2JqZWN0cyBmb3IgcGF5bWVudC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29uc29saWRhdGVkU291cmNlQ29pbigpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAodGhpcy5oYXNQYXltZW50T2JqZWN0cygpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zb2xpZGF0ZVBheW1lbnRPYmplY3RzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnNvbGlkYXRlR2FzT2JqZWN0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXltZW50IG9iamVjdHMgZXhpc3QgYW5kIGlmIGdhcyBvYmplY3RzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAqIEdhcyBvYmplY3RzIGFyZSB1c2VkIHdoZW46IG5vIHBheW1lbnQgb2JqZWN0cyBleGlzdCBBTkQgc2VuZGVyIHBheXMgdGhlaXIgb3duIGdhcy5cbiAgICovXG4gIHByaXZhdGUgaGFzUGF5bWVudE9iamVjdHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzUGF5bWVudE9iamVjdHMgPSB0aGlzLnBheW1lbnRPYmplY3RzICYmIHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzUGF5bWVudE9iamVjdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHBheW1lbnQgb2JqZWN0cywgb25seSB1c2UgZ2FzIG9iamVjdHMgaWYgc2VuZGVyIHBheXMgb3duIGdhc1xuICAgIGNvbnN0IHNlbmRlclBheXNPd25HYXMgPSAhdGhpcy5nYXNTcG9uc29yIHx8IHRoaXMuZ2FzU3BvbnNvciA9PT0gdGhpcy5zZW5kZXI7XG4gICAgcmV0dXJuICFzZW5kZXJQYXlzT3duR2FzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlcyBwYXltZW50IG9iamVjdHMgaW50byBhIHNpbmdsZSBjb2luIG9iamVjdC5cbiAgICogSWYgbXVsdGlwbGUgcGF5bWVudCBvYmplY3RzIGV4aXN0LCB0aGV5IGFyZSBtZXJnZWQgaW4gYmF0Y2hlcy5cbiAgICovXG4gIHByaXZhdGUgY29uc29saWRhdGVQYXltZW50T2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAoIXRoaXMucGF5bWVudE9iamVjdHMgfHwgdGhpcy5wYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUGF5bWVudCBvYmplY3RzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2JqZWN0ID0gdGhpcy5faW90YVRyYW5zYWN0aW9uLm9iamVjdChJb3RhSW5wdXRzLk9iamVjdFJlZih0aGlzLnBheW1lbnRPYmplY3RzWzBdKSk7XG5cbiAgICAvLyBTaW5nbGUgb2JqZWN0IGRvZXNuJ3QgbmVlZCBjb25zb2xpZGF0aW9uXG4gICAgaWYgKHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gTWVyZ2UgZXh0cmEgb2JqZWN0cyBpbnRvIHRoZSBmaXJzdCBvbmVcbiAgICAgIHRoaXMubWVyZ2VPYmplY3RzSW5CYXRjaGVzKGZpcnN0T2JqZWN0LCB0aGlzLnBheW1lbnRPYmplY3RzLnNsaWNlKDEpLCBNQVhfSU5QVVRfT0JKRUNUUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0T2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlcyBnYXMgcGF5bWVudCBvYmplY3RzIGludG8gYSBzaW5nbGUgY29pbiBvYmplY3QuXG4gICAqIElmIHRoZSBudW1iZXIgb2YgZ2FzIG9iamVjdHMgZXhjZWVkcyB0aGUgbWF4aW11bSwgdGhleSBhcmUgbWVyZ2VkIGluIGJhdGNoZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbnNvbGlkYXRlR2FzT2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAoIXRoaXMuZ2FzUGF5bWVudE9iamVjdHMgfHwgdGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHBheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNPYmplY3QgPSB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uZ2FzO1xuXG4gICAgaWYgKHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gTUFYX0dBU19QQVlNRU5UX09CSkVDVFMpIHtcbiAgICAgIC8vIE1lcmdlIGV4Y2VzcyBnYXMgb2JqZWN0cyB0byBzdGF5IHdpdGhpbiBsaW1pdHNcbiAgICAgIHRoaXMubWVyZ2VPYmplY3RzSW5CYXRjaGVzKGdhc09iamVjdCwgdGhpcy5nYXNQYXltZW50T2JqZWN0cywgTUFYX0lOUFVUX09CSkVDVFMpO1xuICAgIH1cblxuICAgIHJldHVybiBnYXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIG11bHRpcGxlIGNvaW4gb2JqZWN0cyBpbnRvIGEgdGFyZ2V0IGNvaW4gaW4gYmF0Y2hlcy5cbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBJT1RBIGhhcyBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBvYmplY3RzIHBlciBtZXJnZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0Q29pbiAtIFRoZSBjb2luIHRvIG1lcmdlIGludG9cbiAgICogQHBhcmFtIG9iamVjdHNUb01lcmdlIC0gQXJyYXkgb2Ygb2JqZWN0cyB0byBtZXJnZVxuICAgKiBAcGFyYW0gYmF0Y2hTaXplIC0gTWF4aW11bSBudW1iZXIgb2Ygb2JqZWN0cyB0byBtZXJnZSBwZXIgYmF0Y2hcbiAgICogQHJldHVybnMgVGhlIGNvbnNvbGlkYXRlZCBjb2luIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBtZXJnZU9iamVjdHNJbkJhdGNoZXMoXG4gICAgdGFyZ2V0Q29pbjogVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCxcbiAgICBvYmplY3RzVG9NZXJnZTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdLFxuICAgIGJhdGNoU2l6ZTogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGZvciAobGV0IHN0YXJ0SW5kZXggPSAwOyBzdGFydEluZGV4IDwgb2JqZWN0c1RvTWVyZ2UubGVuZ3RoOyBzdGFydEluZGV4ICs9IGJhdGNoU2l6ZSkge1xuICAgICAgY29uc3QgYmF0Y2ggPSBvYmplY3RzVG9NZXJnZS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgYmF0Y2hTaXplKTtcbiAgICAgIGNvbnN0IGJhdGNoQXNUcmFuc2FjdGlvbk9iamVjdHMgPSBiYXRjaC5tYXAoKG9iaikgPT4gdGhpcy5faW90YVRyYW5zYWN0aW9uLm9iamVjdChJb3RhSW5wdXRzLk9iamVjdFJlZihvYmopKSk7XG5cbiAgICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5tZXJnZUNvaW5zKHRhcmdldENvaW4sIGJhdGNoQXNUcmFuc2FjdGlvbk9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgdGhlIHNvdXJjZSBjb2luIGludG8gdGhlIGFtb3VudHMgbmVlZGVkIGZvciBlYWNoIHJlY2lwaWVudCBhbmQgdHJhbnNmZXJzIHRoZW0uXG4gICAqIFRoaXMgY3JlYXRlcyBzcGxpdCBjb2luIGNvbW1hbmRzIGZvciBhbGwgcmVjaXBpZW50IGFtb3VudHMsIHRoZW4gdHJhbnNmZXIgY29tbWFuZHNcbiAgICogdG8gc2VuZCBlYWNoIHNwbGl0IGNvaW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBpZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdEFuZFRyYW5zZmVyVG9SZWNpcGllbnRzKHNvdXJjZUNvaW46IFRyYW5zYWN0aW9uT2JqZWN0QXJndW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCByZWNpcGllbnRBbW91bnRzID0gdGhpcy5fcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50LmFtb3VudCk7XG4gICAgY29uc3Qgc3BsaXRDb2lucyA9IHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5zcGxpdENvaW5zKHNvdXJjZUNvaW4sIHJlY2lwaWVudEFtb3VudHMpO1xuXG4gICAgdGhpcy5fcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24udHJhbnNmZXJPYmplY3RzKFtzcGxpdENvaW5zW2luZGV4XV0sIHJlY2lwaWVudC5hZGRyZXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGRhdGEgYmVmb3JlIGJ1aWxkaW5nLlxuICAgKiBDaGVja3MgcmVjaXBpZW50cywgcGF5bWVudCBvYmplY3RzLCBhbmQgZW5zdXJlcyBubyBkdXBsaWNhdGUgb2JqZWN0IElEcy5cbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVR4RGF0YUltcGxlbWVudGF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVSZWNpcGllbnRzTGlzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVQYXltZW50T2JqZWN0c0V4aXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZU5vRHVwbGljYXRlT2JqZWN0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHJlY2lwaWVudHMgZXhpc3QgYW5kIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlY2lwaWVudHNMaXN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWNpcGllbnRzIHx8IHRoaXMucmVjaXBpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gcmVjaXBpZW50cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWNpcGllbnRzLmxlbmd0aCA+IE1BWF9SRUNJUElFTlRTKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBSZWNpcGllbnRzIGNvdW50ICgke3RoaXMucmVjaXBpZW50cy5sZW5ndGh9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCAoJHtNQVhfUkVDSVBJRU5UU30pYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgZWl0aGVyIHBheW1lbnQgb2JqZWN0cyBvciBnYXMgb2JqZWN0cyBleGlzdCBmb3IgZnVuZGluZyB0aGUgdHJhbnNmZXIuXG4gICAqIFdoZW4gYSBnYXMgc3BvbnNvciBpcyB1c2VkLCBwYXltZW50IG9iamVjdHMgYXJlIHJlcXVpcmVkLlxuICAgKiBPdGhlcndpc2UsIGVpdGhlciBwYXltZW50IG9iamVjdHMgb3IgZ2FzIG9iamVjdHMgY2FuIGJlIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGF5bWVudE9iamVjdHNFeGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNQYXltZW50T2JqZWN0cyA9IHRoaXMucGF5bWVudE9iamVjdHMgJiYgdGhpcy5wYXltZW50T2JqZWN0cy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNQYXltZW50T2JqZWN0cykge1xuICAgICAgcmV0dXJuOyAvLyBQYXltZW50IG9iamVjdHMgZXhpc3QsIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgfVxuXG4gICAgLy8gTm8gcGF5bWVudCBvYmplY3RzIC0gY2hlY2sgaWYgZ2FzIG9iamVjdHMgY2FuIGJlIHVzZWQgaW5zdGVhZFxuICAgIGNvbnN0IGhhc0dhc1Nwb25zb3IgPSB0aGlzLmdhc1Nwb25zb3IgJiYgdGhpcy5nYXNTcG9uc29yICE9PSB0aGlzLnNlbmRlcjtcbiAgICBpZiAoaGFzR2FzU3BvbnNvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdQYXltZW50IG9iamVjdHMgYXJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBnYXMgc3BvbnNvcicpO1xuICAgIH1cblxuICAgIC8vIE5vIGdhcyBzcG9uc29yIC0gZ2FzIG9iamVjdHMgbXVzdCBleGlzdFxuICAgIGNvbnN0IGhhc0dhc09iamVjdHMgPSB0aGlzLmdhc1BheW1lbnRPYmplY3RzICYmIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcbiAgICBpZiAoIWhhc0dhc09iamVjdHMpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUGF5bWVudCBvciBHYXMgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBvYmplY3QgSURzIHdpdGhpbiBwYXltZW50IG9iamVjdHMsXG4gICAqIGdhcyBwYXltZW50IG9iamVjdHMsIG9yIGJldHdlZW4gdGhlIHR3byBncm91cHMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9EdXBsaWNhdGVPYmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBheW1lbnRPYmplY3RJZHMgPSB0aGlzLnBheW1lbnRPYmplY3RzPy5tYXAoKG9iaikgPT4gb2JqLm9iamVjdElkKSA/PyBbXTtcblxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIHdpdGhpbiBwYXltZW50IG9iamVjdHNcbiAgICB0aGlzLmNoZWNrRm9yRHVwbGljYXRlSWRzKHBheW1lbnRPYmplY3RJZHMsICdwYXltZW50IG9iamVjdHMnKTtcblxuICAgIGlmICghdGhpcy5nYXNQYXltZW50T2JqZWN0cyB8fCB0aGlzLmdhc1BheW1lbnRPYmplY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGdhc09iamVjdElkcyA9IHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubWFwKChnYXMpID0+IGdhcy5vYmplY3RJZCk7XG5cbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyB3aXRoaW4gZ2FzIHBheW1lbnQgb2JqZWN0c1xuICAgIHRoaXMuY2hlY2tGb3JEdXBsaWNhdGVJZHMoZ2FzT2JqZWN0SWRzLCAnZ2FzIHBheW1lbnQgb2JqZWN0cycpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIG92ZXJsYXBzIGJldHdlZW4gcGF5bWVudCBhbmQgZ2FzIG9iamVjdHNcbiAgICBjb25zdCBvdmVybGFwcGluZ0lkcyA9IHBheW1lbnRPYmplY3RJZHMuZmlsdGVyKChpZCkgPT4gZ2FzT2JqZWN0SWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgaWYgKG92ZXJsYXBwaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ1BheW1lbnQgb2JqZWN0cyBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgZ2FzIHBheW1lbnQgb2JqZWN0czogJyArIG92ZXJsYXBwaW5nSWRzLmpvaW4oJywgJylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBjaGVjayBmb3IgZHVwbGljYXRlIElEcyBpbiBhbiBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tGb3JEdXBsaWNhdGVJZHMoaWRzOiBzdHJpbmdbXSwgb2JqZWN0VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldChpZHMpO1xuICAgIGlmICh1bmlxdWVJZHMuc2l6ZSAhPT0gaWRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBEdXBsaWNhdGUgb2JqZWN0IElEcyBmb3VuZCBpbiAke29iamVjdFR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24gb2YgdGhlIHRyYW5zZmVyIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4cGxhaW5UcmFuc2FjdGlvbkltcGxlbWVudGF0aW9uKFxuICAgIF9qc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50KTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsT3V0cHV0QW1vdW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgYW1vdW50IGJlaW5nIHRyYW5zZmVycmVkIHRvIGFsbCByZWNpcGllbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb3RhbE91dHB1dEFtb3VudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlY2lwaWVudHNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvci5wbHVzKGN1cnJlbnQuYW1vdW50KSwgbmV3IEJpZ051bWJlcigwKSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
|