@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
112 lines • 15.5 kB
JavaScript
import { GameTag, Zone } from '@firestone-hs/reference-data';
import { MulliganCardAction } from '../../models/action/mulligan-card-action';
import { HideEntityHistoryItem } from '../../models/history/hide-entity-history-item';
import { TagChangeHistoryItem } from '../../models/models';
import { ActionHelper } from './action-helper';
export class MulliganCardParser {
constructor(allCards) {
this.allCards = allCards;
}
// Don't use the root Block here, as it can be split off in another processing chunk,
// which means the children TagChange and HideEntity are not set yet
// While we should generally avoid assuming children presence, turn delimitation
// should be clear-cut enough that this should be an issue only mulligan
// Otherwise, check that all parsers that depend on ActionHistoryItem don't use
// their children, but only use the action itself
applies(item) {
return ((item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.DECK) ||
item instanceof HideEntityHistoryItem);
// return item instanceof ActionHistoryItem;
}
parse(item, currentTurn, entitiesBeforeAction, history) {
if (currentTurn > 0) {
return;
}
// if (item instanceof HideEntityHistoryItem) {
// const owner = ActionHelper.getOwner(entitiesBeforeAction, item.entity);
// // console.log('considergin', owner, item);
// if (owner instanceof PlayerEntity) {
// return [
// MulliganCardAction.create(
// {
// timestamp: item.timestamp,
// index: item.index,
// playerMulligan: [item.entity],
// },
// this.allCards,
// ),
// ];
// }
// }
// This works because we only work at turn 0
if (item instanceof TagChangeHistoryItem) {
return [
MulliganCardAction.create({
timestamp: item.timestamp,
index: item.index,
opponentMulligan: [item.tag.entity],
}, this.allCards),
];
}
// Adding the cards mulliganed by the player
// if (
// parseInt(item.node.attributes.type) === BlockType.TRIGGER &&
// item.node.hideEntities &&
// item.node.hideEntities.length > 0 &&
// GameHepler.isPlayerEntity(parseInt(item.node.attributes.entity), entitiesBeforeAction)
// ) {
// // console.log('built mulligan action');
// const result = [
// MulliganCardAction.create(
// {
// timestamp: item.timestamp,
// index: item.index,
// playerMulligan: item.node.hideEntities,
// },
// this.allCards,
// ),
// ];
// return result;
// }
// if (
// parseInt(item.node.attributes.type) === BlockType.TRIGGER &&
// GameHepler.isPlayerEntity(parseInt(item.node.attributes.entity), entitiesBeforeAction) &&
// item.node.tags &&
// item.node.tags.length > 0
// ) {
// const relevantTags = item.node.tags
// .filter(tag => tag.tag === GameTag.ZONE)
// .filter(tag => tag.value === Zone.DECK);
// if (relevantTags && relevantTags.length > 0) {
// const result = relevantTags.map(tag =>
// MulliganCardAction.create(
// {
// timestamp: item.timestamp,
// index: item.index,
// opponentMulligan: [tag.entity],
// },
// this.allCards,
// ),
// );
// return result;
// }
// }
return null;
}
reduce(actions) {
return ActionHelper.combineActions(actions, (previous, current) => previous instanceof MulliganCardAction && current instanceof MulliganCardAction, (previous, current) => this.mergeActions(previous, current));
}
mergeActions(previousAction, currentAction) {
return MulliganCardAction.create({
timestamp: previousAction.timestamp,
index: previousAction.index,
entities: currentAction.entities,
playerMulligan: [...(previousAction.playerMulligan || []), ...(currentAction.playerMulligan || [])],
opponentMulligan: [
...(previousAction.opponentMulligan || []),
...(currentAction.opponentMulligan || []),
],
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsbGlnYW4tY2FyZC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBsYXktcGFyc2VyL3NyYy9saWIvc2VydmljZXMvYWN0aW9uL211bGxpZ2FuLWNhcmQtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxrQkFBa0I7SUFDOUIsWUFBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRWpELHFGQUFxRjtJQUNyRixvRUFBb0U7SUFDcEUsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSwrRUFBK0U7SUFDL0UsaURBQWlEO0lBQzFDLE9BQU8sQ0FBQyxJQUFpQjtRQUMvQixPQUFPLENBQ04sQ0FBQyxJQUFJLFlBQVksb0JBQW9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3ZHLElBQUksWUFBWSxxQkFBcUIsQ0FDckMsQ0FBQztRQUNGLDRDQUE0QztJQUM3QyxDQUFDO0lBRU0sS0FBSyxDQUNYLElBQXVCLEVBQ3ZCLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQjtRQUUvQixJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTztTQUNQO1FBRUQsK0NBQStDO1FBQy9DLDJFQUEyRTtRQUMzRSwrQ0FBK0M7UUFDL0Msd0NBQXdDO1FBQ3hDLGFBQWE7UUFDYixnQ0FBZ0M7UUFDaEMsUUFBUTtRQUNSLGtDQUFrQztRQUNsQywwQkFBMEI7UUFDMUIsc0NBQXNDO1FBQ3RDLFNBQVM7UUFDVCxxQkFBcUI7UUFDckIsUUFBUTtRQUNSLE9BQU87UUFDUCxLQUFLO1FBQ0wsSUFBSTtRQUNKLDRDQUE0QztRQUM1QyxJQUFJLElBQUksWUFBWSxvQkFBb0IsRUFBRTtZQUN6QyxPQUFPO2dCQUNOLGtCQUFrQixDQUFDLE1BQU0sQ0FDeEI7b0JBQ0MsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQ25DLEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYjthQUNELENBQUM7U0FDRjtRQUNELDRDQUE0QztRQUM1QyxPQUFPO1FBQ1AsZ0VBQWdFO1FBQ2hFLDZCQUE2QjtRQUM3Qix3Q0FBd0M7UUFDeEMsMEZBQTBGO1FBQzFGLE1BQU07UUFDTiw0Q0FBNEM7UUFDNUMsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQixPQUFPO1FBQ1AsaUNBQWlDO1FBQ2pDLHlCQUF5QjtRQUN6Qiw4Q0FBOEM7UUFDOUMsUUFBUTtRQUNSLG9CQUFvQjtRQUNwQixPQUFPO1FBQ1AsTUFBTTtRQUNOLGtCQUFrQjtRQUNsQixJQUFJO1FBQ0osT0FBTztRQUNQLGdFQUFnRTtRQUNoRSw2RkFBNkY7UUFDN0YscUJBQXFCO1FBQ3JCLDZCQUE2QjtRQUM3QixNQUFNO1FBQ04sdUNBQXVDO1FBQ3ZDLDZDQUE2QztRQUM3Qyw2Q0FBNkM7UUFDN0Msa0RBQWtEO1FBQ2xELDJDQUEyQztRQUMzQyxnQ0FBZ0M7UUFDaEMsUUFBUTtRQUNSLGtDQUFrQztRQUNsQywwQkFBMEI7UUFDMUIsdUNBQXVDO1FBQ3ZDLFNBQVM7UUFDVCxxQkFBcUI7UUFDckIsUUFBUTtRQUNSLE9BQU87UUFDUCxtQkFBbUI7UUFDbkIsS0FBSztRQUNMLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBMEI7UUFDdkMsT0FBTyxZQUFZLENBQUMsY0FBYyxDQUNqQyxPQUFPLEVBQ1AsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLFlBQVksa0JBQWtCLElBQUksT0FBTyxZQUFZLGtCQUFrQixFQUN0RyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxjQUFrQyxFQUFFLGFBQWlDO1FBQ3pGLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUMvQjtZQUNDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25HLGdCQUFnQixFQUFFO2dCQUNqQixHQUFHLENBQUMsY0FBYyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztnQkFDMUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7YUFDekM7U0FDRCxFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hY3Rpb24nO1xyXG5pbXBvcnQgeyBNdWxsaWdhbkNhcmRBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL211bGxpZ2FuLWNhcmQtYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgQWN0aW9uSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9hY3Rpb24taGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgSGlkZUVudGl0eUhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvaGlkZS1lbnRpdHktaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWdDaGFuZ2VIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBbGxDYXJkc1NlcnZpY2UgfSBmcm9tICcuLi9hbGwtY2FyZHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGlvbkhlbHBlciB9IGZyb20gJy4vYWN0aW9uLWhlbHBlcic7XHJcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4vcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNdWxsaWdhbkNhcmRQYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSkge31cclxuXHJcblx0Ly8gRG9uJ3QgdXNlIHRoZSByb290IEJsb2NrIGhlcmUsIGFzIGl0IGNhbiBiZSBzcGxpdCBvZmYgaW4gYW5vdGhlciBwcm9jZXNzaW5nIGNodW5rLFxyXG5cdC8vIHdoaWNoIG1lYW5zIHRoZSBjaGlsZHJlbiBUYWdDaGFuZ2UgYW5kIEhpZGVFbnRpdHkgYXJlIG5vdCBzZXQgeWV0XHJcblx0Ly8gV2hpbGUgd2Ugc2hvdWxkIGdlbmVyYWxseSBhdm9pZCBhc3N1bWluZyBjaGlsZHJlbiBwcmVzZW5jZSwgdHVybiBkZWxpbWl0YXRpb25cclxuXHQvLyBzaG91bGQgYmUgY2xlYXItY3V0IGVub3VnaCB0aGF0IHRoaXMgc2hvdWxkIGJlIGFuIGlzc3VlIG9ubHkgbXVsbGlnYW5cclxuXHQvLyBPdGhlcndpc2UsIGNoZWNrIHRoYXQgYWxsIHBhcnNlcnMgdGhhdCBkZXBlbmQgb24gQWN0aW9uSGlzdG9yeUl0ZW0gZG9uJ3QgdXNlXHJcblx0Ly8gdGhlaXIgY2hpbGRyZW4sIGJ1dCBvbmx5IHVzZSB0aGUgYWN0aW9uIGl0c2VsZlxyXG5cdHB1YmxpYyBhcHBsaWVzKGl0ZW06IEhpc3RvcnlJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQoaXRlbSBpbnN0YW5jZW9mIFRhZ0NoYW5nZUhpc3RvcnlJdGVtICYmIGl0ZW0udGFnLnRhZyA9PT0gR2FtZVRhZy5aT05FICYmIGl0ZW0udGFnLnZhbHVlID09PSBab25lLkRFQ0spIHx8XHJcblx0XHRcdGl0ZW0gaW5zdGFuY2VvZiBIaWRlRW50aXR5SGlzdG9yeUl0ZW1cclxuXHRcdCk7XHJcblx0XHQvLyByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIEFjdGlvbkhpc3RvcnlJdGVtO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHBhcnNlKFxyXG5cdFx0aXRlbTogQWN0aW9uSGlzdG9yeUl0ZW0sXHJcblx0XHRjdXJyZW50VHVybjogbnVtYmVyLFxyXG5cdFx0ZW50aXRpZXNCZWZvcmVBY3Rpb246IE1hcDxudW1iZXIsIEVudGl0eT4sXHJcblx0XHRoaXN0b3J5OiByZWFkb25seSBIaXN0b3J5SXRlbVtdLFxyXG5cdCk6IEFjdGlvbltdIHtcclxuXHRcdGlmIChjdXJyZW50VHVybiA+IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGlmIChpdGVtIGluc3RhbmNlb2YgSGlkZUVudGl0eUhpc3RvcnlJdGVtKSB7XHJcblx0XHQvLyBcdGNvbnN0IG93bmVyID0gQWN0aW9uSGVscGVyLmdldE93bmVyKGVudGl0aWVzQmVmb3JlQWN0aW9uLCBpdGVtLmVudGl0eSk7XHJcblx0XHQvLyBcdC8vIGNvbnNvbGUubG9nKCdjb25zaWRlcmdpbicsIG93bmVyLCBpdGVtKTtcclxuXHRcdC8vIFx0aWYgKG93bmVyIGluc3RhbmNlb2YgUGxheWVyRW50aXR5KSB7XHJcblx0XHQvLyBcdFx0cmV0dXJuIFtcclxuXHRcdC8vIFx0XHRcdE11bGxpZ2FuQ2FyZEFjdGlvbi5jcmVhdGUoXHJcblx0XHQvLyBcdFx0XHRcdHtcclxuXHRcdC8vIFx0XHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0Ly8gXHRcdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0Ly8gXHRcdFx0XHRcdHBsYXllck11bGxpZ2FuOiBbaXRlbS5lbnRpdHldLFxyXG5cdFx0Ly8gXHRcdFx0XHR9LFxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0Ly8gXHRcdFx0KSxcclxuXHRcdC8vIFx0XHRdO1xyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0XHQvLyBUaGlzIHdvcmtzIGJlY2F1c2Ugd2Ugb25seSB3b3JrIGF0IHR1cm4gMFxyXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBUYWdDaGFuZ2VIaXN0b3J5SXRlbSkge1xyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdE11bGxpZ2FuQ2FyZEFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcblx0XHRcdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0XHRcdFx0XHRvcHBvbmVudE11bGxpZ2FuOiBbaXRlbS50YWcuZW50aXR5XSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHQvLyBBZGRpbmcgdGhlIGNhcmRzIG11bGxpZ2FuZWQgYnkgdGhlIHBsYXllclxyXG5cdFx0Ly8gaWYgKFxyXG5cdFx0Ly8gXHRwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy50eXBlKSA9PT0gQmxvY2tUeXBlLlRSSUdHRVIgJiZcclxuXHRcdC8vIFx0aXRlbS5ub2RlLmhpZGVFbnRpdGllcyAmJlxyXG5cdFx0Ly8gXHRpdGVtLm5vZGUuaGlkZUVudGl0aWVzLmxlbmd0aCA+IDAgJiZcclxuXHRcdC8vIFx0R2FtZUhlcGxlci5pc1BsYXllckVudGl0eShwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy5lbnRpdHkpLCBlbnRpdGllc0JlZm9yZUFjdGlvbilcclxuXHRcdC8vICkge1xyXG5cdFx0Ly8gXHQvLyBjb25zb2xlLmxvZygnYnVpbHQgbXVsbGlnYW4gYWN0aW9uJyk7XHJcblx0XHQvLyBcdGNvbnN0IHJlc3VsdCA9IFtcclxuXHRcdC8vIFx0XHRNdWxsaWdhbkNhcmRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0Ly8gXHRcdFx0e1xyXG5cdFx0Ly8gXHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0Ly8gXHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdC8vIFx0XHRcdFx0cGxheWVyTXVsbGlnYW46IGl0ZW0ubm9kZS5oaWRlRW50aXRpZXMsXHJcblx0XHQvLyBcdFx0XHR9LFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdC8vIFx0XHQpLFxyXG5cdFx0Ly8gXHRdO1xyXG5cdFx0Ly8gXHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0Ly8gfVxyXG5cdFx0Ly8gaWYgKFxyXG5cdFx0Ly8gXHRwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy50eXBlKSA9PT0gQmxvY2tUeXBlLlRSSUdHRVIgJiZcclxuXHRcdC8vIFx0R2FtZUhlcGxlci5pc1BsYXllckVudGl0eShwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy5lbnRpdHkpLCBlbnRpdGllc0JlZm9yZUFjdGlvbikgJiZcclxuXHRcdC8vIFx0aXRlbS5ub2RlLnRhZ3MgJiZcclxuXHRcdC8vIFx0aXRlbS5ub2RlLnRhZ3MubGVuZ3RoID4gMFxyXG5cdFx0Ly8gKSB7XHJcblx0XHQvLyBcdGNvbnN0IHJlbGV2YW50VGFncyA9IGl0ZW0ubm9kZS50YWdzXHJcblx0XHQvLyBcdFx0LmZpbHRlcih0YWcgPT4gdGFnLnRhZyA9PT0gR2FtZVRhZy5aT05FKVxyXG5cdFx0Ly8gXHRcdC5maWx0ZXIodGFnID0+IHRhZy52YWx1ZSA9PT0gWm9uZS5ERUNLKTtcclxuXHRcdC8vIFx0aWYgKHJlbGV2YW50VGFncyAmJiByZWxldmFudFRhZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0Ly8gXHRcdGNvbnN0IHJlc3VsdCA9IHJlbGV2YW50VGFncy5tYXAodGFnID0+XHJcblx0XHQvLyBcdFx0XHRNdWxsaWdhbkNhcmRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0Ly8gXHRcdFx0XHR7XHJcblx0XHQvLyBcdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdC8vIFx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdC8vIFx0XHRcdFx0XHRvcHBvbmVudE11bGxpZ2FuOiBbdGFnLmVudGl0eV0sXHJcblx0XHQvLyBcdFx0XHRcdH0sXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQvLyBcdFx0XHQpLFxyXG5cdFx0Ly8gXHRcdCk7XHJcblx0XHQvLyBcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVkdWNlKGFjdGlvbnM6IHJlYWRvbmx5IEFjdGlvbltdKTogcmVhZG9ubHkgQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIEFjdGlvbkhlbHBlci5jb21iaW5lQWN0aW9uczxNdWxsaWdhbkNhcmRBY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzIGluc3RhbmNlb2YgTXVsbGlnYW5DYXJkQWN0aW9uICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBNdWxsaWdhbkNhcmRBY3Rpb24sXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5tZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWVyZ2VBY3Rpb25zKHByZXZpb3VzQWN0aW9uOiBNdWxsaWdhbkNhcmRBY3Rpb24sIGN1cnJlbnRBY3Rpb246IE11bGxpZ2FuQ2FyZEFjdGlvbik6IE11bGxpZ2FuQ2FyZEFjdGlvbiB7XHJcblx0XHRyZXR1cm4gTXVsbGlnYW5DYXJkQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBwcmV2aW91c0FjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRwbGF5ZXJNdWxsaWdhbjogWy4uLihwcmV2aW91c0FjdGlvbi5wbGF5ZXJNdWxsaWdhbiB8fCBbXSksIC4uLihjdXJyZW50QWN0aW9uLnBsYXllck11bGxpZ2FuIHx8IFtdKV0sXHJcblx0XHRcdFx0b3Bwb25lbnRNdWxsaWdhbjogW1xyXG5cdFx0XHRcdFx0Li4uKHByZXZpb3VzQWN0aW9uLm9wcG9uZW50TXVsbGlnYW4gfHwgW10pLFxyXG5cdFx0XHRcdFx0Li4uKGN1cnJlbnRBY3Rpb24ub3Bwb25lbnRNdWxsaWdhbiB8fCBbXSksXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdfQ==