@vendasta/conversation 0.123.0 → 0.124.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/_internal/conversation.api.service.mjs +7 -2
- package/esm2022/lib/_internal/interfaces/api.interface.mjs +1 -1
- package/esm2022/lib/_internal/interfaces/index.mjs +1 -1
- package/esm2022/lib/_internal/objects/api.mjs +118 -1
- package/esm2022/lib/_internal/objects/index.mjs +2 -2
- package/fesm2022/vendasta-conversation.mjs +123 -1
- package/fesm2022/vendasta-conversation.mjs.map +1 -1
- package/lib/_internal/conversation.api.service.d.ts +3 -2
- package/lib/_internal/interfaces/api.interface.d.ts +21 -0
- package/lib/_internal/interfaces/index.d.ts +1 -1
- package/lib/_internal/objects/api.d.ts +30 -0
- package/lib/_internal/objects/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4404,4 +4404,121 @@ export class WidgetVisit {
|
|
|
4404
4404
|
return toReturn;
|
|
4405
4405
|
}
|
|
4406
4406
|
}
|
|
4407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29udmVyc2F0aW9uX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENB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LEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUFBLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQUEsQ0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQUEsQ0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcy9hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIFByb2R1Y3RGZWF0dXJlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbnZlcnNhdGlvbiwgQ29udmVyc2F0aW9uS2V5IH0gZnJvbSAnLi9jb252ZXJzYXRpb24nO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uRXhwb3J0UmVjb3JkIH0gZnJvbSAnLi9jb252ZXJzYXRpb24tZXhwb3J0JztcbmltcG9ydCB7IERhdGFTb3VyY2VzLCBXaWRnZXQgfSBmcm9tICcuL3dpZGdldCc7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9maWVsZC1tYXNrJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0IHsgTWVzc2FnZVRlbXBsYXRlIH0gZnJvbSAnLi9tZXNzYWdlLXRlbXBsYXRlJztcbmltcG9ydCB7IFBhcnRpY2lwYW50LCBQYXJ0aWNpcGFudEtleSB9IGZyb20gJy4vcGFydGljaXBhbnQnO1xuaW1wb3J0IHsgUmVzcG9uc2VFdmFsdWF0aW9uIH0gZnJvbSAnLi9ldmFsdWF0aW9uJztcbmltcG9ydCB7IFN1YmplY3RQYXJ0aWNpcGFudCwgS2V5VmFsdWVQYWlyLCBOYW1lc3BhY2VEZXRhaWwgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAnLi9jb252ZXJzYXRpb24tdmlldyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvblZpZXdSZXF1ZXN0IGltcGxlbWVudHMgaS5BZGRDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvblZpZXdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB2aWV3SWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHBhcnRpY2lwYW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZENvbnZlcnNhdGlvblRvQ29udmVyc2F0aW9uVmlld1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvblZpZXdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvblZpZXdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlld0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWV3SWQnXSA9IHRoaXMudmlld0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0aWNpcGFudElkJ10gPSB0aGlzLnBhcnRpY2lwYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0IGltcGxlbWVudHMgaS5BZGRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRNdWx0aVBhcnRpY2lwYW50c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5BZGRNdWx0aVBhcnRpY2lwYW50c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRNdWx0aVBhcnRpY2lwYW50c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXNzaWduQ29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuQXNzaWduQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBhc3NpZ25lZVVzZXJJZHM6IHN0cmluZ1tdO1xuICAgIGxpbmtUb0NybU93bmVyOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQXNzaWduQ29udmVyc2F0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFzc2lnbkNvbnZlcnNhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFzc2lnbkNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXNzaWduZWVVc2VySWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3NpZ25lZVVzZXJJZHMnXSA9IHRoaXMuYXNzaWduZWVVc2VySWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpbmtUb0NybU93bmVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsaW5rVG9Dcm1Pd25lciddID0gdGhpcy5saW5rVG9Dcm1Pd25lcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3NpZ25Db252ZXJzYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuQXNzaWduQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQXNzaWduQ29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBc3NpZ25Db252ZXJzYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQXNzaWduQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5jZWxBSVJlc3BvbmRlclJlcXVlc3QgaW1wbGVtZW50cyBpLkNhbmNlbEFJUmVzcG9uZGVyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENhbmNlbEFJUmVzcG9uZGVyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbmNlbEFJUmVzcG9uZGVyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FuY2VsQUlSZXNwb25kZXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhcHR1cmVkTGVhZCBpbXBsZW1lbnRzIGkuQ2FwdHVyZWRMZWFkSW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBwaG9uZTogc3RyaW5nO1xuICAgIGNvbnRhY3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2FwdHVyZWRMZWFkIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ2FwdHVyZWRMZWFkKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DYXB0dXJlZExlYWRJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsJ10gPSB0aGlzLmVtYWlsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBob25lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwaG9uZSddID0gdGhpcy5waG9uZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb250YWN0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3RJZCddID0gdGhpcy5jb250YWN0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hhbm5lbEF2YWlsYWJpbGl0eSBpbXBsZW1lbnRzIGkuQ2hhbm5lbEF2YWlsYWJpbGl0eUludGVyZmFjZSB7XG4gICAgY2hhbm5lbDogZS5Db252ZXJzYXRpb25DaGFubmVsO1xuICAgIGlzQXZhaWxhYmxlOiBib29sZWFuO1xuICAgIHN0YXR1c2VzOiBDaGFubmVsU3RhdHVzW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDaGFubmVsQXZhaWxhYmlsaXR5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ2hhbm5lbEF2YWlsYWJpbGl0eSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXR1c2VzKSB7bS5zdGF0dXNlcyA9IHByb3RvLnN0YXR1c2VzLm1hcChDaGFubmVsU3RhdHVzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNoYW5uZWxBdmFpbGFiaWxpdHlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVsJ10gPSB0aGlzLmNoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNBdmFpbGFibGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQXZhaWxhYmxlJ10gPSB0aGlzLmlzQXZhaWxhYmxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1c2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXR1c2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1c2VzID8gKHRoaXMuc3RhdHVzZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hhbm5lbFN0YXR1cyBpbXBsZW1lbnRzIGkuQ2hhbm5lbFN0YXR1c0ludGVyZmFjZSB7XG4gICAgc3RhdHVzOiBlLlN0YXR1cztcbiAgICBpMThuS2V5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDaGFubmVsU3RhdHVzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ2hhbm5lbFN0YXR1cygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU3RhdHVzPihlLlN0YXR1cywgcHJvdG8uc3RhdHVzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2hhbm5lbFN0YXR1c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pMThuS2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpMThuS2V5J10gPSB0aGlzLmkxOG5LZXk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbXVuaWNhdGlvbkluZm8gaW1wbGVtZW50cyBpLkNvbW11bmljYXRpb25JbmZvSW50ZXJmYWNlIHtcbiAgICBjaGFubmVsOiBlLkNvbW11bmljYXRpb25DaGFubmVsVHlwZTtcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDb21tdW5pY2F0aW9uSW5mbyB7XG4gICAgICAgIGxldCBtID0gbmV3IENvbW11bmljYXRpb25JbmZvKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWwpIHttLmNoYW5uZWwgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbW11bmljYXRpb25DaGFubmVsVHlwZT4oZS5Db21tdW5pY2F0aW9uQ2hhbm5lbFR5cGUsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Db21tdW5pY2F0aW9uSW5mb0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZGVudGlmaWVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZGVudGlmaWVyJ10gPSB0aGlzLmlkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50IGltcGxlbWVudHMgaS5Db252ZXJzYXRpb25NZXNzYWdlQ291bnRJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudCB7XG4gICAgICAgIGxldCBtID0gbmV3IENvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb3VudCkge20uY291bnQgPSBwYXJzZUludChwcm90by5jb3VudCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Db252ZXJzYXRpb25NZXNzYWdlQ291bnRJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvdW50J10gPSB0aGlzLmNvdW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZUNvbnZlcnNhdGlvbnMgaW1wbGVtZW50cyBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZUNvbnZlcnNhdGlvbnNJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZUNvbnZlcnNhdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Mb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VDb3VudHNFbnRyeSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZUNvdW50c0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZUNvdW50c0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZUNvdW50c0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IHBhcnNlSW50KHByb3RvLnZhbHVlLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VDb3VudHNFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmFsdWUnXSA9IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuICAgIGNoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICBleHRlcm5hbENvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgY3JlYXRlZDogRGF0ZTtcbiAgICB1cGRhdGVkOiBEYXRlO1xuICAgIG9yaWdpbkxvY2F0aW9uOiBlLlBsYXRmb3JtTG9jYXRpb247XG4gICAgb3JpZ2luTG9jYXRpb25FeHRlcm5hbElkOiBzdHJpbmc7XG4gICAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbCkge20uY2hhbm5lbCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ29udmVyc2F0aW9uQ2hhbm5lbD4oZS5Db252ZXJzYXRpb25DaGFubmVsLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVkKSB7bS5jcmVhdGVkID0gbmV3IERhdGUocHJvdG8uY3JlYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8udXBkYXRlZCkge20udXBkYXRlZCA9IG5ldyBEYXRlKHByb3RvLnVwZGF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLm9yaWdpbkxvY2F0aW9uKSB7bS5vcmlnaW5Mb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5vcmlnaW5Mb2NhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leHRlcm5hbENvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleHRlcm5hbENvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmV4dGVybmFsQ29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NyZWF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZCA/ICh0aGlzLmNyZWF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3JlYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnVwZGF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsndXBkYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy51cGRhdGVkID8gKHRoaXMudXBkYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy51cGRhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbkxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5Mb2NhdGlvbiddID0gdGhpcy5vcmlnaW5Mb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbkxvY2F0aW9uRXh0ZXJuYWxJZCddID0gdGhpcy5vcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5zdGFuY2VJZCddID0gdGhpcy5pbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGVtcGxhdGU6IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRlbXBsYXRlKSB7bS50ZW1wbGF0ZSA9IE1lc3NhZ2VUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8udGVtcGxhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGVtcGxhdGUgPyAodGhpcy50ZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGVtcGxhdGU6IE1lc3NhZ2VUZW1wbGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGVtcGxhdGUpIHttLnRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLmZyb21Qcm90byhwcm90by50ZW1wbGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGVtcGxhdGUgPyAodGhpcy50ZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNdWx0aU1lc3NhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTXVsdGlNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW107XG4gICAgbGFzdFNlZW46IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNdWx0aU1lc3NhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU11bHRpTWVzc2FnZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lc3NhZ2VzKSB7bS5tZXNzYWdlcyA9IHByb3RvLm1lc3NhZ2VzLm1hcChNZXNzYWdlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ubGFzdFNlZW4pIHttLmxhc3RTZWVuID0gbmV3IERhdGUocHJvdG8ubGFzdFNlZW4pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aU1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lc3NhZ2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2VzID8gKHRoaXMubWVzc2FnZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVzc2FnZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFzdFNlZW4gIT09ICd1bmRlZmluZWQnICYmIHRoaXMubGFzdFNlZW4gIT09IG51bGwpIHt0b1JldHVyblsnbGFzdFNlZW4nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubGFzdFNlZW4gPyAodGhpcy5sYXN0U2VlbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5sYXN0U2Vlbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIGNoYXRTb3VyY2VVcmw6IHN0cmluZztcbiAgICBncmVldGluZ01lc3NhZ2U6IHN0cmluZztcbiAgICBtZXRhZGF0YTogS2V5VmFsdWVQYWlyW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBwcm90by5tZXRhZGF0YS5tYXAoS2V5VmFsdWVQYWlyLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVdpZGdldENvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0SWQnXSA9IHRoaXMud2lkZ2V0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhdFNvdXJjZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhdFNvdXJjZVVybCddID0gdGhpcy5jaGF0U291cmNlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyZWV0aW5nTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ3JlZXRpbmdNZXNzYWdlJ10gPSB0aGlzLmdyZWV0aW5nTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgd2lkZ2V0UGFydGljaXBhbnRUb2tlbjogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICAgIGdyZWV0aW5nTWVzc2FnZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldFBhcnRpY2lwYW50VG9rZW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldFBhcnRpY2lwYW50VG9rZW4nXSA9IHRoaXMud2lkZ2V0UGFydGljaXBhbnRUb2tlbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyZWV0aW5nTWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydncmVldGluZ01lc3NhZ2VJZCddID0gdGhpcy5ncmVldGluZ01lc3NhZ2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXaWRnZXRSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBhbGxvd2VkVXJsczogc3RyaW5nW107XG4gICAgd2VsY29tZU1lc3NhZ2U6IHN0cmluZztcbiAgICBkYXRhU291cmNlczogRGF0YVNvdXJjZXM7XG4gICAgdGV4dENvbG9yOiBzdHJpbmc7XG4gICAgYWNjZW50Q29sb3I6IHN0cmluZztcbiAgICBhY2NlbnRUZXh0Q29sb3I6IHN0cmluZztcbiAgICBza2lwQ29udGFjdENhcHR1cmU6IGJvb2xlYW47XG4gICAgYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9uczogc3RyaW5nO1xuICAgIGFzc2lzdGFudE5hbWU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRBdmF0YXJVcmw6IHN0cmluZztcbiAgICBwb3NpdGlvbjogZS5XaWRnZXRQb3NpdGlvbjtcbiAgICBoaWRlTW9iaWxlQ3RhOiBib29sZWFuO1xuICAgIGN1c3RvbUdyZWV0aW5nTWVzc2FnZTogc3RyaW5nO1xuICAgIGVuYWJsZUdyZWV0aW5nTWVzc2FnZTogYm9vbGVhbjtcbiAgICB3aWRnZXRUeXBlOiBzdHJpbmc7XG4gICAgYXNzaXN0YW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVdpZGdldFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVXaWRnZXRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRhdGFTb3VyY2VzKSB7bS5kYXRhU291cmNlcyA9IERhdGFTb3VyY2VzLmZyb21Qcm90byhwcm90by5kYXRhU291cmNlcyk7fVxuICAgICAgICBpZiAocHJvdG8ucG9zaXRpb24pIHttLnBvc2l0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5XaWRnZXRQb3NpdGlvbj4oZS5XaWRnZXRQb3NpdGlvbiwgcHJvdG8ucG9zaXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWVzcGFjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZXNwYWNlJ10gPSB0aGlzLm5hbWVzcGFjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sb3InXSA9IHRoaXMuY29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWxsb3dlZFVybHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FsbG93ZWRVcmxzJ10gPSB0aGlzLmFsbG93ZWRVcmxzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlbGNvbWVNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3ZWxjb21lTWVzc2FnZSddID0gdGhpcy53ZWxjb21lTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRhU291cmNlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRhU291cmNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRhU291cmNlcyA/ICh0aGlzLmRhdGFTb3VyY2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGFTb3VyY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRleHRDb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGV4dENvbG9yJ10gPSB0aGlzLnRleHRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NlbnRDb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZW50Q29sb3InXSA9IHRoaXMuYWNjZW50Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZW50VGV4dENvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NlbnRUZXh0Q29sb3InXSA9IHRoaXMuYWNjZW50VGV4dENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNraXBDb250YWN0Q2FwdHVyZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2tpcENvbnRhY3RDYXB0dXJlJ10gPSB0aGlzLnNraXBDb250YWN0Q2FwdHVyZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRpdGlvbmFsUHJvbXB0SW5zdHJ1Y3Rpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRpdGlvbmFsUHJvbXB0SW5zdHJ1Y3Rpb25zJ10gPSB0aGlzLmFkZGl0aW9uYWxQcm9tcHRJbnN0cnVjdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXNzaXN0YW50TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXNzaXN0YW50TmFtZSddID0gdGhpcy5hc3Npc3RhbnROYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudEF2YXRhclVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXNzaXN0YW50QXZhdGFyVXJsJ10gPSB0aGlzLmFzc2lzdGFudEF2YXRhclVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3NpdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zaXRpb24nXSA9IHRoaXMucG9zaXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGlkZU1vYmlsZUN0YSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGlkZU1vYmlsZUN0YSddID0gdGhpcy5oaWRlTW9iaWxlQ3RhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbUdyZWV0aW5nTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tR3JlZXRpbmdNZXNzYWdlJ10gPSB0aGlzLmN1c3RvbUdyZWV0aW5nTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmFibGVHcmVldGluZ01lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VuYWJsZUdyZWV0aW5nTWVzc2FnZSddID0gdGhpcy5lbmFibGVHcmVldGluZ01lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0VHlwZSddID0gdGhpcy53aWRnZXRUeXBlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnRJZCddID0gdGhpcy5hc3Npc3RhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXaWRnZXRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdpZGdldDogV2lkZ2V0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlV2lkZ2V0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVXaWRnZXRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by53aWRnZXQpIHttLndpZGdldCA9IFdpZGdldC5mcm9tUHJvdG8ocHJvdG8ud2lkZ2V0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMud2lkZ2V0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3dpZGdldCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy53aWRnZXQgPyAodGhpcy53aWRnZXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMud2lkZ2V0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhRGF0YUVudHJ5IGltcGxlbWVudHMgaS5NZXRhZGF0YURhdGFFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1ldGFkYXRhRGF0YUVudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWV0YWRhdGFEYXRhRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1ldGFkYXRhRGF0YUVudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2YWx1ZSddID0gdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTWVzc2FnZVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZU1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZU1lc3NhZ2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZU1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVdpZGdldFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVdpZGdldFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHdpZGdldElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVXaWRnZXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlV2lkZ2V0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlV2lkZ2V0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRJZCddID0gdGhpcy53aWRnZXRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbiAgICBsYXRlc3RNZXNzYWdlOiBNZXNzYWdlO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgZXZlbnQ6IEV2ZW50O1xuICAgIG1lc3NhZ2U6IE1lc3NhZ2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5sYXRlc3RNZXNzYWdlKSB7bS5sYXRlc3RNZXNzYWdlID0gTWVzc2FnZS5mcm9tUHJvdG8ocHJvdG8ubGF0ZXN0TWVzc2FnZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZXZlbnQpIHttLmV2ZW50ID0gRXZlbnQuZnJvbVByb3RvKHByb3RvLmV2ZW50KTt9XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlKSB7bS5tZXNzYWdlID0gTWVzc2FnZS5mcm9tUHJvdG8ocHJvdG8ubWVzc2FnZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhdGVzdE1lc3NhZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubGF0ZXN0TWVzc2FnZSAhPT0gbnVsbCkge3RvUmV0dXJuWydsYXRlc3RNZXNzYWdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxhdGVzdE1lc3NhZ2UgPyAodGhpcy5sYXRlc3RNZXNzYWdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxhdGVzdE1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdW1tYXJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdW1tYXJ5J10gPSB0aGlzLnN1bW1hcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXZlbnQgIT09IG51bGwpIHt0b1JldHVyblsnZXZlbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXZlbnQgPyAodGhpcy5ldmVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ldmVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2UgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlID8gKHRoaXMubWVzc2FnZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uIGltcGxlbWVudHMgaS5TZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbkludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgbGF0ZXN0TWVzc2FnZTogTWVzc2FnZTtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmxhdGVzdE1lc3NhZ2UpIHttLmxhdGVzdE1lc3NhZ2UgPSBNZXNzYWdlLmZyb21Qcm90byhwcm90by5sYXRlc3RNZXNzYWdlKTt9XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhdGVzdE1lc3NhZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubGF0ZXN0TWVzc2FnZSAhPT0gbnVsbCkge3RvUmV0dXJuWydsYXRlc3RNZXNzYWdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxhdGVzdE1lc3NhZ2UgPyAodGhpcy5sYXRlc3RNZXNzYWdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxhdGVzdE1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24gaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbkludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuICAgIHN1bW1hcnk6IHN0cmluZztcbiAgICBldmVudDogRXZlbnQ7XG4gICAgbWVzc2FnZTogTWVzc2FnZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5ldmVudCkge20uZXZlbnQgPSBFdmVudC5mcm9tUHJvdG8ocHJvdG8uZXZlbnQpO31cbiAgICAgICAgaWYgKHByb3RvLm1lc3NhZ2UpIHttLm1lc3NhZ2UgPSBNZXNzYWdlLmZyb21Qcm90byhwcm90by5tZXNzYWdlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1bW1hcnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1bW1hcnknXSA9IHRoaXMuc3VtbWFyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5ldmVudCAhPT0gbnVsbCkge3RvUmV0dXJuWydldmVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ldmVudCA/ICh0aGlzLmV2ZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmV2ZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXNzYWdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2UgPyAodGhpcy5tZXNzYWdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGVSZXNwb25zZVJlcXVlc3QgaW1wbGVtZW50cyBpLkV2YWx1YXRlUmVzcG9uc2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBzZW50aW1lbnQ6IGUuRXZhbHVhdGlvblNlbnRpbWVudDtcbiAgICBjb21tZW50OiBzdHJpbmc7XG4gICAgZXZhbHVhdGVkRXZlbnRJZDogc3RyaW5nO1xuICAgIGV2YWx1YXRlZE1lc3NhZ2VJZDogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFdmFsdWF0ZVJlc3BvbnNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEV2YWx1YXRlUmVzcG9uc2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNlbnRpbWVudCkge20uc2VudGltZW50ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5FdmFsdWF0aW9uU2VudGltZW50PihlLkV2YWx1YXRpb25TZW50aW1lbnQsIHByb3RvLnNlbnRpbWVudCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkV2YWx1YXRlUmVzcG9uc2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbnRpbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VudGltZW50J10gPSB0aGlzLnNlbnRpbWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21tZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21tZW50J10gPSB0aGlzLmNvbW1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZhbHVhdGVkRXZlbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXZhbHVhdGVkRXZlbnRJZCddID0gdGhpcy5ldmFsdWF0ZWRFdmVudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2YWx1YXRlZE1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXZhbHVhdGVkTWVzc2FnZUlkJ10gPSB0aGlzLmV2YWx1YXRlZE1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkV4cG9ydENvbnZlcnNhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBmaWx0ZXJPcHRpb25zOiBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEV4cG9ydENvbnZlcnNhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlck9wdGlvbnMpIHttLmZpbHRlck9wdGlvbnMgPSBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnMuZnJvbVByb3RvKHByb3RvLmZpbHRlck9wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlck9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVyT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlck9wdGlvbnMgPyAodGhpcy5maWx0ZXJPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlck9wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29udmVyc2F0aW9uc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5FeHBvcnRDb252ZXJzYXRpb25zUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdvcmtmbG93SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEV4cG9ydENvbnZlcnNhdGlvbnNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEV4cG9ydENvbnZlcnNhdGlvbnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRXhwb3J0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud29ya2Zsb3dJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd29ya2Zsb3dJZCddID0gdGhpcy53b3JrZmxvd0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cG9ydENvbnZlcnNhdGlvbnNSZXF1ZXN0RmlsdGVyT3B0aW9ucyBpbXBsZW1lbnRzIGkuRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zSW50ZXJmYWNlIHtcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcbiAgICBzdGFydFRpbWU6IERhdGU7XG4gICAgZW5kVGltZTogRGF0ZTtcbiAgICBwbGF0Zm9ybUxvY2F0aW9uOiBlLlBsYXRmb3JtTG9jYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KSB7bS5zdWJqZWN0UGFydGljaXBhbnQgPSBTdWJqZWN0UGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhcnRUaW1lKSB7bS5zdGFydFRpbWUgPSBuZXcgRGF0ZShwcm90by5zdGFydFRpbWUpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZFRpbWUpIHttLmVuZFRpbWUgPSBuZXcgRGF0ZShwcm90by5lbmRUaW1lKTt9XG4gICAgICAgIGlmIChwcm90by5wbGF0Zm9ybUxvY2F0aW9uKSB7bS5wbGF0Zm9ybUxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLnBsYXRmb3JtTG9jYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0VGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGFydFRpbWUgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnRUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0VGltZSA/ICh0aGlzLnN0YXJ0VGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydFRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmRUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZFRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kVGltZSA/ICh0aGlzLmVuZFRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF0Zm9ybUxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwbGF0Zm9ybUxvY2F0aW9uJ10gPSB0aGlzLnBsYXRmb3JtTG9jYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9ucyBpbXBsZW1lbnRzIGkuTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgcGxhdGZvcm1Mb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9ucyB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGxhdGZvcm1Mb2NhdGlvbikge20ucGxhdGZvcm1Mb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5wbGF0Zm9ybUxvY2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9uc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsYXRmb3JtTG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BsYXRmb3JtTG9jYXRpb24nXSA9IHRoaXMucGxhdGZvcm1Mb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBdmFpbGFibGVDaGFubmVsc0ZvckNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY2hhbm5lbHM6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbFtdO1xuICAgIHByZWZlcnJlZENoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICBjaGFubmVsQXZhaWxhYmlsaXRpZXM6IENoYW5uZWxBdmFpbGFiaWxpdHlbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBdmFpbGFibGVDaGFubmVsc0ZvckNvbnZlcnNhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWxzKSB7bS5jaGFubmVscyA9IHByb3RvLmNoYW5uZWxzLm1hcCgodjogc3RyaW5nKSA9PiBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbnZlcnNhdGlvbkNoYW5uZWw+KGUuQ29udmVyc2F0aW9uQ2hhbm5lbCwgdikpO31cbiAgICAgICAgaWYgKHByb3RvLnByZWZlcnJlZENoYW5uZWwpIHttLnByZWZlcnJlZENoYW5uZWwgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbnZlcnNhdGlvbkNoYW5uZWw+KGUuQ29udmVyc2F0aW9uQ2hhbm5lbCwgcHJvdG8ucHJlZmVycmVkQ2hhbm5lbCk7fVxuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbEF2YWlsYWJpbGl0aWVzKSB7bS5jaGFubmVsQXZhaWxhYmlsaXRpZXMgPSBwcm90by5jaGFubmVsQXZhaWxhYmlsaXRpZXMubWFwKENoYW5uZWxBdmFpbGFiaWxpdHkuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWxzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVscyddID0gdGhpcy5jaGFubmVsczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmVmZXJyZWRDaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmVmZXJyZWRDaGFubmVsJ10gPSB0aGlzLnByZWZlcnJlZENoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhbm5lbEF2YWlsYWJpbGl0aWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNoYW5uZWxBdmFpbGFiaWxpdGllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydjaGFubmVsQXZhaWxhYmlsaXRpZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2hhbm5lbEF2YWlsYWJpbGl0aWVzID8gKHRoaXMuY2hhbm5lbEF2YWlsYWJpbGl0aWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNoYW5uZWxBdmFpbGFiaWxpdGllczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb25maWd1cmF0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0Q29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29uZmlndXJhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb25maWd1cmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENvbmZpZ3VyYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0Q29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29uZmlndXJhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbmZpZ3VyYXRpb24pIHttLmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmZyb21Qcm90byhwcm90by5jb25maWd1cmF0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25maWd1cmF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZpZ3VyYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmlndXJhdGlvbiA/ICh0aGlzLmNvbmZpZ3VyYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmlndXJhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb252ZXJzYXRpb25CeUtleVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldENvbnZlcnNhdGlvbkJ5S2V5UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uS2V5OiBDb252ZXJzYXRpb25LZXk7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDb252ZXJzYXRpb25CeUtleVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb252ZXJzYXRpb25CeUtleVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uS2V5KSB7bS5jb252ZXJzYXRpb25LZXkgPSBDb252ZXJzYXRpb25LZXkuZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbktleSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvbkJ5S2V5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbktleSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb25LZXkgIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uS2V5J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbktleSA/ICh0aGlzLmNvbnZlcnNhdGlvbktleSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb25LZXk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29udmVyc2F0aW9uQnlLZXlSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0Q29udmVyc2F0aW9uQnlLZXlSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDb252ZXJzYXRpb25CeUtleVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29udmVyc2F0aW9uQnlLZXlSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29udmVyc2F0aW9uQnlLZXlSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldENvbnZlcnNhdGlvblN1bW1hcnlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb252ZXJzYXRpb25TdW1tYXJ5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRDb252ZXJzYXRpb25TdW1tYXJ5UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN1bW1hcnk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENvbnZlcnNhdGlvblN1bW1hcnlSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENvbnZlcnNhdGlvblN1bW1hcnlSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VtbWFyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VtbWFyeSddID0gdGhpcy5zdW1tYXJ5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENvbnZlcnNhdGlvblZpZXdzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0Q29udmVyc2F0aW9uVmlld3NSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0aWNpcGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDb252ZXJzYXRpb25WaWV3c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb252ZXJzYXRpb25WaWV3c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvblZpZXdzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50SWQnXSA9IHRoaXMucGFydGljaXBhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb252ZXJzYXRpb25WaWV3c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRDb252ZXJzYXRpb25WaWV3c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB2aWV3czogVmlld1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29udmVyc2F0aW9uVmlld3NSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENvbnZlcnNhdGlvblZpZXdzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmlld3MpIHttLnZpZXdzID0gcHJvdG8udmlld3MubWFwKFZpZXcuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q29udmVyc2F0aW9uVmlld3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZXdzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZpZXdzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZpZXdzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZpZXdzID8gKHRoaXMudmlld3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmlld3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZU9wdGlvbnMgaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VPcHRpb25zSW50ZXJmYWNlIHtcbiAgICBpbmNsdWRlT3JpZ2luYWxDb250ZW50OiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZU9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZXNzYWdlT3B0aW9ucygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZU9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlT3JpZ2luYWxDb250ZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbmNsdWRlT3JpZ2luYWxDb250ZW50J10gPSB0aGlzLmluY2x1ZGVPcmlnaW5hbENvbnRlbnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBvcHRpb25zOiBHZXRNZXNzYWdlT3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE1lc3NhZ2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ub3B0aW9ucykge20ub3B0aW9ucyA9IEdldE1lc3NhZ2VPcHRpb25zLmZyb21Qcm90byhwcm90by5vcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZCddID0gdGhpcy5tZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3B0aW9ucyA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gICAgaHlkcmF0aW9uT3B0aW9uczogR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5oeWRyYXRpb25PcHRpb25zKSB7bS5oeWRyYXRpb25PcHRpb25zID0gR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnMuZnJvbVByb3RvKHByb3RvLmh5ZHJhdGlvbk9wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmh5ZHJhdGlvbk9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaHlkcmF0aW9uT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydoeWRyYXRpb25PcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmh5ZHJhdGlvbk9wdGlvbnMgPyAodGhpcy5oeWRyYXRpb25PcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmh5ZHJhdGlvbk9wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZTogTWVzc2FnZVRlbXBsYXRlO1xuICAgIGh5ZHJhdGlvbkluZm9ybWF0aW9uOiBHZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUh5ZHJhdGlvbkluZm9ybWF0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50ZW1wbGF0ZSkge20udGVtcGxhdGUgPSBNZXNzYWdlVGVtcGxhdGUuZnJvbVByb3RvKHByb3RvLnRlbXBsYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5oeWRyYXRpb25JbmZvcm1hdGlvbikge20uaHlkcmF0aW9uSW5mb3JtYXRpb24gPSBHZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUh5ZHJhdGlvbkluZm9ybWF0aW9uLmZyb21Qcm90byhwcm90by5oeWRyYXRpb25JbmZvcm1hdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGVtcGxhdGUgPyAodGhpcy50ZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oeWRyYXRpb25JbmZvcm1hdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5oeWRyYXRpb25JbmZvcm1hdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydoeWRyYXRpb25JbmZvcm1hdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5oeWRyYXRpb25JbmZvcm1hdGlvbiA/ICh0aGlzLmh5ZHJhdGlvbkluZm9ybWF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmh5ZHJhdGlvbkluZm9ybWF0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpQ29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudHM6IFN1YmplY3RQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29uZmlndXJhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50cykge20uc3ViamVjdFBhcnRpY2lwYW50cyA9IHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudHMubWFwKFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdWJqZWN0UGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50cyA/ICh0aGlzLnN1YmplY3RQYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb25maWd1cmF0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbmZpZ3VyYXRpb25zOiBDb25maWd1cmF0aW9uW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29uZmlndXJhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbmZpZ3VyYXRpb25zKSB7bS5jb25maWd1cmF0aW9ucyA9IHByb3RvLmNvbmZpZ3VyYXRpb25zLm1hcChDb25maWd1cmF0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlndXJhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnY29uZmlndXJhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmlndXJhdGlvbnMgPyAodGhpcy5jb25maWd1cmF0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb25maWd1cmF0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zSW50ZXJmYWNlIHtcbiAgICBkaXNhYmxlUGFydGljaXBhbnRCcmFuZGluZzogYm9vbGVhbjtcbiAgICBleGNsdXNpb25zOiBGaWVsZE1hc2s7XG4gICAgZGlzYWJsZVBhcnRpY2lwYW50SHlkcmF0aW9uOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzT3B0aW9ucyB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc09wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZXhjbHVzaW9ucykge20uZXhjbHVzaW9ucyA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZXhjbHVzaW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc09wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlUGFydGljaXBhbnRCcmFuZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlzYWJsZVBhcnRpY2lwYW50QnJhbmRpbmcnXSA9IHRoaXMuZGlzYWJsZVBhcnRpY2lwYW50QnJhbmRpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXhjbHVzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5leGNsdXNpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V4Y2x1c2lvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXhjbHVzaW9ucyA/ICh0aGlzLmV4Y2x1c2lvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXhjbHVzaW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlUGFydGljaXBhbnRIeWRyYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc2FibGVQYXJ0aWNpcGFudEh5ZHJhdGlvbiddID0gdGhpcy5kaXNhYmxlUGFydGljaXBhbnRIeWRyYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWRzOiBzdHJpbmdbXTtcbiAgICBvcHRpb25zOiBGaWVsZE1hc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcHRpb25zKSB7bS5vcHRpb25zID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5vcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWRzJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnb3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcHRpb25zID8gKHRoaXMub3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uczogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb25zKSB7bS5jb252ZXJzYXRpb25zID0gcHJvdG8uY29udmVyc2F0aW9ucy5tYXAoR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbnMgPyAodGhpcy5jb252ZXJzYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkczogc3RyaW5nW107XG4gICAgZXhjbHVzaW9uczogRmllbGRNYXNrO1xuICAgIG9wdGlvbnM6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc09wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZXhjbHVzaW9ucykge20uZXhjbHVzaW9ucyA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZXhjbHVzaW9ucyk7fVxuICAgICAgICBpZiAocHJvdG8ub3B0aW9ucykge20ub3B0aW9ucyA9IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc09wdGlvbnMuZnJvbVByb3RvKHByb3RvLm9wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkcyddID0gdGhpcy5jb252ZXJzYXRpb25JZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXhjbHVzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5leGNsdXNpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V4Y2x1c2lvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXhjbHVzaW9ucyA/ICh0aGlzLmV4Y2x1c2lvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXhjbHVzaW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnb3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcHRpb25zID8gKHRoaXMub3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbnM6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9ucykge20uY29udmVyc2F0aW9ucyA9IHByb3RvLmNvbnZlcnNhdGlvbnMubWFwKEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9ucyA/ICh0aGlzLmNvbnZlcnNhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZHMnXSA9IHRoaXMuY29udmVyc2F0aW9uSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VDb3VudHM6IENvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFtdO1xuICAgIGNvdW50czoge1trZXk6IHN0cmluZ106IG51bWJlcn07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlQ291bnRzKSB7bS5tZXNzYWdlQ291bnRzID0gcHJvdG8ubWVzc2FnZUNvdW50cy5tYXAoQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uY291bnRzKSB7bS5jb3VudHMgPSBPYmplY3Qua2V5cyhwcm90by5jb3VudHMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcGFyc2VJbnQocHJvdG8uY291bnRzW2tdLCAxMCk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VDb3VudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZUNvdW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXNzYWdlQ291bnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2VDb3VudHMgPyAodGhpcy5tZXNzYWdlQ291bnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lc3NhZ2VDb3VudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvdW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydjb3VudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY291bnRzID8gKHRoaXMuY291bnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvdW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUV2ZW50c1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpRXZlbnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZXZlbnRJZHM6IHN0cmluZ1tdO1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUV2ZW50c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUV2ZW50c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpRXZlbnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydldmVudElkcyddID0gdGhpcy5ldmVudElkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlFdmVudHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlFdmVudHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZXZlbnRzOiBFdmVudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlFdmVudHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpRXZlbnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZXZlbnRzKSB7bS5ldmVudHMgPSBwcm90by5ldmVudHMubWFwKEV2ZW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpRXZlbnRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmVudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXZlbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V2ZW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ldmVudHMgPyAodGhpcy5ldmVudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXZlbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpTWVzc2FnZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aU1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkczogc3RyaW5nW107XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpTWVzc2FnZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlNZXNzYWdlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpTWVzc2FnZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkcyddID0gdGhpcy5tZXNzYWdlSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYW5ndWFnZUNvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xhbmd1YWdlQ29kZSddID0gdGhpcy5sYW5ndWFnZUNvZGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlNZXNzYWdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aU1lc3NhZ2VzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aU1lc3NhZ2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aU1lc3NhZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVzc2FnZXMpIHttLm1lc3NhZ2VzID0gcHJvdG8ubWVzc2FnZXMubWFwKE1lc3NhZ2UuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlNZXNzYWdlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZXMgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVzc2FnZXMgPyAodGhpcy5tZXNzYWdlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpUGFydGljaXBhbnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnRJZHM6IHN0cmluZ1tdO1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUGFydGljaXBhbnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0aWNpcGFudElkcyddID0gdGhpcy5wYXJ0aWNpcGFudElkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpV2lkZ2V0TWVzc2FnZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpV2lkZ2V0TWVzc2FnZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZHMnXSA9IHRoaXMubWVzc2FnZUlkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpV2lkZ2V0TWVzc2FnZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpV2lkZ2V0TWVzc2FnZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpV2lkZ2V0TWVzc2FnZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlcykge20ubWVzc2FnZXMgPSBwcm90by5tZXNzYWdlcy5tYXAoTWVzc2FnZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXNzYWdlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXNzYWdlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlcyA/ICh0aGlzLm1lc3NhZ2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lc3NhZ2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpV2lkZ2V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlXaWRnZXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlXaWRnZXRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVdpZGdldFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldElkcyddID0gdGhpcy53aWRnZXRJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlXaWRnZXRSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlXaWRnZXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgd2lkZ2V0czogV2lkZ2V0W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVdpZGdldFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlXaWRnZXRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by53aWRnZXRzKSB7bS53aWRnZXRzID0gcHJvdG8ud2lkZ2V0cy5tYXAoV2lkZ2V0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLndpZGdldHMgIT09IG51bGwpIHt0b1JldHVyblsnd2lkZ2V0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy53aWRnZXRzID8gKHRoaXMud2lkZ2V0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy53aWRnZXRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE93bmVyRW1haWxSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRPd25lckVtYWlsUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc3ViamVjdFBhcnRpY2lwYW50OiBTdWJqZWN0UGFydGljaXBhbnQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRPd25lckVtYWlsUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVyRW1haWxSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPd25lckVtYWlsUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09IG51bGwpIHt0b1JldHVyblsnc3ViamVjdFBhcnRpY2lwYW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCA/ICh0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdWJqZWN0UGFydGljaXBhbnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0T3duZXJFbWFpbFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRPd25lckVtYWlsUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGZvcndhcmRpbmdFbWFpbDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0T3duZXJFbWFpbFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0T3duZXJFbWFpbFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPd25lckVtYWlsUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3J3YXJkaW5nRW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZvcndhcmRpbmdFbWFpbCddID0gdGhpcy5mb3J3YXJkaW5nRW1haWw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UGFydGljaXBhbnRzQnlLZXlSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQYXJ0aWNpcGFudHNCeUtleVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50S2V5OiBQYXJ0aWNpcGFudEtleTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBhcnRpY2lwYW50c0J5S2V5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFBhcnRpY2lwYW50c0J5S2V5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudEtleSkge20ucGFydGljaXBhbnRLZXkgPSBQYXJ0aWNpcGFudEtleS5mcm9tUHJvdG8ocHJvdG8ucGFydGljaXBhbnRLZXkpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQYXJ0aWNpcGFudHNCeUtleVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudEtleSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudEtleSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudEtleSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudEtleSA/ICh0aGlzLnBhcnRpY2lwYW50S2V5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50S2V5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFBhcnRpY2lwYW50c0J5S2V5UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFBhcnRpY2lwYW50c0J5S2V5UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgICBwYXJ0aWNpcGFudDogUGFydGljaXBhbnQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQYXJ0aWNpcGFudHNCeUtleVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UGFydGljaXBhbnRzQnlLZXlSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudCkge20ucGFydGljaXBhbnQgPSBQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8ucGFydGljaXBhbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQYXJ0aWNpcGFudHNCeUtleVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudCA/ICh0aGlzLnBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdpZGdldENvbmZpZ1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldFdpZGdldENvbmZpZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHdpZGdldElkOiBzdHJpbmc7XG4gICAgdmlzaXREYXRhOiBXaWRnZXRWaXNpdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdpZGdldENvbmZpZ1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXaWRnZXRDb25maWdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZpc2l0RGF0YSkge20udmlzaXREYXRhID0gV2lkZ2V0VmlzaXQuZnJvbVByb3RvKHByb3RvLnZpc2l0RGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdpZGdldENvbmZpZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0SWQnXSA9IHRoaXMud2lkZ2V0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlzaXREYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZpc2l0RGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2aXNpdERhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmlzaXREYXRhID8gKHRoaXMudmlzaXREYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZpc2l0RGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRXaWRnZXRDb25maWdSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICB3ZWxjb21lTWVzc2FnZTogc3RyaW5nO1xuICAgIHRleHRDb2xvcjogc3RyaW5nO1xuICAgIGFjY2VudENvbG9yOiBzdHJpbmc7XG4gICAgYWNjZW50VGV4dENvbG9yOiBzdHJpbmc7XG4gICAgc2tpcENvbnRhY3RDYXB0dXJlOiBib29sZWFuO1xuICAgIHdpZGdldFRvcFNwYWNlOiBudW1iZXI7XG4gICAgYXNzaXN0YW50TmFtZTogc3RyaW5nO1xuICAgIGFzc2lzdGFudEF2YXRhclVybDogc3RyaW5nO1xuICAgIHBvc2l0aW9uOiBlLldpZGdldFBvc2l0aW9uO1xuICAgIGhpZGVNb2JpbGVDdGE6IGJvb2xlYW47XG4gICAgY3VzdG9tR3JlZXRpbmdNZXNzYWdlOiBzdHJpbmc7XG4gICAgZW5hYmxlR3JlZXRpbmdNZXNzYWdlOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHBvd2VyZWRCeU5hbWU6IHN0cmluZztcbiAgICBwb3dlcmVkQnlXZWJzaXRlOiBzdHJpbmc7XG4gICAgc2hvd0Zvb3RlckNvbnRlbnQ6IGJvb2xlYW47XG4gICAgZ3JlZXRpbmdNZXNzYWdlVHlwZTogZS5HZXRXaWRnZXRDb25maWdSZXNwb25zZUdyZWV0aW5nTWVzc2FnZVR5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXaWRnZXRDb25maWdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdpZGdldENvbmZpZ1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLndpZGdldFRvcFNwYWNlKSB7bS53aWRnZXRUb3BTcGFjZSA9IHBhcnNlSW50KHByb3RvLndpZGdldFRvcFNwYWNlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucG9zaXRpb24pIHttLnBvc2l0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5XaWRnZXRQb3NpdGlvbj4oZS5XaWRnZXRQb3NpdGlvbiwgcHJvdG8ucG9zaXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmdyZWV0aW5nTWVzc2FnZVR5cGUpIHttLmdyZWV0aW5nTWVzc2FnZVR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkdldFdpZGdldENvbmZpZ1Jlc3BvbnNlR3JlZXRpbmdNZXNzYWdlVHlwZT4oZS5HZXRXaWRnZXRDb25maWdSZXNwb25zZUdyZWV0aW5nTWVzc2FnZVR5cGUsIHByb3RvLmdyZWV0aW5nTWVzc2FnZVR5cGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaWRnZXRDb25maWdSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sb3InXSA9IHRoaXMuY29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNFbmFibGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0VuYWJsZWQnXSA9IHRoaXMuaXNFbmFibGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlbGNvbWVNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3ZWxjb21lTWVzc2FnZSddID0gdGhpcy53ZWxjb21lTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHRDb2xvciddID0gdGhpcy50ZXh0Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZW50Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY2VudENvbG9yJ10gPSB0aGlzLmFjY2VudENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY2VudFRleHRDb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZW50VGV4dENvbG9yJ10gPSB0aGlzLmFjY2VudFRleHRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za2lwQ29udGFjdENhcHR1cmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NraXBDb250YWN0Q2FwdHVyZSddID0gdGhpcy5za2lwQ29udGFjdENhcHR1cmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0VG9wU3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldFRvcFNwYWNlJ10gPSB0aGlzLndpZGdldFRvcFNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudE5hbWUnXSA9IHRoaXMuYXNzaXN0YW50TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudEF2YXRhclVybCddID0gdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zaXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc2l0aW9uJ10gPSB0aGlzLnBvc2l0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpZGVNb2JpbGVDdGEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVNb2JpbGVDdGEnXSA9IHRoaXMuaGlkZU1vYmlsZUN0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbUdyZWV0aW5nTWVzc2FnZSddID0gdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmFibGVHcmVldGluZ01lc3NhZ2UnXSA9IHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWVzcGFjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZXNwYWNlJ10gPSB0aGlzLm5hbWVzcGFjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3dlcmVkQnlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3dlcmVkQnlOYW1lJ10gPSB0aGlzLnBvd2VyZWRCeU5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG93ZXJlZEJ5V2Vic2l0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG93ZXJlZEJ5V2Vic2l0ZSddID0gdGhpcy5wb3dlcmVkQnlXZWJzaXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNob3dGb290ZXJDb250ZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzaG93Rm9vdGVyQ29udGVudCddID0gdGhpcy5zaG93Rm9vdGVyQ29udGVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncmVldGluZ01lc3NhZ2VUeXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydncmVldGluZ01lc3NhZ2VUeXBlJ10gPSB0aGlzLmdyZWV0aW5nTWVzc2FnZVR5cGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2lkZ2V0Q29udmVyc2F0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0V2lkZ2V0Q29udmVyc2F0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRXaWRnZXRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V2lkZ2V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdpZGdldFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdpZGdldFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0SWQnXSA9IHRoaXMud2lkZ2V0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2lkZ2V0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFdpZGdldFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB3aWRnZXQ6IFdpZGdldDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdpZGdldFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0V2lkZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ud2lkZ2V0KSB7bS53aWRnZXQgPSBXaWRnZXQuZnJvbVByb3RvKHByb3RvLndpZGdldCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdpZGdldFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLndpZGdldCAhPT0gbnVsbCkge3RvUmV0dXJuWyd3aWRnZXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMud2lkZ2V0ID8gKHRoaXMud2lkZ2V0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLndpZGdldDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eSBpbXBsZW1lbnRzIGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHlJbnRlcmZhY2Uge1xuICAgIGVudGl0eVR5cGU6IGUuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHlFbnRpdHlUeXBlO1xuICAgIGVudGl0eUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSHlkcmF0aW9uRW50aXR5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVudGl0eVR5cGUpIHttLmVudGl0eVR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSHlkcmF0aW9uRW50aXR5RW50aXR5VHlwZT4oZS5HZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eUVudGl0eVR5cGUsIHByb3RvLmVudGl0eVR5cGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudGl0eVR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VudGl0eVR5cGUnXSA9IHRoaXMuZW50aXR5VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50aXR5SWQnXSA9IHRoaXMuZW50aXR5SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbiBpbXBsZW1lbnRzIGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbkludGVyZmFjZSB7XG4gICAgYWxsRmllbGRzSHlkcmF0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUh5ZHJhdGlvbkluZm9ybWF0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbEZpZWxkc0h5ZHJhdGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbGxGaWVsZHNIeWRyYXRlZCddID0gdGhpcy5hbGxGaWVsZHNIeWRyYXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9ucyBpbXBsZW1lbnRzIGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIGh5ZHJhdGlvbkVudGl0aWVzOiBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9ucygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5oeWRyYXRpb25FbnRpdGllcykge20uaHlkcmF0aW9uRW50aXRpZXMgPSBwcm90by5oeWRyYXRpb25FbnRpdGllcy5tYXAoR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHkuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oeWRyYXRpb25FbnRpdGllcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5oeWRyYXRpb25FbnRpdGllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydoeWRyYXRpb25FbnRpdGllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5oeWRyYXRpb25FbnRpdGllcyA/ICh0aGlzLmh5ZHJhdGlvbkVudGl0aWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmh5ZHJhdGlvbkVudGl0aWVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbiBpbXBsZW1lbnRzIGkuTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZUluYm94Q29udmVyc2F0aW9uSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbiAgICBsYXRlc3RNZXNzYWdlOiBNZXNzYWdlO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5sYXRlc3RNZXNzYWdlKSB7bS5sYXRlc3RNZXNzYWdlID0gTWVzc2FnZS5mcm9tUHJvdG8ocHJvdG8ubGF0ZXN0TWVzc2FnZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGF0ZXN0TWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5sYXRlc3RNZXNzYWdlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xhdGVzdE1lc3NhZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubGF0ZXN0TWVzc2FnZSA/ICh0aGlzLmxhdGVzdE1lc3NhZ2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubGF0ZXN0TWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluamVjdE1lc3NhZ2VSZXF1ZXN0IGltcGxlbWVudHMgaS5JbmplY3RNZXNzYWdlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgYm9keTogc3RyaW5nO1xuICAgIGNoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICB0eXBlOiBlLk1lc3NhZ2VUeXBlO1xuICAgIGxvY2F0aW9uOiBlLlBsYXRmb3JtTG9jYXRpb247XG4gICAgbWV0YWRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIG1lZGlhOiBNZWRpYVtdO1xuICAgIG5hbWVzcGFjZTogTmFtZXNwYWNlRGV0YWlsO1xuICAgIHNvdXJjZU5hbWU6IHN0cmluZztcbiAgICBjcmVhdGVkOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSW5qZWN0TWVzc2FnZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBJbmplY3RNZXNzYWdlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLnR5cGUpIHttLnR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLk1lc3NhZ2VUeXBlPihlLk1lc3NhZ2VUeXBlLCBwcm90by50eXBlKTt9XG4gICAgICAgIGlmIChwcm90by5sb2NhdGlvbikge20ubG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ubG9jYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1ldGFkYXRhKSB7bS5tZXRhZGF0YSA9IE9iamVjdC5rZXlzKHByb3RvLm1ldGFkYXRhKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHByb3RvLm1ldGFkYXRhW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICBpZiAocHJvdG8ubWVkaWEpIHttLm1lZGlhID0gcHJvdG8ubWVkaWEubWFwKE1lZGlhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ubmFtZXNwYWNlKSB7bS5uYW1lc3BhY2UgPSBOYW1lc3BhY2VEZXRhaWwuZnJvbVByb3RvKHByb3RvLm5hbWVzcGFjZSk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JbmplY3RNZXNzYWdlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib2R5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib2R5J10gPSB0aGlzLmJvZHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhbm5lbCddID0gdGhpcy5jaGFubmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3R5cGUnXSA9IHRoaXMudHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9jYXRpb24nXSA9IHRoaXMubG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWRpYSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWRpYSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWRpYSA/ICh0aGlzLm1lZGlhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWVzcGFjZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5uYW1lc3BhY2UgIT09IG51bGwpIHt0b1JldHVyblsnbmFtZXNwYWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm5hbWVzcGFjZSA/ICh0aGlzLm5hbWVzcGFjZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5uYW1lc3BhY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc291cmNlTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc291cmNlTmFtZSddID0gdGhpcy5zb3VyY2VOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb21tdW5pY2F0aW9uQ2hhbm5lbHNJbmZvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb21tdW5pY2F0aW9uSW5mbzogQ29tbXVuaWNhdGlvbkluZm9bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb21tdW5pY2F0aW9uQ2hhbm5lbHNJbmZvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbW11bmljYXRpb25JbmZvKSB7bS5jb21tdW5pY2F0aW9uSW5mbyA9IHByb3RvLmNvbW11bmljYXRpb25JbmZvLm1hcChDb21tdW5pY2F0aW9uSW5mby5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbXVuaWNhdGlvbkluZm8gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29tbXVuaWNhdGlvbkluZm8gIT09IG51bGwpIHt0b1JldHVyblsnY29tbXVuaWNhdGlvbkluZm8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29tbXVuaWNhdGlvbkluZm8gPyAodGhpcy5jb21tdW5pY2F0aW9uSW5mbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21tdW5pY2F0aW9uSW5mbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Q29udmVyc2F0aW9uRXhwb3J0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyT3B0aW9uczogTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9ucztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlck9wdGlvbnMpIHttLmZpbHRlck9wdGlvbnMgPSBMaXN0Q29udmVyc2F0aW9uRXhwb3J0c1JlcXVlc3RGaWx0ZXJPcHRpb25zLmZyb21Qcm90byhwcm90by5maWx0ZXJPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlck9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVyT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlck9wdGlvbnMgPyAodGhpcy5maWx0ZXJPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlck9wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Q29udmVyc2F0aW9uRXhwb3J0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0Q29udmVyc2F0aW9uRXhwb3J0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICByZWNvcmQ6IENvbnZlcnNhdGlvbkV4cG9ydFJlY29yZFtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29udmVyc2F0aW9uRXhwb3J0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5yZWNvcmQpIHttLnJlY29yZCA9IHByb3RvLnJlY29yZC5tYXAoQ29udmVyc2F0aW9uRXhwb3J0UmVjb3JkLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWNvcmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmVjb3JkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3JlY29yZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZWNvcmQgPyAodGhpcy5yZWNvcmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmVjb3JkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzIGltcGxlbWVudHMgaS5MaXN0Q29udmVyc2F0aW9uc0ZpbHRlcnNJbnRlcmZhY2Uge1xuICAgIGNoYW5uZWxzOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWxbXTtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgdW5yZWFkT25seTogYm9vbGVhbjtcbiAgICBhd2FpdGluZ1Jlc3BvbnNlT25seTogYm9vbGVhbjtcbiAgICBpc0Fub255bW91czogYm9vbGVhbjtcbiAgICBhc3NpZ25lZVVzZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWxzKSB7bS5jaGFubmVscyA9IHByb3RvLmNoYW5uZWxzLm1hcCgodjogc3RyaW5nKSA9PiBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbnZlcnNhdGlvbkNoYW5uZWw+KGUuQ29udmVyc2F0aW9uQ2hhbm5lbCwgdikpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29udmVyc2F0aW9uc0ZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVscyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhbm5lbHMnXSA9IHRoaXMuY2hhbm5lbHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNPcGVuICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc09wZW4nXSA9IHRoaXMuaXNPcGVuO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVucmVhZE9ubHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VucmVhZE9ubHknXSA9IHRoaXMudW5yZWFkT25seTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hd2FpdGluZ1Jlc3BvbnNlT25seSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXdhaXRpbmdSZXNwb25zZU9ubHknXSA9IHRoaXMuYXdhaXRpbmdSZXNwb25zZU9ubHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNBbm9ueW1vdXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQW5vbnltb3VzJ10gPSB0aGlzLmlzQW5vbnltb3VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lnbmVlVXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3NpZ25lZVVzZXJJZCddID0gdGhpcy5hc3NpZ25lZVVzZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Q29udmVyc2F0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBwYXJ0aWNpcGFudElkOiBzdHJpbmc7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcbiAgICBmaWx0ZXJzOiBMaXN0Q29udmVyc2F0aW9uc0ZpbHRlcnM7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29udmVyc2F0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29udmVyc2F0aW9uc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0Q29udmVyc2F0aW9uc0ZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29udmVyc2F0aW9uc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydGljaXBhbnRJZCddID0gdGhpcy5wYXJ0aWNpcGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gdGhpcy5uYW1lc3BhY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uczogTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZUluYm94Q29udmVyc2F0aW9uW107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbnMpIHttLmNvbnZlcnNhdGlvbnMgPSBwcm90by5jb252ZXJzYXRpb25zLm1hcChMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW5ib3hDb252ZXJzYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdNZXRhZGF0YSkge20ucGFnaW5nTWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLnBhZ2luZ01ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbnMgPyAodGhpcy5jb252ZXJzYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlczogTWVzc2FnZVRlbXBsYXRlW107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50ZW1wbGF0ZXMpIHttLnRlbXBsYXRlcyA9IHByb3RvLnRlbXBsYXRlcy5tYXAoTWVzc2FnZVRlbXBsYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50ZW1wbGF0ZXMgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlcyA/ICh0aGlzLnRlbXBsYXRlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdE1lc3NhZ2VzUmVxdWVzdExpc3RNZXNzYWdlc0ZpbHRlcnNJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RNZXNzYWdlc1JlcXVlc3RMaXN0TWVzc2FnZXNGaWx0ZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TWVzc2FnZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0TWVzc2FnZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBmaWx0ZXJzOiBMaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVycztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE1lc3NhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RNZXNzYWdlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsdGVycykge20uZmlsdGVycyA9IExpc3RNZXNzYWdlc1JlcXVlc3RMaXN0TWVzc2FnZXNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlcnMgIT09IG51bGwpIHt0b1JldHVyblsnZmlsdGVycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWx0ZXJzID8gKHRoaXMuZmlsdGVycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWx0ZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE1lc3NhZ2VzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RNZXNzYWdlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TWVzc2FnZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RNZXNzYWdlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lc3NhZ2VzKSB7bS5tZXNzYWdlcyA9IHByb3RvLm1lc3NhZ2VzLm1hcChNZXNzYWdlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNZXNzYWdlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZXMgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVzc2FnZXMgPyAodGhpcy5tZXNzYWdlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdW1tYXJpemU6IGJvb2xlYW47XG4gICAgc3ViamVjdFBhcnRpY2lwYW50OiBTdWJqZWN0UGFydGljaXBhbnQ7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcbiAgICBjcmVhdGVkQWZ0ZXI6IERhdGU7XG4gICAgY3JlYXRlZEJlZm9yZTogRGF0ZTtcbiAgICBldmFsdWF0aW9uVHlwZTogZS5FdmFsdWF0ZVJlc3BvbnNlVHlwZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVkQWZ0ZXIpIHttLmNyZWF0ZWRBZnRlciA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWRBZnRlcik7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZEJlZm9yZSkge20uY3JlYXRlZEJlZm9yZSA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWRCZWZvcmUpO31cbiAgICAgICAgaWYgKHByb3RvLmV2YWx1YXRpb25UeXBlKSB7bS5ldmFsdWF0aW9uVHlwZSA9IHByb3RvLmV2YWx1YXRpb25UeXBlLm1hcCgodjogc3RyaW5nKSA9PiBlbnVtU3RyaW5nVG9WYWx1ZTxlLkV2YWx1YXRlUmVzcG9uc2VUeXBlPihlLkV2YWx1YXRlUmVzcG9uc2VUeXBlLCB2KSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1bW1hcml6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VtbWFyaXplJ10gPSB0aGlzLnN1bW1hcml6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZEFmdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWRBZnRlciAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkQWZ0ZXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZEFmdGVyID8gKHRoaXMuY3JlYXRlZEFmdGVyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWRBZnRlcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkQmVmb3JlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWRCZWZvcmUgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZEJlZm9yZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkQmVmb3JlID8gKHRoaXMuY3JlYXRlZEJlZm9yZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkQmVmb3JlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2YWx1YXRpb25UeXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydldmFsdWF0aW9uVHlwZSddID0gdGhpcy5ldmFsdWF0aW9uVHlwZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBldmFsdWF0aW9uczogUmVzcG9uc2VFdmFsdWF0aW9uW107XG4gICAgc3VtbWFyeTogTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnk7XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmV2YWx1YXRpb25zKSB7bS5ldmFsdWF0aW9ucyA9IHByb3RvLmV2YWx1YXRpb25zLm1hcChSZXNwb25zZUV2YWx1YXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5zdW1tYXJ5KSB7bS5zdW1tYXJ5ID0gTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnkuZnJvbVByb3RvKHByb3RvLnN1bW1hcnkpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZhbHVhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXZhbHVhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnZXZhbHVhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXZhbHVhdGlvbnMgPyAodGhpcy5ldmFsdWF0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ldmFsdWF0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdW1tYXJ5ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1bW1hcnkgIT09IG51bGwpIHt0b1JldHVyblsnc3VtbWFyeSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdW1tYXJ5ID8gKHRoaXMuc3VtbWFyeSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdW1tYXJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFdpZGdldHNSZXF1ZXN0TGlzdFdpZGdldHNGaWx0ZXJzIGltcGxlbWVudHMgaS5MaXN0V2lkZ2V0c1JlcXVlc3RMaXN0V2lkZ2V0c0ZpbHRlcnNJbnRlcmZhY2Uge1xuICAgIG5hbWVzcGFjZXM6IHN0cmluZ1tdO1xuICAgIHdpZGdldFR5cGVzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RXaWRnZXRzUmVxdWVzdExpc3RXaWRnZXRzRmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RXaWRnZXRzUmVxdWVzdExpc3RXaWRnZXRzRmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFdpZGdldHNSZXF1ZXN0TGlzdFdpZGdldHNGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZXNwYWNlcyddID0gdGhpcy5uYW1lc3BhY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldFR5cGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRUeXBlcyddID0gdGhpcy53aWRnZXRUeXBlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V2lkZ2V0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RXaWRnZXRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcbiAgICBvcHRpb25zOiBMaXN0V2lkZ2V0c1JlcXVlc3RMaXN0V2lkZ2V0c0ZpbHRlcnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0V2lkZ2V0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V2lkZ2V0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgaWYgKHByb3RvLm9wdGlvbnMpIHttLm9wdGlvbnMgPSBMaXN0V2lkZ2V0c1JlcXVlc3RMaXN0V2lkZ2V0c0ZpbHRlcnMuZnJvbVByb3RvKHByb3RvLm9wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0V2lkZ2V0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gdGhpcy5uYW1lc3BhY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnb3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcHRpb25zID8gKHRoaXMub3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RXaWRnZXRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RXaWRnZXRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdpZGdldHM6IFdpZGdldFtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0V2lkZ2V0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFdpZGdldHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by53aWRnZXRzKSB7bS53aWRnZXRzID0gcHJvdG8ud2lkZ2V0cy5tYXAoV2lkZ2V0LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RXaWRnZXRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLndpZGdldHMgIT09IG51bGwpIHt0b1JldHVyblsnd2lkZ2V0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy53aWRnZXRzID8gKHRoaXMud2lkZ2V0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy53aWRnZXRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3RMb29rdXBDb252ZXJzYXRpb25zRmlsdGVycyBpbXBsZW1lbnRzIGkuTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3RMb29rdXBDb252ZXJzYXRpb25zRmlsdGVyc0ludGVyZmFjZSB7XG4gICAgaW50ZXJuYWxQYXJ0aWNpcGFudElkOiBzdHJpbmdbXTtcbiAgICBsb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIGNoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGV4dGVybmFsQ29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBvcmlnaW5Mb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIG9yaWdpbkxvY2F0aW9uRXh0ZXJuYWxJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3RMb29rdXBDb252ZXJzYXRpb25zRmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IExvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0TG9va3VwQ29udmVyc2F0aW9uc0ZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb24pIHttLmxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLmxvY2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLm9yaWdpbkxvY2F0aW9uKSB7bS5vcmlnaW5Mb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5vcmlnaW5Mb2NhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0TG9va3VwQ29udmVyc2F0aW9uc0ZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnRlcm5hbFBhcnRpY2lwYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludGVybmFsUGFydGljaXBhbnRJZCddID0gdGhpcy5pbnRlcm5hbFBhcnRpY2lwYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXh0ZXJuYWxDb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXh0ZXJuYWxDb252ZXJzYXRpb25JZCddID0gdGhpcy5leHRlcm5hbENvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbkxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5Mb2NhdGlvbiddID0gdGhpcy5vcmlnaW5Mb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbkxvY2F0aW9uRXh0ZXJuYWxJZCddID0gdGhpcy5vcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBmaWx0ZXJzOiBMb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdExvb2t1cENvbnZlcnNhdGlvbnNGaWx0ZXJzO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdExvb2t1cENvbnZlcnNhdGlvbnNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25zOiBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zW107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb25zKSB7bS5jb252ZXJzYXRpb25zID0gcHJvdG8uY29udmVyc2F0aW9ucy5tYXAoTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlQ29udmVyc2F0aW9ucy5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Mb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb25zID8gKHRoaXMuY29udmVyc2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWFrZVRvb2xDYWxsUmVxdWVzdCBpbXBsZW1lbnRzIGkuTWFrZVRvb2xDYWxsUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZU9wdGlvbjogTWFrZVRvb2xDYWxsUmVxdWVzdE1lc3NhZ2VPcHRpb247XG4gICAgcGF5bG9hZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWFrZVRvb2xDYWxsUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE1ha2VUb29sQ2FsbFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVzc2FnZU9wdGlvbikge20ubWVzc2FnZU9wdGlvbiA9IE1ha2VUb29sQ2FsbFJlcXVlc3RNZXNzYWdlT3B0aW9uLmZyb21Qcm90byhwcm90by5tZXNzYWdlT3B0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWFrZVRvb2xDYWxsUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VPcHRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZU9wdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXNzYWdlT3B0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2VPcHRpb24gPyAodGhpcy5tZXNzYWdlT3B0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lc3NhZ2VPcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGF5bG9hZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF5bG9hZCddID0gdGhpcy5wYXlsb2FkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ha2VUb29sQ2FsbFJlc3BvbnNlIGltcGxlbWVudHMgaS5NYWtlVG9vbENhbGxSZXNwb25zZUludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNYWtlVG9vbENhbGxSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1ha2VUb29sQ2FsbFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NYWtlVG9vbENhbGxSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lZGlhIGltcGxlbWVudHMgaS5NZWRpYUludGVyZmFjZSB7XG4gICAgbWVkaWFDb250ZW50VHlwZTogc3RyaW5nO1xuICAgIG1lZGlhTG9jYXRpb25QYXRoOiBzdHJpbmc7XG4gICAgbWVkaWFGaWxlTmFtZTogc3RyaW5nO1xuICAgIGZpbGVTaXplOiBudW1iZXI7XG4gICAgbWVkaWFVcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1lZGlhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWVkaWEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsZVNpemUpIHttLmZpbGVTaXplID0gcGFyc2VJbnQocHJvdG8uZmlsZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWVkaWFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYUNvbnRlbnRUeXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWRpYUNvbnRlbnRUeXBlJ10gPSB0aGlzLm1lZGlhQ29udGVudFR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWFMb2NhdGlvblBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhTG9jYXRpb25QYXRoJ10gPSB0aGlzLm1lZGlhTG9jYXRpb25QYXRoO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhRmlsZU5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhRmlsZU5hbWUnXSA9IHRoaXMubWVkaWFGaWxlTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWxlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmlsZVNpemUnXSA9IHRoaXMuZmlsZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWFVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhVXJsJ10gPSB0aGlzLm1lZGlhVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ha2VUb29sQ2FsbFJlcXVlc3RNZXNzYWdlT3B0aW9uIGltcGxlbWVudHMgaS5NYWtlVG9vbENhbGxSZXF1ZXN0TWVzc2FnZU9wdGlvbkludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRPcHRpb25JZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWFrZVRvb2xDYWxsUmVxdWVzdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBNYWtlVG9vbENhbGxSZXF1ZXN0TWVzc2FnZU9wdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWFrZVRvb2xDYWxsUmVxdWVzdE1lc3NhZ2VPcHRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZCddID0gdGhpcy5tZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VsZWN0ZWRPcHRpb25JZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlbGVjdGVkT3B0aW9uSWRzJ10gPSB0aGlzLnNlbGVjdGVkT3B0aW9uSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhIGltcGxlbWVudHMgaS5NZXRhZGF0YUludGVyZmFjZSB7XG4gICAgaWRlbnRpZmllcjogZS5NZXRhZGF0YUlkZW50aWZpZXI7XG4gICAgZGF0YToge1trZXk6IHN0cmluZ106IHN0cmluZ307XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZXRhZGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1ldGFkYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmlkZW50aWZpZXIpIHttLmlkZW50aWZpZXIgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLk1ldGFkYXRhSWRlbnRpZmllcj4oZS5NZXRhZGF0YUlkZW50aWZpZXIsIHByb3RvLmlkZW50aWZpZXIpO31cbiAgICAgICAgaWYgKHByb3RvLmRhdGEpIHttLmRhdGEgPSBPYmplY3Qua2V5cyhwcm90by5kYXRhKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHByb3RvLmRhdGFba107IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWV0YWRhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZGVudGlmaWVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZGVudGlmaWVyJ10gPSB0aGlzLmlkZW50aWZpZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0YSA/ICh0aGlzLmRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNlaXZlTWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5IGltcGxlbWVudHMgaS5SZWNlaXZlTWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVjZWl2ZU1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlY2VpdmVNZXNzYWdlUmVxdWVzdE1ldGFkYXRhRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlY2VpdmVNZXNzYWdlUmVxdWVzdE1ldGFkYXRhRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluamVjdE1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeSBpbXBsZW1lbnRzIGkuSW5qZWN0TWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSW5qZWN0TWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW5qZWN0TWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JbmplY3RNZXNzYWdlUmVxdWVzdE1ldGFkYXRhRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ld0luYm94TGVhZENhcHR1cmVkUmVxdWVzdCBpbXBsZW1lbnRzIGkuTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwYXJlbnROYW1lc3BhY2U6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvblN1bW1hcnk6IHN0cmluZztcbiAgICBjYXB0dXJlZExlYWQ6IENhcHR1cmVkTGVhZDtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBjYXB0dXJlZEF0OiBEYXRlO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBpbml0aWF0b3JJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNhcHR1cmVkTGVhZCkge20uY2FwdHVyZWRMZWFkID0gQ2FwdHVyZWRMZWFkLmZyb21Qcm90byhwcm90by5jYXB0dXJlZExlYWQpO31cbiAgICAgICAgaWYgKHByb3RvLmNhcHR1cmVkQXQpIHttLmNhcHR1cmVkQXQgPSBuZXcgRGF0ZShwcm90by5jYXB0dXJlZEF0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcmVudE5hbWVzcGFjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFyZW50TmFtZXNwYWNlJ10gPSB0aGlzLnBhcmVudE5hbWVzcGFjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uU3VtbWFyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uU3VtbWFyeSddID0gdGhpcy5jb252ZXJzYXRpb25TdW1tYXJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhcHR1cmVkTGVhZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYXB0dXJlZExlYWQgIT09IG51bGwpIHt0b1JldHVyblsnY2FwdHVyZWRMZWFkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhcHR1cmVkTGVhZCA/ICh0aGlzLmNhcHR1cmVkTGVhZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYXB0dXJlZExlYWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc291cmNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb3VyY2UnXSA9IHRoaXMuc291cmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhcHR1cmVkQXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FwdHVyZWRBdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjYXB0dXJlZEF0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhcHR1cmVkQXQgPyAodGhpcy5jYXB0dXJlZEF0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNhcHR1cmVkQXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYXRvcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbml0aWF0b3JJZCddID0gdGhpcy5pbml0aWF0b3JJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOZXdJbmJveExlYWRDYXB0dXJlZFJlc3BvbnNlIGltcGxlbWVudHMgaS5OZXdJbmJveExlYWRDYXB0dXJlZFJlc3BvbnNlSW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE5ld0luYm94TGVhZENhcHR1cmVkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBOZXdJbmJveExlYWRDYXB0dXJlZFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5OZXdJbmJveExlYWRDYXB0dXJlZFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFnZWRSZXF1ZXN0T3B0aW9ucyBpbXBsZW1lbnRzIGkuUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhZ2VkUmVxdWVzdE9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYWdlZFJlcXVlc3RPcHRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlZFJlc3BvbnNlTWV0YWRhdGEgaW1wbGVtZW50cyBpLlBhZ2VkUmVzcG9uc2VNZXRhZGF0YUludGVyZmFjZSB7XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgdG90YWxSZXN1bHRzOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYWdlZFJlc3BvbnNlTWV0YWRhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG90YWxSZXN1bHRzKSB7bS50b3RhbFJlc3VsdHMgPSBwYXJzZUludChwcm90by50b3RhbFJlc3VsdHMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFnZWRSZXNwb25zZU1ldGFkYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b3RhbFJlc3VsdHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RvdGFsUmVzdWx0cyddID0gdGhpcy50b3RhbFJlc3VsdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVjZWl2ZU1lc3NhZ2VSZXF1ZXN0IGltcGxlbWVudHMgaS5SZWNlaXZlTWVzc2FnZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNlbmRlcklkOiBzdHJpbmc7XG4gICAgcmVjaXBpZW50SWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBjaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgdHlwZTogZS5NZXNzYWdlVHlwZTtcbiAgICBsb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgICBuYW1lc3BhY2U6IE5hbWVzcGFjZURldGFpbDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlY2VpdmVNZXNzYWdlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlY2VpdmVNZXNzYWdlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLnR5cGUpIHttLnR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLk1lc3NhZ2VUeXBlPihlLk1lc3NhZ2VUeXBlLCBwcm90by50eXBlKTt9XG4gICAgICAgIGlmIChwcm90by5sb2NhdGlvbikge20ubG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ubG9jYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1ldGFkYXRhKSB7bS5tZXRhZGF0YSA9IE9iamVjdC5rZXlzKHByb3RvLm1ldGFkYXRhKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHByb3RvLm1ldGFkYXRhW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICBpZiAocHJvdG8ubmFtZXNwYWNlKSB7bS5uYW1lc3BhY2UgPSBOYW1lc3BhY2VEZXRhaWwuZnJvbVByb3RvKHByb3RvLm5hbWVzcGFjZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlY2VpdmVNZXNzYWdlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZW5kZXJJZCddID0gdGhpcy5zZW5kZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWNpcGllbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVjaXBpZW50SWQnXSA9IHRoaXMucmVjaXBpZW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib2R5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib2R5J10gPSB0aGlzLmJvZHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhbm5lbCddID0gdGhpcy5jaGFubmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3R5cGUnXSA9IHRoaXMudHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9jYXRpb24nXSA9IHRoaXMubG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWRpYSddID0gdGhpcy5tZWRpYTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubmFtZXNwYWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5uYW1lc3BhY2UgPyAodGhpcy5uYW1lc3BhY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUNvbnZlcnNhdGlvbkZyb21Db252ZXJzYXRpb25WaWV3UmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVtb3ZlQ29udmVyc2F0aW9uRnJvbUNvbnZlcnNhdGlvblZpZXdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB2aWV3SWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHBhcnRpY2lwYW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUNvbnZlcnNhdGlvbkZyb21Db252ZXJzYXRpb25WaWV3UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlbW92ZUNvbnZlcnNhdGlvbkZyb21Db252ZXJzYXRpb25WaWV3UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVtb3ZlQ29udmVyc2F0aW9uRnJvbUNvbnZlcnNhdGlvblZpZXdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlld0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWV3SWQnXSA9IHRoaXMudmlld0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0aWNpcGFudElkJ10gPSB0aGlzLnBhcnRpY2lwYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29udmVyc2F0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLlNlYXJjaENvbnZlcnNhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGxvY2F0aW9uOiBlLlBsYXRmb3JtTG9jYXRpb247XG4gICAgc2VhcmNoVGVybTogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZWFyY2hDb252ZXJzYXRpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlYXJjaENvbnZlcnNhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9uKSB7bS5sb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5sb2NhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZWFyY2hDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25zOiBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbltdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9ucykge20uY29udmVyc2F0aW9ucyA9IHByb3RvLmNvbnZlcnNhdGlvbnMubWFwKFNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbnMgPyAodGhpcy5jb252ZXJzYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kTWVzc2FnZU9wdGlvbnMgaW1wbGVtZW50cyBpLlNlbmRNZXNzYWdlT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgcnVuU3luYzogYm9vbGVhbjtcbiAgICBza2lwTWVzc2FnZURlbGl2ZXJ5OiBib29sZWFuO1xuICAgIGFpTW9kZTogZS5BSU1vZGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kTWVzc2FnZU9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kTWVzc2FnZU9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWlNb2RlKSB7bS5haU1vZGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkFJTW9kZT4oZS5BSU1vZGUsIHByb3RvLmFpTW9kZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRNZXNzYWdlT3B0aW9uc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJ1blN5bmMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3J1blN5bmMnXSA9IHRoaXMucnVuU3luYzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za2lwTWVzc2FnZURlbGl2ZXJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza2lwTWVzc2FnZURlbGl2ZXJ5J10gPSB0aGlzLnNraXBNZXNzYWdlRGVsaXZlcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWlNb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhaU1vZGUnXSA9IHRoaXMuYWlNb2RlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbmRNZXNzYWdlUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2VuZE1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzZW5kZXI6IFBhcnRpY2lwYW50O1xuICAgIHJlY2lwaWVudDogUGFydGljaXBhbnQ7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICB0eXBlOiBlLk1lc3NhZ2VUeXBlO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBtZXRhZGF0YTogTWV0YWRhdGFbXTtcbiAgICBvcmlnaW5Mb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIG1lZGlhOiBNZWRpYVtdO1xuICAgIGNoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kTWVzc2FnZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kTWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc2VuZGVyKSB7bS5zZW5kZXIgPSBQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc2VuZGVyKTt9XG4gICAgICAgIGlmIChwcm90by5yZWNpcGllbnQpIHttLnJlY2lwaWVudCA9IFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5yZWNpcGllbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnR5cGUpIHttLnR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLk1lc3NhZ2VUeXBlPihlLk1lc3NhZ2VUeXBlLCBwcm90by50eXBlKTt9XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBwcm90by5tZXRhZGF0YS5tYXAoTWV0YWRhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5vcmlnaW5Mb2NhdGlvbikge20ub3JpZ2luTG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ub3JpZ2luTG9jYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1lZGlhKSB7bS5tZWRpYSA9IHByb3RvLm1lZGlhLm1hcChNZWRpYS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWwpIHttLmNoYW5uZWwgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbnZlcnNhdGlvbkNoYW5uZWw+KGUuQ29udmVyc2F0aW9uQ2hhbm5lbCwgcHJvdG8uY2hhbm5lbCk7fVxuICAgICAgICBpZiAocHJvdG8ub3B0aW9ucykge20ub3B0aW9ucyA9IFNlbmRNZXNzYWdlT3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ub3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRNZXNzYWdlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zZW5kZXIgIT09IG51bGwpIHt0b1JldHVyblsnc2VuZGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNlbmRlciA/ICh0aGlzLnNlbmRlciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zZW5kZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVjaXBpZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlY2lwaWVudCAhPT0gbnVsbCkge3RvUmV0dXJuWydyZWNpcGllbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmVjaXBpZW50ID8gKHRoaXMucmVjaXBpZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlY2lwaWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHlwZSddID0gdGhpcy50eXBlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JvZHknXSA9IHRoaXMuYm9keTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbkxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5Mb2NhdGlvbiddID0gdGhpcy5vcmlnaW5Mb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWRpYSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWRpYSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWRpYSA/ICh0aGlzLm1lZGlhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnb3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcHRpb25zID8gKHRoaXMub3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbmRNZXNzYWdlUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNlbmRNZXNzYWdlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VuZE1lc3NhZ2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRNZXNzYWdlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRNZXNzYWdlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrZmxvd0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3b3JrZmxvd0lkJ10gPSB0aGlzLndvcmtmbG93SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kV2lkZ2V0TWVzc2FnZVJlcXVlc3QgaW1wbGVtZW50cyBpLlNlbmRXaWRnZXRNZXNzYWdlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdHlwZTogZS5NZXNzYWdlVHlwZTtcbiAgICBib2R5OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhW107XG4gICAgbG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlbmRXaWRnZXRNZXNzYWdlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRXaWRnZXRNZXNzYWdlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50eXBlKSB7bS50eXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXNzYWdlVHlwZT4oZS5NZXNzYWdlVHlwZSwgcHJvdG8udHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKE1ldGFkYXRhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb24pIHttLmxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLmxvY2F0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VuZFdpZGdldE1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHlwZSddID0gdGhpcy50eXBlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JvZHknXSA9IHRoaXMuYm9keTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NhdGlvbiddID0gdGhpcy5sb2NhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kV2lkZ2V0TWVzc2FnZVJlc3BvbnNlIGltcGxlbWVudHMgaS5TZW5kV2lkZ2V0TWVzc2FnZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kV2lkZ2V0TWVzc2FnZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2VuZFdpZGdldE1lc3NhZ2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVkQXQpIHttLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWRBdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRXaWRnZXRNZXNzYWdlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZCddID0gdGhpcy5tZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZEF0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWRBdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZEF0ID8gKHRoaXMuY3JlYXRlZEF0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWRBdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRMYXN0U2VlblJlcXVlc3QgaW1wbGVtZW50cyBpLlNldExhc3RTZWVuUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBwYXJ0aWNpcGFudDogUGFydGljaXBhbnQ7XG4gICAgc3RhdHVzOiBlLlNldExhc3RTZWVuUmVxdWVzdFN0YXR1cztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldExhc3RTZWVuUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldExhc3RTZWVuUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudCkge20ucGFydGljaXBhbnQgPSBQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8ucGFydGljaXBhbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXR1cykge20uc3RhdHVzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5TZXRMYXN0U2VlblJlcXVlc3RTdGF0dXM+KGUuU2V0TGFzdFNlZW5SZXF1ZXN0U3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRMYXN0U2VlblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnQgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnQgPyAodGhpcy5wYXJ0aWNpcGFudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0TGFzdFNlZW5SZXNwb25zZSBpbXBsZW1lbnRzIGkuU2V0TGFzdFNlZW5SZXNwb25zZUludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnQ6IFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0TGFzdFNlZW5SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldExhc3RTZWVuUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnQpIHttLnBhcnRpY2lwYW50ID0gUGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0TGFzdFNlZW5SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50ID8gKHRoaXMucGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnkgaW1wbGVtZW50cyBpLkxpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5SW50ZXJmYWNlIHtcbiAgICBmZWVkYmFja1RoZW1lczogTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlUaGVtZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlU3VtbWFyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mZWVkYmFja1RoZW1lcykge20uZmVlZGJhY2tUaGVtZXMgPSBwcm90by5mZWVkYmFja1RoZW1lcy5tYXAoTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlUaGVtZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlU3VtbWFyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZlZWRiYWNrVGhlbWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZlZWRiYWNrVGhlbWVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZlZWRiYWNrVGhlbWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZlZWRiYWNrVGhlbWVzID8gKHRoaXMuZmVlZGJhY2tUaGVtZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmVlZGJhY2tUaGVtZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlUaGVtZSBpbXBsZW1lbnRzIGkuTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlUaGVtZUludGVyZmFjZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZXhhbXBsZXM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlUaGVtZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWUoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWVJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4YW1wbGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleGFtcGxlcyddID0gdGhpcy5leGFtcGxlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb252ZXJzYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUNvbnZlcnNhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVDb252ZXJzYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVDb252ZXJzYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTWVzc2FnZVN0YXR1c1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU1lc3NhZ2VTdGF0dXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBwYXJ0aWNpcGFudElkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBlLk1lc3NhZ2VTdGF0dXM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVNZXNzYWdlU3RhdHVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lc3NhZ2VTdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXR1cykge20uc3RhdHVzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXNzYWdlU3RhdHVzPihlLk1lc3NhZ2VTdGF0dXMsIHByb3RvLnN0YXR1cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lc3NhZ2VTdGF0dXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50SWQnXSA9IHRoaXMucGFydGljaXBhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGVtcGxhdGU6IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRlbXBsYXRlKSB7bS50ZW1wbGF0ZSA9IE1lc3NhZ2VUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8udGVtcGxhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGVtcGxhdGUgPyAodGhpcy50ZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGVtcGxhdGU6IE1lc3NhZ2VUZW1wbGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGVtcGxhdGUpIHttLnRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLmZyb21Qcm90byhwcm90by50ZW1wbGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsndGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGVtcGxhdGUgPyAodGhpcy50ZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50ZW1wbGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVXaWRnZXRSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGFsbG93ZWRVcmxzOiBzdHJpbmdbXTtcbiAgICB3ZWxjb21lTWVzc2FnZTogc3RyaW5nO1xuICAgIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgICBhY2NlbnRDb2xvcjogc3RyaW5nO1xuICAgIGFjY2VudFRleHRDb2xvcjogc3RyaW5nO1xuICAgIHNraXBDb250YWN0Q2FwdHVyZTogYm9vbGVhbjtcbiAgICBhZGRpdGlvbmFsUHJvbXB0SW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG4gICAgYXNzaXN0YW50TmFtZTogc3RyaW5nO1xuICAgIGFzc2lzdGFudEF2YXRhclVybDogc3RyaW5nO1xuICAgIHBvc2l0aW9uOiBlLldpZGdldFBvc2l0aW9uO1xuICAgIGhpZGVNb2JpbGVDdGE6IGJvb2xlYW47XG4gICAgY3VzdG9tR3JlZXRpbmdNZXNzYWdlOiBzdHJpbmc7XG4gICAgZW5hYmxlR3JlZXRpbmdNZXNzYWdlOiBib29sZWFuO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIGFzc2lzdGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVXaWRnZXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlV2lkZ2V0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3NpdGlvbikge20ucG9zaXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLldpZGdldFBvc2l0aW9uPihlLldpZGdldFBvc2l0aW9uLCBwcm90by5wb3NpdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZVdpZGdldFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0SWQnXSA9IHRoaXMud2lkZ2V0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb2xvciddID0gdGhpcy5jb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxvd2VkVXJscyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsb3dlZFVybHMnXSA9IHRoaXMuYWxsb3dlZFVybHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2VsY29tZU1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dlbGNvbWVNZXNzYWdlJ10gPSB0aGlzLndlbGNvbWVNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzRW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNFbmFibGVkJ10gPSB0aGlzLmlzRW5hYmxlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHRDb2xvciddID0gdGhpcy50ZXh0Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZW50Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY2VudENvbG9yJ10gPSB0aGlzLmFjY2VudENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY2VudFRleHRDb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZW50VGV4dENvbG9yJ10gPSB0aGlzLmFjY2VudFRleHRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za2lwQ29udGFjdENhcHR1cmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NraXBDb250YWN0Q2FwdHVyZSddID0gdGhpcy5za2lwQ29udGFjdENhcHR1cmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9ucyddID0gdGhpcy5hZGRpdGlvbmFsUHJvbXB0SW5zdHJ1Y3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudE5hbWUnXSA9IHRoaXMuYXNzaXN0YW50TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudEF2YXRhclVybCddID0gdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zaXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc2l0aW9uJ10gPSB0aGlzLnBvc2l0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpZGVNb2JpbGVDdGEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVNb2JpbGVDdGEnXSA9IHRoaXMuaGlkZU1vYmlsZUN0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbUdyZWV0aW5nTWVzc2FnZSddID0gdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmFibGVHcmVldGluZ01lc3NhZ2UnXSA9IHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXNzaXN0YW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudElkJ10gPSB0aGlzLmFzc2lzdGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVdpZGdldFJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVXaWRnZXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgd2lkZ2V0OiBXaWRnZXQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVXaWRnZXRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVdpZGdldFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLndpZGdldCkge20ud2lkZ2V0ID0gV2lkZ2V0LmZyb21Qcm90byhwcm90by53aWRnZXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVXaWRnZXRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy53aWRnZXQgIT09IG51bGwpIHt0b1JldHVyblsnd2lkZ2V0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLndpZGdldCA/ICh0aGlzLndpZGdldCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy53aWRnZXQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0Q29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVwc2VydENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBzZXJ0Q29uZmlndXJhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcHNlcnRDb25maWd1cmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25maWd1cmF0aW9uKSB7bS5jb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29uZmlndXJhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25maWd1cmF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZpZ3VyYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmlndXJhdGlvbiA/ICh0aGlzLmNvbmZpZ3VyYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmlndXJhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydENvbmZpZ3VyYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBzZXJ0Q29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBzZXJ0Q29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0Q29uZmlndXJhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbmZpZ3VyYXRpb24pIHttLmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmZyb21Qcm90byhwcm90by5jb25maWd1cmF0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBzZXJ0Q29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25maWd1cmF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZpZ3VyYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmlndXJhdGlvbiA/ICh0aGlzLmNvbmZpZ3VyYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmlndXJhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcHNlcnRQcm9kdWN0RmVhdHVyZVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwc2VydFByb2R1Y3RGZWF0dXJlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcHJvZHVjdEZlYXR1cmU6IFByb2R1Y3RGZWF0dXJlO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBzZXJ0UHJvZHVjdEZlYXR1cmVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0UHJvZHVjdEZlYXR1cmVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2R1Y3RGZWF0dXJlKSB7bS5wcm9kdWN0RmVhdHVyZSA9IFByb2R1Y3RGZWF0dXJlLmZyb21Qcm90byhwcm90by5wcm9kdWN0RmVhdHVyZSk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICBpZiAocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KSB7bS5zdWJqZWN0UGFydGljaXBhbnQgPSBTdWJqZWN0UGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydFByb2R1Y3RGZWF0dXJlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2R1Y3RGZWF0dXJlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb2R1Y3RGZWF0dXJlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Byb2R1Y3RGZWF0dXJlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByb2R1Y3RGZWF0dXJlID8gKHRoaXMucHJvZHVjdEZlYXR1cmUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJvZHVjdEZlYXR1cmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydFByb2R1Y3RGZWF0dXJlUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwc2VydFByb2R1Y3RGZWF0dXJlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHByb2R1Y3RGZWF0dXJlOiBQcm9kdWN0RmVhdHVyZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFByb2R1Y3RGZWF0dXJlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcHNlcnRQcm9kdWN0RmVhdHVyZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2R1Y3RGZWF0dXJlKSB7bS5wcm9kdWN0RmVhdHVyZSA9IFByb2R1Y3RGZWF0dXJlLmZyb21Qcm90byhwcm90by5wcm9kdWN0RmVhdHVyZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydFByb2R1Y3RGZWF0dXJlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0RmVhdHVyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0RmVhdHVyZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwcm9kdWN0RmVhdHVyZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0RmVhdHVyZSA/ICh0aGlzLnByb2R1Y3RGZWF0dXJlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByb2R1Y3RGZWF0dXJlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdpZGdldFZpc2l0IGltcGxlbWVudHMgaS5XaWRnZXRWaXNpdEludGVyZmFjZSB7XG4gICAgdmlzaXRvcklkOiBzdHJpbmc7XG4gICAgdmlzaXRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogV2lkZ2V0VmlzaXQge1xuICAgICAgICBsZXQgbSA9IG5ldyBXaWRnZXRWaXNpdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuV2lkZ2V0VmlzaXRJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aXNpdG9ySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Zpc2l0b3JJZCddID0gdGhpcy52aXNpdG9ySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlzaXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlzaXRJZCddID0gdGhpcy52aXNpdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|
|
4407
|
+
export class WidgetLocation {
|
|
4408
|
+
namespace;
|
|
4409
|
+
businessName;
|
|
4410
|
+
address;
|
|
4411
|
+
address2;
|
|
4412
|
+
city;
|
|
4413
|
+
state;
|
|
4414
|
+
zip;
|
|
4415
|
+
country;
|
|
4416
|
+
static fromProto(proto) {
|
|
4417
|
+
let m = new WidgetLocation();
|
|
4418
|
+
m = Object.assign(m, proto);
|
|
4419
|
+
return m;
|
|
4420
|
+
}
|
|
4421
|
+
constructor(kwargs) {
|
|
4422
|
+
if (!kwargs) {
|
|
4423
|
+
return;
|
|
4424
|
+
}
|
|
4425
|
+
Object.assign(this, kwargs);
|
|
4426
|
+
}
|
|
4427
|
+
toApiJson() {
|
|
4428
|
+
const toReturn = {};
|
|
4429
|
+
if (typeof this.namespace !== 'undefined') {
|
|
4430
|
+
toReturn['namespace'] = this.namespace;
|
|
4431
|
+
}
|
|
4432
|
+
if (typeof this.businessName !== 'undefined') {
|
|
4433
|
+
toReturn['businessName'] = this.businessName;
|
|
4434
|
+
}
|
|
4435
|
+
if (typeof this.address !== 'undefined') {
|
|
4436
|
+
toReturn['address'] = this.address;
|
|
4437
|
+
}
|
|
4438
|
+
if (typeof this.address2 !== 'undefined') {
|
|
4439
|
+
toReturn['address2'] = this.address2;
|
|
4440
|
+
}
|
|
4441
|
+
if (typeof this.city !== 'undefined') {
|
|
4442
|
+
toReturn['city'] = this.city;
|
|
4443
|
+
}
|
|
4444
|
+
if (typeof this.state !== 'undefined') {
|
|
4445
|
+
toReturn['state'] = this.state;
|
|
4446
|
+
}
|
|
4447
|
+
if (typeof this.zip !== 'undefined') {
|
|
4448
|
+
toReturn['zip'] = this.zip;
|
|
4449
|
+
}
|
|
4450
|
+
if (typeof this.country !== 'undefined') {
|
|
4451
|
+
toReturn['country'] = this.country;
|
|
4452
|
+
}
|
|
4453
|
+
return toReturn;
|
|
4454
|
+
}
|
|
4455
|
+
}
|
|
4456
|
+
export class ListWidgetLocationsRequest {
|
|
4457
|
+
widgetId;
|
|
4458
|
+
cursor;
|
|
4459
|
+
pageSize;
|
|
4460
|
+
query;
|
|
4461
|
+
static fromProto(proto) {
|
|
4462
|
+
let m = new ListWidgetLocationsRequest();
|
|
4463
|
+
m = Object.assign(m, proto);
|
|
4464
|
+
if (proto.pageSize) {
|
|
4465
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
|
4466
|
+
}
|
|
4467
|
+
return m;
|
|
4468
|
+
}
|
|
4469
|
+
constructor(kwargs) {
|
|
4470
|
+
if (!kwargs) {
|
|
4471
|
+
return;
|
|
4472
|
+
}
|
|
4473
|
+
Object.assign(this, kwargs);
|
|
4474
|
+
}
|
|
4475
|
+
toApiJson() {
|
|
4476
|
+
const toReturn = {};
|
|
4477
|
+
if (typeof this.widgetId !== 'undefined') {
|
|
4478
|
+
toReturn['widgetId'] = this.widgetId;
|
|
4479
|
+
}
|
|
4480
|
+
if (typeof this.cursor !== 'undefined') {
|
|
4481
|
+
toReturn['cursor'] = this.cursor;
|
|
4482
|
+
}
|
|
4483
|
+
if (typeof this.pageSize !== 'undefined') {
|
|
4484
|
+
toReturn['pageSize'] = this.pageSize;
|
|
4485
|
+
}
|
|
4486
|
+
if (typeof this.query !== 'undefined') {
|
|
4487
|
+
toReturn['query'] = this.query;
|
|
4488
|
+
}
|
|
4489
|
+
return toReturn;
|
|
4490
|
+
}
|
|
4491
|
+
}
|
|
4492
|
+
export class ListWidgetLocationsResponse {
|
|
4493
|
+
locations;
|
|
4494
|
+
nextCursor;
|
|
4495
|
+
hasMore;
|
|
4496
|
+
static fromProto(proto) {
|
|
4497
|
+
let m = new ListWidgetLocationsResponse();
|
|
4498
|
+
m = Object.assign(m, proto);
|
|
4499
|
+
if (proto.locations) {
|
|
4500
|
+
m.locations = proto.locations.map(WidgetLocation.fromProto);
|
|
4501
|
+
}
|
|
4502
|
+
return m;
|
|
4503
|
+
}
|
|
4504
|
+
constructor(kwargs) {
|
|
4505
|
+
if (!kwargs) {
|
|
4506
|
+
return;
|
|
4507
|
+
}
|
|
4508
|
+
Object.assign(this, kwargs);
|
|
4509
|
+
}
|
|
4510
|
+
toApiJson() {
|
|
4511
|
+
const toReturn = {};
|
|
4512
|
+
if (typeof this.locations !== 'undefined' && this.locations !== null) {
|
|
4513
|
+
toReturn['locations'] = this.locations.map((r) => 'toApiJson' in r ? r.toApiJson() : r);
|
|
4514
|
+
}
|
|
4515
|
+
if (typeof this.nextCursor !== 'undefined') {
|
|
4516
|
+
toReturn['nextCursor'] = this.nextCursor;
|
|
4517
|
+
}
|
|
4518
|
+
if (typeof this.hasMore !== 'undefined') {
|
|
4519
|
+
toReturn['hasMore'] = this.hasMore;
|
|
4520
|
+
}
|
|
4521
|
+
return toReturn;
|
|
4522
|
+
}
|
|
4523
|
+
}
|
|
4524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29udmVyc2F0aW9uX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENB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ekssSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFLENBQUM7WUFBQSxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUFBLENBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7WUFBQSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUFBLENBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMvYXBpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uLCBQcm9kdWN0RmVhdHVyZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb252ZXJzYXRpb24sIENvbnZlcnNhdGlvbktleSB9IGZyb20gJy4vY29udmVyc2F0aW9uJztcbmltcG9ydCB7IENvbnZlcnNhdGlvbkV4cG9ydFJlY29yZCB9IGZyb20gJy4vY29udmVyc2F0aW9uLWV4cG9ydCc7XG5pbXBvcnQgeyBEYXRhU291cmNlcywgV2lkZ2V0IH0gZnJvbSAnLi93aWRnZXQnO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi9tZXNzYWdlJztcbmltcG9ydCB7IE1lc3NhZ2VUZW1wbGF0ZSB9IGZyb20gJy4vbWVzc2FnZS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBQYXJ0aWNpcGFudCwgUGFydGljaXBhbnRLZXkgfSBmcm9tICcuL3BhcnRpY2lwYW50JztcbmltcG9ydCB7IFJlc3BvbnNlRXZhbHVhdGlvbiB9IGZyb20gJy4vZXZhbHVhdGlvbic7XG5pbXBvcnQgeyBTdWJqZWN0UGFydGljaXBhbnQsIEtleVZhbHVlUGFpciwgTmFtZXNwYWNlRGV0YWlsIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgVmlldyB9IGZyb20gJy4vY29udmVyc2F0aW9uLXZpZXcnO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQWRkQ29udmVyc2F0aW9uVG9Db252ZXJzYXRpb25WaWV3UmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRkQ29udmVyc2F0aW9uVG9Db252ZXJzYXRpb25WaWV3UmVxdWVzdEludGVyZmFjZSB7XG4gICAgdmlld0lkOiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBwYXJ0aWNpcGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvblZpZXdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQ29udmVyc2F0aW9uVG9Db252ZXJzYXRpb25WaWV3UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkQ29udmVyc2F0aW9uVG9Db252ZXJzYXRpb25WaWV3UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZXdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlld0lkJ10gPSB0aGlzLnZpZXdJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydGljaXBhbnRJZCddID0gdGhpcy5wYXJ0aWNpcGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZE11bHRpUGFydGljaXBhbnRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZE11bHRpUGFydGljaXBhbnRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZE11bHRpUGFydGljaXBhbnRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTXVsdGlQYXJ0aWNpcGFudHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbkNvbnZlcnNhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkFzc2lnbkNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgYXNzaWduZWVVc2VySWRzOiBzdHJpbmdbXTtcbiAgICBsaW5rVG9Dcm1Pd25lcjogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFzc2lnbkNvbnZlcnNhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBc3NpZ25Db252ZXJzYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Bc3NpZ25Db252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lnbmVlVXNlcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXNzaWduZWVVc2VySWRzJ10gPSB0aGlzLmFzc2lnbmVlVXNlcklkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5saW5rVG9Dcm1Pd25lciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGlua1RvQ3JtT3duZXInXSA9IHRoaXMubGlua1RvQ3JtT3duZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXNzaWduQ29udmVyc2F0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFzc2lnbkNvbnZlcnNhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFzc2lnbkNvbnZlcnNhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQXNzaWduQ29udmVyc2F0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFzc2lnbkNvbnZlcnNhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuY2VsQUlSZXNwb25kZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5DYW5jZWxBSVJlc3BvbmRlclJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYW5jZWxBSVJlc3BvbmRlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5jZWxBSVJlc3BvbmRlclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNhbmNlbEFJUmVzcG9uZGVyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYXB0dXJlZExlYWQgaW1wbGVtZW50cyBpLkNhcHR1cmVkTGVhZEludGVyZmFjZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgcGhvbmU6IHN0cmluZztcbiAgICBjb250YWN0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENhcHR1cmVkTGVhZCB7XG4gICAgICAgIGxldCBtID0gbmV3IENhcHR1cmVkTGVhZCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FwdHVyZWRMZWFkSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbCddID0gdGhpcy5lbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waG9uZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGhvbmUnXSA9IHRoaXMucGhvbmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0SWQnXSA9IHRoaXMuY29udGFjdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoYW5uZWxBdmFpbGFiaWxpdHkgaW1wbGVtZW50cyBpLkNoYW5uZWxBdmFpbGFiaWxpdHlJbnRlcmZhY2Uge1xuICAgIGNoYW5uZWw6IGUuQ29udmVyc2F0aW9uQ2hhbm5lbDtcbiAgICBpc0F2YWlsYWJsZTogYm9vbGVhbjtcbiAgICBzdGF0dXNlczogQ2hhbm5lbFN0YXR1c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2hhbm5lbEF2YWlsYWJpbGl0eSB7XG4gICAgICAgIGxldCBtID0gbmV3IENoYW5uZWxBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbCkge20uY2hhbm5lbCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ29udmVyc2F0aW9uQ2hhbm5lbD4oZS5Db252ZXJzYXRpb25DaGFubmVsLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoQ2hhbm5lbFN0YXR1cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DaGFubmVsQXZhaWxhYmlsaXR5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhbm5lbCddID0gdGhpcy5jaGFubmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQXZhaWxhYmxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0F2YWlsYWJsZSddID0gdGhpcy5pc0F2YWlsYWJsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGF0dXNlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGF0dXNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGF0dXNlcyA/ICh0aGlzLnN0YXR1c2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXR1c2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoYW5uZWxTdGF0dXMgaW1wbGVtZW50cyBpLkNoYW5uZWxTdGF0dXNJbnRlcmZhY2Uge1xuICAgIHN0YXR1czogZS5TdGF0dXM7XG4gICAgaTE4bktleTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2hhbm5lbFN0YXR1cyB7XG4gICAgICAgIGxldCBtID0gbmV3IENoYW5uZWxTdGF0dXMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzKSB7bS5zdGF0dXMgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlN0YXR1cz4oZS5TdGF0dXMsIHByb3RvLnN0YXR1cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNoYW5uZWxTdGF0dXNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaTE4bktleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaTE4bktleSddID0gdGhpcy5pMThuS2V5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW11bmljYXRpb25JbmZvIGltcGxlbWVudHMgaS5Db21tdW5pY2F0aW9uSW5mb0ludGVyZmFjZSB7XG4gICAgY2hhbm5lbDogZS5Db21tdW5pY2F0aW9uQ2hhbm5lbFR5cGU7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ29tbXVuaWNhdGlvbkluZm8ge1xuICAgICAgICBsZXQgbSA9IG5ldyBDb21tdW5pY2F0aW9uSW5mbygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db21tdW5pY2F0aW9uQ2hhbm5lbFR5cGU+KGUuQ29tbXVuaWNhdGlvbkNoYW5uZWxUeXBlLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ29tbXVuaWNhdGlvbkluZm9JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVsJ10gPSB0aGlzLmNoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWRlbnRpZmllciddID0gdGhpcy5pZGVudGlmaWVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudCBpbXBsZW1lbnRzIGkuQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIGNvdW50OiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDb252ZXJzYXRpb25NZXNzYWdlQ291bnQge1xuICAgICAgICBsZXQgbSA9IG5ldyBDb252ZXJzYXRpb25NZXNzYWdlQ291bnQoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY291bnQpIHttLmNvdW50ID0gcGFyc2VJbnQocHJvdG8uY291bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudCddID0gdGhpcy5jb3VudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zIGltcGxlbWVudHMgaS5Mb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2VDb252ZXJzYXRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlQ29udmVyc2F0aW9ucygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5wYXJ0aWNpcGFudHMpIHttLnBhcnRpY2lwYW50cyA9IHByb3RvLnBhcnRpY2lwYW50cy5tYXAoUGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlQ29udmVyc2F0aW9uc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlc3BvbnNlQ291bnRzRW50cnkgaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VDb3VudHNFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VDb3VudHNFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VDb3VudHNFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52YWx1ZSkge20udmFsdWUgPSBwYXJzZUludChwcm90by52YWx1ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlc3BvbnNlQ291bnRzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgICBjaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgZXh0ZXJuYWxDb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBvcmlnaW5Mb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIG9yaWdpbkxvY2F0aW9uRXh0ZXJuYWxJZDogc3RyaW5nO1xuICAgIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWwpIHttLmNoYW5uZWwgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkNvbnZlcnNhdGlvbkNoYW5uZWw+KGUuQ29udmVyc2F0aW9uQ2hhbm5lbCwgcHJvdG8uY2hhbm5lbCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnVwZGF0ZWQpIHttLnVwZGF0ZWQgPSBuZXcgRGF0ZShwcm90by51cGRhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5vcmlnaW5Mb2NhdGlvbikge20ub3JpZ2luTG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ub3JpZ2luTG9jYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVsJ10gPSB0aGlzLmNoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXh0ZXJuYWxDb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXh0ZXJuYWxDb252ZXJzYXRpb25JZCddID0gdGhpcy5leHRlcm5hbENvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5Mb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luTG9jYXRpb24nXSA9IHRoaXMub3JpZ2luTG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luTG9jYXRpb25FeHRlcm5hbElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQnXSA9IHRoaXMub3JpZ2luTG9jYXRpb25FeHRlcm5hbElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluc3RhbmNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2luc3RhbmNlSWQnXSA9IHRoaXMuaW5zdGFuY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudHMgPyAodGhpcy5wYXJ0aWNpcGFudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlOiBNZXNzYWdlVGVtcGxhdGU7XG4gICAgc3ViamVjdFBhcnRpY2lwYW50OiBTdWJqZWN0UGFydGljaXBhbnQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50ZW1wbGF0ZSkge20udGVtcGxhdGUgPSBNZXNzYWdlVGVtcGxhdGUuZnJvbVByb3RvKHByb3RvLnRlbXBsYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlID8gKHRoaXMudGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlOiBNZXNzYWdlVGVtcGxhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRlbXBsYXRlKSB7bS50ZW1wbGF0ZSA9IE1lc3NhZ2VUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8udGVtcGxhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlID8gKHRoaXMudGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTXVsdGlNZXNzYWdlc1JlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpTWVzc2FnZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdO1xuICAgIGxhc3RTZWVuOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTXVsdGlNZXNzYWdlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNdWx0aU1lc3NhZ2VzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlcykge20ubWVzc2FnZXMgPSBwcm90by5tZXNzYWdlcy5tYXAoTWVzc2FnZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmxhc3RTZWVuKSB7bS5sYXN0U2VlbiA9IG5ldyBEYXRlKHByb3RvLmxhc3RTZWVuKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTXVsdGlNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXNzYWdlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXNzYWdlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlcyA/ICh0aGlzLm1lc3NhZ2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lc3NhZ2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhc3RTZWVuICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxhc3RTZWVuICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xhc3RTZWVuJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxhc3RTZWVuID8gKHRoaXMubGFzdFNlZW4gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubGFzdFNlZW47fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgd2lkZ2V0SWQ6IHN0cmluZztcbiAgICBjaGF0U291cmNlVXJsOiBzdHJpbmc7XG4gICAgZ3JlZXRpbmdNZXNzYWdlOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IEtleVZhbHVlUGFpcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVdpZGdldENvbnZlcnNhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKEtleVZhbHVlUGFpci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldElkJ10gPSB0aGlzLndpZGdldElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYXRTb3VyY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYXRTb3VyY2VVcmwnXSA9IHRoaXMuY2hhdFNvdXJjZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncmVldGluZ01lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dyZWV0aW5nTWVzc2FnZSddID0gdGhpcy5ncmVldGluZ01lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdpZGdldFBhcnRpY2lwYW50VG9rZW46IHN0cmluZztcbiAgICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbiAgICBncmVldGluZ01lc3NhZ2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlV2lkZ2V0Q29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRQYXJ0aWNpcGFudFRva2VuICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRQYXJ0aWNpcGFudFRva2VuJ10gPSB0aGlzLndpZGdldFBhcnRpY2lwYW50VG9rZW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncmVldGluZ01lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ3JlZXRpbmdNZXNzYWdlSWQnXSA9IHRoaXMuZ3JlZXRpbmdNZXNzYWdlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlV2lkZ2V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlV2lkZ2V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgYWxsb3dlZFVybHM6IHN0cmluZ1tdO1xuICAgIHdlbGNvbWVNZXNzYWdlOiBzdHJpbmc7XG4gICAgZGF0YVNvdXJjZXM6IERhdGFTb3VyY2VzO1xuICAgIHRleHRDb2xvcjogc3RyaW5nO1xuICAgIGFjY2VudENvbG9yOiBzdHJpbmc7XG4gICAgYWNjZW50VGV4dENvbG9yOiBzdHJpbmc7XG4gICAgc2tpcENvbnRhY3RDYXB0dXJlOiBib29sZWFuO1xuICAgIGFkZGl0aW9uYWxQcm9tcHRJbnN0cnVjdGlvbnM6IHN0cmluZztcbiAgICBhc3Npc3RhbnROYW1lOiBzdHJpbmc7XG4gICAgYXNzaXN0YW50QXZhdGFyVXJsOiBzdHJpbmc7XG4gICAgcG9zaXRpb246IGUuV2lkZ2V0UG9zaXRpb247XG4gICAgaGlkZU1vYmlsZUN0YTogYm9vbGVhbjtcbiAgICBjdXN0b21HcmVldGluZ01lc3NhZ2U6IHN0cmluZztcbiAgICBlbmFibGVHcmVldGluZ01lc3NhZ2U6IGJvb2xlYW47XG4gICAgd2lkZ2V0VHlwZTogc3RyaW5nO1xuICAgIGFzc2lzdGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVXaWRnZXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlV2lkZ2V0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXRhU291cmNlcykge20uZGF0YVNvdXJjZXMgPSBEYXRhU291cmNlcy5mcm9tUHJvdG8ocHJvdG8uZGF0YVNvdXJjZXMpO31cbiAgICAgICAgaWYgKHByb3RvLnBvc2l0aW9uKSB7bS5wb3NpdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuV2lkZ2V0UG9zaXRpb24+KGUuV2lkZ2V0UG9zaXRpb24sIHByb3RvLnBvc2l0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlV2lkZ2V0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gdGhpcy5uYW1lc3BhY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbG9yJ10gPSB0aGlzLmNvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbG93ZWRVcmxzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbGxvd2VkVXJscyddID0gdGhpcy5hbGxvd2VkVXJsczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53ZWxjb21lTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2VsY29tZU1lc3NhZ2UnXSA9IHRoaXMud2VsY29tZU1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGF0YVNvdXJjZXMgIT09IG51bGwpIHt0b1JldHVyblsnZGF0YVNvdXJjZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0YVNvdXJjZXMgPyAodGhpcy5kYXRhU291cmNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRhU291cmNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHRDb2xvciddID0gdGhpcy50ZXh0Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZW50Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY2VudENvbG9yJ10gPSB0aGlzLmFjY2VudENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY2VudFRleHRDb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZW50VGV4dENvbG9yJ10gPSB0aGlzLmFjY2VudFRleHRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za2lwQ29udGFjdENhcHR1cmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NraXBDb250YWN0Q2FwdHVyZSddID0gdGhpcy5za2lwQ29udGFjdENhcHR1cmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9ucyddID0gdGhpcy5hZGRpdGlvbmFsUHJvbXB0SW5zdHJ1Y3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudE5hbWUnXSA9IHRoaXMuYXNzaXN0YW50TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Fzc2lzdGFudEF2YXRhclVybCddID0gdGhpcy5hc3Npc3RhbnRBdmF0YXJVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zaXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc2l0aW9uJ10gPSB0aGlzLnBvc2l0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpZGVNb2JpbGVDdGEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVNb2JpbGVDdGEnXSA9IHRoaXMuaGlkZU1vYmlsZUN0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbUdyZWV0aW5nTWVzc2FnZSddID0gdGhpcy5jdXN0b21HcmVldGluZ01lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmFibGVHcmVldGluZ01lc3NhZ2UnXSA9IHRoaXMuZW5hYmxlR3JlZXRpbmdNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldFR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldFR5cGUnXSA9IHRoaXMud2lkZ2V0VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXNzaXN0YW50SWQnXSA9IHRoaXMuYXNzaXN0YW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlV2lkZ2V0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZVdpZGdldFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB3aWRnZXQ6IFdpZGdldDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVdpZGdldFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlV2lkZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ud2lkZ2V0KSB7bS53aWRnZXQgPSBXaWRnZXQuZnJvbVByb3RvKHByb3RvLndpZGdldCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVdpZGdldFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLndpZGdldCAhPT0gbnVsbCkge3RvUmV0dXJuWyd3aWRnZXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMud2lkZ2V0ID8gKHRoaXMud2lkZ2V0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLndpZGdldDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YURhdGFFbnRyeSBpbXBsZW1lbnRzIGkuTWV0YWRhdGFEYXRhRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZXRhZGF0YURhdGFFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1ldGFkYXRhRGF0YUVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZXRhZGF0YURhdGFFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmFsdWUnXSA9IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZU1lc3NhZ2VSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVNZXNzYWdlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVNZXNzYWdlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZU1lc3NhZ2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVNZXNzYWdlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVXaWRnZXRSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlV2lkZ2V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZVdpZGdldFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZVdpZGdldFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0SWQnXSA9IHRoaXMud2lkZ2V0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbiBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbkludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgbGF0ZXN0TWVzc2FnZTogTWVzc2FnZTtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG4gICAgc3VtbWFyeTogc3RyaW5nO1xuICAgIGV2ZW50OiBFdmVudDtcbiAgICBtZXNzYWdlOiBNZXNzYWdlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ubGF0ZXN0TWVzc2FnZSkge20ubGF0ZXN0TWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVByb3RvKHByb3RvLmxhdGVzdE1lc3NhZ2UpO31cbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmV2ZW50KSB7bS5ldmVudCA9IEV2ZW50LmZyb21Qcm90byhwcm90by5ldmVudCk7fVxuICAgICAgICBpZiAocHJvdG8ubWVzc2FnZSkge20ubWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVByb3RvKHByb3RvLm1lc3NhZ2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXRlc3RNZXNzYWdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxhdGVzdE1lc3NhZ2UgIT09IG51bGwpIHt0b1JldHVyblsnbGF0ZXN0TWVzc2FnZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sYXRlc3RNZXNzYWdlID8gKHRoaXMubGF0ZXN0TWVzc2FnZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5sYXRlc3RNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VtbWFyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VtbWFyeSddID0gdGhpcy5zdW1tYXJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmV2ZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V2ZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV2ZW50ID8gKHRoaXMuZXZlbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXZlbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXNzYWdlICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVzc2FnZSA/ICh0aGlzLm1lc3NhZ2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbiBpbXBsZW1lbnRzIGkuU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25JbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICAgIGxhdGVzdE1lc3NhZ2U6IE1lc3NhZ2U7XG4gICAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5sYXRlc3RNZXNzYWdlKSB7bS5sYXRlc3RNZXNzYWdlID0gTWVzc2FnZS5mcm9tUHJvdG8ocHJvdG8ubGF0ZXN0TWVzc2FnZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9uID8gKHRoaXMuY29udmVyc2F0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXRlc3RNZXNzYWdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxhdGVzdE1lc3NhZ2UgIT09IG51bGwpIHt0b1JldHVyblsnbGF0ZXN0TWVzc2FnZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sYXRlc3RNZXNzYWdlID8gKHRoaXMubGF0ZXN0TWVzc2FnZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5sYXRlc3RNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXNwb25zZURldGFpbGVkQ29udmVyc2F0aW9uIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25JbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgZXZlbnQ6IEV2ZW50O1xuICAgIG1lc3NhZ2U6IE1lc3NhZ2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZXZlbnQpIHttLmV2ZW50ID0gRXZlbnQuZnJvbVByb3RvKHByb3RvLmV2ZW50KTt9XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlKSB7bS5tZXNzYWdlID0gTWVzc2FnZS5mcm9tUHJvdG8ocHJvdG8ubWVzc2FnZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdW1tYXJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdW1tYXJ5J10gPSB0aGlzLnN1bW1hcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXZlbnQgIT09IG51bGwpIHt0b1JldHVyblsnZXZlbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXZlbnQgPyAodGhpcy5ldmVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ldmVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2UgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlID8gKHRoaXMubWVzc2FnZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRlUmVzcG9uc2VSZXF1ZXN0IGltcGxlbWVudHMgaS5FdmFsdWF0ZVJlc3BvbnNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgc2VudGltZW50OiBlLkV2YWx1YXRpb25TZW50aW1lbnQ7XG4gICAgY29tbWVudDogc3RyaW5nO1xuICAgIGV2YWx1YXRlZEV2ZW50SWQ6IHN0cmluZztcbiAgICBldmFsdWF0ZWRNZXNzYWdlSWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRXZhbHVhdGVSZXNwb25zZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBFdmFsdWF0ZVJlc3BvbnNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zZW50aW1lbnQpIHttLnNlbnRpbWVudCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRXZhbHVhdGlvblNlbnRpbWVudD4oZS5FdmFsdWF0aW9uU2VudGltZW50LCBwcm90by5zZW50aW1lbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FdmFsdWF0ZVJlc3BvbnNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZW50aW1lbnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlbnRpbWVudCddID0gdGhpcy5zZW50aW1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tbWVudCddID0gdGhpcy5jb21tZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2YWx1YXRlZEV2ZW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V2YWx1YXRlZEV2ZW50SWQnXSA9IHRoaXMuZXZhbHVhdGVkRXZlbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmFsdWF0ZWRNZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V2YWx1YXRlZE1lc3NhZ2VJZCddID0gdGhpcy5ldmFsdWF0ZWRNZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cG9ydENvbnZlcnNhdGlvbnNSZXF1ZXN0IGltcGxlbWVudHMgaS5FeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyT3B0aW9uczogRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJPcHRpb25zKSB7bS5maWx0ZXJPcHRpb25zID0gRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zLmZyb21Qcm90byhwcm90by5maWx0ZXJPcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlck9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnZmlsdGVyT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWx0ZXJPcHRpb25zID8gKHRoaXMuZmlsdGVyT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWx0ZXJPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cG9ydENvbnZlcnNhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuRXhwb3J0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFeHBvcnRDb252ZXJzYXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFeHBvcnRDb252ZXJzYXRpb25zUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkV4cG9ydENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndvcmtmbG93SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dvcmtmbG93SWQnXSA9IHRoaXMud29ya2Zsb3dJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRDb252ZXJzYXRpb25zUmVxdWVzdEZpbHRlck9wdGlvbnMgaW1wbGVtZW50cyBpLkV4cG9ydENvbnZlcnNhdGlvbnNSZXF1ZXN0RmlsdGVyT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgc3ViamVjdFBhcnRpY2lwYW50OiBTdWJqZWN0UGFydGljaXBhbnQ7XG4gICAgc3RhcnRUaW1lOiBEYXRlO1xuICAgIGVuZFRpbWU6IERhdGU7XG4gICAgcGxhdGZvcm1Mb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0VGltZSkge20uc3RhcnRUaW1lID0gbmV3IERhdGUocHJvdG8uc3RhcnRUaW1lKTt9XG4gICAgICAgIGlmIChwcm90by5lbmRUaW1lKSB7bS5lbmRUaW1lID0gbmV3IERhdGUocHJvdG8uZW5kVGltZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGxhdGZvcm1Mb2NhdGlvbikge20ucGxhdGZvcm1Mb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5wbGF0Zm9ybUxvY2F0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRXhwb3J0Q29udmVyc2F0aW9uc1JlcXVlc3RGaWx0ZXJPcHRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydFRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnRUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0VGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydFRpbWUgPyAodGhpcy5zdGFydFRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnRUaW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmRUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZFRpbWUgPyAodGhpcy5lbmRUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZFRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGxhdGZvcm1Mb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGxhdGZvcm1Mb2NhdGlvbiddID0gdGhpcy5wbGF0Zm9ybUxvY2F0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnMgaW1wbGVtZW50cyBpLkxpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIHBsYXRmb3JtTG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29udmVyc2F0aW9uRXhwb3J0c1JlcXVlc3RGaWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBsYXRmb3JtTG9jYXRpb24pIHttLnBsYXRmb3JtTG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ucGxhdGZvcm1Mb2NhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KSB7bS5zdWJqZWN0UGFydGljaXBhbnQgPSBTdWJqZWN0UGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF0Zm9ybUxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwbGF0Zm9ybUxvY2F0aW9uJ10gPSB0aGlzLnBsYXRmb3JtTG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBdmFpbGFibGVDaGFubmVsc0ZvckNvbnZlcnNhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNoYW5uZWxzOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWxbXTtcbiAgICBwcmVmZXJyZWRDaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgY2hhbm5lbEF2YWlsYWJpbGl0aWVzOiBDaGFubmVsQXZhaWxhYmlsaXR5W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBdmFpbGFibGVDaGFubmVsc0ZvckNvbnZlcnNhdGlvblJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXZhaWxhYmxlQ2hhbm5lbHNGb3JDb252ZXJzYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVscykge20uY2hhbm5lbHMgPSBwcm90by5jaGFubmVscy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHYpKTt9XG4gICAgICAgIGlmIChwcm90by5wcmVmZXJyZWRDaGFubmVsKSB7bS5wcmVmZXJyZWRDaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLnByZWZlcnJlZENoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLmNoYW5uZWxBdmFpbGFiaWxpdGllcykge20uY2hhbm5lbEF2YWlsYWJpbGl0aWVzID0gcHJvdG8uY2hhbm5lbEF2YWlsYWJpbGl0aWVzLm1hcChDaGFubmVsQXZhaWxhYmlsaXR5LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEF2YWlsYWJsZUNoYW5uZWxzRm9yQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVscyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hhbm5lbHMnXSA9IHRoaXMuY2hhbm5lbHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlZmVycmVkQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJlZmVycmVkQ2hhbm5lbCddID0gdGhpcy5wcmVmZXJyZWRDaGFubmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWxBdmFpbGFiaWxpdGllcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jaGFubmVsQXZhaWxhYmlsaXRpZXMgIT09IG51bGwpIHt0b1JldHVyblsnY2hhbm5lbEF2YWlsYWJpbGl0aWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNoYW5uZWxBdmFpbGFiaWxpdGllcyA/ICh0aGlzLmNoYW5uZWxBdmFpbGFiaWxpdGllcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jaGFubmVsQXZhaWxhYmlsaXRpZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkdldENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29uZmlndXJhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KSB7bS5zdWJqZWN0UGFydGljaXBhbnQgPSBTdWJqZWN0UGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb25maWd1cmF0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldENvbmZpZ3VyYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENvbmZpZ3VyYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25maWd1cmF0aW9uKSB7bS5jb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29uZmlndXJhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbmZpZ3VyYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25maWd1cmF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZpZ3VyYXRpb24gPyAodGhpcy5jb25maWd1cmF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZpZ3VyYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29udmVyc2F0aW9uQnlLZXlSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRDb252ZXJzYXRpb25CeUtleVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbktleTogQ29udmVyc2F0aW9uS2V5O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29udmVyc2F0aW9uQnlLZXlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29udmVyc2F0aW9uQnlLZXlSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbktleSkge20uY29udmVyc2F0aW9uS2V5ID0gQ29udmVyc2F0aW9uS2V5LmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb25LZXkpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRDb252ZXJzYXRpb25CeUtleVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25LZXkgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uS2V5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbktleSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb25LZXkgPyAodGhpcy5jb252ZXJzYXRpb25LZXkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uS2V5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENvbnZlcnNhdGlvbkJ5S2V5UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldENvbnZlcnNhdGlvbkJ5S2V5UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29udmVyc2F0aW9uQnlLZXlSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENvbnZlcnNhdGlvbkJ5S2V5UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvbkJ5S2V5UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENvbnZlcnNhdGlvblN1bW1hcnlSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRDb252ZXJzYXRpb25TdW1tYXJ5UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENvbnZlcnNhdGlvblN1bW1hcnlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvblN1bW1hcnlSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENvbnZlcnNhdGlvblN1bW1hcnlSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0Q29udmVyc2F0aW9uU3VtbWFyeVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDb252ZXJzYXRpb25TdW1tYXJ5UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb252ZXJzYXRpb25TdW1tYXJ5UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvblN1bW1hcnlSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1bW1hcnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1bW1hcnknXSA9IHRoaXMuc3VtbWFyeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb252ZXJzYXRpb25WaWV3c1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldENvbnZlcnNhdGlvblZpZXdzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydGljaXBhbnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q29udmVyc2F0aW9uVmlld3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q29udmVyc2F0aW9uVmlld3NSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRDb252ZXJzYXRpb25WaWV3c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0aWNpcGFudElkJ10gPSB0aGlzLnBhcnRpY2lwYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29udmVyc2F0aW9uVmlld3NSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0Q29udmVyc2F0aW9uVmlld3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmlld3M6IFZpZXdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENvbnZlcnNhdGlvblZpZXdzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDb252ZXJzYXRpb25WaWV3c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZpZXdzKSB7bS52aWV3cyA9IHByb3RvLnZpZXdzLm1hcChWaWV3LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENvbnZlcnNhdGlvblZpZXdzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWV3cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52aWV3cyAhPT0gbnVsbCkge3RvUmV0dXJuWyd2aWV3cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52aWV3cyA/ICh0aGlzLnZpZXdzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZpZXdzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lc3NhZ2VPcHRpb25zIGltcGxlbWVudHMgaS5HZXRNZXNzYWdlT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgaW5jbHVkZU9yaWdpbmFsQ29udGVudDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE1lc3NhZ2VPcHRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZU9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lc3NhZ2VPcHRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZU9yaWdpbmFsQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZU9yaWdpbmFsQ29udGVudCddID0gdGhpcy5pbmNsdWRlT3JpZ2luYWxDb250ZW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lc3NhZ2VSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNZXNzYWdlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgb3B0aW9uczogR2V0TWVzc2FnZU9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXNzYWdlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lc3NhZ2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm9wdGlvbnMpIHttLm9wdGlvbnMgPSBHZXRNZXNzYWdlT3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ub3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydvcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm9wdGlvbnMgPyAodGhpcy5vcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGVtcGxhdGVJZDogc3RyaW5nO1xuICAgIGh5ZHJhdGlvbk9wdGlvbnM6IEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaHlkcmF0aW9uT3B0aW9ucykge20uaHlkcmF0aW9uT3B0aW9ucyA9IEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zLmZyb21Qcm90byhwcm90by5oeWRyYXRpb25PcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oeWRyYXRpb25PcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmh5ZHJhdGlvbk9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnaHlkcmF0aW9uT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5oeWRyYXRpb25PcHRpb25zID8gKHRoaXMuaHlkcmF0aW9uT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5oeWRyYXRpb25PcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGVtcGxhdGU6IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgICBoeWRyYXRpb25JbmZvcm1hdGlvbjogR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGVtcGxhdGUpIHttLnRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLmZyb21Qcm90byhwcm90by50ZW1wbGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uaHlkcmF0aW9uSW5mb3JtYXRpb24pIHttLmh5ZHJhdGlvbkluZm9ybWF0aW9uID0gR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8uaHlkcmF0aW9uSW5mb3JtYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlID8gKHRoaXMudGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaHlkcmF0aW9uSW5mb3JtYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaHlkcmF0aW9uSW5mb3JtYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnaHlkcmF0aW9uSW5mb3JtYXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaHlkcmF0aW9uSW5mb3JtYXRpb24gPyAodGhpcy5oeWRyYXRpb25JbmZvcm1hdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5oeWRyYXRpb25JbmZvcm1hdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdWJqZWN0UGFydGljaXBhbnRzOiBTdWJqZWN0UGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudHMpIHttLnN1YmplY3RQYXJ0aWNpcGFudHMgPSBwcm90by5zdWJqZWN0UGFydGljaXBhbnRzLm1hcChTdWJqZWN0UGFydGljaXBhbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb25maWd1cmF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudHMgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb25maWd1cmF0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpQ29uZmlndXJhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb25maWd1cmF0aW9uczogQ29uZmlndXJhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25maWd1cmF0aW9ucykge20uY29uZmlndXJhdGlvbnMgPSBwcm90by5jb25maWd1cmF0aW9ucy5tYXAoQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbmZpZ3VyYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZpZ3VyYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZpZ3VyYXRpb25zID8gKHRoaXMuY29uZmlndXJhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmlndXJhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzT3B0aW9ucyBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgZGlzYWJsZVBhcnRpY2lwYW50QnJhbmRpbmc6IGJvb2xlYW47XG4gICAgZXhjbHVzaW9uczogRmllbGRNYXNrO1xuICAgIGRpc2FibGVQYXJ0aWNpcGFudEh5ZHJhdGlvbjogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc09wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmV4Y2x1c2lvbnMpIHttLmV4Y2x1c2lvbnMgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmV4Y2x1c2lvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZVBhcnRpY2lwYW50QnJhbmRpbmcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc2FibGVQYXJ0aWNpcGFudEJyYW5kaW5nJ10gPSB0aGlzLmRpc2FibGVQYXJ0aWNpcGFudEJyYW5kaW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4Y2x1c2lvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXhjbHVzaW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydleGNsdXNpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV4Y2x1c2lvbnMgPyAodGhpcy5leGNsdXNpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmV4Y2x1c2lvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZVBhcnRpY2lwYW50SHlkcmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXNhYmxlUGFydGljaXBhbnRIeWRyYXRpb24nXSA9IHRoaXMuZGlzYWJsZVBhcnRpY2lwYW50SHlkcmF0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkczogc3RyaW5nW107XG4gICAgb3B0aW9uczogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ub3B0aW9ucykge20ub3B0aW9ucyA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8ub3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkcyddID0gdGhpcy5jb252ZXJzYXRpb25JZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3B0aW9ucyA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbnM6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9ucykge20uY29udmVyc2F0aW9ucyA9IHByb3RvLmNvbnZlcnNhdGlvbnMubWFwKEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb25zID8gKHRoaXMuY29udmVyc2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZHM6IHN0cmluZ1tdO1xuICAgIGV4Y2x1c2lvbnM6IEZpZWxkTWFzaztcbiAgICBvcHRpb25zOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmV4Y2x1c2lvbnMpIHttLmV4Y2x1c2lvbnMgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmV4Y2x1c2lvbnMpO31cbiAgICAgICAgaWYgKHByb3RvLm9wdGlvbnMpIHttLm9wdGlvbnMgPSBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNPcHRpb25zLmZyb21Qcm90byhwcm90by5vcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZHMnXSA9IHRoaXMuY29udmVyc2F0aW9uSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4Y2x1c2lvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXhjbHVzaW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydleGNsdXNpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV4Y2x1c2lvbnMgPyAodGhpcy5leGNsdXNpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmV4Y2x1c2lvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3B0aW9ucyA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25zOiBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQ29udmVyc2F0aW9uRGV0YWlsc1YyUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbnMpIHttLmNvbnZlcnNhdGlvbnMgPSBwcm90by5jb252ZXJzYXRpb25zLm1hcChHZXRNdWx0aUNvbnZlcnNhdGlvbkRldGFpbHNWMlJlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlDb252ZXJzYXRpb25EZXRhaWxzVjJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydjb252ZXJzYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbnMgPyAodGhpcy5jb252ZXJzYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnZlcnNhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWRzJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aUNvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlQ291bnRzOiBDb252ZXJzYXRpb25NZXNzYWdlQ291bnRbXTtcbiAgICBjb3VudHM6IHtba2V5OiBzdHJpbmddOiBudW1iZXJ9O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlDb252ZXJzYXRpb25NZXNzYWdlQ291bnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVzc2FnZUNvdW50cykge20ubWVzc2FnZUNvdW50cyA9IHByb3RvLm1lc3NhZ2VDb3VudHMubWFwKENvbnZlcnNhdGlvbk1lc3NhZ2VDb3VudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmNvdW50cykge20uY291bnRzID0gT2JqZWN0LmtleXMocHJvdG8uY291bnRzKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHBhcnNlSW50KHByb3RvLmNvdW50c1trXSwgMTApOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpQ29udmVyc2F0aW9uTWVzc2FnZUNvdW50UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlQ291bnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2VDb3VudHMgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZUNvdW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlQ291bnRzID8gKHRoaXMubWVzc2FnZUNvdW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlQ291bnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb3VudHMgIT09IG51bGwpIHt0b1JldHVyblsnY291bnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvdW50cyA/ICh0aGlzLmNvdW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb3VudHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlFdmVudHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUV2ZW50c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGV2ZW50SWRzOiBzdHJpbmdbXTtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlFdmVudHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlFdmVudHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUV2ZW50c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmVudElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXZlbnRJZHMnXSA9IHRoaXMuZXZlbnRJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpRXZlbnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpRXZlbnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGV2ZW50czogRXZlbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpRXZlbnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUV2ZW50c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmV2ZW50cykge20uZXZlbnRzID0gcHJvdG8uZXZlbnRzLm1hcChFdmVudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUV2ZW50c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZlbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmV2ZW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydldmVudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXZlbnRzID8gKHRoaXMuZXZlbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmV2ZW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aU1lc3NhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VJZHM6IHN0cmluZ1tdO1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aU1lc3NhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpTWVzc2FnZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aU1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZHMnXSA9IHRoaXMubWVzc2FnZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFuZ3VhZ2VDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsYW5ndWFnZUNvZGUnXSA9IHRoaXMubGFuZ3VhZ2VDb2RlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpTWVzc2FnZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlNZXNzYWdlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlNZXNzYWdlc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlNZXNzYWdlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lc3NhZ2VzKSB7bS5tZXNzYWdlcyA9IHByb3RvLm1lc3NhZ2VzLm1hcChNZXNzYWdlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpTWVzc2FnZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lc3NhZ2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2VzID8gKHRoaXMubWVzc2FnZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVzc2FnZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50SWRzOiBzdHJpbmdbXTtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlQYXJ0aWNpcGFudHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVBhcnRpY2lwYW50c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydGljaXBhbnRJZHMnXSA9IHRoaXMucGFydGljaXBhbnRJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUGFydGljaXBhbnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVBhcnRpY2lwYW50c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVBhcnRpY2lwYW50c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlXaWRnZXRNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlXaWRnZXRNZXNzYWdlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlXaWRnZXRNZXNzYWdlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWRzJ10gPSB0aGlzLm1lc3NhZ2VJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlXaWRnZXRNZXNzYWdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVdpZGdldE1lc3NhZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVzc2FnZXMpIHttLm1lc3NhZ2VzID0gcHJvdG8ubWVzc2FnZXMubWFwKE1lc3NhZ2UuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlXaWRnZXRNZXNzYWdlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVzc2FnZXMgIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVzc2FnZXMgPyAodGhpcy5tZXNzYWdlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVdpZGdldFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpV2lkZ2V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgd2lkZ2V0SWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpV2lkZ2V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpV2lkZ2V0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRJZHMnXSA9IHRoaXMud2lkZ2V0SWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpV2lkZ2V0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdpZGdldHM6IFdpZGdldFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlXaWRnZXRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpV2lkZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ud2lkZ2V0cykge20ud2lkZ2V0cyA9IHByb3RvLndpZGdldHMubWFwKFdpZGdldC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVdpZGdldFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy53aWRnZXRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3dpZGdldHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMud2lkZ2V0cyA/ICh0aGlzLndpZGdldHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMud2lkZ2V0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRPd25lckVtYWlsUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0T3duZXJFbWFpbFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0T3duZXJFbWFpbFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRPd25lckVtYWlsUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0T3duZXJFbWFpbFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1YmplY3RQYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdWJqZWN0UGFydGljaXBhbnQgPyAodGhpcy5zdWJqZWN0UGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3ViamVjdFBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE93bmVyRW1haWxSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0T3duZXJFbWFpbFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBmb3J3YXJkaW5nRW1haWw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE93bmVyRW1haWxSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVyRW1haWxSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0T3duZXJFbWFpbFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9yd2FyZGluZ0VtYWlsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmb3J3YXJkaW5nRW1haWwnXSA9IHRoaXMuZm9yd2FyZGluZ0VtYWlsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFBhcnRpY2lwYW50c0J5S2V5UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UGFydGljaXBhbnRzQnlLZXlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0aWNpcGFudEtleTogUGFydGljaXBhbnRLZXk7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQYXJ0aWNpcGFudHNCeUtleVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQYXJ0aWNpcGFudHNCeUtleVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRLZXkpIHttLnBhcnRpY2lwYW50S2V5ID0gUGFydGljaXBhbnRLZXkuZnJvbVByb3RvKHByb3RvLnBhcnRpY2lwYW50S2V5KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UGFydGljaXBhbnRzQnlLZXlSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRLZXkgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnRLZXkgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRLZXknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRLZXkgPyAodGhpcy5wYXJ0aWNpcGFudEtleSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudEtleTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQYXJ0aWNpcGFudHNCeUtleVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRQYXJ0aWNpcGFudHNCeUtleVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG4gICAgcGFydGljaXBhbnQ6IFBhcnRpY2lwYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UGFydGljaXBhbnRzQnlLZXlSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFBhcnRpY2lwYW50c0J5S2V5UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnRzKSB7bS5wYXJ0aWNpcGFudHMgPSBwcm90by5wYXJ0aWNpcGFudHMubWFwKFBhcnRpY2lwYW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnQpIHttLnBhcnRpY2lwYW50ID0gUGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnBhcnRpY2lwYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UGFydGljaXBhbnRzQnlLZXlSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50cyA/ICh0aGlzLnBhcnRpY2lwYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFydGljaXBhbnQgIT09IG51bGwpIHt0b1JldHVyblsncGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnQgPyAodGhpcy5wYXJ0aWNpcGFudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0aWNpcGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRXaWRnZXRDb25maWdSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRXaWRnZXRDb25maWdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIHZpc2l0RGF0YTogV2lkZ2V0VmlzaXQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXaWRnZXRDb25maWdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0V2lkZ2V0Q29uZmlnUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52aXNpdERhdGEpIHttLnZpc2l0RGF0YSA9IFdpZGdldFZpc2l0LmZyb21Qcm90byhwcm90by52aXNpdERhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaWRnZXRDb25maWdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldElkJ10gPSB0aGlzLndpZGdldElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpc2l0RGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52aXNpdERhdGEgIT09IG51bGwpIHt0b1JldHVyblsndmlzaXREYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZpc2l0RGF0YSA/ICh0aGlzLnZpc2l0RGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52aXNpdERhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFdpZGdldENvbmZpZ1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgd2VsY29tZU1lc3NhZ2U6IHN0cmluZztcbiAgICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgICBhY2NlbnRDb2xvcjogc3RyaW5nO1xuICAgIGFjY2VudFRleHRDb2xvcjogc3RyaW5nO1xuICAgIHNraXBDb250YWN0Q2FwdHVyZTogYm9vbGVhbjtcbiAgICB3aWRnZXRUb3BTcGFjZTogbnVtYmVyO1xuICAgIGFzc2lzdGFudE5hbWU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRBdmF0YXJVcmw6IHN0cmluZztcbiAgICBwb3NpdGlvbjogZS5XaWRnZXRQb3NpdGlvbjtcbiAgICBoaWRlTW9iaWxlQ3RhOiBib29sZWFuO1xuICAgIGN1c3RvbUdyZWV0aW5nTWVzc2FnZTogc3RyaW5nO1xuICAgIGVuYWJsZUdyZWV0aW5nTWVzc2FnZTogYm9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwb3dlcmVkQnlOYW1lOiBzdHJpbmc7XG4gICAgcG93ZXJlZEJ5V2Vic2l0ZTogc3RyaW5nO1xuICAgIHNob3dGb290ZXJDb250ZW50OiBib29sZWFuO1xuICAgIGdyZWV0aW5nTWVzc2FnZVR5cGU6IGUuR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2VHcmVldGluZ01lc3NhZ2VUeXBlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXaWRnZXRDb25maWdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by53aWRnZXRUb3BTcGFjZSkge20ud2lkZ2V0VG9wU3BhY2UgPSBwYXJzZUludChwcm90by53aWRnZXRUb3BTcGFjZSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnBvc2l0aW9uKSB7bS5wb3NpdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuV2lkZ2V0UG9zaXRpb24+KGUuV2lkZ2V0UG9zaXRpb24sIHByb3RvLnBvc2l0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5ncmVldGluZ01lc3NhZ2VUeXBlKSB7bS5ncmVldGluZ01lc3NhZ2VUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5HZXRXaWRnZXRDb25maWdSZXNwb25zZUdyZWV0aW5nTWVzc2FnZVR5cGU+KGUuR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2VHcmVldGluZ01lc3NhZ2VUeXBlLCBwcm90by5ncmVldGluZ01lc3NhZ2VUeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0V2lkZ2V0Q29uZmlnUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbG9yJ10gPSB0aGlzLmNvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzRW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNFbmFibGVkJ10gPSB0aGlzLmlzRW5hYmxlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53ZWxjb21lTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2VsY29tZU1lc3NhZ2UnXSA9IHRoaXMud2VsY29tZU1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGV4dENvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0Q29sb3InXSA9IHRoaXMudGV4dENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY2VudENvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NlbnRDb2xvciddID0gdGhpcy5hY2NlbnRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NlbnRUZXh0Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY2VudFRleHRDb2xvciddID0gdGhpcy5hY2NlbnRUZXh0Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2tpcENvbnRhY3RDYXB0dXJlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza2lwQ29udGFjdENhcHR1cmUnXSA9IHRoaXMuc2tpcENvbnRhY3RDYXB0dXJlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldFRvcFNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRUb3BTcGFjZSddID0gdGhpcy53aWRnZXRUb3BTcGFjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnROYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnROYW1lJ10gPSB0aGlzLmFzc2lzdGFudE5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXNzaXN0YW50QXZhdGFyVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnRBdmF0YXJVcmwnXSA9IHRoaXMuYXNzaXN0YW50QXZhdGFyVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3NpdGlvbiddID0gdGhpcy5wb3NpdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlTW9iaWxlQ3RhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoaWRlTW9iaWxlQ3RhJ10gPSB0aGlzLmhpZGVNb2JpbGVDdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tR3JlZXRpbmdNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21HcmVldGluZ01lc3NhZ2UnXSA9IHRoaXMuY3VzdG9tR3JlZXRpbmdNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuYWJsZUdyZWV0aW5nTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW5hYmxlR3JlZXRpbmdNZXNzYWdlJ10gPSB0aGlzLmVuYWJsZUdyZWV0aW5nTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gdGhpcy5uYW1lc3BhY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG93ZXJlZEJ5TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG93ZXJlZEJ5TmFtZSddID0gdGhpcy5wb3dlcmVkQnlOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvd2VyZWRCeVdlYnNpdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvd2VyZWRCeVdlYnNpdGUnXSA9IHRoaXMucG93ZXJlZEJ5V2Vic2l0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaG93Rm9vdGVyQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2hvd0Zvb3RlckNvbnRlbnQnXSA9IHRoaXMuc2hvd0Zvb3RlckNvbnRlbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ3JlZXRpbmdNZXNzYWdlVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ3JlZXRpbmdNZXNzYWdlVHlwZSddID0gdGhpcy5ncmVldGluZ01lc3NhZ2VUeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdpZGdldENvbnZlcnNhdGlvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbikge20uY29udmVyc2F0aW9uID0gQ29udmVyc2F0aW9uLmZyb21Qcm90byhwcm90by5jb252ZXJzYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaWRnZXRDb252ZXJzYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2lkZ2V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0V2lkZ2V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgd2lkZ2V0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdpZGdldFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXaWRnZXRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldElkJ10gPSB0aGlzLndpZGdldElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdpZGdldFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRXaWRnZXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgd2lkZ2V0OiBXaWRnZXQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXaWRnZXRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdpZGdldFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLndpZGdldCkge20ud2lkZ2V0ID0gV2lkZ2V0LmZyb21Qcm90byhwcm90by53aWRnZXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaWRnZXRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy53aWRnZXQgIT09IG51bGwpIHt0b1JldHVyblsnd2lkZ2V0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLndpZGdldCA/ICh0aGlzLndpZGdldCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy53aWRnZXQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHkgaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSHlkcmF0aW9uRW50aXR5SW50ZXJmYWNlIHtcbiAgICBlbnRpdHlUeXBlOiBlLkdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSHlkcmF0aW9uRW50aXR5RW50aXR5VHlwZTtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5lbnRpdHlUeXBlKSB7bS5lbnRpdHlUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5HZXRNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SHlkcmF0aW9uT3B0aW9uc0h5ZHJhdGlvbkVudGl0eUVudGl0eVR5cGU+KGUuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHlFbnRpdHlUeXBlLCBwcm90by5lbnRpdHlUeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRpdHlUeXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbnRpdHlUeXBlJ10gPSB0aGlzLmVudGl0eVR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW50aXR5SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VudGl0eUlkJ10gPSB0aGlzLmVudGl0eUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSHlkcmF0aW9uSW5mb3JtYXRpb24gaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSHlkcmF0aW9uSW5mb3JtYXRpb25JbnRlcmZhY2Uge1xuICAgIGFsbEZpZWxkc0h5ZHJhdGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VIeWRyYXRpb25JbmZvcm1hdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSHlkcmF0aW9uSW5mb3JtYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSHlkcmF0aW9uSW5mb3JtYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxGaWVsZHNIeWRyYXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsRmllbGRzSHlkcmF0ZWQnXSA9IHRoaXMuYWxsRmllbGRzSHlkcmF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnMgaW1wbGVtZW50cyBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSW50ZXJmYWNlIHtcbiAgICBoeWRyYXRpb25FbnRpdGllczogR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnNIeWRyYXRpb25FbnRpdHlbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdEh5ZHJhdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaHlkcmF0aW9uRW50aXRpZXMpIHttLmh5ZHJhdGlvbkVudGl0aWVzID0gcHJvdG8uaHlkcmF0aW9uRW50aXRpZXMubWFwKEdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSHlkcmF0aW9uRW50aXR5LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RIeWRyYXRpb25PcHRpb25zSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaHlkcmF0aW9uRW50aXRpZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaHlkcmF0aW9uRW50aXRpZXMgIT09IG51bGwpIHt0b1JldHVyblsnaHlkcmF0aW9uRW50aXRpZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaHlkcmF0aW9uRW50aXRpZXMgPyAodGhpcy5oeWRyYXRpb25FbnRpdGllcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5oeWRyYXRpb25FbnRpdGllczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW5ib3hDb252ZXJzYXRpb24gaW1wbGVtZW50cyBpLkxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbkludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgbGF0ZXN0TWVzc2FnZTogTWVzc2FnZTtcbiAgICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW5ib3hDb252ZXJzYXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW5ib3hDb252ZXJzYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9uKSB7bS5jb252ZXJzYXRpb24gPSBDb252ZXJzYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbnZlcnNhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ubGF0ZXN0TWVzc2FnZSkge20ubGF0ZXN0TWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVByb3RvKHByb3RvLmxhdGVzdE1lc3NhZ2UpO31cbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50cykge20ucGFydGljaXBhbnRzID0gcHJvdG8ucGFydGljaXBhbnRzLm1hcChQYXJ0aWNpcGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlSW5ib3hDb252ZXJzYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhdGVzdE1lc3NhZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubGF0ZXN0TWVzc2FnZSAhPT0gbnVsbCkge3RvUmV0dXJuWydsYXRlc3RNZXNzYWdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxhdGVzdE1lc3NhZ2UgPyAodGhpcy5sYXRlc3RNZXNzYWdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxhdGVzdE1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydGljaXBhbnRzID8gKHRoaXMucGFydGljaXBhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmplY3RNZXNzYWdlUmVxdWVzdCBpbXBsZW1lbnRzIGkuSW5qZWN0TWVzc2FnZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBjaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgdHlwZTogZS5NZXNzYWdlVHlwZTtcbiAgICBsb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIG1ldGFkYXRhOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICBtZWRpYTogTWVkaWFbXTtcbiAgICBuYW1lc3BhY2U6IE5hbWVzcGFjZURldGFpbDtcbiAgICBzb3VyY2VOYW1lOiBzdHJpbmc7XG4gICAgY3JlYXRlZDogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEluamVjdE1lc3NhZ2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW5qZWN0TWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbCkge20uY2hhbm5lbCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ29udmVyc2F0aW9uQ2hhbm5lbD4oZS5Db252ZXJzYXRpb25DaGFubmVsLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIGlmIChwcm90by50eXBlKSB7bS50eXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXNzYWdlVHlwZT4oZS5NZXNzYWdlVHlwZSwgcHJvdG8udHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb24pIHttLmxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLmxvY2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBPYmplY3Qua2V5cyhwcm90by5tZXRhZGF0YSkucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5tZXRhZGF0YVtrXTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgaWYgKHByb3RvLm1lZGlhKSB7bS5tZWRpYSA9IHByb3RvLm1lZGlhLm1hcChNZWRpYS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLm5hbWVzcGFjZSkge20ubmFtZXNwYWNlID0gTmFtZXNwYWNlRGV0YWlsLmZyb21Qcm90byhwcm90by5uYW1lc3BhY2UpO31cbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWQpIHttLmNyZWF0ZWQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW5qZWN0TWVzc2FnZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZCddID0gdGhpcy5tZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9keSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9keSddID0gdGhpcy5ib2R5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50eXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0eXBlJ10gPSB0aGlzLnR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ21ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1ldGFkYXRhID8gKHRoaXMubWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWV0YWRhdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVkaWEgIT09IG51bGwpIHt0b1JldHVyblsnbWVkaWEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVkaWEgPyAodGhpcy5tZWRpYSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWRpYTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubmFtZXNwYWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ25hbWVzcGFjZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5uYW1lc3BhY2UgPyAodGhpcy5uYW1lc3BhY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvdXJjZU5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvdXJjZU5hbWUnXSA9IHRoaXMuc291cmNlTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RDb21tdW5pY2F0aW9uQ2hhbm5lbHNJbmZvUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29tbXVuaWNhdGlvbkluZm86IENvbW11bmljYXRpb25JbmZvW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29tbXVuaWNhdGlvbkNoYW5uZWxzSW5mb1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb21tdW5pY2F0aW9uSW5mbykge20uY29tbXVuaWNhdGlvbkluZm8gPSBwcm90by5jb21tdW5pY2F0aW9uSW5mby5tYXAoQ29tbXVuaWNhdGlvbkluZm8uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdENvbW11bmljYXRpb25DaGFubmVsc0luZm9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbW11bmljYXRpb25JbmZvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW11bmljYXRpb25JbmZvICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbW11bmljYXRpb25JbmZvJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbW11bmljYXRpb25JbmZvID8gKHRoaXMuY29tbXVuaWNhdGlvbkluZm8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29tbXVuaWNhdGlvbkluZm87fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0Q29udmVyc2F0aW9uRXhwb3J0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGZpbHRlck9wdGlvbnM6IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdEZpbHRlck9wdGlvbnM7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJPcHRpb25zKSB7bS5maWx0ZXJPcHRpb25zID0gTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXF1ZXN0RmlsdGVyT3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVyT3B0aW9ucyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29udmVyc2F0aW9uRXhwb3J0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlck9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnZmlsdGVyT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWx0ZXJPcHRpb25zID8gKHRoaXMuZmlsdGVyT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWx0ZXJPcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcmVjb3JkOiBDb252ZXJzYXRpb25FeHBvcnRSZWNvcmRbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbnZlcnNhdGlvbkV4cG9ydHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RDb252ZXJzYXRpb25FeHBvcnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucmVjb3JkKSB7bS5yZWNvcmQgPSBwcm90by5yZWNvcmQubWFwKENvbnZlcnNhdGlvbkV4cG9ydFJlY29yZC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Q29udmVyc2F0aW9uRXhwb3J0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlY29yZCAhPT0gbnVsbCkge3RvUmV0dXJuWydyZWNvcmQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmVjb3JkID8gKHRoaXMucmVjb3JkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlY29yZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RDb252ZXJzYXRpb25zRmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBjaGFubmVsczogZS5Db252ZXJzYXRpb25DaGFubmVsW107XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIHVucmVhZE9ubHk6IGJvb2xlYW47XG4gICAgYXdhaXRpbmdSZXNwb25zZU9ubHk6IGJvb2xlYW47XG4gICAgaXNBbm9ueW1vdXM6IGJvb2xlYW47XG4gICAgYXNzaWduZWVVc2VySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RDb252ZXJzYXRpb25zRmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RDb252ZXJzYXRpb25zRmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGFubmVscykge20uY2hhbm5lbHMgPSBwcm90by5jaGFubmVscy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHYpKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hhbm5lbHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWxzJ10gPSB0aGlzLmNoYW5uZWxzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzT3BlbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNPcGVuJ10gPSB0aGlzLmlzT3Blbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51bnJlYWRPbmx5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1bnJlYWRPbmx5J10gPSB0aGlzLnVucmVhZE9ubHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXdhaXRpbmdSZXNwb25zZU9ubHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2F3YWl0aW5nUmVzcG9uc2VPbmx5J10gPSB0aGlzLmF3YWl0aW5nUmVzcG9uc2VPbmx5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQW5vbnltb3VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0Fub255bW91cyddID0gdGhpcy5pc0Fub255bW91czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3NpZ25lZVVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXNzaWduZWVVc2VySWQnXSA9IHRoaXMuYXNzaWduZWVVc2VySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0Q29udmVyc2F0aW9uc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgcGFydGljaXBhbnRJZDogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgZmlsdGVyczogTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdENvbnZlcnNhdGlvbnNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50SWQnXSA9IHRoaXMucGFydGljaXBhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbnM6IExpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbmJveENvbnZlcnNhdGlvbltdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb25zKSB7bS5jb252ZXJzYXRpb25zID0gcHJvdG8uY29udmVyc2F0aW9ucy5tYXAoTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZUluYm94Q29udmVyc2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb25zID8gKHRoaXMuY29udmVyc2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZXM6IE1lc3NhZ2VUZW1wbGF0ZVtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGVtcGxhdGVzKSB7bS50ZW1wbGF0ZXMgPSBwcm90by50ZW1wbGF0ZXMubWFwKE1lc3NhZ2VUZW1wbGF0ZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZW1wbGF0ZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGVtcGxhdGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50ZW1wbGF0ZXMgPyAodGhpcy50ZW1wbGF0ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE1lc3NhZ2VzUmVxdWVzdExpc3RNZXNzYWdlc0ZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RNZXNzYWdlc1JlcXVlc3RMaXN0TWVzc2FnZXNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE1lc3NhZ2VzUmVxdWVzdExpc3RNZXNzYWdlc0ZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE1lc3NhZ2VzUmVxdWVzdExpc3RNZXNzYWdlc0ZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE1lc3NhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdE1lc3NhZ2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyczogTGlzdE1lc3NhZ2VzUmVxdWVzdExpc3RNZXNzYWdlc0ZpbHRlcnM7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNZXNzYWdlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TWVzc2FnZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0TWVzc2FnZXNSZXF1ZXN0TGlzdE1lc3NhZ2VzRmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TWVzc2FnZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RNZXNzYWdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0TWVzc2FnZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE1lc3NhZ2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TWVzc2FnZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXNzYWdlcykge20ubWVzc2FnZXMgPSBwcm90by5tZXNzYWdlcy5tYXAoTWVzc2FnZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TWVzc2FnZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lc3NhZ2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lc3NhZ2VzID8gKHRoaXMubWVzc2FnZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVzc2FnZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc3VtbWFyaXplOiBib29sZWFuO1xuICAgIHN1YmplY3RQYXJ0aWNpcGFudDogU3ViamVjdFBhcnRpY2lwYW50O1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgY3JlYXRlZEFmdGVyOiBEYXRlO1xuICAgIGNyZWF0ZWRCZWZvcmU6IERhdGU7XG4gICAgZXZhbHVhdGlvblR5cGU6IGUuRXZhbHVhdGVSZXNwb25zZVR5cGVbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdWJqZWN0UGFydGljaXBhbnQpIHttLnN1YmplY3RQYXJ0aWNpcGFudCA9IFN1YmplY3RQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8uc3ViamVjdFBhcnRpY2lwYW50KTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZEFmdGVyKSB7bS5jcmVhdGVkQWZ0ZXIgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkQWZ0ZXIpO31cbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWRCZWZvcmUpIHttLmNyZWF0ZWRCZWZvcmUgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkQmVmb3JlKTt9XG4gICAgICAgIGlmIChwcm90by5ldmFsdWF0aW9uVHlwZSkge20uZXZhbHVhdGlvblR5cGUgPSBwcm90by5ldmFsdWF0aW9uVHlwZS5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5FdmFsdWF0ZVJlc3BvbnNlVHlwZT4oZS5FdmFsdWF0ZVJlc3BvbnNlVHlwZSwgdikpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdW1tYXJpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1bW1hcml6ZSddID0gdGhpcy5zdW1tYXJpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWRBZnRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkQWZ0ZXIgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZEFmdGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWRBZnRlciA/ICh0aGlzLmNyZWF0ZWRBZnRlciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkQWZ0ZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZEJlZm9yZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkQmVmb3JlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NyZWF0ZWRCZWZvcmUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZEJlZm9yZSA/ICh0aGlzLmNyZWF0ZWRCZWZvcmUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3JlYXRlZEJlZm9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmFsdWF0aW9uVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXZhbHVhdGlvblR5cGUnXSA9IHRoaXMuZXZhbHVhdGlvblR5cGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZXZhbHVhdGlvbnM6IFJlc3BvbnNlRXZhbHVhdGlvbltdO1xuICAgIHN1bW1hcnk6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5O1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5ldmFsdWF0aW9ucykge20uZXZhbHVhdGlvbnMgPSBwcm90by5ldmFsdWF0aW9ucy5tYXAoUmVzcG9uc2VFdmFsdWF0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uc3VtbWFyeSkge20uc3VtbWFyeSA9IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5LmZyb21Qcm90byhwcm90by5zdW1tYXJ5KTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdNZXRhZGF0YSkge20ucGFnaW5nTWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLnBhZ2luZ01ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2YWx1YXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmV2YWx1YXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V2YWx1YXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV2YWx1YXRpb25zID8gKHRoaXMuZXZhbHVhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXZhbHVhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VtbWFyeSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdW1tYXJ5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N1bW1hcnknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3VtbWFyeSA/ICh0aGlzLnN1bW1hcnkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3VtbWFyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RXaWRnZXRzUmVxdWVzdExpc3RXaWRnZXRzRmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdFdpZGdldHNSZXF1ZXN0TGlzdFdpZGdldHNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbiAgICB3aWRnZXRUeXBlczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0V2lkZ2V0c1JlcXVlc3RMaXN0V2lkZ2V0c0ZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V2lkZ2V0c1JlcXVlc3RMaXN0V2lkZ2V0c0ZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RXaWRnZXRzUmVxdWVzdExpc3RXaWRnZXRzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWVzcGFjZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWVzcGFjZXMnXSA9IHRoaXMubmFtZXNwYWNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRUeXBlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2lkZ2V0VHlwZXMnXSA9IHRoaXMud2lkZ2V0VHlwZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFdpZGdldHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0V2lkZ2V0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgb3B0aW9uczogTGlzdFdpZGdldHNSZXF1ZXN0TGlzdFdpZGdldHNGaWx0ZXJzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFdpZGdldHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFdpZGdldHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5vcHRpb25zKSB7bS5vcHRpb25zID0gTGlzdFdpZGdldHNSZXF1ZXN0TGlzdFdpZGdldHNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5vcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFdpZGdldHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3B0aW9ucyA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V2lkZ2V0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0V2lkZ2V0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB3aWRnZXRzOiBXaWRnZXRbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFdpZGdldHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RXaWRnZXRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ud2lkZ2V0cykge20ud2lkZ2V0cyA9IHByb3RvLndpZGdldHMubWFwKFdpZGdldC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0V2lkZ2V0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy53aWRnZXRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3dpZGdldHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMud2lkZ2V0cyA/ICh0aGlzLndpZGdldHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMud2lkZ2V0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0TG9va3VwQ29udmVyc2F0aW9uc0ZpbHRlcnMgaW1wbGVtZW50cyBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0TG9va3VwQ29udmVyc2F0aW9uc0ZpbHRlcnNJbnRlcmZhY2Uge1xuICAgIGludGVybmFsUGFydGljaXBhbnRJZDogc3RyaW5nW107XG4gICAgbG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcbiAgICBjaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBleHRlcm5hbENvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgb3JpZ2luTG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcbiAgICBvcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0TG9va3VwQ29udmVyc2F0aW9uc0ZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdExvb2t1cENvbnZlcnNhdGlvbnNGaWx0ZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9uKSB7bS5sb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5sb2NhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbCkge20uY2hhbm5lbCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ29udmVyc2F0aW9uQ2hhbm5lbD4oZS5Db252ZXJzYXRpb25DaGFubmVsLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIGlmIChwcm90by5vcmlnaW5Mb2NhdGlvbikge20ub3JpZ2luTG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ub3JpZ2luTG9jYXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Mb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdExvb2t1cENvbnZlcnNhdGlvbnNGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQYXJ0aWNpcGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBhcnRpY2lwYW50SWQnXSA9IHRoaXMuaW50ZXJuYWxQYXJ0aWNpcGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NhdGlvbiddID0gdGhpcy5sb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVsJ10gPSB0aGlzLmNoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4dGVybmFsQ29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V4dGVybmFsQ29udmVyc2F0aW9uSWQnXSA9IHRoaXMuZXh0ZXJuYWxDb252ZXJzYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5Mb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luTG9jYXRpb24nXSA9IHRoaXMub3JpZ2luTG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luTG9jYXRpb25FeHRlcm5hbElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5Mb2NhdGlvbkV4dGVybmFsSWQnXSA9IHRoaXMub3JpZ2luTG9jYXRpb25FeHRlcm5hbElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvb2t1cENvbnZlcnNhdGlvbnNSZXF1ZXN0IGltcGxlbWVudHMgaS5Mb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyczogTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3RMb29rdXBDb252ZXJzYXRpb25zRmlsdGVycztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTG9va3VwQ29udmVyc2F0aW9uc1JlcXVlc3RMb29rdXBDb252ZXJzYXRpb25zRmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Mb29rdXBDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uczogTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlQ29udmVyc2F0aW9uc1tdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMb29rdXBDb252ZXJzYXRpb25zUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29udmVyc2F0aW9ucykge20uY29udmVyc2F0aW9ucyA9IHByb3RvLmNvbnZlcnNhdGlvbnMubWFwKExvb2t1cENvbnZlcnNhdGlvbnNSZXNwb25zZUNvbnZlcnNhdGlvbnMuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdNZXRhZGF0YSkge20ucGFnaW5nTWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLnBhZ2luZ01ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTG9va3VwQ29udmVyc2F0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29udmVyc2F0aW9ucyA/ICh0aGlzLmNvbnZlcnNhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ha2VUb29sQ2FsbFJlcXVlc3QgaW1wbGVtZW50cyBpLk1ha2VUb29sQ2FsbFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VPcHRpb246IE1ha2VUb29sQ2FsbFJlcXVlc3RNZXNzYWdlT3B0aW9uO1xuICAgIHBheWxvYWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1ha2VUb29sQ2FsbFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNYWtlVG9vbENhbGxSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lc3NhZ2VPcHRpb24pIHttLm1lc3NhZ2VPcHRpb24gPSBNYWtlVG9vbENhbGxSZXF1ZXN0TWVzc2FnZU9wdGlvbi5mcm9tUHJvdG8ocHJvdG8ubWVzc2FnZU9wdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1ha2VUb29sQ2FsbFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlT3B0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lc3NhZ2VPcHRpb24gIT09IG51bGwpIHt0b1JldHVyblsnbWVzc2FnZU9wdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXNzYWdlT3B0aW9uID8gKHRoaXMubWVzc2FnZU9wdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXNzYWdlT3B0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheWxvYWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BheWxvYWQnXSA9IHRoaXMucGF5bG9hZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYWtlVG9vbENhbGxSZXNwb25zZSBpbXBsZW1lbnRzIGkuTWFrZVRvb2xDYWxsUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWFrZVRvb2xDYWxsUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBNYWtlVG9vbENhbGxSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWFrZVRvb2xDYWxsUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWRpYSBpbXBsZW1lbnRzIGkuTWVkaWFJbnRlcmZhY2Uge1xuICAgIG1lZGlhQ29udGVudFR5cGU6IHN0cmluZztcbiAgICBtZWRpYUxvY2F0aW9uUGF0aDogc3RyaW5nO1xuICAgIG1lZGlhRmlsZU5hbWU6IHN0cmluZztcbiAgICBmaWxlU2l6ZTogbnVtYmVyO1xuICAgIG1lZGlhVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZWRpYSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1lZGlhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbGVTaXplKSB7bS5maWxlU2l6ZSA9IHBhcnNlSW50KHByb3RvLmZpbGVTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1lZGlhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWFDb250ZW50VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWFDb250ZW50VHlwZSddID0gdGhpcy5tZWRpYUNvbnRlbnRUeXBlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhTG9jYXRpb25QYXRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWRpYUxvY2F0aW9uUGF0aCddID0gdGhpcy5tZWRpYUxvY2F0aW9uUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYUZpbGVOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWRpYUZpbGVOYW1lJ10gPSB0aGlzLm1lZGlhRmlsZU5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpbGVTaXplJ10gPSB0aGlzLmZpbGVTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWRpYVVybCddID0gdGhpcy5tZWRpYVVybDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYWtlVG9vbENhbGxSZXF1ZXN0TWVzc2FnZU9wdGlvbiBpbXBsZW1lbnRzIGkuTWFrZVRvb2xDYWxsUmVxdWVzdE1lc3NhZ2VPcHRpb25JbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xuICAgIHNlbGVjdGVkT3B0aW9uSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1ha2VUb29sQ2FsbFJlcXVlc3RNZXNzYWdlT3B0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWFrZVRvb2xDYWxsUmVxdWVzdE1lc3NhZ2VPcHRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1ha2VUb29sQ2FsbFJlcXVlc3RNZXNzYWdlT3B0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGVjdGVkT3B0aW9uSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWxlY3RlZE9wdGlvbklkcyddID0gdGhpcy5zZWxlY3RlZE9wdGlvbklkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YSBpbXBsZW1lbnRzIGkuTWV0YWRhdGFJbnRlcmZhY2Uge1xuICAgIGlkZW50aWZpZXI6IGUuTWV0YWRhdGFJZGVudGlmaWVyO1xuICAgIGRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWV0YWRhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBNZXRhZGF0YSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pZGVudGlmaWVyKSB7bS5pZGVudGlmaWVyID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXRhZGF0YUlkZW50aWZpZXI+KGUuTWV0YWRhdGFJZGVudGlmaWVyLCBwcm90by5pZGVudGlmaWVyKTt9XG4gICAgICAgIGlmIChwcm90by5kYXRhKSB7bS5kYXRhID0gT2JqZWN0LmtleXMocHJvdG8uZGF0YSkucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5kYXRhW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1ldGFkYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWRlbnRpZmllciddID0gdGhpcy5pZGVudGlmaWVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRhdGEgPyAodGhpcy5kYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVjZWl2ZU1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeSBpbXBsZW1lbnRzIGkuUmVjZWl2ZU1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlY2VpdmVNZXNzYWdlUmVxdWVzdE1ldGFkYXRhRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZWNlaXZlTWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZWNlaXZlTWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2YWx1ZSddID0gdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmplY3RNZXNzYWdlUmVxdWVzdE1ldGFkYXRhRW50cnkgaW1wbGVtZW50cyBpLkluamVjdE1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEluamVjdE1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IEluamVjdE1lc3NhZ2VSZXF1ZXN0TWV0YWRhdGFFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW5qZWN0TWVzc2FnZVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2YWx1ZSddID0gdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOZXdJbmJveExlYWRDYXB0dXJlZFJlcXVlc3QgaW1wbGVtZW50cyBpLk5ld0luYm94TGVhZENhcHR1cmVkUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgcGFyZW50TmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25TdW1tYXJ5OiBzdHJpbmc7XG4gICAgY2FwdHVyZWRMZWFkOiBDYXB0dXJlZExlYWQ7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgY2FwdHVyZWRBdDogRGF0ZTtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaW5pdGlhdG9ySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE5ld0luYm94TGVhZENhcHR1cmVkUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE5ld0luYm94TGVhZENhcHR1cmVkUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jYXB0dXJlZExlYWQpIHttLmNhcHR1cmVkTGVhZCA9IENhcHR1cmVkTGVhZC5mcm9tUHJvdG8ocHJvdG8uY2FwdHVyZWRMZWFkKTt9XG4gICAgICAgIGlmIChwcm90by5jYXB0dXJlZEF0KSB7bS5jYXB0dXJlZEF0ID0gbmV3IERhdGUocHJvdG8uY2FwdHVyZWRBdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk5ld0luYm94TGVhZENhcHR1cmVkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWVzcGFjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZXNwYWNlJ10gPSB0aGlzLm5hbWVzcGFjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJlbnROYW1lc3BhY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcmVudE5hbWVzcGFjZSddID0gdGhpcy5wYXJlbnROYW1lc3BhY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvblN1bW1hcnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvblN1bW1hcnknXSA9IHRoaXMuY29udmVyc2F0aW9uU3VtbWFyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXB0dXJlZExlYWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FwdHVyZWRMZWFkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NhcHR1cmVkTGVhZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYXB0dXJlZExlYWQgPyAodGhpcy5jYXB0dXJlZExlYWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2FwdHVyZWRMZWFkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc291cmNlJ10gPSB0aGlzLnNvdXJjZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXB0dXJlZEF0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNhcHR1cmVkQXQgIT09IG51bGwpIHt0b1JldHVyblsnY2FwdHVyZWRBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYXB0dXJlZEF0ID8gKHRoaXMuY2FwdHVyZWRBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYXB0dXJlZEF0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbml0aWF0b3JJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5pdGlhdG9ySWQnXSA9IHRoaXMuaW5pdGlhdG9ySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXNwb25zZSBpbXBsZW1lbnRzIGkuTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXNwb25zZUludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBOZXdJbmJveExlYWRDYXB0dXJlZFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTmV3SW5ib3hMZWFkQ2FwdHVyZWRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhZ2VkUmVxdWVzdE9wdGlvbnMgaW1wbGVtZW50cyBpLlBhZ2VkUmVxdWVzdE9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYWdlZFJlcXVlc3RPcHRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGFnZWRSZXF1ZXN0T3B0aW9ucygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFnZWRSZXNwb25zZU1ldGFkYXRhIGltcGxlbWVudHMgaS5QYWdlZFJlc3BvbnNlTWV0YWRhdGFJbnRlcmZhY2Uge1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuICAgIHRvdGFsUmVzdWx0czogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGFnZWRSZXNwb25zZU1ldGFkYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGFnZWRSZXNwb25zZU1ldGFkYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvdGFsUmVzdWx0cykge20udG90YWxSZXN1bHRzID0gcGFyc2VJbnQocHJvdG8udG90YWxSZXN1bHRzLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhZ2VkUmVzcG9uc2VNZXRhZGF0YUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWxSZXN1bHRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3RhbFJlc3VsdHMnXSA9IHRoaXMudG90YWxSZXN1bHRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlY2VpdmVNZXNzYWdlUmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVjZWl2ZU1lc3NhZ2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzZW5kZXJJZDogc3RyaW5nO1xuICAgIHJlY2lwaWVudElkOiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgICBib2R5OiBzdHJpbmc7XG4gICAgY2hhbm5lbDogZS5Db252ZXJzYXRpb25DaGFubmVsO1xuICAgIHR5cGU6IGUuTWVzc2FnZVR5cGU7XG4gICAgbG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICBtZWRpYTogc3RyaW5nW107XG4gICAgbmFtZXNwYWNlOiBOYW1lc3BhY2VEZXRhaWw7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZWNlaXZlTWVzc2FnZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZWNlaXZlTWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2hhbm5lbCkge20uY2hhbm5lbCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ29udmVyc2F0aW9uQ2hhbm5lbD4oZS5Db252ZXJzYXRpb25DaGFubmVsLCBwcm90by5jaGFubmVsKTt9XG4gICAgICAgIGlmIChwcm90by50eXBlKSB7bS50eXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXNzYWdlVHlwZT4oZS5NZXNzYWdlVHlwZSwgcHJvdG8udHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb24pIHttLmxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLmxvY2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBPYmplY3Qua2V5cyhwcm90by5tZXRhZGF0YSkucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5tZXRhZGF0YVtrXTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgaWYgKHByb3RvLm5hbWVzcGFjZSkge20ubmFtZXNwYWNlID0gTmFtZXNwYWNlRGV0YWlsLmZyb21Qcm90byhwcm90by5uYW1lc3BhY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZWNlaXZlTWVzc2FnZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZW5kZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VuZGVySWQnXSA9IHRoaXMuc2VuZGVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVjaXBpZW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlY2lwaWVudElkJ10gPSB0aGlzLnJlY2lwaWVudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2VJZCddID0gdGhpcy5tZXNzYWdlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9keSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9keSddID0gdGhpcy5ib2R5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5uZWwnXSA9IHRoaXMuY2hhbm5lbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50eXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0eXBlJ10gPSB0aGlzLnR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWEnXSA9IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm5hbWVzcGFjZSAhPT0gbnVsbCkge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubmFtZXNwYWNlID8gKHRoaXMubmFtZXNwYWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm5hbWVzcGFjZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW1vdmVDb252ZXJzYXRpb25Gcm9tQ29udmVyc2F0aW9uVmlld1JlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUNvbnZlcnNhdGlvbkZyb21Db252ZXJzYXRpb25WaWV3UmVxdWVzdEludGVyZmFjZSB7XG4gICAgdmlld0lkOiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBwYXJ0aWNpcGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZW1vdmVDb252ZXJzYXRpb25Gcm9tQ29udmVyc2F0aW9uVmlld1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVDb252ZXJzYXRpb25Gcm9tQ29udmVyc2F0aW9uVmlld1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlbW92ZUNvbnZlcnNhdGlvbkZyb21Db252ZXJzYXRpb25WaWV3UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZXdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlld0lkJ10gPSB0aGlzLnZpZXdJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydGljaXBhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydGljaXBhbnRJZCddID0gdGhpcy5wYXJ0aWNpcGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbnZlcnNhdGlvbnNSZXF1ZXN0IGltcGxlbWVudHMgaS5TZWFyY2hDb252ZXJzYXRpb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBsb2NhdGlvbjogZS5QbGF0Zm9ybUxvY2F0aW9uO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VhcmNoQ29udmVyc2F0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZWFyY2hDb252ZXJzYXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5sb2NhdGlvbikge20ubG9jYXRpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlBsYXRmb3JtTG9jYXRpb24+KGUuUGxhdGZvcm1Mb2NhdGlvbiwgcHJvdG8ubG9jYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VhcmNoQ29udmVyc2F0aW9uc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NhdGlvbiddID0gdGhpcy5sb2NhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2hUZXJtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWFyY2hUZXJtJ10gPSB0aGlzLnNlYXJjaFRlcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNlYXJjaENvbnZlcnNhdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uczogU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlRGV0YWlsZWRDb252ZXJzYXRpb25bXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2VhcmNoQ29udmVyc2F0aW9uc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbnZlcnNhdGlvbnMpIHttLmNvbnZlcnNhdGlvbnMgPSBwcm90by5jb252ZXJzYXRpb25zLm1hcChTZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VEZXRhaWxlZENvbnZlcnNhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZWFyY2hDb252ZXJzYXRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbnZlcnNhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb25zID8gKHRoaXMuY29udmVyc2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZE1lc3NhZ2VPcHRpb25zIGltcGxlbWVudHMgaS5TZW5kTWVzc2FnZU9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIHJ1blN5bmM6IGJvb2xlYW47XG4gICAgc2tpcE1lc3NhZ2VEZWxpdmVyeTogYm9vbGVhbjtcbiAgICBhaU1vZGU6IGUuQUlNb2RlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VuZE1lc3NhZ2VPcHRpb25zIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2VuZE1lc3NhZ2VPcHRpb25zKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFpTW9kZSkge20uYWlNb2RlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5BSU1vZGU+KGUuQUlNb2RlLCBwcm90by5haU1vZGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZW5kTWVzc2FnZU9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ydW5TeW5jICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydydW5TeW5jJ10gPSB0aGlzLnJ1blN5bmM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2tpcE1lc3NhZ2VEZWxpdmVyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2tpcE1lc3NhZ2VEZWxpdmVyeSddID0gdGhpcy5za2lwTWVzc2FnZURlbGl2ZXJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFpTW9kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWlNb2RlJ10gPSB0aGlzLmFpTW9kZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kTWVzc2FnZVJlcXVlc3QgaW1wbGVtZW50cyBpLlNlbmRNZXNzYWdlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc2VuZGVyOiBQYXJ0aWNpcGFudDtcbiAgICByZWNpcGllbnQ6IFBhcnRpY2lwYW50O1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgdHlwZTogZS5NZXNzYWdlVHlwZTtcbiAgICBib2R5OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhW107XG4gICAgb3JpZ2luTG9jYXRpb246IGUuUGxhdGZvcm1Mb2NhdGlvbjtcbiAgICBtZWRpYTogTWVkaWFbXTtcbiAgICBjaGFubmVsOiBlLkNvbnZlcnNhdGlvbkNoYW5uZWw7XG4gICAgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VuZE1lc3NhZ2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2VuZE1lc3NhZ2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNlbmRlcikge20uc2VuZGVyID0gUGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnNlbmRlcik7fVxuICAgICAgICBpZiAocHJvdG8ucmVjaXBpZW50KSB7bS5yZWNpcGllbnQgPSBQYXJ0aWNpcGFudC5mcm9tUHJvdG8ocHJvdG8ucmVjaXBpZW50KTt9XG4gICAgICAgIGlmIChwcm90by50eXBlKSB7bS50eXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZXNzYWdlVHlwZT4oZS5NZXNzYWdlVHlwZSwgcHJvdG8udHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKE1ldGFkYXRhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ub3JpZ2luTG9jYXRpb24pIHttLm9yaWdpbkxvY2F0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5QbGF0Zm9ybUxvY2F0aW9uPihlLlBsYXRmb3JtTG9jYXRpb24sIHByb3RvLm9yaWdpbkxvY2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5tZWRpYSkge20ubWVkaWEgPSBwcm90by5tZWRpYS5tYXAoTWVkaWEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5jaGFubmVsKSB7bS5jaGFubmVsID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Db252ZXJzYXRpb25DaGFubmVsPihlLkNvbnZlcnNhdGlvbkNoYW5uZWwsIHByb3RvLmNoYW5uZWwpO31cbiAgICAgICAgaWYgKHByb3RvLm9wdGlvbnMpIHttLm9wdGlvbnMgPSBTZW5kTWVzc2FnZU9wdGlvbnMuZnJvbVByb3RvKHByb3RvLm9wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZW5kTWVzc2FnZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZW5kZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2VuZGVyICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NlbmRlciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zZW5kZXIgPyAodGhpcy5zZW5kZXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2VuZGVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlY2lwaWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZWNpcGllbnQgIT09IG51bGwpIHt0b1JldHVyblsncmVjaXBpZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnJlY2lwaWVudCA/ICh0aGlzLnJlY2lwaWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5yZWNpcGllbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3R5cGUnXSA9IHRoaXMudHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib2R5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib2R5J10gPSB0aGlzLmJvZHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5Mb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luTG9jYXRpb24nXSA9IHRoaXMub3JpZ2luTG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVkaWEgIT09IG51bGwpIHt0b1JldHVyblsnbWVkaWEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVkaWEgPyAodGhpcy5tZWRpYSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWRpYTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFubmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaGFubmVsJ10gPSB0aGlzLmNoYW5uZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3B0aW9ucyA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kTWVzc2FnZVJlc3BvbnNlIGltcGxlbWVudHMgaS5TZW5kTWVzc2FnZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlbmRNZXNzYWdlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kTWVzc2FnZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZW5kTWVzc2FnZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud29ya2Zsb3dJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd29ya2Zsb3dJZCddID0gdGhpcy53b3JrZmxvd0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udmVyc2F0aW9uSWQnXSA9IHRoaXMuY29udmVyc2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZFdpZGdldE1lc3NhZ2VSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kV2lkZ2V0TWVzc2FnZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHR5cGU6IGUuTWVzc2FnZVR5cGU7XG4gICAgYm9keTogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBNZXRhZGF0YVtdO1xuICAgIGxvY2F0aW9uOiBlLlBsYXRmb3JtTG9jYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kV2lkZ2V0TWVzc2FnZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kV2lkZ2V0TWVzc2FnZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udHlwZSkge20udHlwZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuTWVzc2FnZVR5cGU+KGUuTWVzc2FnZVR5cGUsIHByb3RvLnR5cGUpO31cbiAgICAgICAgaWYgKHByb3RvLm1ldGFkYXRhKSB7bS5tZXRhZGF0YSA9IHByb3RvLm1ldGFkYXRhLm1hcChNZXRhZGF0YS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9uKSB7bS5sb2NhdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUGxhdGZvcm1Mb2NhdGlvbj4oZS5QbGF0Zm9ybUxvY2F0aW9uLCBwcm90by5sb2NhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRXaWRnZXRNZXNzYWdlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3R5cGUnXSA9IHRoaXMudHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib2R5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib2R5J10gPSB0aGlzLmJvZHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9jYXRpb24nXSA9IHRoaXMubG9jYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZFdpZGdldE1lc3NhZ2VSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2VuZFdpZGdldE1lc3NhZ2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VuZFdpZGdldE1lc3NhZ2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRXaWRnZXRNZXNzYWdlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZEF0KSB7bS5jcmVhdGVkQXQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkQXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZW5kV2lkZ2V0TWVzc2FnZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlSWQnXSA9IHRoaXMubWVzc2FnZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWRBdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkQXQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZEF0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWRBdCA/ICh0aGlzLmNyZWF0ZWRBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkQXQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0TGFzdFNlZW5SZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRMYXN0U2VlblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgcGFydGljaXBhbnQ6IFBhcnRpY2lwYW50O1xuICAgIHN0YXR1czogZS5TZXRMYXN0U2VlblJlcXVlc3RTdGF0dXM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXRMYXN0U2VlblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRMYXN0U2VlblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFydGljaXBhbnQpIHttLnBhcnRpY2lwYW50ID0gUGFydGljaXBhbnQuZnJvbVByb3RvKHByb3RvLnBhcnRpY2lwYW50KTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU2V0TGFzdFNlZW5SZXF1ZXN0U3RhdHVzPihlLlNldExhc3RTZWVuUmVxdWVzdFN0YXR1cywgcHJvdG8uc3RhdHVzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0TGFzdFNlZW5SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udmVyc2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRpY2lwYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhcnRpY2lwYW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRpY2lwYW50ID8gKHRoaXMucGFydGljaXBhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFydGljaXBhbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldExhc3RTZWVuUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNldExhc3RTZWVuUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBhcnRpY2lwYW50OiBQYXJ0aWNpcGFudDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldExhc3RTZWVuUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRMYXN0U2VlblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhcnRpY2lwYW50KSB7bS5wYXJ0aWNpcGFudCA9IFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5wYXJ0aWNpcGFudCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldExhc3RTZWVuUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0aWNpcGFudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXJ0aWNpcGFudCA/ICh0aGlzLnBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRpY2lwYW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5IGltcGxlbWVudHMgaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlU3VtbWFyeUludGVyZmFjZSB7XG4gICAgZmVlZGJhY2tUaGVtZXM6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWVbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmVlZGJhY2tUaGVtZXMpIHttLmZlZWRiYWNrVGhlbWVzID0gcHJvdG8uZmVlZGJhY2tUaGVtZXMubWFwKExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWUuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlc3BvbnNlRXZhbHVhdGlvbnNSZXNwb25zZVN1bW1hcnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mZWVkYmFja1RoZW1lcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mZWVkYmFja1RoZW1lcyAhPT0gbnVsbCkge3RvUmV0dXJuWydmZWVkYmFja1RoZW1lcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mZWVkYmFja1RoZW1lcyA/ICh0aGlzLmZlZWRiYWNrVGhlbWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZlZWRiYWNrVGhlbWVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWUgaW1wbGVtZW50cyBpLkxpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWVJbnRlcmZhY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGV4YW1wbGVzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXNwb25zZUV2YWx1YXRpb25zUmVzcG9uc2VTdW1tYXJ5VGhlbWUge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlU3VtbWFyeVRoZW1lKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmVzcG9uc2VFdmFsdWF0aW9uc1Jlc3BvbnNlU3VtbWFyeVRoZW1lSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leGFtcGxlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXhhbXBsZXMnXSA9IHRoaXMuZXhhbXBsZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29udmVyc2F0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVDb252ZXJzYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQ29udmVyc2F0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQ29udmVyc2F0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnZlcnNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb252ZXJzYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY29udmVyc2F0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnZlcnNhdGlvbiA/ICh0aGlzLmNvbnZlcnNhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb252ZXJzYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb252ZXJzYXRpb25SZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQ29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVDb252ZXJzYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb252ZXJzYXRpb24pIHttLmNvbnZlcnNhdGlvbiA9IENvbnZlcnNhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29udmVyc2F0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb252ZXJzYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udmVyc2F0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbnZlcnNhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb252ZXJzYXRpb24gPyAodGhpcy5jb252ZXJzYXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29udmVyc2F0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lc3NhZ2VTdGF0dXNSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVNZXNzYWdlU3RhdHVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgcGFydGljaXBhbnRJZDogc3RyaW5nO1xuICAgIHN0YXR1czogZS5NZXNzYWdlU3RhdHVzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTWVzc2FnZVN0YXR1c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZXNzYWdlU3RhdHVzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuTWVzc2FnZVN0YXR1cz4oZS5NZXNzYWdlU3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZXNzYWdlU3RhdHVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZUlkJ10gPSB0aGlzLm1lc3NhZ2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0aWNpcGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0aWNpcGFudElkJ10gPSB0aGlzLnBhcnRpY2lwYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlOiBNZXNzYWdlVGVtcGxhdGU7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50ZW1wbGF0ZSkge20udGVtcGxhdGUgPSBNZXNzYWdlVGVtcGxhdGUuZnJvbVByb3RvKHByb3RvLnRlbXBsYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlID8gKHRoaXMudGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlOiBNZXNzYWdlVGVtcGxhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRlbXBsYXRlKSB7bS50ZW1wbGF0ZSA9IE1lc3NhZ2VUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8udGVtcGxhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZXNzYWdlVGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRlbXBsYXRlID8gKHRoaXMudGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGVtcGxhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlV2lkZ2V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlV2lkZ2V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgd2lkZ2V0SWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBhbGxvd2VkVXJsczogc3RyaW5nW107XG4gICAgd2VsY29tZU1lc3NhZ2U6IHN0cmluZztcbiAgICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgdGV4dENvbG9yOiBzdHJpbmc7XG4gICAgYWNjZW50Q29sb3I6IHN0cmluZztcbiAgICBhY2NlbnRUZXh0Q29sb3I6IHN0cmluZztcbiAgICBza2lwQ29udGFjdENhcHR1cmU6IGJvb2xlYW47XG4gICAgYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9uczogc3RyaW5nO1xuICAgIGFzc2lzdGFudE5hbWU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRBdmF0YXJVcmw6IHN0cmluZztcbiAgICBwb3NpdGlvbjogZS5XaWRnZXRQb3NpdGlvbjtcbiAgICBoaWRlTW9iaWxlQ3RhOiBib29sZWFuO1xuICAgIGN1c3RvbUdyZWV0aW5nTWVzc2FnZTogc3RyaW5nO1xuICAgIGVuYWJsZUdyZWV0aW5nTWVzc2FnZTogYm9vbGVhbjtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcbiAgICBhc3Npc3RhbnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlV2lkZ2V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVdpZGdldFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zaXRpb24pIHttLnBvc2l0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5XaWRnZXRQb3NpdGlvbj4oZS5XaWRnZXRQb3NpdGlvbiwgcHJvdG8ucG9zaXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVXaWRnZXRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dpZGdldElkJ10gPSB0aGlzLndpZGdldElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sb3InXSA9IHRoaXMuY29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWxsb3dlZFVybHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FsbG93ZWRVcmxzJ10gPSB0aGlzLmFsbG93ZWRVcmxzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlbGNvbWVNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3ZWxjb21lTWVzc2FnZSddID0gdGhpcy53ZWxjb21lTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0VuYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRW5hYmxlZCddID0gdGhpcy5pc0VuYWJsZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGV4dENvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0Q29sb3InXSA9IHRoaXMudGV4dENvbG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY2VudENvbG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NlbnRDb2xvciddID0gdGhpcy5hY2NlbnRDb2xvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NlbnRUZXh0Q29sb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY2VudFRleHRDb2xvciddID0gdGhpcy5hY2NlbnRUZXh0Q29sb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2tpcENvbnRhY3RDYXB0dXJlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza2lwQ29udGFjdENhcHR1cmUnXSA9IHRoaXMuc2tpcENvbnRhY3RDYXB0dXJlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZGl0aW9uYWxQcm9tcHRJbnN0cnVjdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZGl0aW9uYWxQcm9tcHRJbnN0cnVjdGlvbnMnXSA9IHRoaXMuYWRkaXRpb25hbFByb21wdEluc3RydWN0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hc3Npc3RhbnROYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnROYW1lJ10gPSB0aGlzLmFzc2lzdGFudE5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXNzaXN0YW50QXZhdGFyVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnRBdmF0YXJVcmwnXSA9IHRoaXMuYXNzaXN0YW50QXZhdGFyVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3NpdGlvbiddID0gdGhpcy5wb3NpdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlTW9iaWxlQ3RhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoaWRlTW9iaWxlQ3RhJ10gPSB0aGlzLmhpZGVNb2JpbGVDdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tR3JlZXRpbmdNZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21HcmVldGluZ01lc3NhZ2UnXSA9IHRoaXMuY3VzdG9tR3JlZXRpbmdNZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuYWJsZUdyZWV0aW5nTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW5hYmxlR3JlZXRpbmdNZXNzYWdlJ10gPSB0aGlzLmVuYWJsZUdyZWV0aW5nTWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFzc2lzdGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhc3Npc3RhbnRJZCddID0gdGhpcy5hc3Npc3RhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVXaWRnZXRSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHdpZGdldDogV2lkZ2V0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlV2lkZ2V0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVXaWRnZXRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by53aWRnZXQpIHttLndpZGdldCA9IFdpZGdldC5mcm9tUHJvdG8ocHJvdG8ud2lkZ2V0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlV2lkZ2V0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMud2lkZ2V0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3dpZGdldCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy53aWRnZXQgPyAodGhpcy53aWRnZXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMud2lkZ2V0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydENvbmZpZ3VyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcHNlcnRDb25maWd1cmF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0Q29uZmlndXJhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29uZmlndXJhdGlvbikge20uY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uZnJvbVByb3RvKHByb3RvLmNvbmZpZ3VyYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRDb25maWd1cmF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25maWd1cmF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZpZ3VyYXRpb24gPyAodGhpcy5jb25maWd1cmF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZpZ3VyYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcHNlcnRDb25maWd1cmF0aW9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwc2VydENvbmZpZ3VyYXRpb25SZXNwb25zZUludGVyZmFjZSB7XG4gICAgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydENvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwc2VydENvbmZpZ3VyYXRpb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25maWd1cmF0aW9uKSB7bS5jb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8uY29uZmlndXJhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydENvbmZpZ3VyYXRpb25SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlndXJhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25maWd1cmF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZpZ3VyYXRpb24gPyAodGhpcy5jb25maWd1cmF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZpZ3VyYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0UHJvZHVjdEZlYXR1cmVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcHNlcnRQcm9kdWN0RmVhdHVyZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByb2R1Y3RGZWF0dXJlOiBQcm9kdWN0RmVhdHVyZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcbiAgICBzdWJqZWN0UGFydGljaXBhbnQ6IFN1YmplY3RQYXJ0aWNpcGFudDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFByb2R1Y3RGZWF0dXJlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwc2VydFByb2R1Y3RGZWF0dXJlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcm9kdWN0RmVhdHVyZSkge20ucHJvZHVjdEZlYXR1cmUgPSBQcm9kdWN0RmVhdHVyZS5mcm9tUHJvdG8ocHJvdG8ucHJvZHVjdEZlYXR1cmUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgaWYgKHByb3RvLnN1YmplY3RQYXJ0aWNpcGFudCkge20uc3ViamVjdFBhcnRpY2lwYW50ID0gU3ViamVjdFBhcnRpY2lwYW50LmZyb21Qcm90byhwcm90by5zdWJqZWN0UGFydGljaXBhbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRQcm9kdWN0RmVhdHVyZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0RmVhdHVyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0RmVhdHVyZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwcm9kdWN0RmVhdHVyZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0RmVhdHVyZSA/ICh0aGlzLnByb2R1Y3RGZWF0dXJlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByb2R1Y3RGZWF0dXJlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWJqZWN0UGFydGljaXBhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3ViamVjdFBhcnRpY2lwYW50ID8gKHRoaXMuc3ViamVjdFBhcnRpY2lwYW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1YmplY3RQYXJ0aWNpcGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcHNlcnRQcm9kdWN0RmVhdHVyZVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcHNlcnRQcm9kdWN0RmVhdHVyZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcm9kdWN0RmVhdHVyZTogUHJvZHVjdEZlYXR1cmU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcHNlcnRQcm9kdWN0RmVhdHVyZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0UHJvZHVjdEZlYXR1cmVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcm9kdWN0RmVhdHVyZSkge20ucHJvZHVjdEZlYXR1cmUgPSBQcm9kdWN0RmVhdHVyZS5mcm9tUHJvdG8ocHJvdG8ucHJvZHVjdEZlYXR1cmUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRQcm9kdWN0RmVhdHVyZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvZHVjdEZlYXR1cmUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJvZHVjdEZlYXR1cmUgIT09IG51bGwpIHt0b1JldHVyblsncHJvZHVjdEZlYXR1cmUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJvZHVjdEZlYXR1cmUgPyAodGhpcy5wcm9kdWN0RmVhdHVyZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcm9kdWN0RmVhdHVyZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaWRnZXRWaXNpdCBpbXBsZW1lbnRzIGkuV2lkZ2V0VmlzaXRJbnRlcmZhY2Uge1xuICAgIHZpc2l0b3JJZDogc3RyaW5nO1xuICAgIHZpc2l0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFdpZGdldFZpc2l0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgV2lkZ2V0VmlzaXQoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLldpZGdldFZpc2l0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlzaXRvcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aXNpdG9ySWQnXSA9IHRoaXMudmlzaXRvcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpc2l0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Zpc2l0SWQnXSA9IHRoaXMudmlzaXRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaWRnZXRMb2NhdGlvbiBpbXBsZW1lbnRzIGkuV2lkZ2V0TG9jYXRpb25JbnRlcmZhY2Uge1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGJ1c2luZXNzTmFtZTogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhZGRyZXNzMjogc3RyaW5nO1xuICAgIGNpdHk6IHN0cmluZztcbiAgICBzdGF0ZTogc3RyaW5nO1xuICAgIHppcDogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFdpZGdldExvY2F0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgV2lkZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLldpZGdldExvY2F0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NOYW1lJ10gPSB0aGlzLmJ1c2luZXNzTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRyZXNzJ10gPSB0aGlzLmFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzczIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MyJ10gPSB0aGlzLmFkZHJlc3MyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NpdHknXSA9IHRoaXMuY2l0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuemlwICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd6aXAnXSA9IHRoaXMuemlwO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9IHRoaXMuY291bnRyeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V2lkZ2V0TG9jYXRpb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFdpZGdldExvY2F0aW9uc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHdpZGdldElkOiBzdHJpbmc7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBxdWVyeTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFdpZGdldExvY2F0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V2lkZ2V0TG9jYXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0V2lkZ2V0TG9jYXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3aWRnZXRJZCddID0gdGhpcy53aWRnZXRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydxdWVyeSddID0gdGhpcy5xdWVyeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V2lkZ2V0TG9jYXRpb25zUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RXaWRnZXRMb2NhdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbG9jYXRpb25zOiBXaWRnZXRMb2NhdGlvbltdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFdpZGdldExvY2F0aW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFdpZGdldExvY2F0aW9uc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9ucykge20ubG9jYXRpb25zID0gcHJvdG8ubG9jYXRpb25zLm1hcChXaWRnZXRMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0V2lkZ2V0TG9jYXRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xvY2F0aW9ucyddID0gdGhpcy5sb2NhdGlvbnMubWFwKChyKSA9PiAndG9BcGlKc29uJyBpbiByID8gKHIgYXMgYW55KS50b0FwaUpzb24oKSA6IHIpO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=
|