@magic-xpa/engine 4.1000.0-dev4100.106 → 4.1000.0-dev4100.107
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/esm2020/src/CurrentClientVersion.mjs +2 -2
- package/esm2020/src/event/EventHandler.mjs +2 -4
- package/esm2020/src/event/EventHandlerPosition.mjs +5 -1
- package/esm2020/src/util/FlowMonitorQueue.mjs +103 -2
- package/fesm2015/magic-xpa-engine.mjs +106 -5
- package/fesm2015/magic-xpa-engine.mjs.map +1 -1
- package/fesm2020/magic-xpa-engine.mjs +106 -5
- package/fesm2020/magic-xpa-engine.mjs.map +1 -1
- package/package.json +4 -4
- package/src/util/FlowMonitorQueue.d.ts +8 -0
|
@@ -2,6 +2,7 @@ import { InternalInterface, Logger } from "@magic-xpa/utils";
|
|
|
2
2
|
import { ConstInterface } from "../ConstInterface";
|
|
3
3
|
import { AccessHelper } from "../AccessHelper";
|
|
4
4
|
import { isNullOrUndefined } from "@magic-xpa/mscorelib";
|
|
5
|
+
import { FlowMonitorQueue } from "../util/FlowMonitorQueue";
|
|
5
6
|
export class EventHandlerPosition {
|
|
6
7
|
constructor() {
|
|
7
8
|
this._handlerIdx = 0;
|
|
@@ -58,6 +59,9 @@ export class EventHandlerPosition {
|
|
|
58
59
|
case InternalInterface.MG_ACT_REC_SUFFIX:
|
|
59
60
|
case InternalInterface.MG_ACT_CTRL_PREFIX:
|
|
60
61
|
case InternalInterface.MG_ACT_CTRL_SUFFIX: {
|
|
62
|
+
if (this._rtEvt.getInternalCode() == InternalInterface.MG_ACT_REC_PREFIX) {
|
|
63
|
+
FlowMonitorQueue.Instance.addDataViewFlow(this._task);
|
|
64
|
+
}
|
|
61
65
|
if (this._handlerIdx === -1) {
|
|
62
66
|
for (this._handlerIdx = this._handlersTab.getSize() - 1; this._handlerIdx >= 0; this._handlerIdx--) {
|
|
63
67
|
let handler = this._handlersTab.getHandler(this._handlerIdx);
|
|
@@ -197,4 +201,4 @@ EventHandlerPosition.PHASE_CONTROL_SPECIFIC = 1;
|
|
|
197
201
|
EventHandlerPosition.PHASE_CONTROL_NON_SPECIFIC = 2;
|
|
198
202
|
EventHandlerPosition.PHASE_GLOBAL = 3;
|
|
199
203
|
EventHandlerPosition.PHASE_GLOBAL_SPECIFIC = 4;
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRIYW5kbGVyUG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50SGFuZGxlclBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQU0zRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBTXZELE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CO1FBVlEsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGlCQUFZLEdBQVMsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBUyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBQzVCLFVBQUssR0FBUyxJQUFJLENBQUM7SUFJM0IsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVB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Y0FBYyxDQUFDO1FBQ3JELElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPO1NBQ1I7UUFHRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFHekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBUyxZQUFZLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdFO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7QUFqUWMsMkNBQXNCLEdBQVcsQ0FBQyxDQUFDO0FBQ25DLCtDQUEwQixHQUFXLENBQUMsQ0FBQztBQUN2QyxpQ0FBWSxHQUFXLENBQUMsQ0FBQztBQUN6QiwwQ0FBcUIsR0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybmFsSW50ZXJmYWNlLCBMb2dnZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SGFuZGxlcnNUYWJsZX0gZnJvbSBcIi4uL3J0L0hhbmRsZXJzVGFibGVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuL1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9FdmVudEhhbmRsZXJcIjtcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gXCIuLi90YXNrcy9NR0RhdGFcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIHBvaW50cyB0byB0aGUgcG9zaXRpb24gb2YgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGVcclxuLy8vICAgY2hhaW4gb2YgdGhlIGV2ZW50IGhhbmRsZXJzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFdmVudEhhbmRsZXJQb3NpdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9HTE9CQUw6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfR0xPQkFMX1NQRUNJRklDOiBudW1iZXIgPSA0O1xyXG5cclxuICBwcml2YXRlIF9oYW5kbGVySWR4OiBudW1iZXIgPSAwOyAvLyB0aGUgaW5kZXggb2YgdGhlIGhhbmRsZXIgd2l0aGluIHRoZSB0YXNrXHJcbiAgcHJpdmF0ZSBfaGFuZGxlcnNUYWI6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yZ1ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9vcmdUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNoZWNrZWQgdGFza1xyXG4gIHByaXZhdGUgX3BoYXNlOiBudW1iZXIgPSAwOyAvLyB0aGUgcGhhc2Ugb2YgdGhlIHNlYXJjaDogY29udHJvbCBzcGVjaWZpYywgY29udHJvbCBub24tc3BlY2lmaWMsIGdsb2JhbFxyXG4gIHByaXZhdGUgX3ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gdGhlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7IC8vIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjaGVja2VkIHRhc2tcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuICAvLy8gICBpbml0IHRoZSBwb3NpdGlvbiB0byBzdGFydCBhIG5ldyBjaGFpbiBvZiBzZWFyY2hcclxuICBpbml0KHJ0RXZlbnQ6IFJ1blRpbWVFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnQgPSBydEV2ZW50O1xyXG4gICAgdGhpcy5fdGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldFRhc2soKTtcclxuICAgIGlmICh0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICB0aGlzLl9wcmV2VGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldE1haW5QcmdDcmVhdG9yKCk7XHJcbiAgICAgIGlmICh0aGlzLl9wcmV2VGFzayAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2VGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChydEV2ZW50LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkMpXHJcbiAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJ0RXZlbnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQylcclxuICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX29yZ1Rhc2sgPSB0aGlzLl90YXNrO1xyXG4gICAgdGhpcy5fb3JnUHJldlRhc2sgPSB0aGlzLl9wcmV2VGFzaztcclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZXZ0OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dCgpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dChldnQ/OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldnQpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0XzAoZXZ0KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dF8xKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gICBjaGFuZ2VzIHRoZSBjdXJyZW50IHJ1biB0aW1lIGV2ZW50IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV2ZW50IGhhbmRsZXJcclxuICBwcml2YXRlIGdldE5leHRfMChldnQ6IFJ1blRpbWVFdmVudCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICB0aGlzLl9ydEV2dCA9IGV2dDtcclxuICAgIHJldHVybiB0aGlzLmdldE5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgZXZlbnQgaGFuZGxlclxyXG4gIHByaXZhdGUgZ2V0TmV4dF8xKCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICBpZiAodGhpcy5faGFuZGxlcnNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJiB0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSAhPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFKSB7XHJcbiAgICAgIC8vIHNwZWNpYWwgdHJlYXRtZW50IGZvciBUQVNLLCBSRUNPUkQgYW5kIENPTlRST0wgbGV2ZWwgUHJlZml4L1N1ZmZpeCBldmVudHNcclxuICAgICAgc3dpdGNoICh0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDoge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZvciAodGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7IHRoaXMuX2hhbmRsZXJJZHggPj0gMDsgdGhpcy5faGFuZGxlcklkeC0tKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKSB8fCAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGFuIGV2ZW50IGhhbmRsZXIgd2FzIG5vdCBmb3VuZCBvciB3YXMgcmV0dXJuZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAvLyBvdGhlciBpbnRlcm5hbCBldmVudHMgc2hvdWxkIGNvbnRpbnVlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLnNldE5leHRIYW5kbGVySWR4KCkpIHtcclxuICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fcGhhc2UpIHtcclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUM6XHJcbiAgICAgICAgICBpZiAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSlcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzR2xvYmFsU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTDpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzR2xvYmFsSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSlcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEV2ZW50SGFuZGxlclBvc2l0aW9uLmdldE5leHQoKSBpbnZhbGlkIHBoYXNlOiBcIiArIHRoaXMuX3BoYXNlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgYSBuZXh0IGhhbmRsZXIgd2FzIGZvdW5kXHJcbiAgcHJpdmF0ZSBzZXROZXh0SGFuZGxlcklkeCgpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyB0aGUgaGFuZGxlciBpZHggaXMgKC0xKSB3aGVuIHN0YXJ0aW5nIHRvIHNlYXJjaCBpbiBhIHRhc2tcclxuICAgIGlmICh0aGlzLl9oYW5kbGVySWR4IDwgMClcclxuICAgICAgdGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2hhbmRsZXJJZHggPSB0aGlzLl9oYW5kbGVySWR4IC0gMTtcclxuXHJcbiAgICBpZiAodGhpcy5faGFuZGxlcklkeCA8IDAgfHwgdGhpcy5fdGFzay5pc0Fib3J0aW5nKCkpIHtcclxuICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaGFuZGxlcnMgaW4gdGhlIHRhc2sgdGhlbiBnbyB1cCB0aGUgY2hhaW4gb2YgdGFza3NcclxuICAgICAgaWYgKHRoaXMuZ29VcFRhc2tDaGFpbigpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldE5leHRIYW5kbGVySWR4KCk7XHJcbiAgICAgIGVsc2UgLy8gbm8gbW9yZSB0YXNrcyBpbiB0aGUgY2hhaW5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gICBnZXQgdGhlIG5leHQgdGFzayBpbiB0aGUgdGFza3MgY2hhaW4gYW5kIHJldHVybnMgZmFsc2UgaWYgbm8gdGFzayB3YXMgZm91bmQuXHJcbiAgLy8vICAgdGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBwaGFzZSB2YXJpYWJsZSBhY2NvcmRpbmdseVxyXG4gIHByaXZhdGUgZ29VcFRhc2tDaGFpbigpOiBib29sZWFuIHtcclxuICAgIGxldCBtR0RhdGE6IE1HRGF0YSA9IHRoaXMuX3Rhc2suZ2V0TUdEYXRhKCk7XHJcbiAgICBsZXQgY3RsSWR4OiBudW1iZXIgPSB0aGlzLl90YXNrLmdldEN0bElkeCgpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fcGhhc2UpIHtcclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDOlxyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDOiB7XHJcbiAgICAgICAgLy8gbm9uIHNwZWNpZmljIGhhbmRsZXJzIGFyZSBzZWFyY2hlZCB0aWxsIHdlIGhpdCBvdXIgbWFpbiBwcm9ncmFtIChpbmNsdXNpdmUpXHJcbiAgICAgICAgLy8gYWZ0ZXJ3YXJkcyB3ZSBzd2l0Y2ggdG8gZ2xvYmFsIHBoYXNlLlxyXG4gICAgICAgIGlmICghdGhpcy5fdGFzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFyZW50T3JDb21wTWFpblByZygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gaW50ZXJuYWwsIGludGVybmFsLCBzeXN0ZW0gYW5kIHVzZXIgZXZlbnRzIG1heSBjcm9zcyBjb21wb25lbnQgYm91bmRlcmllc1xyXG4gICAgICAgICAgaWYgKCh0aGlzLl9ydEV2dC5nZXRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCB8fFxyXG4gICAgICAgICAgICAgICB0aGlzLl9ydEV2dC5nZXRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSKSAmJiBjdGxJZHggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIFJUIHBhcmVudCBvZiB0aGUgcHJldmlvdXMgdGFzay4gSWYgbm8gcHJldnRhc2sgZXhpc3RzIHRoZW4gd2UgYXJlXHJcbiAgICAgICAgICAgIC8vIHNpbXBseSBydW5uaW5nIG9uIHRoZSBtYWluIHByb2dzIGxpc3QgKGZvciBleGFtcGxlLCB3aGVuIGEgbWFpbiBwcmcgY2F0Y2hlc1xyXG4gICAgICAgICAgICAvLyBhIHRpbWVyIGV2ZW50LCBubyBwcmV2dGFzayBleGlzdHMuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2VGFzayA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3Rhc2sgPSBtR0RhdGEuZ2V0TmV4dE1haW5Qcm9nKGN0bElkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwgJiYgY3RsSWR4ID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q29tcE1haW5QcmdUYWIoKS5nZXRDdGxJZHgoMCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgbWFpbiBwcm9ncmFtIHRoYXQgd2FzIHNldCBpbiBnZXRQYXJlbnRPckNvbXBNYWluUHJnLCBpcyBub3cgcmVwbGFjZWQgYmFjayB0byB0aGUgcGF0aCBwYXJlbnQuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMuX3ByZXZUYXNrLlBhdGhQYXJlbnRUYXNrO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ByZXZUYXNrID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcihudWxsKTsgLy8gbW92aW5nIG91dCBvZiBhIG1haW4gcHJvZ3JhbSB0byBhbm90aGVyIHRhc2tcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDKSB7XHJcbiAgICAgICAgICAgIC8vIHNwZWNpZmljIHNlYXJjaCBpcyBvdmVyLiBzdGFydCB0aGUgbm9uIHNwZWNpZmljIHNlYXJjaCBmcm9tIHRoZSBmaXJzdCB0YXNrLlxyXG4gICAgICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBoZXJlIHdlIHNjYW4gdGhlIG1haW4gcHJvZ3MgYWNjb3JkaW5nIHRvIHRoZSBsb2FkIHNlcXVlbmNlIChmaXJzdCB0byBsYXN0KS5cclxuICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUw7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5fdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KC0xLCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpLmdldEN0bElkeCgwKSk7XHJcbiAgICAgICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcih0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGlmICh0aGlzLl90YXNrID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUxfU1BFQ0lGSUM6XHJcbiAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMOiB7XHJcbiAgICAgICAgdGhpcy5fdGFzayA9IG1HRGF0YS5nZXROZXh0TWFpblByb2coY3RsSWR4KTtcclxuICAgICAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAvLyBzcGVjaWZpYyBzZWFyY2ggaXMgb3Zlci4gc3RhcnQgdGhlIG5vbiBzcGVjaWZpYyBzZWFyY2ggZnJvbSB0aGUgZmlyc3QgdGFzay5cclxuICAgICAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICAgICAgICB0aGlzLl90YXNrID0gdGhpcy5fb3JnVGFzaztcclxuICAgICAgICAgIHRoaXMuX3ByZXZUYXNrID0gdGhpcy5fb3JnUHJldlRhc2s7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRXZlbnRIYW5kbGVyUG9zaXRpb24uZ29VcFRhc2tDaGFpbigpIGludmFsaWQgcGhhc2U6IFwiICsgdGhpcy5fcGhhc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9oYW5kbGVyc1RhYiA9IHRoaXMuX3Rhc2suZ2V0SGFuZGxlcnNUYWIoKTtcclxuICAgIGlmICh0aGlzLl9oYW5kbGVyc1RhYiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vICAgaWYgdGhlIGN1cnJlbnQgdGFzayBhbmQgaXRzIHBhcmVudCBhcmUgZnJvbSBkaWZmZXJlbnQgY29tcG9uZW50cyB0aGVuXHJcbiAgLy8vICAgc2V0IHRoZSB0YXNrIHRvIHRoZSBtYWluIHByb2dyYW0gb2YgdGhlIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCB0YXNrLlxyXG4gIC8vLyAgIG90aGVyd2lzZSwgc2V0IHRoZSB0YXNrIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgdGFza1xyXG4gIHByaXZhdGUgZ2V0UGFyZW50T3JDb21wTWFpblByZygpOiB2b2lkIHtcclxuICAgIGxldCBjdGxJZHg6IG51bWJlciA9IHRoaXMuX3Rhc2suZ2V0Q3RsSWR4KCk7XHJcbiAgICB0aGlzLl9wcmV2VGFzayA9IHRoaXMuX3Rhc2s7XHJcblxyXG4gICAgLy8gUmV0cmlldmUgdGhlIHRhc2sncyBjYWxsaW5nLXBhcmVudC4gV2UgbmVlZCB0aGUgdGFzayB3aG8gaW52b2tlZCB0aGUgY3VycmVudCB0YXNrXHJcbiAgICAvLyByYXRoZXIgdGhhbiB0aGUgdGFzaydzIHRyaWdnZXJpbmcgcGFyZW50LlxyXG4gICAgLy8gVGhlIFBhdGggUGFyZW50IGlzIHRoZSBwYXJlbnQgb2YgdGhhdCB0YXNrIGFzIGlmIHRoZSBzZXJ2ZXIgaGFkIGRvbmUgYnVpbGQgcGF0aC4gSXQgaXMgbW9yZSBsb2dpY2FsIHRvIHNlYXJjaCB1c2luZyB0aGUgdHJpZ2dlciB0YXNrIHRyZWVcclxuICAgIC8vIGJ1dCBzaW5jZSB0aGUgb25saW5lL3NlcnZlciBkb2VzIG5vdCB1c2UgdGhlIHRyaWdnZXIgdHJlZSwgd2UgZGVjaWRlZCBub3QgdG8gdXNlIGl0IGhlcmUgYXMgd2VsbC5cclxuICAgIC8vIElmIHRoZSBwYXRoIHBhcmVudCBpcyBmcm9tIGEgZGlmZmVyZW50IGNvbXAsIGl0IG1lYW5zIHRoYXQgYmV0d2VlbiBjdXJyIHRhc2sgYW5kIHBhcmVudCB0aGVyZSBzaG91bGQgYmUgYSBjb21wIG1haW4gcHJvZy5cclxuICAgIGxldCBwYXRoUGFyZW50VGFzazogVGFzayA9IHRoaXMuX3Rhc2suUGF0aFBhcmVudFRhc2s7XHJcbiAgICBpZiAocGF0aFBhcmVudFRhc2sgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdGFzayA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBpZiB0aGUgcGFyZW50IHRhc2sgaXMgZnJvbSBhbm90aGVyIGNvbXBvbmVudFxyXG4gICAgaWYgKGN0bElkeCAhPT0gcGF0aFBhcmVudFRhc2suZ2V0Q3RsSWR4KCkpIHtcclxuICAgICAgLy8gcmVwbGFjZSB0aGUgcGFyZW50IHRhc2sgdG8gc2VhcmNoIHdpdGggdGhlIGNvbXAgbWFpbiBwcm9ncmFtLiBsYXRlciBvbiwgdGhlIG1haW4gcHJvZyB3aWxsIGJlIHJlcGxhY2VkIHdpdGhcclxuICAgICAgLy8gdGhlIHJlYWwgUGF0aFBhcmVudFRhc2suXHJcbiAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKHRoaXMuX3Rhc2spO1xyXG4gICAgICB0aGlzLl90YXNrID0gPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldE1haW5Qcm9nQnlDdGxJZHgoLTEsIGN0bElkeCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fcnRFdnQuc2V0TWFpblByZ0NyZWF0b3IobnVsbCk7XHJcbiAgICAgIHRoaXMuX3Rhc2sgPSBwYXRoUGFyZW50VGFzaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRIYW5kbGVyUG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50SGFuZGxlclBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQU0zRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTTVELE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CO1FBVlEsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGlCQUFZLEdBQVMsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBUyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBQzVCLFVBQUssR0FBUyxJQUFJLENBQUM7SUFJM0IsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLFNB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UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS08sc0JBQXNCO1FBQzVCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBTzVCLElBQUksY0FBYyxHQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ3JELElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPO1NBQ1I7UUFHRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFHekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBUyxZQUFZLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdFO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7QUFwUWMsMkNBQXNCLEdBQVcsQ0FBQyxDQUFDO0FBQ25DLCtDQUEwQixHQUFXLENBQUMsQ0FBQztBQUN2QyxpQ0FBWSxHQUFXLENBQUMsQ0FBQztBQUN6QiwwQ0FBcUIsR0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybmFsSW50ZXJmYWNlLCBMb2dnZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SGFuZGxlcnNUYWJsZX0gZnJvbSBcIi4uL3J0L0hhbmRsZXJzVGFibGVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuL1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9FdmVudEhhbmRsZXJcIjtcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gXCIuLi90YXNrcy9NR0RhdGFcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9yUXVldWUgfSBmcm9tIFwiLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIHBvaW50cyB0byB0aGUgcG9zaXRpb24gb2YgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGVcclxuLy8vICAgY2hhaW4gb2YgdGhlIGV2ZW50IGhhbmRsZXJzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFdmVudEhhbmRsZXJQb3NpdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9HTE9CQUw6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfR0xPQkFMX1NQRUNJRklDOiBudW1iZXIgPSA0O1xyXG5cclxuICBwcml2YXRlIF9oYW5kbGVySWR4OiBudW1iZXIgPSAwOyAvLyB0aGUgaW5kZXggb2YgdGhlIGhhbmRsZXIgd2l0aGluIHRoZSB0YXNrXHJcbiAgcHJpdmF0ZSBfaGFuZGxlcnNUYWI6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yZ1ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9vcmdUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNoZWNrZWQgdGFza1xyXG4gIHByaXZhdGUgX3BoYXNlOiBudW1iZXIgPSAwOyAvLyB0aGUgcGhhc2Ugb2YgdGhlIHNlYXJjaDogY29udHJvbCBzcGVjaWZpYywgY29udHJvbCBub24tc3BlY2lmaWMsIGdsb2JhbFxyXG4gIHByaXZhdGUgX3ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gdGhlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7IC8vIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjaGVja2VkIHRhc2tcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuICAvLy8gICBpbml0IHRoZSBwb3NpdGlvbiB0byBzdGFydCBhIG5ldyBjaGFpbiBvZiBzZWFyY2hcclxuICBpbml0KHJ0RXZlbnQ6IFJ1blRpbWVFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnQgPSBydEV2ZW50O1xyXG4gICAgdGhpcy5fdGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldFRhc2soKTtcclxuICAgIGlmICh0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICB0aGlzLl9wcmV2VGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldE1haW5QcmdDcmVhdG9yKCk7XHJcbiAgICAgIGlmICh0aGlzLl9wcmV2VGFzayAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2VGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChydEV2ZW50LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkMpXHJcbiAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJ0RXZlbnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQylcclxuICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX29yZ1Rhc2sgPSB0aGlzLl90YXNrO1xyXG4gICAgdGhpcy5fb3JnUHJldlRhc2sgPSB0aGlzLl9wcmV2VGFzaztcclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZXZ0OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dCgpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dChldnQ/OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldnQpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0XzAoZXZ0KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dF8xKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gICBjaGFuZ2VzIHRoZSBjdXJyZW50IHJ1biB0aW1lIGV2ZW50IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV2ZW50IGhhbmRsZXJcclxuICBwcml2YXRlIGdldE5leHRfMChldnQ6IFJ1blRpbWVFdmVudCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICB0aGlzLl9ydEV2dCA9IGV2dDtcclxuICAgIHJldHVybiB0aGlzLmdldE5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgZXZlbnQgaGFuZGxlclxyXG4gIHByaXZhdGUgZ2V0TmV4dF8xKCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICBpZiAodGhpcy5faGFuZGxlcnNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJiB0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSAhPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFKSB7XHJcbiAgICAgIC8vIHNwZWNpYWwgdHJlYXRtZW50IGZvciBUQVNLLCBSRUNPUkQgYW5kIENPTlRST0wgbGV2ZWwgUHJlZml4L1N1ZmZpeCBldmVudHNcclxuICAgICAgc3dpdGNoICh0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDoge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3J0RXZ0LmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAgIEZsb3dNb25pdG9yUXVldWUuSW5zdGFuY2UuYWRkRGF0YVZpZXdGbG93KHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZvciAodGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7IHRoaXMuX2hhbmRsZXJJZHggPj0gMDsgdGhpcy5faGFuZGxlcklkeC0tKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKSB8fCAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gYW4gZXZlbnQgaGFuZGxlciB3YXMgbm90IGZvdW5kIG9yIHdhcyByZXR1cm5lZCBpbiBhIHByZXZpb3VzIGNhbGwgdG8gdGhpcyBtZXRob2RcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIC8vIG90aGVyIGludGVybmFsIGV2ZW50cyBzaG91bGQgY29udGludWVcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuc2V0TmV4dEhhbmRsZXJJZHgoKSkge1xyXG4gICAgICBsZXQgaGFuZGxlcjogRXZlbnRIYW5kbGVyID0gdGhpcy5faGFuZGxlcnNUYWIuZ2V0SGFuZGxlcih0aGlzLl9oYW5kbGVySWR4KTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9waGFzZSkge1xyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNOb25TcGVjaWZpY0hhbmRsZXJPZih0aGlzLl9ydEV2dCkpXHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMX1NQRUNJRklDOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNHbG9iYWxTcGVjaWZpY0hhbmRsZXJPZih0aGlzLl9ydEV2dCkpXHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNHbG9iYWxIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRXZlbnRIYW5kbGVyUG9zaXRpb24uZ2V0TmV4dCgpIGludmFsaWQgcGhhc2U6IFwiICsgdGhpcy5fcGhhc2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBhIG5leHQgaGFuZGxlciB3YXMgZm91bmRcclxuICBwcml2YXRlIHNldE5leHRIYW5kbGVySWR4KCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIC8vIHRoZSBoYW5kbGVyIGlkeCBpcyAoLTEpIHdoZW4gc3RhcnRpbmcgdG8gc2VhcmNoIGluIGEgdGFza1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPCAwKVxyXG4gICAgICB0aGlzLl9oYW5kbGVySWR4ID0gdGhpcy5faGFuZGxlcnNUYWIuZ2V0U2l6ZSgpIC0gMTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJJZHggLSAxO1xyXG5cclxuICAgIGlmICh0aGlzLl9oYW5kbGVySWR4IDwgMCB8fCB0aGlzLl90YXNrLmlzQWJvcnRpbmcoKSkge1xyXG4gICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBoYW5kbGVycyBpbiB0aGUgdGFzayB0aGVuIGdvIHVwIHRoZSBjaGFpbiBvZiB0YXNrc1xyXG4gICAgICBpZiAodGhpcy5nb1VwVGFza0NoYWluKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dEhhbmRsZXJJZHgoKTtcclxuICAgICAgZWxzZSAvLyBubyBtb3JlIHRhc2tzIGluIHRoZSBjaGFpblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyAgIGdldCB0aGUgbmV4dCB0YXNrIGluIHRoZSB0YXNrcyBjaGFpbiBhbmQgcmV0dXJucyBmYWxzZSBpZiBubyB0YXNrIHdhcyBmb3VuZC5cclxuICAvLy8gICB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIHBoYXNlIHZhcmlhYmxlIGFjY29yZGluZ2x5XHJcbiAgcHJpdmF0ZSBnb1VwVGFza0NoYWluKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IG1HRGF0YTogTUdEYXRhID0gdGhpcy5fdGFzay5nZXRNR0RhdGEoKTtcclxuICAgIGxldCBjdGxJZHg6IG51bWJlciA9IHRoaXMuX3Rhc2suZ2V0Q3RsSWR4KCk7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9waGFzZSkge1xyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUM6XHJcbiAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM6IHtcclxuICAgICAgICAvLyBub24gc3BlY2lmaWMgaGFuZGxlcnMgYXJlIHNlYXJjaGVkIHRpbGwgd2UgaGl0IG91ciBtYWluIHByb2dyYW0gKGluY2x1c2l2ZSlcclxuICAgICAgICAvLyBhZnRlcndhcmRzIHdlIHN3aXRjaCB0byBnbG9iYWwgcGhhc2UuXHJcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRQYXJlbnRPckNvbXBNYWluUHJnKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBpbnRlcm5hbCwgaW50ZXJuYWwsIHN5c3RlbSBhbmQgdXNlciBldmVudHMgbWF5IGNyb3NzIGNvbXBvbmVudCBib3VuZGVyaWVzXHJcbiAgICAgICAgICBpZiAoKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMgfHxcclxuICAgICAgICAgICAgICAgdGhpcy5fcnRFdnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU0gfHxcclxuICAgICAgICAgICAgICAgdGhpcy5fcnRFdnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpICYmIGN0bElkeCA+IDApIHtcclxuICAgICAgICAgICAgLy8gbG9hZCB0aGUgUlQgcGFyZW50IG9mIHRoZSBwcmV2aW91cyB0YXNrLiBJZiBubyBwcmV2dGFzayBleGlzdHMgdGhlbiB3ZSBhcmVcclxuICAgICAgICAgICAgLy8gc2ltcGx5IHJ1bm5pbmcgb24gdGhlIG1haW4gcHJvZ3MgbGlzdCAoZm9yIGV4YW1wbGUsIHdoZW4gYSBtYWluIHByZyBjYXRjaGVzXHJcbiAgICAgICAgICAgIC8vIGEgdGltZXIgZXZlbnQsIG5vIHByZXZ0YXNrIGV4aXN0cy5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZUYXNrID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IG1HRGF0YS5nZXROZXh0TWFpblByb2coY3RsSWR4KTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbCAmJiBjdGxJZHggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KC0xLCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpLmdldEN0bElkeCgwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBtYWluIHByb2dyYW0gdGhhdCB3YXMgc2V0IGluIGdldFBhcmVudE9yQ29tcE1haW5QcmcsIGlzIG5vdyByZXBsYWNlZCBiYWNrIHRvIHRoZSBwYXRoIHBhcmVudC5cclxuICAgICAgICAgICAgICB0aGlzLl90YXNrID0gdGhpcy5fcHJldlRhc2suUGF0aFBhcmVudFRhc2s7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG51bGwpOyAvLyBtb3Zpbmcgb3V0IG9mIGEgbWFpbiBwcm9ncmFtIHRvIGFub3RoZXIgdGFza1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUMpIHtcclxuICAgICAgICAgICAgLy8gc3BlY2lmaWMgc2VhcmNoIGlzIG92ZXIuIHN0YXJ0IHRoZSBub24gc3BlY2lmaWMgc2VhcmNoIGZyb20gdGhlIGZpcnN0IHRhc2suXHJcbiAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMX1NQRUNJRklDO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGhlcmUgd2Ugc2NhbiB0aGUgbWFpbiBwcm9ncyBhY2NvcmRpbmcgdG8gdGhlIGxvYWQgc2VxdWVuY2UgKGZpcnN0IHRvIGxhc3QpLlxyXG4gICAgICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLl90YXNrID0gPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldE1haW5Qcm9nQnlDdGxJZHgoLTEsIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkuZ2V0Q3RsSWR4KDApKTtcclxuICAgICAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQzpcclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUw6IHtcclxuICAgICAgICB0aGlzLl90YXNrID0gbUdEYXRhLmdldE5leHRNYWluUHJvZyhjdGxJZHgpO1xyXG4gICAgICAgIGlmICh0aGlzLl90YXNrID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIHNwZWNpZmljIHNlYXJjaCBpcyBvdmVyLiBzdGFydCB0aGUgbm9uIHNwZWNpZmljIHNlYXJjaCBmcm9tIHRoZSBmaXJzdCB0YXNrLlxyXG4gICAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQztcclxuICAgICAgICAgIHRoaXMuX3Rhc2sgPSB0aGlzLl9vcmdUYXNrO1xyXG4gICAgICAgICAgdGhpcy5fcHJldlRhc2sgPSB0aGlzLl9vcmdQcmV2VGFzaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFdmVudEhhbmRsZXJQb3NpdGlvbi5nb1VwVGFza0NoYWluKCkgaW52YWxpZCBwaGFzZTogXCIgKyB0aGlzLl9waGFzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gdGhpcy5nb1VwVGFza0NoYWluKCk7XHJcblxyXG4gICAgdGhpcy5faGFuZGxlcklkeCA9IC0xO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gICBpZiB0aGUgY3VycmVudCB0YXNrIGFuZCBpdHMgcGFyZW50IGFyZSBmcm9tIGRpZmZlcmVudCBjb21wb25lbnRzIHRoZW5cclxuICAvLy8gICBzZXQgdGhlIHRhc2sgdG8gdGhlIG1haW4gcHJvZ3JhbSBvZiB0aGUgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHRhc2suXHJcbiAgLy8vICAgb3RoZXJ3aXNlLCBzZXQgdGhlIHRhc2sgdG8gYmUgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudCB0YXNrXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnRPckNvbXBNYWluUHJnKCk6IHZvaWQge1xyXG4gICAgbGV0IGN0bElkeDogbnVtYmVyID0gdGhpcy5fdGFzay5nZXRDdGxJZHgoKTtcclxuICAgIHRoaXMuX3ByZXZUYXNrID0gdGhpcy5fdGFzaztcclxuXHJcbiAgICAvLyBSZXRyaWV2ZSB0aGUgdGFzaydzIGNhbGxpbmctcGFyZW50LiBXZSBuZWVkIHRoZSB0YXNrIHdobyBpbnZva2VkIHRoZSBjdXJyZW50IHRhc2tcclxuICAgIC8vIHJhdGhlciB0aGFuIHRoZSB0YXNrJ3MgdHJpZ2dlcmluZyBwYXJlbnQuXHJcbiAgICAvLyBUaGUgUGF0aCBQYXJlbnQgaXMgdGhlIHBhcmVudCBvZiB0aGF0IHRhc2sgYXMgaWYgdGhlIHNlcnZlciBoYWQgZG9uZSBidWlsZCBwYXRoLiBJdCBpcyBtb3JlIGxvZ2ljYWwgdG8gc2VhcmNoIHVzaW5nIHRoZSB0cmlnZ2VyIHRhc2sgdHJlZVxyXG4gICAgLy8gYnV0IHNpbmNlIHRoZSBvbmxpbmUvc2VydmVyIGRvZXMgbm90IHVzZSB0aGUgdHJpZ2dlciB0cmVlLCB3ZSBkZWNpZGVkIG5vdCB0byB1c2UgaXQgaGVyZSBhcyB3ZWxsLlxyXG4gICAgLy8gSWYgdGhlIHBhdGggcGFyZW50IGlzIGZyb20gYSBkaWZmZXJlbnQgY29tcCwgaXQgbWVhbnMgdGhhdCBiZXR3ZWVuIGN1cnIgdGFzayBhbmQgcGFyZW50IHRoZXJlIHNob3VsZCBiZSBhIGNvbXAgbWFpbiBwcm9nLlxyXG4gICAgbGV0IHBhdGhQYXJlbnRUYXNrOiBUYXNrID0gdGhpcy5fdGFzay5QYXRoUGFyZW50VGFzaztcclxuICAgIGlmIChwYXRoUGFyZW50VGFzayA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl90YXNrID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgdGFzayBpcyBmcm9tIGFub3RoZXIgY29tcG9uZW50XHJcbiAgICBpZiAoY3RsSWR4ICE9PSBwYXRoUGFyZW50VGFzay5nZXRDdGxJZHgoKSkge1xyXG4gICAgICAvLyByZXBsYWNlIHRoZSBwYXJlbnQgdGFzayB0byBzZWFyY2ggd2l0aCB0aGUgY29tcCBtYWluIHByb2dyYW0uIGxhdGVyIG9uLCB0aGUgbWFpbiBwcm9nIHdpbGwgYmUgcmVwbGFjZWQgd2l0aFxyXG4gICAgICAvLyB0aGUgcmVhbCBQYXRoUGFyZW50VGFzay5cclxuICAgICAgdGhpcy5fcnRFdnQuc2V0TWFpblByZ0NyZWF0b3IodGhpcy5fdGFzayk7XHJcbiAgICAgIHRoaXMuX3Rhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgY3RsSWR4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcihudWxsKTtcclxuICAgICAgdGhpcy5fdGFzayA9IHBhdGhQYXJlbnRUYXNrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { BlobType, DisplayConvertor, PIC, VectorType } from '@magic-xpa/gui';
|
|
1
2
|
import { DateTime, NString, StringBuilder } from '@magic-xpa/mscorelib';
|
|
2
|
-
import { Constants, DateTimeUtils, InternalInterface, Logger, Queue, XMLConstants, XmlParser } from '@magic-xpa/utils';
|
|
3
|
+
import { Constants, DateTimeUtils, InternalInterface, Logger, Queue, StorageAttribute, XMLConstants, XmlParser } from '@magic-xpa/utils';
|
|
3
4
|
import { FlowMonitorInterface } from '../FlowMonitorInterface';
|
|
4
5
|
import { ConstInterface } from '../ConstInterface';
|
|
5
6
|
export class FlowMonitorQueue {
|
|
@@ -10,7 +11,17 @@ export class FlowMonitorQueue {
|
|
|
10
11
|
this._isRecompute = false;
|
|
11
12
|
this._isTask = false;
|
|
12
13
|
this._isTaskFlow = false;
|
|
14
|
+
this._isDataView = false;
|
|
13
15
|
this.ShouldSerialize = false;
|
|
16
|
+
this.padRight = (string, length, character = ' ') => {
|
|
17
|
+
let result = "";
|
|
18
|
+
let totalLength = length - string.length;
|
|
19
|
+
for (let i = 0; i < totalLength; i++) {
|
|
20
|
+
result = character + result;
|
|
21
|
+
}
|
|
22
|
+
result = result + string;
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
14
25
|
}
|
|
15
26
|
static get Instance() {
|
|
16
27
|
if (FlowMonitorQueue._instance === null)
|
|
@@ -68,6 +79,9 @@ export class FlowMonitorQueue {
|
|
|
68
79
|
case ConstInterface.MG_ATTR_TASKFLW:
|
|
69
80
|
this._isTaskFlow = XmlParser.getBoolean(valueStr);
|
|
70
81
|
break;
|
|
82
|
+
case ConstInterface.MG_TAG_DATAVIEW:
|
|
83
|
+
this._isDataView = XmlParser.getBoolean(valueStr);
|
|
84
|
+
break;
|
|
71
85
|
case ConstInterface.MG_ATTR_RECOMP:
|
|
72
86
|
this._isRecompute = XmlParser.getBoolean(valueStr);
|
|
73
87
|
break;
|
|
@@ -125,6 +139,92 @@ export class FlowMonitorQueue {
|
|
|
125
139
|
Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
|
|
126
140
|
}
|
|
127
141
|
}
|
|
142
|
+
appendVirtualsAndParameters(currentValues) {
|
|
143
|
+
let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, InternalInterface.MG_ACT_REC_PREFIX);
|
|
144
|
+
act.setInfo(currentValues);
|
|
145
|
+
this._queue.put(act);
|
|
146
|
+
}
|
|
147
|
+
addDataViewFlow(task) {
|
|
148
|
+
if (this._isDataView) {
|
|
149
|
+
let fldTab = task.DataView.GetFieldsTab();
|
|
150
|
+
let preparedDisplayString = "";
|
|
151
|
+
let finaldisplayData = "\n";
|
|
152
|
+
let fldValue;
|
|
153
|
+
let data = "";
|
|
154
|
+
for (let i = 0; i < fldTab.getSize(); i++) {
|
|
155
|
+
let fldDef = fldTab.getField(i);
|
|
156
|
+
if (!fldDef.IsEventHandlerField && (fldDef.IsVirtual && !fldDef.VirAsReal) || fldDef.isParam()) {
|
|
157
|
+
fldValue = fldDef.isNull() ? fldDef.getNullValue() : fldDef.getValue(true);
|
|
158
|
+
data = this.getFieldData(fldDef.getType(), fldValue, fldDef.getPicture(), fldDef.getCellsType(), task);
|
|
159
|
+
preparedDisplayString = this.PrepareDisplayString(fldDef.isParam(), fldDef.getVarName(), data, true);
|
|
160
|
+
finaldisplayData = finaldisplayData + preparedDisplayString + "\n";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
this.appendVirtualsAndParameters(finaldisplayData);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
getFieldData(Storagetype, data, picture, vecCellType, task) {
|
|
167
|
+
switch (Storagetype) {
|
|
168
|
+
case StorageAttribute.DOTNET:
|
|
169
|
+
data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
|
|
170
|
+
break;
|
|
171
|
+
case StorageAttribute.BLOB:
|
|
172
|
+
{
|
|
173
|
+
let contentType = BlobType.getContentType(data);
|
|
174
|
+
if (contentType == BlobType.CONTENT_TYPE_ANSI || contentType == BlobType.CONTENT_TYPE_UNICODE)
|
|
175
|
+
data = data != null ? BlobType.getString(data) : "";
|
|
176
|
+
else
|
|
177
|
+
data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
case StorageAttribute.NUMERIC:
|
|
181
|
+
case StorageAttribute.DATE:
|
|
182
|
+
case StorageAttribute.TIME:
|
|
183
|
+
let conv = DisplayConvertor.Instance;
|
|
184
|
+
data = conv.mg2disp(data, " ", new PIC(picture, Storagetype, task.getCompIdx()), false, task.getCompIdx(), false);
|
|
185
|
+
break;
|
|
186
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
187
|
+
let vecOutData;
|
|
188
|
+
if (data == null) {
|
|
189
|
+
vecOutData = "[]";
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
let cellAtt = vecCellType;
|
|
193
|
+
let vector = new VectorType(data);
|
|
194
|
+
if (cellAtt == StorageAttribute.BLOB && !VectorType.validateBlobContents(data))
|
|
195
|
+
vecOutData = "[]";
|
|
196
|
+
else {
|
|
197
|
+
let vecSize = VectorType.getVecSize(data);
|
|
198
|
+
let cellPicture = (cellAtt == StorageAttribute.NUMERIC || cellAtt == StorageAttribute.DATE || cellAtt == StorageAttribute.TIME) ? PIC.buildPicture(cellAtt, vector.getVecCell(1), task.getCompIdx(), true).getFormat() : picture;
|
|
199
|
+
vecOutData = "[";
|
|
200
|
+
for (let i = 0; i < vecSize; i++) {
|
|
201
|
+
vecOutData += this.getFieldData(cellAtt, vector.getVecCell(i + 1), cellPicture, vecCellType, task);
|
|
202
|
+
vecOutData += i < vecSize - 1 ? "," : "]";
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
data = vecOutData;
|
|
207
|
+
break;
|
|
208
|
+
case StorageAttribute.BOOLEAN:
|
|
209
|
+
data = data == "1" ? "TRUE" : "FALSE";
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
return data;
|
|
213
|
+
}
|
|
214
|
+
PrepareDisplayString(mode, name, valueContent, addDoubleQuotes) {
|
|
215
|
+
let str = "";
|
|
216
|
+
let finalStringToDisplay = "";
|
|
217
|
+
if (addDoubleQuotes)
|
|
218
|
+
finalStringToDisplay = finalStringToDisplay + "\"";
|
|
219
|
+
finalStringToDisplay = finalStringToDisplay + name;
|
|
220
|
+
if (addDoubleQuotes)
|
|
221
|
+
finalStringToDisplay = finalStringToDisplay + "\"";
|
|
222
|
+
let paddedName = this.padRight(name, 34);
|
|
223
|
+
let formatOfStringVirtual = `Virtual`;
|
|
224
|
+
let formatOfStringParameter = `Parameter`;
|
|
225
|
+
str = (mode ? formatOfStringParameter : formatOfStringVirtual) + " : " + `${paddedName}` + " : " + `${valueContent}`;
|
|
226
|
+
return str;
|
|
227
|
+
}
|
|
128
228
|
addTaskFlowRec(id, state, taskInfo) {
|
|
129
229
|
if (this._enabled && this._isTaskFlow) {
|
|
130
230
|
let info;
|
|
@@ -289,6 +389,7 @@ export class FlowMonitorQueue {
|
|
|
289
389
|
}
|
|
290
390
|
}
|
|
291
391
|
FlowMonitorQueue._instance = null;
|
|
392
|
+
FlowMonitorQueue.UNPRINTABLE_STR_LOG = "#UNPRINTABLE#";
|
|
292
393
|
FlowMonitorQueue.S_EVENT_STR1 = ">>Starts ";
|
|
293
394
|
FlowMonitorQueue.S_EVENT_STR2 = " Event";
|
|
294
395
|
FlowMonitorQueue.S_EVENT_PROPAGATED = "Event was propagated";
|
|
@@ -345,4 +446,4 @@ class ActivityItem {
|
|
|
345
446
|
message.Append(XMLConstants.TAG_TERM);
|
|
346
447
|
}
|
|
347
448
|
}
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01vbml0b3JRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdXRpbC9GbG93TW9uaXRvclF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXJILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBcUNVLFdBQU0sR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDeEQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUNyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztJQXlabkMsQ0FBQztJQXZaQyxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQ3JDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFFdEQsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ2xELElBQUksSUFBSSxHQUFXLHFCQUFxQixDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFB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LENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJRmxvd01vbml0b3JRdWV1ZX0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge0RhdGVUaW1lLCBMaXN0LCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7Q29uc3RhbnRzLCBEYXRlVGltZVV0aWxzLCBJbnRlcm5hbEludGVyZmFjZSwgTG9nZ2VyLCBRdWV1ZSwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge09wZXJhdGlvbn0gZnJvbSAnLi4vcnQvT3BlcmF0aW9uJztcclxuaW1wb3J0IHtGbG93TW9uaXRvckludGVyZmFjZX0gZnJvbSAnLi4vRmxvd01vbml0b3JJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRmxvd01vbml0b3JRdWV1ZSBpbXBsZW1lbnRzIElGbG93TW9uaXRvclF1ZXVlIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEZsb3dNb25pdG9yUXVldWUgPSBudWxsO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfRVZFTlRfU1RSMTogc3RyaW5nID0gXCI+PlN0YXJ0cyBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0VWRU5UX1NUUjI6IHN0cmluZyA9IFwiIEV2ZW50XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19FVkVOVF9QUk9QQUdBVEVEOiBzdHJpbmcgPSBcIkV2ZW50IHdhcyBwcm9wYWdhdGVkXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9FVkVOVF9TVFI6IHN0cmluZyA9IFwiPDxFbmRzIEV2ZW50XCI7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIFNfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgUmVjb3JkIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIFJlY29yZCBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFJlY29yZCBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBSZWNvcmQgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19UQVNLU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1RBU0tTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1RBU0tQUkZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfVEFTS1BSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFBSRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBoYW5kbGluZyBldmVudCB7MH1cIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgaGFuZGxpbmcgZXZlbnQgezB9XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMVkVSX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxWRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBSRUNPTVBfU1RSOiBzdHJpbmcgPSBcIlJlY29tcHV0ZXMgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1ZBUklBQkxFX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVmFyaWFibGUgQ2hhbmdlIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9WQVJJQUJMRV9TVFI6IHN0cmluZyA9IFwiRW5kcyBWYXJpYWJsZSBDaGFuZ2UgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBWQVJJQUJMRV9SRUFTT05fU1RSOiBzdHJpbmcgPSBcIiAtIFJlYXNvbiAtIFByZXZpb3VzIHZhbHVlXCI7XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBGTFdfUEVSRklYOiBzdHJpbmcgPSBcIkZsb3cgLSBcIjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1RBU0s6IHN0cmluZyA9ICdUJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfVEFTS19GTFc6IHN0cmluZyA9ICdGJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfUkVDT01QVVRFOiBzdHJpbmcgPSAnUic7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX0ZMV19PUEVSOiBzdHJpbmcgPSAnVCc7XHJcblxyXG4gIHN0YXRpYyBMb25nVGltZVBhdHRlcm4gPSBcIkhIOm1tOnNzOlNTU1wiO1xyXG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZTxBY3Rpdml0eUl0ZW0+ID0gbmV3IFF1ZXVlPEFjdGl2aXR5SXRlbT4oKTtcclxuICBwcml2YXRlIF9lbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNGbG93T3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNSZWNvbXB1dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2tGbG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvdWxkU2VyaWFsaXplOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogRmxvd01vbml0b3JRdWV1ZSB7XHJcbiAgICBpZiAoRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2UgPT09IG51bGwpXHJcbiAgICAgIEZsb3dNb25pdG9yUXVldWUuX2luc3RhbmNlID0gbmV3IEZsb3dNb25pdG9yUXVldWUoKTtcclxuXHJcbiAgICByZXR1cm4gRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBhZGRUYXNrQ25nTW9kZShuZXdUYXNrTW9kZTogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaW5mbzogc3RyaW5nID0gXCJUYXNrIE1vZGUgQ2hhbmdlIC0gXCI7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1Rhc2spIHtcclxuICAgICAgbGV0IGFjdGl2aXR5SXRlbTogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ0hOR19NT0RFKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobmV3VGFza01vZGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfTU9ESUZZOlxyXG4gICAgICAgICAgaW5mbyArPSBcIk1vZGlmeVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFOlxyXG4gICAgICAgICAgaW5mbyArPSBcIkNyZWF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfREVMRVRFOlxyXG4gICAgICAgICAgaW5mbyArPSBcIkRlbGV0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfUVVFUlk6XHJcbiAgICAgICAgICBpbmZvICs9IFwiUXVlcnlcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFjdGl2aXR5SXRlbS5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0aXZpdHlJdGVtKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGRhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFwiLz5cIiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gZmluZCBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoXCJmbHdtdHJfY29uZmlnXCIpICsgXCJmbHdtdHJfY29uZmlnXCIubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnM6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLkZpbGxEYXRhOiBcIiArIHRva2Vucy50b1N0cmluZygpKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vucyk7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCIvPlwiIHRvb1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiAgRmxvd01vbml0b3JRdWV1ZS5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBYTUwgZGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5hdHRyaWJ1dGUvdmFsdWUvLi4uYXR0cmlidXRlL3ZhbHVlLyB2ZWN0b3I8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+KTogdm9pZCB7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogPSBqICsgMikge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSA8c3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSA8c3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKGF0dHJpYnV0ZSArIFwiIHZhbHVlOiBcIiArIHZhbHVlU3RyKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RBU0s6XHJcbiAgICAgICAgICB0aGlzLl9pc1Rhc2sgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RBU0tGTFc6XHJcbiAgICAgICAgICB0aGlzLl9pc1Rhc2tGbG93ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUNPTVA6XHJcbiAgICAgICAgICB0aGlzLl9pc1JlY29tcHV0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRkxXT1A6XHJcbiAgICAgICAgICB0aGlzLl9pc0Zsb3dPcGVyYXRpb24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOQUJMRUQ6XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZShYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLmluaXRFbGVtZW50cygpOiB1bmtub3duICBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIGFuZCBlbXB0eSB0aGUgaW5uZXIgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcXVldWUuaXNFbXB0eSgpICYmIHRoaXMuU2hvdWxkU2VyaWFsaXplKSB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX01TRyArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpO1xyXG5cclxuICAgICAgd2hpbGUgKCF0aGlzLl9xdWV1ZS5pc0VtcHR5KCkpIHtcclxuICAgICAgICBsZXQgY3VyckFjdDogQWN0aXZpdHlJdGVtID0gPEFjdGl2aXR5SXRlbT50aGlzLl9xdWV1ZS5nZXQoKTtcclxuICAgICAgICBjdXJyQWN0LmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgICB9IC8vIGZpbGwgYWN0aXZpdGllc1xyXG5cclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCI8L1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9NU0cgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKTtcclxuICAgIH0gLy8gdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlzIHRoZSBGbG93IE1vbml0b3IgUXVldWUgZW1wdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVldWUuaXNFbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGVuYWJsZSB0aGUgZmxvdyBtb25pdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIHByZXZpb3VzIHN0YXRlIChlbmFibGVkL2Rpc2FibGVkKTwvcmV0dXJucz5cclxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCB3YXNFbmFibGVkOiBib29sZWFuID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuU2hvdWxkU2VyaWFsaXplID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHJldHVybiB3YXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBBY3Rpdml0aWVzIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0V2ZW50KHRyaWdnZXJlZEJ5OiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FVkVOVCk7XHJcblxyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQ6XHJcbiAgICAgICAgICBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1NUUjEgKyB0cmlnZ2VyZWRCeSArIEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9TVFIyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VORDpcclxuICAgICAgICAgIGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLkVfRVZFTlRfU1RSICsgdHJpZ2dlcmVkQnk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJPUEFHQVRFOlxyXG4gICAgICAgICAgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9QUk9QQUdBVEVEO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCB0YXNrIGZsb3cgZm9yIHJlY29yZCBwcmVmaXggb3Igc3VmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfUFJFRklYIG9yIEZMV01UUl9TVUZGSVhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dSZWMoaWQ6IG51bWJlciwgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19SRUNQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1JFQ1BSRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1JFQ1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfUkVDU1VGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1RBU0tQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1RBU0tQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJFRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVEFTS1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfVEFTS1NVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBNR19BQ1RfVkFSSUFCTEU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dGbGQoaWQ6IG51bWJlciwgZmxkTmFtZTogc3RyaW5nLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFRhc2tGbG93Q3RybChpZCwgZmxkTmFtZSwgc3RhdGUsIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfQ1RSTF9QUkVGSVggb3IgRkxXTVRSX0NUUkxfU1VGRklYPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0N0cmwoaWQ6IG51bWJlciwgY3RybE5hbWU6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVkFSSUFCTEVfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1ZBUklBQkxFX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfQ1RSTFNVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfQ1RSTFNVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DVFJMX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTjpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxWRVJfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxWRVJfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICBpbmZvID0gaW5mbyArIGN0cmxOYW1lO1xyXG4gICAgICAgIGlmIChpZCA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRSAmJiBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgICAgaW5mbyA9IGluZm8gKyBGbG93TW9uaXRvclF1ZXVlLlZBUklBQkxFX1JFQVNPTl9TVFI7XHJcbiAgICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlcklkXCI+aXNpZCBvZiB0aGUgaGFuZGxlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0hhbmRsZXIoaGFuZGxlcklkOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFza0Zsb3cpIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLX0ZMVywgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1RTS19IQU5ETEVSKTtcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuXHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVDpcclxuICAgICAgICAgIGluZm8gPSBOU3RyaW5nLkZvcm1hdChGbG93TW9uaXRvclF1ZXVlLlNfSEFORExFUl9TVFIsIGhhbmRsZXJJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfRU5EOlxyXG4gICAgICAgICAgaW5mbyA9IE5TdHJpbmcuRm9ybWF0KEZsb3dNb25pdG9yUXVldWUuRV9IQU5ETEVSX1NUUiwgaGFuZGxlcklkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9JTlRFUk5BTCxCUktfTEVWRUxfSEFORExFUl9TWVNURU0sQlJLX0xFVkVMX0hBTkRMRVJfVElNRVJcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OLEJSS19MRVZFTF9IQU5ETEVSX0VSUk9SLEJSS19MRVZFTF9IQU5ETEVSX1VTRVJcclxuICAgICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVZhck5hbWVcIj52YXIgbmFtZSAsIGhhcyB0cmlnZ2VyZWQgUmVjb21wdXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkUmVjb21wdXRlKHRyaWdnZXJlZEJ5VmFyTmFtZTogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1JlY29tcHV0ZSkge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1JFQ09NUFVURSwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1JFQ09NUCk7XHJcbiAgICAgIGxldCBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5SRUNPTVBfU1RSICsgdHJpZ2dlcmVkQnlWYXJOYW1lO1xyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCBhIGZpZWxkIGZsb3cgb3BlcmF0aW9uIGFjdGl2aXR5IGl0ZW0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJcIj5UaGUgb3BlcmF0aW9uIGJlaW5nIGxvZ2dlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYkV4ZWN1dGVkXCI+V2lsbCB0aGUgb3BlcmF0aW9uIGJlIGV4ZWN1dGVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKG9wZXI6IE9wZXJhdGlvbiwgYkV4ZWN1dGVkOiBib29sZWFuLCB0YXNrSW5mbzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihGbG93TW9uaXRvclF1ZXVlLkZMV19QRVJGSVgpO1xyXG4gICAgICBhd2FpdCBvcGVyLkFkZEZsb3dEZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICBidWZmZXIuQXBwZW5kKCcgJyk7XHJcblxyXG5cclxuICAgICAgaWYgKCFiRXhlY3V0ZWQpXHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIltOb3QgRXhlY3V0ZWRdXCIpO1xyXG5cclxuICAgICAgbGV0IGluZm8gPSBidWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgdXBkYXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkRmxvd09wZXJhdGlvblVwZGF0ZShzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7IC8vIE1HX09QRVJfVVBEQVRFXHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgIGluZm8gPSBcIlN0YXJ0cyBVcGRhdGVcIjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGluZm8gPSAgXCJFbmRzIFVwZGF0ZVwiO1xyXG5cclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBwYXNzZWQgdG8gc3RhdHVzIGxpbmUgdmVyaWZ5IGFjdGlvbjwvcGFyYW0+XHJcbiAgYWRkRmxvd1ZlcmlmeUluZm8oaW5mbzogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEZsb3dJbmZvKGluZm8sIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBhZGRlZCB0byBmbG93IG1vbml0b3IgcXVldWUgZm9yIEludm9rZU9zPC9wYXJhbT5cclxuICBhZGRGbG93SW52b2tlT3NJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRGbG93SW5mbyhpbmZvLCB0YXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXNlciBzdHJpbmcgcGFzc2VkIHRvIHN0YXR1cyBsaW5lIGZvciBhY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZm9cIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFkZEZsb3dJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcblxyXG4gICAgaWYgKCEoaW5mbyA9PT0gXCJcIikpIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChcIiA+PiBJTkZPUk1BVElPTiA+PiBcIik7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoaW5mbyk7XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3SW5mbyA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgYWN0LnNldEluZm8obmV3SW5mbyk7XHJcbiAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIG5ld0luZm8sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBhbGwgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBBY3Rpdml0eVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5jbGFzcyBBY3Rpdml0eUl0ZW0ge1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IG51bGw7IC8vIEFDVFlfVEFTS3xBQ1RfVEFTS19GTFd8QUNUX0RBVEFWSUVXfEFDVF9SRUNPTVBVVEV8QUNUX0ZMV19PUEVSXHJcbiAgcHJpdmF0ZSBfaW5mbzogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbmNsb3NpbmdJbnN0YW5jZTogRmxvd01vbml0b3JRdWV1ZSwgdHlwZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lkID0gaWQ7XHJcbiAgICB0aGlzLnNldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzYXZlIGN1cnJlbnQgdGltZSBpbiB0aGUgbmVlZGVkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzZXRUaW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZSA9IERhdGVUaW1lVXRpbHMuVG9TdHJpbmcoRGF0ZVRpbWUuTm93LCBGbG93TW9uaXRvclF1ZXVlLkxvbmdUaW1lUGF0dGVybiwgTG9nZ2VyLkluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYWRkZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBhY3Rpdml0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SW5mbyhpbmZvXzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbmZvID0gKChpbmZvXyAhPT0gbnVsbCkgPyBYbWxQYXJzZXIuZXNjYXBlKGluZm9fKSA6IGluZm9fKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgc3RyaW5nIGZvciB0aGUgYWN0aXZpdHkgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlNUQVJUX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTFdNVFJfQUNUKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVFlQRSArIFwiPVxcXCJcIiArIHRoaXMuX3R5cGUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX0lEICsgXCI9XFxcIlwiICsgdGhpcy5faWQgKyBcIlxcXCJcIik7XHJcbiAgICBpZiAodGhpcy5faW5mbyAhPSBudWxsKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5GTyArIFwiPVxcXCJcIiArIHRoaXMuX2luZm8gKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRSArIFwiPVxcXCJcIiArIHRoaXMuX3RpbWUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01vbml0b3JRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdXRpbC9GbG93TW9uaXRvclF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQWtDLEdBQUcsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUMsUUFBUSxFQUFRLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2SSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFLakQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQXNDVSxXQUFNLEdBQXdCLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ3hELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDckMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUEwVHhCLGFBQVEsR0FBRyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsWUFBb0IsR0FBRyxFQUFVLEVBQUU7WUFDdEYsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFD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RyxDQUFDO0lBS0QsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBS0QsUUFBUSxDQUFDLE9BQXNCO1FBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUk7WUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmxvYlR5cGUsIERpc3BsYXlDb252ZXJ0b3IsIEZpZWxkc1RhYmxlLCBJRmxvd01vbml0b3JRdWV1ZSwgUElDLCBWZWN0b3JUeXBlfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7RGF0ZVRpbWUsIExpc3QsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtDb25zdGFudHMsIERhdGVUaW1lVXRpbHMsIEludGVybmFsSW50ZXJmYWNlLCBMb2dnZXIsIFF1ZXVlLCBTdG9yYWdlQXR0cmlidXRlLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlcn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7T3BlcmF0aW9ufSBmcm9tICcuLi9ydC9PcGVyYXRpb24nO1xyXG5pbXBvcnQge0Zsb3dNb25pdG9ySW50ZXJmYWNlfSBmcm9tICcuLi9GbG93TW9uaXRvckludGVyZmFjZSc7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uL3Rhc2tzL1Rhc2snO1xyXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIEZsb3dNb25pdG9yUXVldWUgaW1wbGVtZW50cyBJRmxvd01vbml0b3JRdWV1ZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBGbG93TW9uaXRvclF1ZXVlID0gbnVsbDtcclxuICBwcml2YXRlIHN0YXRpYyBVTlBSSU5UQUJMRV9TVFJfTE9HOiBzdHJpbmcgPSBcIiNVTlBSSU5UQUJMRSNcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0VWRU5UX1NUUjE6IHN0cmluZyA9IFwiPj5TdGFydHMgXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19FVkVOVF9TVFIyOiBzdHJpbmcgPSBcIiBFdmVudFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfRVZFTlRfUFJPUEFHQVRFRDogc3RyaW5nID0gXCJFdmVudCB3YXMgcHJvcGFnYXRlZFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfRVZFTlRfU1RSOiBzdHJpbmcgPSBcIjw8RW5kcyBFdmVudFwiO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBTX1JFQ1BSRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFJlY29yZCBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1JFQ1BSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBSZWNvcmQgUHJlZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19SRUNTVUZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBSZWNvcmQgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9SRUNTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgUmVjb3JkIFN1ZmZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfVEFTS1NVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFRhc2sgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9UQVNLU1VGX1NUUjogc3RyaW5nID0gXCJFbmRzIFRhc2sgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19UQVNLUFJGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVGFzayBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1RBU0tQUkZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVGFzayBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0NUUkxQUkZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBDb250cm9sIFByZWZpeCAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfQ1RSTFBSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBDb250cm9sIFByZWZpeCAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFNVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgU3VmZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMU1VGX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgU3VmZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19IQU5ETEVSX1NUUjogc3RyaW5nID0gXCJTdGFydHMgaGFuZGxpbmcgZXZlbnQgezB9XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9IQU5ETEVSX1NUUjogc3RyaW5nID0gXCJFbmRzIGhhbmRsaW5nIGV2ZW50IHswfVwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFZFUl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgVmVyaWZpY2F0aW9uIGZvciBDb250cm9sIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMVkVSX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgVmVyaWZpY2F0aW9uIGZvciBDb250cm9sIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUkVDT01QX1NUUjogc3RyaW5nID0gXCJSZWNvbXB1dGVzIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19WQVJJQUJMRV9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFZhcmlhYmxlIENoYW5nZSAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfVkFSSUFCTEVfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVmFyaWFibGUgQ2hhbmdlIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgVkFSSUFCTEVfUkVBU09OX1NUUjogc3RyaW5nID0gXCIgLSBSZWFzb24gLSBQcmV2aW91cyB2YWx1ZVwiO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgRkxXX1BFUkZJWDogc3RyaW5nID0gXCJGbG93IC0gXCI7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEFDVF9UQVNLOiBzdHJpbmcgPSAnVCc7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1RBU0tfRkxXOiBzdHJpbmcgPSAnRic7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1JFQ09NUFVURTogc3RyaW5nID0gJ1InO1xyXG4gIHByaXZhdGUgc3RhdGljIEFDVF9GTFdfT1BFUjogc3RyaW5nID0gJ1QnO1xyXG5cclxuICBzdGF0aWMgTG9uZ1RpbWVQYXR0ZXJuID0gXCJISDptbTpzczpTU1NcIjtcclxuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8QWN0aXZpdHlJdGVtPiA9IG5ldyBRdWV1ZTxBY3Rpdml0eUl0ZW0+KCk7XHJcbiAgcHJpdmF0ZSBfZW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRmxvd09wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzUmVjb21wdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNUYXNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNUYXNrRmxvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRGF0YVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG91bGRTZXJpYWxpemU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBGbG93TW9uaXRvclF1ZXVlIHtcclxuICAgIGlmIChGbG93TW9uaXRvclF1ZXVlLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2UgPSBuZXcgRmxvd01vbml0b3JRdWV1ZSgpO1xyXG5cclxuICAgIHJldHVybiBGbG93TW9uaXRvclF1ZXVlLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIGFkZFRhc2tDbmdNb2RlKG5ld1Rhc2tNb2RlOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpbmZvOiBzdHJpbmcgPSBcIlRhc2sgTW9kZSBDaGFuZ2UgLSBcIjtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0aXZpdHlJdGVtOiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DSE5HX01PREUpO1xyXG5cclxuICAgICAgc3dpdGNoIChuZXdUYXNrTW9kZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9NT0RJRlk6XHJcbiAgICAgICAgICBpbmZvICs9IFwiTW9kaWZ5XCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEU6XHJcbiAgICAgICAgICBpbmZvICs9IFwiQ3JlYXRlXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9ERUxFVEU6XHJcbiAgICAgICAgICBpbmZvICs9IFwiRGVsZXRlXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9RVUVSWTpcclxuICAgICAgICAgIGluZm8gKz0gXCJRdWVyeVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYWN0aXZpdHlJdGVtLnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3Rpdml0eUl0ZW0pO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgZGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoXCIvPlwiLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAvLyBmaW5kIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihcImZsd210cl9jb25maWdcIikgKyBcImZsd210cl9jb25maWdcIi5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImluIEZsb3dNb25pdG9yUXVldWUuRmlsbERhdGE6IFwiICsgdG9rZW5zLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zKTtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7IC8vIHRvIGRlbGV0ZSBcIi8+XCIgdG9vXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluICBGbG93TW9uaXRvclF1ZXVlLkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIFhNTCBkYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmF0dHJpYnV0ZS92YWx1ZS8uLi5hdHRyaWJ1dGUvdmFsdWUvIHZlY3RvcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiA9IGogKyAyKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IDxzdHJpbmc+dG9rZW5zVmVjdG9yLmdldF9JdGVtKGopO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IDxzdHJpbmc+dG9rZW5zVmVjdG9yLmdldF9JdGVtKGogKyAxKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coYXR0cmlidXRlICsgXCIgdmFsdWU6IFwiICsgdmFsdWVTdHIpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEFTSzpcclxuICAgICAgICAgIHRoaXMuX2lzVGFzayA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEFTS0ZMVzpcclxuICAgICAgICAgIHRoaXMuX2lzVGFza0Zsb3cgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVc6XHJcbiAgICAgICAgICB0aGlzLl9pc0RhdGFWaWV3ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUNPTVA6XHJcbiAgICAgICAgICB0aGlzLl9pc1JlY29tcHV0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRkxXT1A6XHJcbiAgICAgICAgICB0aGlzLl9pc0Zsb3dPcGVyYXRpb24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOQUJMRUQ6XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZShYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLmluaXRFbGVtZW50cygpOiB1bmtub3duICBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIGFuZCBlbXB0eSB0aGUgaW5uZXIgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcXVldWUuaXNFbXB0eSgpICYmIHRoaXMuU2hvdWxkU2VyaWFsaXplKSB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX01TRyArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpO1xyXG5cclxuICAgICAgd2hpbGUgKCF0aGlzLl9xdWV1ZS5pc0VtcHR5KCkpIHtcclxuICAgICAgICBsZXQgY3VyckFjdDogQWN0aXZpdHlJdGVtID0gPEFjdGl2aXR5SXRlbT50aGlzLl9xdWV1ZS5nZXQoKTtcclxuICAgICAgICBjdXJyQWN0LmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgICB9IC8vIGZpbGwgYWN0aXZpdGllc1xyXG5cclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCI8L1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9NU0cgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKTtcclxuICAgIH0gLy8gdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlzIHRoZSBGbG93IE1vbml0b3IgUXVldWUgZW1wdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVldWUuaXNFbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGVuYWJsZSB0aGUgZmxvdyBtb25pdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIHByZXZpb3VzIHN0YXRlIChlbmFibGVkL2Rpc2FibGVkKTwvcmV0dXJucz5cclxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCB3YXNFbmFibGVkOiBib29sZWFuID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuU2hvdWxkU2VyaWFsaXplID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHJldHVybiB3YXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBBY3Rpdml0aWVzIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0V2ZW50KHRyaWdnZXJlZEJ5OiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FVkVOVCk7XHJcblxyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQ6XHJcbiAgICAgICAgICBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1NUUjEgKyB0cmlnZ2VyZWRCeSArIEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9TVFIyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VORDpcclxuICAgICAgICAgIGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLkVfRVZFTlRfU1RSICsgdHJpZ2dlcmVkQnk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJPUEFHQVRFOlxyXG4gICAgICAgICAgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9QUk9QQUdBVEVEO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRWaXJ0dWFsc0FuZFBhcmFtZXRlcnMoY3VycmVudFZhbHVlczogc3RyaW5nKSA6IHZvaWRcclxuICB7XHJcbiAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0tfRkxXLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCk7XHJcbiAgICBhY3Quc2V0SW5mbyhjdXJyZW50VmFsdWVzKTtcclxuICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLy8vIDxzdW1tYXJ5PlxyXG4gIC8vIC8vLyAgIGFkZCB2aXJ0dWFsIGFuZCBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYW5kIHNlbmQgaXQgdG8gc2VydmVyIG9uIHJlY29yZCBwcmVmaXhcclxuICAvLyAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPlxyXG4gIC8vIC8vLyA8L3BhcmFtPlxyXG4gIGFkZERhdGFWaWV3Rmxvdyh0YXNrOiBUYXNrKSA6IHZvaWRcclxuICB7IFxyXG4gICAgICBpZiAodGhpcy5faXNEYXRhVmlldylcclxuICAgICAge1xyXG4gICAgICAgICAgbGV0IGZsZFRhYjogRmllbGRzVGFibGUgPSB0YXNrLkRhdGFWaWV3LkdldEZpZWxkc1RhYigpO1xyXG4gICAgICAgICAgbGV0IHByZXBhcmVkRGlzcGxheVN0cmluZzogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgIGxldCBmaW5hbGRpc3BsYXlEYXRhOiBzdHJpbmcgPSBcIlxcblwiO1xyXG4gICAgICAgICAgbGV0IGZsZFZhbHVlOiBzdHJpbmc7XHJcbiAgICAgICAgICBsZXQgZGF0YTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBmbGRUYWIuZ2V0U2l6ZSgpOyBpKyspXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGV0IGZsZERlZjogRmllbGQgPSA8RmllbGQ+ZmxkVGFiLmdldEZpZWxkKGkpO1xyXG4gICAgICAgICAgICAgIGlmICghZmxkRGVmLklzRXZlbnRIYW5kbGVyRmllbGQgJiYgKGZsZERlZi5Jc1ZpcnR1YWwgJiYgIWZsZERlZi5WaXJBc1JlYWwpIHx8IGZsZERlZi5pc1BhcmFtKCkpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBmbGRWYWx1ZSA9IGZsZERlZi5pc051bGwoKSA/IGZsZERlZi5nZXROdWxsVmFsdWUoKSA6IGZsZERlZi5nZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0RmllbGREYXRhKGZsZERlZi5nZXRUeXBlKCksIGZsZFZhbHVlLCBmbGREZWYuZ2V0UGljdHVyZSgpLCBmbGREZWYuZ2V0Q2VsbHNUeXBlKCksIHRhc2spO1xyXG4gICAgICAgICAgICAgICAgICBwcmVwYXJlZERpc3BsYXlTdHJpbmcgPSB0aGlzLlByZXBhcmVEaXNwbGF5U3RyaW5nKGZsZERlZi5pc1BhcmFtKCksIGZsZERlZi5nZXRWYXJOYW1lKCksIGRhdGEsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBmaW5hbGRpc3BsYXlEYXRhID0gZmluYWxkaXNwbGF5RGF0YSArIHByZXBhcmVkRGlzcGxheVN0cmluZyArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hcHBlbmRWaXJ0dWFsc0FuZFBhcmFtZXRlcnMoZmluYWxkaXNwbGF5RGF0YSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAvLyAvLy8gPHN1bW1hcnk+XHJcbiAgLy8gLy8vICAgR2V0IHZpcnR1YWxzIGFuZCBwYXJhbWV0ZXIgdmFsdWVzLlxyXG4gIC8vIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJTdG9yYWdldHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhXCI+PC9wYXJhbT5cclxuICAvLyAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY3R1cmVcIj48L3BhcmFtPlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjQ2VsbFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZERhdGEoU3RvcmFnZXR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGRhdGE6IHN0cmluZywgcGljdHVyZTogc3RyaW5nLCB2ZWNDZWxsVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdGFzazogVGFzayk6IHN0cmluZ1xyXG4gIHtcclxuICAgICAgc3dpdGNoIChTdG9yYWdldHlwZSlcclxuICAgICAge1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICAgICAgICBkYXRhID0gRmxvd01vbml0b3JRdWV1ZS5VTlBSSU5UQUJMRV9TVFJfTE9HO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlID09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJIHx8IGNvbnRlbnRUeXBlID09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTklDT0RFKVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IEJsb2JUeXBlLmdldFN0cmluZyhkYXRhKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBGbG93TW9uaXRvclF1ZXVlLlVOUFJJTlRBQkxFX1NUUl9MT0c7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgICBsZXQgY29udjogRGlzcGxheUNvbnZlcnRvcj0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZTtcclxuICAgICAgICAgICAgICBkYXRhID0gY29udi5tZzJkaXNwKGRhdGEsIFwiIFwiLCBuZXcgUElDKHBpY3R1cmUsIFN0b3JhZ2V0eXBlLCB0YXNrLmdldENvbXBJZHgoKSksIGZhbHNlLCB0YXNrLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgICAgICBsZXQgdmVjT3V0RGF0YTogc3RyaW5nO1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhID0gXCJbXVwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2VsbEF0dDogU3RvcmFnZUF0dHJpYnV0ZSA9IHZlY0NlbGxUeXBlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmVjdG9yOiBWZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjZWxsQXR0ID09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiAhVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyhkYXRhKSlcclxuICAgICAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgPSBcIltdXCI7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHZlY1NpemU6IG51bWJlciA9IFZlY3RvclR5cGUuZ2V0VmVjU2l6ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsUGljdHVyZTogc3RyaW5nID0gKGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSA/IFBJQy5idWlsZFBpY3R1cmUoY2VsbEF0dCwgdmVjdG9yLmdldFZlY0NlbGwoMSksIHRhc2suZ2V0Q29tcElkeCgpLCB0cnVlKS5nZXRGb3JtYXQoKSA6IHBpY3R1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhID0gXCJbXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIDogbnVtYmVyID0gMDsgaSA8IHZlY1NpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhICs9IHRoaXMuZ2V0RmllbGREYXRhKGNlbGxBdHQsIHZlY3Rvci5nZXRWZWNDZWxsKGkgKyAxKSwgY2VsbFBpY3R1cmUsIHZlY0NlbGxUeXBlLCB0YXNrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhICs9IGkgPCB2ZWNTaXplIC0gMSA/IFwiLFwiIDogXCJdXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YSA9IHZlY091dERhdGE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT0gXCIxXCIgPyBcIlRSVUVcIiA6IFwiRkFMU0VcIjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQcmVwYXJlIGRpc3BsYXkgc3RyaW5nIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgb24gcmVjb3JkIHByZWZpeC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibW9kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlQ29udGVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhZGREb3VibGVRdW90ZXNcIj48L3BhcmFtPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgUHJlcGFyZURpc3BsYXlTdHJpbmcobW9kZTogYm9vbGVhbiwgbmFtZTogc3RyaW5nLCB2YWx1ZUNvbnRlbnQ6IHN0cmluZywgYWRkRG91YmxlUXVvdGVzOiBib29sZWFuKTogc3RyaW5nXHJcbiAge1xyXG4gICAgICBsZXQgIHN0cjogc3RyaW5nID0gXCJcIjtcclxuICAgICAgbGV0IGZpbmFsU3RyaW5nVG9EaXNwbGF5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICBpZiAoYWRkRG91YmxlUXVvdGVzKVxyXG4gICAgICAgICAgZmluYWxTdHJpbmdUb0Rpc3BsYXkgPSBmaW5hbFN0cmluZ1RvRGlzcGxheSArIFwiXFxcIlwiO1xyXG4gICAgICBmaW5hbFN0cmluZ1RvRGlzcGxheSA9IGZpbmFsU3RyaW5nVG9EaXNwbGF5ICsgbmFtZTtcclxuICAgICAgaWYgKGFkZERvdWJsZVF1b3RlcylcclxuICAgICAgICAgIGZpbmFsU3RyaW5nVG9EaXNwbGF5ID0gZmluYWxTdHJpbmdUb0Rpc3BsYXkgKyBcIlxcXCJcIjtcclxuXHJcbiAgICAgIGxldCBwYWRkZWROYW1lID0gdGhpcy5wYWRSaWdodChuYW1lLDM0KTtcclxuICAgICAgbGV0IGZvcm1hdE9mU3RyaW5nVmlydHVhbDpzdHJpbmcgPSBgVmlydHVhbGAgOy8vOiAke3BhZGRlZE5hbWV9IDogJHt2YWx1ZUNvbnRlbnR9YDtcclxuICAgICAgbGV0IGZvcm1hdE9mU3RyaW5nUGFyYW1ldGVyOiBzdHJpbmcgPSBgUGFyYW1ldGVyYDsvL2AgOiAke3BhZGRlZE5hbWV9IDogJHt2YWx1ZUNvbnRlbnR9YDtcclxuICAgICBcclxuICAgICAgLy9pZiAoIW1vZGUpXHJcbiAgICAgICAgICBzdHIgPSAobW9kZSA/IGZvcm1hdE9mU3RyaW5nUGFyYW1ldGVyIDogZm9ybWF0T2ZTdHJpbmdWaXJ0dWFsKSArIFwiIDogXCIgK2Ake3BhZGRlZE5hbWV9YCsgXCIgOiBcIitgJHt2YWx1ZUNvbnRlbnR9YDtcclxuICAgICAgLy8gICAgc3RyID0gU3RyaW5nLkZvcm1hdChmb3JtYXRPZlN0cmluZ1ZpcnR1YWwsIG5hbWUuUGFkUmlnaHQoMzQpLCB2YWx1ZUNvbnRlbnQpO1xyXG4gICAgIC8vIGVsc2VcclxuICAgICAvLyAgICAgc3RyID0gU3RyaW5nLkZvcm1hdChmb3JtYXRPZlN0cmluZ1BhcmFtZXRlciwgbmFtZS5QYWRSaWdodCgzNCksIHZhbHVlQ29udGVudCk7XHJcblxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgIHByaXZhdGUgcGFkUmlnaHQgPSAoc3RyaW5nOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBjaGFyYWN0ZXI6IHN0cmluZyA9ICcgJyk6IHN0cmluZyA9PiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgIGxldCB0b3RhbExlbmd0aCA9IGxlbmd0aCAtIHN0cmluZy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsTGVuZ3RoOyBpKyspIHtcclxuICAgICAgcmVzdWx0ID0gY2hhcmFjdGVyICsgcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgc3RyaW5nO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgdGFzayBmbG93IGZvciByZWNvcmQgcHJlZml4IG9yIHN1Zml4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+aXMgRkxXTVRSX1BSRUZJWCBvciBGTFdNVFJfU1VGRklYXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGFkZFRhc2tGbG93UmVjKGlkOiBudW1iZXIsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFza0Zsb3cpIHtcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuXHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfUkVDUFJGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9SRUNQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJFRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19SRUNTVUZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1JFQ1NVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19QUkVGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19UQVNLUFJGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9UQVNLUFJGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1BSRUZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1NVRkZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1RBU0tTVUZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1RBU0tTVUZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1VGRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0tfRkxXLCBpZCk7XHJcbiAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+aXMgTUdfQUNUX1ZBUklBQkxFPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZsZE5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWU8L3BhcmFtPlxyXG4gIGFkZFRhc2tGbG93RmxkKGlkOiBudW1iZXIsIGZsZE5hbWU6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRUYXNrRmxvd0N0cmwoaWQsIGZsZE5hbWUsIHN0YXRlLCB0YXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+aXMgRkxXTVRSX0NUUkxfUFJFRklYIG9yIEZMV01UUl9DVFJMX1NVRkZJWDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dDdHJsKGlkOiBudW1iZXIsIGN0cmxOYW1lOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFza0Zsb3cpIHtcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuXHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1ZBUklBQkxFX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9WQVJJQUJMRV9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9WQVJDSEdfVkFMVUU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9QUkVGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19DVFJMUFJGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9DVFJMUFJGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0NUUkxfUFJFRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxTVUZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxTVUZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9WRVJJRklDQVRJT046XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19DVFJMVkVSX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9DVFJMVkVSX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0NUUkxfU1VGRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0tfRkxXLCBpZCk7XHJcbiAgICAgIGlmIChpbmZvICE9PSBudWxsKSB7XHJcbiAgICAgICAgaW5mbyA9IGluZm8gKyBjdHJsTmFtZTtcclxuICAgICAgICBpZiAoaWQgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9WQVJDSEdfVkFMVUUgJiYgc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVClcclxuICAgICAgICAgIGluZm8gPSBpbmZvICsgRmxvd01vbml0b3JRdWV1ZS5WQVJJQUJMRV9SRUFTT05fU1RSO1xyXG4gICAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImhhbmRsZXJJZFwiPmlzaWQgb2YgdGhlIGhhbmRsZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dIYW5kbGVyKGhhbmRsZXJJZDogc3RyaW5nLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1Rhc2tGbG93KSB7XHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9UU0tfSEFORExFUik7XHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcblxyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQ6XHJcbiAgICAgICAgICBpbmZvID0gTlN0cmluZy5Gb3JtYXQoRmxvd01vbml0b3JRdWV1ZS5TX0hBTkRMRVJfU1RSLCBoYW5kbGVySWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VORDpcclxuICAgICAgICAgIGluZm8gPSBOU3RyaW5nLkZvcm1hdChGbG93TW9uaXRvclF1ZXVlLkVfSEFORExFUl9TVFIsIGhhbmRsZXJJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpbmZvICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gQlJLX0xFVkVMX0hBTkRMRVJfSU5URVJOQUwsQlJLX0xFVkVMX0hBTkRMRVJfU1lTVEVNLEJSS19MRVZFTF9IQU5ETEVSX1RJTUVSXHJcbiAgICAgICAgLy8gQlJLX0xFVkVMX0hBTkRMRVJfRVhQUkVTU0lPTixCUktfTEVWRUxfSEFORExFUl9FUlJPUixCUktfTEVWRUxfSEFORExFUl9VU0VSXHJcbiAgICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHJpZ2dlcmVkQnlWYXJOYW1lXCI+dmFyIG5hbWUgLCBoYXMgdHJpZ2dlcmVkIFJlY29tcHV0ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGFkZFJlY29tcHV0ZSh0cmlnZ2VyZWRCeVZhck5hbWU6IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNSZWNvbXB1dGUpIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9SRUNPTVBVVEUsIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9SRUNPTVApO1xyXG4gICAgICBsZXQgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuUkVDT01QX1NUUiArIHRyaWdnZXJlZEJ5VmFyTmFtZTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBZGQgYSBmaWVsZCBmbG93IG9wZXJhdGlvbiBhY3Rpdml0eSBpdGVtLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcGVyXCI+VGhlIG9wZXJhdGlvbiBiZWluZyBsb2dnZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJFeGVjdXRlZFwiPldpbGwgdGhlIG9wZXJhdGlvbiBiZSBleGVjdXRlZC48L3BhcmFtPlxyXG4gIGFzeW5jIGFkZEZsb3dGaWVsZE9wZXJhdGlvbihvcGVyOiBPcGVyYXRpb24sIGJFeGVjdXRlZDogYm9vbGVhbiwgdGFza0luZm86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNGbG93T3BlcmF0aW9uKSB7XHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfRkxXX09QRVIsIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9EQVRBX09QRVIpO1xyXG4gICAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoRmxvd01vbml0b3JRdWV1ZS5GTFdfUEVSRklYKTtcclxuICAgICAgYXdhaXQgb3Blci5BZGRGbG93RGVzY3JpcHRpb24oYnVmZmVyKTtcclxuICAgICAgYnVmZmVyLkFwcGVuZCgnICcpO1xyXG5cclxuXHJcbiAgICAgIGlmICghYkV4ZWN1dGVkKVxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJbTm90IEV4ZWN1dGVkXVwiKTtcclxuXHJcbiAgICAgIGxldCBpbmZvID0gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIHVwZGF0ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGFkZEZsb3dPcGVyYXRpb25VcGRhdGUoc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNGbG93T3BlcmF0aW9uKSB7XHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfRkxXX09QRVIsIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9EQVRBX09QRVIpOyAvLyBNR19PUEVSX1VQREFURVxyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG4gICAgICBpZiAoc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVClcclxuICAgICAgICBpbmZvID0gXCJTdGFydHMgVXBkYXRlXCI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmZvID0gIFwiRW5kcyBVcGRhdGVcIjtcclxuXHJcbiAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZm9cIj5zdHJpbmcgcGFzc2VkIHRvIHN0YXR1cyBsaW5lIHZlcmlmeSBhY3Rpb248L3BhcmFtPlxyXG4gIGFkZEZsb3dWZXJpZnlJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRGbG93SW5mbyhpbmZvLCB0YXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZm9cIj5zdHJpbmcgYWRkZWQgdG8gZmxvdyBtb25pdG9yIHF1ZXVlIGZvciBJbnZva2VPczwvcGFyYW0+XHJcbiAgYWRkRmxvd0ludm9rZU9zSW5mbyhpbmZvOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkRmxvd0luZm8oaW5mbywgdGFza0luZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHVzZXIgc3RyaW5nIHBhc3NlZCB0byBzdGF0dXMgbGluZSBmb3IgYWN0aW9uc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmZvXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhZGRGbG93SW5mbyhpbmZvOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfRkxXX09QRVIsIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9EQVRBX09QRVIpO1xyXG4gICAgbGV0IGJ1ZmZlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiXCIpO1xyXG5cclxuICAgIGlmICghKGluZm8gPT09IFwiXCIpKSB7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoXCIgPj4gSU5GT1JNQVRJT04gPj4gXCIpO1xyXG4gICAgICBidWZmZXIuQXBwZW5kKGluZm8pO1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0luZm8gPSBidWZmZXIuVG9TdHJpbmcoKTtcclxuICAgIGFjdC5zZXRJbmZvKG5ld0luZm8pO1xyXG4gICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBuZXdJbmZvLCB0cnVlKTtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgYWxsIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgQWN0aXZpdHlcclxuLy8vIDwvc3VtbWFyeT5cclxuY2xhc3MgQWN0aXZpdHlJdGVtIHtcclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90eXBlOiBzdHJpbmcgPSBudWxsOyAvLyBBQ1RZX1RBU0t8QUNUX1RBU0tfRkxXfEFDVF9EQVRBVklFV3xBQ1RfUkVDT01QVVRFfEFDVF9GTFdfT1BFUlxyXG4gIHByaXZhdGUgX2luZm86IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGltZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoZW5jbG9zaW5nSW5zdGFuY2U6IEZsb3dNb25pdG9yUXVldWUsIHR5cGU6IHN0cmluZywgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5zZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2F2ZSBjdXJyZW50IHRpbWUgaW4gdGhlIG5lZWRlZCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc2V0VGltZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWUgPSBEYXRlVGltZVV0aWxzLlRvU3RyaW5nKERhdGVUaW1lLk5vdywgRmxvd01vbml0b3JRdWV1ZS5Mb25nVGltZVBhdHRlcm4sIExvZ2dlci5JbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGFkZGVkIGluZm9ybWF0aW9uIGZvciB0aGUgYWN0aXZpdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEluZm8oaW5mb186IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5mbyA9ICgoaW5mb18gIT09IG51bGwpID8gWG1sUGFyc2VyLmVzY2FwZShpbmZvXykgOiBpbmZvXyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIHN0cmluZyBmb3IgdGhlIGFjdGl2aXR5IGl0ZW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX0FDVCk7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX1RZUEUgKyBcIj1cXFwiXCIgKyB0aGlzLl90eXBlICsgXCJcXFwiXCIpO1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBYTUxDb25zdGFudHMuTUdfQVRUUl9JRCArIFwiPVxcXCJcIiArIHRoaXMuX2lkICsgXCJcXFwiXCIpO1xyXG4gICAgaWYgKHRoaXMuX2luZm8gIT0gbnVsbClcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBDb25zdEludGVyZmFjZS5NR19BVFRSX0lORk8gKyBcIj1cXFwiXCIgKyB0aGlzLl9pbmZvICsgXCJcXFwiXCIpO1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUUgKyBcIj1cXFwiXCIgKyB0aGlzLl90aW1lICsgXCJcXFwiXCIpO1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlRBR19URVJNKTtcclxuICB9XHJcbn1cclxuIl19
|