Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@glimmer/object

Package Overview
Dependencies
Maintainers
11
Versions
160
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/object - npm Package Compare versions

Comparing version 0.42.2 to 0.43.0

test/ember-computed-test.js

2

dist/commonjs/es5/lib/mixin.js

@@ -437,2 +437,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBaU1NLE0sR0FBQSxNO1FBa0JBLGdCLEdBQUEsZ0I7UUFZQSxPLEdBQUEsTztRQStHQSxVLEdBQUEsVTs7QUE5VU47O0FBQ0E7O0FBQ0E7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFHTSxVQUFOLE1BQU0sTzs7QUFFQyxJQUFNLGtDQUFOLHNDQUFBO0FBQ0EsSUFBTSxnQ0FBTixzQ0FBQTtBQUVQLElBQUEsa0NBQUEsU0FBQSxVQUFBLEdBQUE7QUFBQSxvQkFBQSxJQUFBLEVBQUEsVUFBQTs7QUFDRSxTQUFBLHNDQUFBLElBQUEsSUFBQTtBQURGLENBQUE7QUFLQSxJQUFBLGdDQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsb0JBQUEsSUFBQSxFQUFBLFNBQUE7O0FBQ0UsU0FBQSxzQ0FBQSxJQUFBLElBQUE7QUFERixDQUFBO0FBWUEsSUFBQSx3QkFBQSxZQUFBO0FBNEJFLGFBQUEsS0FBQSxDQUFBLFVBQUEsRUFBQSxNQUFBLEVBQW1EO0FBQUEsWUFBQSxhQUFBOztBQUFBLHdCQUFBLElBQUEsRUFBQSxLQUFBOztBQTNCM0MsYUFBQSxVQUFBLEdBQUEsSUFBQSxDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsWUFBQSxHQUFBLEVBQUE7QUF5Qk4sYUFBQSxNQUFBLENBQUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUEsS0FBQSxZQUFBLEVBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxhQUFBLEVBQUEsTUFBQTtBQUNEOztBQS9CSCxVQUFBLE1BQUEsR0FBQSxTQUFBLE1BQUEsR0FNK0M7QUFBQSxhQUFBLElBQUEsT0FBQSxVQUFBLE1BQUEsRUFBN0MsT0FBNkMsTUFBQSxJQUFBLENBQUEsRUFBQSxRQUFBLENBQUEs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SUFBTyxDQUFQO0FBRVgsWUFBSSxZQUFZLEtBQWhCLE1BQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxXQUFBO0FBRUEsWUFBSTtBQUNGLG1CQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFERixTQUFBLFNBRVU7QUFDUixpQkFBQSxNQUFBLEdBQUEsU0FBQTtBQUNEO0FBVkgsS0FBQTtBQWFDLFNBQUEsU0FBQSxHQUFBLElBQUE7QUFFRCxXQUFBLElBQUE7QUFDRDtBQUVELFNBQUEsU0FBQSxDQUFBLFFBQUEsRUFBcUM7QUFDbkMsUUFBSSxlQUFKLFFBQUEsRUFBNkIsT0FBQSxRQUFBO0FBRTdCLFdBQU8sWUFBNEM7QUFBQSxhQUFBLElBQUEsUUFBQSxVQUFBLE1BQUEsRUFBNUMsT0FBNEMsTUFBQSxLQUFBLENBQUEsRUFBQSxRQUFBLENBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUE7QUFBNUMsaUJBQTRDLEtBQTVDLElBQTRDLFVBQUEsS0FBQSxDQUE1QztBQUE0Qzs7QUFDakQsWUFBSSxDQUFKLElBQUEsRUFBVyxPQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFFWCxZQUFJLFlBQVksS0FBaEIsTUFBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFFQSxZQUFJO0FBQ0YsbUJBQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUEsU0FFVTtBQUNSLGlCQUFBLE1BQUEsR0FBQSxTQUFBO0FBQ0Q7QUFWSCxLQUFBO0FBWUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDTEFTU19NRVRBIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBHbGltbWVyT2JqZWN0LCB7XG4gIEdsaW1tZXJPYmplY3RGYWN0b3J5LFxuICBDbGFzc01ldGEsXG4gIEluc3RhbmNlTWV0YSxcbiAgdHVyYm9jaGFyZ2UsXG59IGZyb20gJy4vb2JqZWN0JztcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRPUiA9ICc1ZDkwZjg0Zi05MDhlLTRhNDItOTc0OS0zZDBmNTIzYzI2MmMnO1xuZXhwb3J0IGNvbnN0IEJMVUVQUklOVCA9ICc4ZDk3Y2Y1Zi1kYjllLTQ4ZDgtYTZiMi03YTc1YjcxNzA4MDUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciB7XG4gICc1ZDkwZjg0Zi05MDhlLTRhNDItOTc0OS0zZDBmNTIzYzI2MmMnID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsdWVwcmludCB7XG4gICc4ZDk3Y2Y1Zi1kYjllLTQ4ZDgtYTZiMi03YTc1YjcxNzA4MDUnID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zIHtcbiAgY29uY2F0ZW5hdGVkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcbiAgbWVyZ2VkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBfc3VwZXI/OiBGdW5jdGlvbjtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXhpbiB7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogRGljdDxhbnk+ID0gbnVsbCBhcyBhbnk7IC8vIGFzc2lnbmVkIGJlZm9yZSB1c2VkXG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogTWl4aW5bXSA9IFtdO1xuXG4gIHN0YXRpYyBjcmVhdGUoLi4uYXJnczogKE1peGluIHwgRXh0ZW5zaW9ucylbXSkge1xuICAgIGxldCBleHRlbnNpb25zID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIFtdKTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbnMgaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBhcmdzIGFzIE1peGluW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVwcyA9IGFyZ3Muc2xpY2UoMCwgLTEpLm1hcCh0b01peGluKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhleHRlbnNpb25zIGFzIEV4dGVuc2lvbnMsIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaXhpbnMob2JqOiBhbnkpOiBNaXhpbltdIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICBpZiAoIW1ldGEpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtZXRhLmdldEFwcGxpZWRNaXhpbnMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIG1peGluczogTWl4aW5bXSkge1xuICAgIHRoaXMucmVvcGVuKGV4dGVuc2lvbnMpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2goLi4ubWl4aW5zKTtcbiAgfVxuXG4gIGRldGVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG9iai5kZXBlbmRlbmNpZXMuaW5kZXhPZih0aGlzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgcmV0dXJuICEhbWV0YSAmJiBtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIHJlb3BlbihleHRlbnNpb25zOiBFeHRlbnNpb25zKSB7XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh0b01peGluKHRoaXMuZXh0ZW5zaW9ucykpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBjb25jYXQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd0NvbmNhdCA9IGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3Q29uY2F0KSkge1xuICAgICAgICBjb25jYXQgPSAocmF3Q29uY2F0IGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdDb25jYXQgPT09IG51bGwgfHwgcmF3Q29uY2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uY2F0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25jYXQgPSBbcmF3Q29uY2F0IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBjb25jYXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnbWVyZ2VkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IG1lcmdlZDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3TWVyZ2VkID0gZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdNZXJnZWQpKSB7XG4gICAgICAgIG1lcmdlZCA9IChyYXdNZXJnZWQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd01lcmdlZCA9PT0gbnVsbCB8fCByYXdNZXJnZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXJnZWQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZCA9IFtyYXdNZXJnZWQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IG1lcmdlZDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZDogRGljdDxCbHVlcHJpbnQ+ID0gT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZXh0ZW5zaW9uc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgTWV0aG9kQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaWYgKHZhbHVlICYmIEJMVUVQUklOVCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGFCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCBkaWN0PEJsdWVwcmludD4oKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBkaWN0PGFueT4oKTtcbiAgICBhc3NpZ24odGhpcy5leHRlbnNpb25zLCB0dXJib2NoYXJnZShub3JtYWxpemVkKSk7XG4gIH1cblxuICBhcHBseSh0YXJnZXQ6IGFueSkge1xuICAgIGxldCBtZXRhOiBDbGFzc01ldGEgPSAodGFyZ2V0W0NMQVNTX01FVEFdID0gdGFyZ2V0W0NMQVNTX01FVEFdIHx8IG5ldyBDbGFzc01ldGEoKSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uYXBwbHkodGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXModGFyZ2V0LCB0YXJnZXQsIG1ldGEpO1xuICAgIG1ldGEuYWRkTWl4aW4odGhpcyk7XG4gICAgbWV0YS5zZWFsKCk7XG4gICAgbWV0YS5yZXNlYWwodGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGUoT3JpZ2luYWw6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBPcmlnaW5hbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9yaWdpbmFsLnByb3RvdHlwZSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsKSk7XG4gICAgdGhpcy5leHRlbmRQcm90b3R5cGVPbnRvKE9yaWdpbmFsLCBPcmlnaW5hbCk7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhTdWJjbGFzcy5wcm90b3R5cGUsIFBhcmVudC5wcm90b3R5cGUsIFN1YmNsYXNzW0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIGV4dGVuZFN0YXRpYyhUYXJnZXQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRTdGF0aWMoVGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoVGFyZ2V0LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGFyZ2V0KSwgVGFyZ2V0W0NMQVNTX01FVEFdW0NMQVNTX01FVEFdKTtcbiAgICBUYXJnZXRbQ0xBU1NfTUVUQV0uYWRkU3RhdGljTWl4aW4odGhpcyk7XG4gIH1cblxuICBtZXJnZVByb3BlcnRpZXModGFyZ2V0OiBPYmplY3QsIHBhcmVudDogRGljdDxEaWN0PiwgbWV0YTogQ2xhc3NNZXRhKSB7XG4gICAgaWYgKG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpKSByZXR1cm47XG4gICAgbWV0YS5hZGRBcHBsaWVkTWl4aW4odGhpcyk7XG5cbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkTWVyZ2VkUHJvcGVydHkoaywgcGFyZW50W2tdKSk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGssIFtdKSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpIH0pLmRlZmluZShcbiAgICAgIHRhcmdldCxcbiAgICAgICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJ1xuICAgICk7XG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldE1lcmdlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUodGFyZ2V0LCAnbWVyZ2VkUHJvcGVydGllcycpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBCbHVlcHJpbnQgPSB0aGlzLmV4dGVuc2lvbnMhW2tleV07XG4gICAgICBsZXQgZGVzYyA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yKHRhcmdldCwga2V5IGFzIHN0cmluZywgbWV0YSk7XG4gICAgICBkZXNjLmRlZmluZSh0YXJnZXQsIGtleSBhcyBzdHJpbmcsIHBhcmVudCk7XG4gICAgfSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IFJPT1QgfSkuZGVmaW5lKHRhcmdldCwgJ19zdXBlcicgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb24gPSBNaXhpbiB8IEV4dGVuc2lvbnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCBleHRlbmRzIEdsaW1tZXJPYmplY3Q+KFxuICBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+LFxuICAuLi5leHRlbnNpb25zOiBFeHRlbnNpb25bXVxuKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiB7XG4gIGxldCBTdXBlciA9IFBhcmVudCBhcyB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBsZXQgU3ViY2xhc3MgPSBjbGFzcyBleHRlbmRzIFN1cGVyIHt9O1xuICBTdWJjbGFzc1tDTEFTU19NRVRBXSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KFBhcmVudFtDTEFTU19NRVRBXSk7XG5cbiAgbGV0IG1peGlucyA9IGV4dGVuc2lvbnMubWFwKHRvTWl4aW4pO1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uYWRkU3ViY2xhc3MoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pik7XG4gIG1peGlucy5mb3JFYWNoKG0gPT4gU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4obSkpO1xuXG4gIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQpO1xuXG4gIHJldHVybiBTdWJjbGFzcyBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxpbmtTdWJjbGFzc2VzKFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uZ2V0U3ViY2xhc3NlcygpLmZvckVhY2goKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSA9PiB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0ucmVzZXQoUGFyZW50W0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudC5wcm90b3R5cGUpO1xuXG4gICAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzLCBQYXJlbnQpO1xuXG4gICAgLy8gcmVjdXJzZSBpbnRvIHN1Yi1zdWJjbGFzc2VzXG4gICAgcmVsaW5rU3ViY2xhc3NlcyhTdWJjbGFzcyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9NaXhpbihleHRlbnNpb246IEV4dGVuc2lvbik6IE1peGluIHtcbiAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIE1peGluKSByZXR1cm4gZXh0ZW5zaW9uO1xuICBlbHNlIHJldHVybiBuZXcgTWl4aW4oZXh0ZW5zaW9uIGFzIE9iamVjdCwgW10pO1xufVxuXG5jbGFzcyBWYWx1ZURlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIF9ob21lPzogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6IHRoaXMud3JpdGFibGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgbGV0IHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAoY2xhc3NNZXRhLmhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChjbGFzc01ldGEuaGFzTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NvckJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBnZXQ6ICgpID0+IGFueTtcbiAgc2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICBnZXQsXG4gICAgc2V0LFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IgJiB7IGdldDogYW55OyBzZXQ6IGFueSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMuZ2V0ID0gZ2V0O1xuICAgIHRoaXMuc2V0ID0gc2V0O1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX2NsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3Ioe1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogdGhpcy5nZXQsXG4gICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBWYWx1ZURlc2NyaXB0b3Ige1xuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gd3JhcE1ldGhvZChob21lLCBrZXksIHRoaXMudmFsdWUpO1xuICAgIHN1cGVyLmRlZmluZSh0YXJnZXQsIGtleSwgaG9tZSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgRGF0YUJsdWVwcmludCB7XG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IE1ldGhvZERlc2NyaXB0b3Ige1xuICAgIGxldCBkZXNjID0gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgY2xhc3NNZXRhKTtcbiAgICByZXR1cm4gbmV3IE1ldGhvZERlc2NyaXB0b3IoZGVzYyBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWV0aG9kKGhvbWU6IERpY3QsIG1ldGhvZE5hbWU6IHN0cmluZywgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSB7XG4gIGlmICghKChtZXRob2ROYW1lIGFzIHN0cmluZykgaW4gaG9tZSkpIHJldHVybiBtYXliZVdyYXAob3JpZ2luYWwpO1xuXG4gIGxldCBzdXBlck1ldGhvZCA9IGhvbWVbbWV0aG9kTmFtZV07XG5cbiAgbGV0IGZ1bmMgPSBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gc3VwZXJNZXRob2QgYXMgYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIChmdW5jIGFzIGFueSkuX193cmFwcGVkID0gdHJ1ZTtcblxuICByZXR1cm4gZnVuYztcbn1cblxuZnVuY3Rpb24gbWF5YmVXcmFwKG9yaWdpbmFsOiBGdW5jdGlvbikge1xuICBpZiAoJ19fd3JhcHBlZCcgaW4gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDtcblxuICByZXR1cm4gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBaU1NLE0sR0FBQSxNO1FBa0JBLGdCLEdBQUEsZ0I7UUFZQSxPLEdBQUEsTztRQStHQSxVLEdBQUEsVTs7QUE5VU47O0FBQ0E7O0FBQ0E7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFHTSxVQUFOLE1BQU0sTzs7QUFFQyxJQUFNLGtDQUFOLHNDQUFBO0FBQ0EsSUFBTSxnQ0FBTixzQ0FBQTtBQUVQLElBQUEsa0NBQUEsU0FBQSxVQUFBLEdBQUE7QUFBQSxvQkFBQSxJQUFBLEVBQUEsVUFBQTs7QUFDRSxTQUFBLHNDQUFBLElBQUEsSUFBQTtBQURGLENBQUE7QUFLQSxJQUFBLGdDQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsb0JBQUEsSUFBQSxFQUFBLFNBQUE7O0FBQ0UsU0FBQSxzQ0FBQSxJQUFBLElBQUE7QUFERixDQUFBO0FBWUEsSUFBQSx3QkFBQSxZQUFBO0FBNEJFLGFBQUEsS0FBQSxDQUFBLFVBQUEsRUFBQSxNQUFBLEVBQW1EO0FBQUEsWUFBQSxhQUFBOztBQUFBLHdCQUFBLElBQUEsRUFBQSxLQUFBOztBQTNCM0MsYUFBQSxVQUFBLEdBQUEsSUFBQSxDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsWUFBQSxHQUFBLEVBQUE7QUF5Qk4sYUFBQSxNQUFBLENBQUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUEsS0FBQSxZQUFBLEVBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxhQUFBLEVBQUEsTUFBQTtBQUNEOztBQS9CSCxVQUFBLE1BQUEsR0FBQSxTQUFBLE1BQUEsR0FNK0M7QUFBQSxhQUFBLElBQUEsT0FBQSxVQUFBLE1BQUEsRUFBN0MsT0FBNkMsTUFBQSxJQUFBLENBQUEsRUFBQSxRQUFBLENBQUEs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SUFBTyxDQUFQO0FBRVgsWUFBSSxZQUFZLEtBQWhCLE1BQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxXQUFBO0FBRUEsWUFBSTtBQUNGLG1CQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFERixTQUFBLFNBRVU7QUFDUixpQkFBQSxNQUFBLEdBQUEsU0FBQTtBQUNEO0FBVkgsS0FBQTtBQWFDLFNBQUEsU0FBQSxHQUFBLElBQUE7QUFFRCxXQUFBLElBQUE7QUFDRDtBQUVELFNBQUEsU0FBQSxDQUFBLFFBQUEsRUFBcUM7QUFDbkMsUUFBSSxlQUFKLFFBQUEsRUFBNkIsT0FBQSxRQUFBO0FBRTdCLFdBQU8sWUFBNEM7QUFBQSxhQUFBLElBQUEsUUFBQSxVQUFBLE1BQUEsRUFBNUMsT0FBNEMsTUFBQSxLQUFBLENBQUEsRUFBQSxRQUFBLENBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUE7QUFBNUMsaUJBQTRDLEtBQTVDLElBQTRDLFVBQUEsS0FBQSxDQUE1QztBQUE0Qzs7QUFDakQsWUFBSSxDQUFKLElBQUEsRUFBVyxPQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFFWCxZQUFJLFlBQVksS0FBaEIsTUFBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFFQSxZQUFJO0FBQ0YsbUJBQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUEsU0FFVTtBQUNSLGlCQUFBLE1BQUEsR0FBQSxTQUFBO0FBQ0Q7QUFWSCxLQUFBO0FBWUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDTEFTU19NRVRBIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBHbGltbWVyT2JqZWN0LCB7XG4gIEdsaW1tZXJPYmplY3RGYWN0b3J5LFxuICBDbGFzc01ldGEsXG4gIEluc3RhbmNlTWV0YSxcbiAgdHVyYm9jaGFyZ2UsXG59IGZyb20gJy4vb2JqZWN0JztcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRPUiA9ICc1ZDkwZjg0Zi05MDhlLTRhNDItOTc0OS0zZDBmNTIzYzI2MmMnO1xuZXhwb3J0IGNvbnN0IEJMVUVQUklOVCA9ICc4ZDk3Y2Y1Zi1kYjllLTQ4ZDgtYTZiMi03YTc1YjcxNzA4MDUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciB7XG4gICc1ZDkwZjg0Zi05MDhlLTRhNDItOTc0OS0zZDBmNTIzYzI2MmMnID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsdWVwcmludCB7XG4gICc4ZDk3Y2Y1Zi1kYjllLTQ4ZDgtYTZiMi03YTc1YjcxNzA4MDUnID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zIHtcbiAgY29uY2F0ZW5hdGVkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcbiAgbWVyZ2VkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBfc3VwZXI/OiBGdW5jdGlvbjtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXhpbiB7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogRGljdDxhbnk+ID0gbnVsbCBhcyBhbnk7IC8vIGFzc2lnbmVkIGJlZm9yZSB1c2VkXG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogTWl4aW5bXSA9IFtdO1xuXG4gIHN0YXRpYyBjcmVhdGUoLi4uYXJnczogKE1peGluIHwgRXh0ZW5zaW9ucylbXSkge1xuICAgIGxldCBleHRlbnNpb25zID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIFtdKTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbnMgaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBhcmdzIGFzIE1peGluW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVwcyA9IGFyZ3Muc2xpY2UoMCwgLTEpLm1hcCh0b01peGluKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhleHRlbnNpb25zIGFzIEV4dGVuc2lvbnMsIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaXhpbnMob2JqOiBhbnkpOiBNaXhpbltdIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICBpZiAoIW1ldGEpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtZXRhLmdldEFwcGxpZWRNaXhpbnMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIG1peGluczogTWl4aW5bXSkge1xuICAgIHRoaXMucmVvcGVuKGV4dGVuc2lvbnMpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2goLi4ubWl4aW5zKTtcbiAgfVxuXG4gIGRldGVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG9iai5kZXBlbmRlbmNpZXMuaW5kZXhPZih0aGlzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgcmV0dXJuICEhbWV0YSAmJiBtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIHJlb3BlbihleHRlbnNpb25zOiBFeHRlbnNpb25zKSB7XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh0b01peGluKHRoaXMuZXh0ZW5zaW9ucykpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBjb25jYXQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd0NvbmNhdCA9IGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3Q29uY2F0KSkge1xuICAgICAgICBjb25jYXQgPSAocmF3Q29uY2F0IGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdDb25jYXQgPT09IG51bGwgfHwgcmF3Q29uY2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uY2F0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25jYXQgPSBbcmF3Q29uY2F0IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBjb25jYXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnbWVyZ2VkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IG1lcmdlZDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3TWVyZ2VkID0gZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdNZXJnZWQpKSB7XG4gICAgICAgIG1lcmdlZCA9IChyYXdNZXJnZWQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd01lcmdlZCA9PT0gbnVsbCB8fCByYXdNZXJnZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXJnZWQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZCA9IFtyYXdNZXJnZWQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IG1lcmdlZDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZDogRGljdDxCbHVlcHJpbnQ+ID0gT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZXh0ZW5zaW9uc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgTWV0aG9kQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaWYgKHZhbHVlICYmIEJMVUVQUklOVCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGFCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCBkaWN0PEJsdWVwcmludD4oKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBkaWN0PGFueT4oKTtcbiAgICBhc3NpZ24odGhpcy5leHRlbnNpb25zLCB0dXJib2NoYXJnZShub3JtYWxpemVkKSk7XG4gIH1cblxuICBhcHBseSh0YXJnZXQ6IGFueSkge1xuICAgIGxldCBtZXRhOiBDbGFzc01ldGEgPSAodGFyZ2V0W0NMQVNTX01FVEFdID0gdGFyZ2V0W0NMQVNTX01FVEFdIHx8IG5ldyBDbGFzc01ldGEoKSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uYXBwbHkodGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXModGFyZ2V0LCB0YXJnZXQsIG1ldGEpO1xuICAgIG1ldGEuYWRkTWl4aW4odGhpcyk7XG4gICAgbWV0YS5zZWFsKCk7XG4gICAgbWV0YS5yZXNlYWwodGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGUoT3JpZ2luYWw6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBPcmlnaW5hbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9yaWdpbmFsLnByb3RvdHlwZSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsKSk7XG4gICAgdGhpcy5leHRlbmRQcm90b3R5cGVPbnRvKE9yaWdpbmFsLCBPcmlnaW5hbCk7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhTdWJjbGFzcy5wcm90b3R5cGUsIFBhcmVudC5wcm90b3R5cGUsIFN1YmNsYXNzW0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIGV4dGVuZFN0YXRpYyhUYXJnZXQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRTdGF0aWMoVGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoVGFyZ2V0LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGFyZ2V0KSwgVGFyZ2V0W0NMQVNTX01FVEFdW0NMQVNTX01FVEFdKTtcbiAgICBUYXJnZXRbQ0xBU1NfTUVUQV0uYWRkU3RhdGljTWl4aW4odGhpcyk7XG4gIH1cblxuICBtZXJnZVByb3BlcnRpZXModGFyZ2V0OiBPYmplY3QsIHBhcmVudDogRGljdDxEaWN0PiwgbWV0YTogQ2xhc3NNZXRhKSB7XG4gICAgaWYgKG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpKSByZXR1cm47XG4gICAgbWV0YS5hZGRBcHBsaWVkTWl4aW4odGhpcyk7XG5cbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkTWVyZ2VkUHJvcGVydHkoaywgcGFyZW50W2tdKSk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGssIFtdKSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpIH0pLmRlZmluZShcbiAgICAgIHRhcmdldCxcbiAgICAgICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJ1xuICAgICk7XG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldE1lcmdlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUodGFyZ2V0LCAnbWVyZ2VkUHJvcGVydGllcycpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBCbHVlcHJpbnQgPSB0aGlzLmV4dGVuc2lvbnMhW2tleV07XG4gICAgICBsZXQgZGVzYyA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yKHRhcmdldCwga2V5IGFzIHN0cmluZywgbWV0YSk7XG4gICAgICBkZXNjLmRlZmluZSh0YXJnZXQsIGtleSBhcyBzdHJpbmcsIHBhcmVudCk7XG4gICAgfSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IFJPT1QgfSkuZGVmaW5lKHRhcmdldCwgJ19zdXBlcicgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb24gPSBNaXhpbiB8IEV4dGVuc2lvbnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCBleHRlbmRzIEdsaW1tZXJPYmplY3Q+KFxuICBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+LFxuICAuLi5leHRlbnNpb25zOiBFeHRlbnNpb25bXVxuKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiB7XG4gIGxldCBTdXBlciA9IFBhcmVudCBhcyB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBsZXQgU3ViY2xhc3MgPSBjbGFzcyBleHRlbmRzIFN1cGVyIHt9O1xuICBTdWJjbGFzc1tDTEFTU19NRVRBXSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KFBhcmVudFtDTEFTU19NRVRBXSk7XG5cbiAgbGV0IG1peGlucyA9IGV4dGVuc2lvbnMubWFwKHRvTWl4aW4pO1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uYWRkU3ViY2xhc3MoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pik7XG4gIG1peGlucy5mb3JFYWNoKG0gPT4gU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4obSkpO1xuXG4gIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQpO1xuXG4gIHJldHVybiBTdWJjbGFzcyBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxpbmtTdWJjbGFzc2VzKFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uZ2V0U3ViY2xhc3NlcygpLmZvckVhY2goKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSA9PiB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0ucmVzZXQoUGFyZW50W0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudC5wcm90b3R5cGUpO1xuXG4gICAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzLCBQYXJlbnQpO1xuXG4gICAgLy8gcmVjdXJzZSBpbnRvIHN1Yi1zdWJjbGFzc2VzXG4gICAgcmVsaW5rU3ViY2xhc3NlcyhTdWJjbGFzcyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9NaXhpbihleHRlbnNpb246IEV4dGVuc2lvbik6IE1peGluIHtcbiAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIE1peGluKSByZXR1cm4gZXh0ZW5zaW9uO1xuICBlbHNlIHJldHVybiBuZXcgTWl4aW4oZXh0ZW5zaW9uIGFzIE9iamVjdCwgW10pO1xufVxuXG5jbGFzcyBWYWx1ZURlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIF9ob21lPzogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6IHRoaXMud3JpdGFibGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgbGV0IHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAoY2xhc3NNZXRhLmhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChjbGFzc01ldGEuaGFzTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NvckJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBnZXQ6ICgpID0+IGFueTtcbiAgc2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICBnZXQsXG4gICAgc2V0LFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IgJiB7IGdldDogYW55OyBzZXQ6IGFueSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMuZ2V0ID0gZ2V0O1xuICAgIHRoaXMuc2V0ID0gc2V0O1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX2NsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3Ioe1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogdGhpcy5nZXQsXG4gICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBWYWx1ZURlc2NyaXB0b3Ige1xuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBEaWN0KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHdyYXBNZXRob2QoaG9tZSwga2V5LCB0aGlzLnZhbHVlKTtcbiAgICBzdXBlci5kZWZpbmUodGFyZ2V0LCBrZXksIGhvbWUpO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZEJsdWVwcmludCBleHRlbmRzIERhdGFCbHVlcHJpbnQge1xuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBNZXRob2REZXNjcmlwdG9yIHtcbiAgICBsZXQgZGVzYyA9IHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGNsYXNzTWV0YSk7XG4gICAgcmV0dXJuIG5ldyBNZXRob2REZXNjcmlwdG9yKGRlc2MgYXMgUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1ldGhvZChob21lOiBEaWN0LCBtZXRob2ROYW1lOiBzdHJpbmcsIG9yaWdpbmFsOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICBpZiAoISgobWV0aG9kTmFtZSBhcyBzdHJpbmcpIGluIGhvbWUpKSByZXR1cm4gbWF5YmVXcmFwKG9yaWdpbmFsKTtcblxuICBsZXQgc3VwZXJNZXRob2QgPSBob21lW21ldGhvZE5hbWVdO1xuXG4gIGxldCBmdW5jID0gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IHN1cGVyTWV0aG9kIGFzIGFueTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICAoZnVuYyBhcyBhbnkpLl9fd3JhcHBlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGZ1bmM7XG59XG5cbmZ1bmN0aW9uIG1heWJlV3JhcChvcmlnaW5hbDogRnVuY3Rpb24pIHtcbiAgaWYgKCdfX3dyYXBwZWQnIGluIG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -440,2 +440,2 @@ "use strict";

GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztRQW9DTSxXLEdBQUEsVzs7QUFwQ047O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFKTSxVQUFOLE1BQU0sTzs7QUFNQyxJQUFNLG9DQUFjLFNBQUEsV0FBQSxHQUFwQixDQUFBLENBQUE7QUFFUCxJQUFNLGFBQU4sc0NBQUE7QUF3Qk0sU0FBQSxXQUFBLENBQUEsR0FBQSxFQUErQjtBQUNuQztBQUNBO0FBQ0EsV0FBQSxHQUFBO0FBQ0Q7O0lBRUQsYTs7Ozs7Ozs7O3lCQUNFLG1CLGtDQUFtQztBQUNqQyxjQUFNLElBQUEsS0FBQSxDQUFOLGdEQUFNLENBQU47Ozs7RUFGSixxQjs7QUFNQSxJQUFBLGdDQUFBLFlBQUE7QUFBQSxhQUFBLFNBQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxTQUFBOztBQUNVLGFBQUEsY0FBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxnQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxzQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSx5QkFBQSxHQUFBLEtBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLG1CQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGFBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxZQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsVUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLEtBQUEsR0FBQSxFQUFBO0FBQ0QsYUFBQSx1QkFBQSxHQUFBLElBQUE7QUFrUFI7O0FBOVBELGNBQUEsVUFBQSxHQUFBLFNBQUEsVUFBQSxDQUFBLE1BQUEsRUFjNkM7QUFDekMsWUFBSSxPQUFPLElBQVgsSUFBVyxFQUFYO0FBQ0EsYUFBQSxLQUFBLENBQUEsTUFBQTtBQUNBLGVBQUEsSUFBQTtBQWpCSixLQUFBOztBQUFBLGNBQUEsR0FBQSxHQUFBLFNBQUEsSUFBQSxDQUFBLE1BQUEsRUFvQjBEO0FBQ3RELFlBQUksY0FBSixNQUFBLEVBQTBCLE9BQVEsT0FBbEMsVUFBa0MsQ0FBUixDQUExQixLQUNLLElBQUksT0FBSixXQUFBLEVBQ0gsT0FBUSxPQUFBLFdBQUEsQ0FBQSxVQUFBLEtBREwsSUFDSCxDQURHLEtBRUEsT0FBQSxJQUFBO0FBeEJULEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxLQUFBLEVBMkJpRDtBQUM3QyxZQUFJLE9BQUEsS0FBQSxLQUFBLFFBQUEsSUFBNkIsVUFBakMsSUFBQSxFQUFpRDtBQUVqRCxZQUFJLEtBQUoseUJBQUEsRUFBb0M7QUFDbEMsZ0JBQUksY0FBYyxLQUFsQixzQkFBQTtBQUNBLGlCQUFLLElBQUwsSUFBQSxJQUFBLFdBQUEsRUFBOEI7QUFDNUIsb0JBQUksUUFBSixLQUFBLEVBQW1CO0FBQ2pCLHdCQUFJLFNBQVMsWUFBQSxJQUFBLEVBQWIsS0FBYSxFQUFiO0FBQ0EsMkJBQUEsSUFBQSxJQUFlLE9BQUEsTUFBQSxDQUFjLE1BQTdCLElBQTZCLENBQWQsQ0FBZjtBQUNEO0FBQ0Y7QUFDRjtBQUVELFlBQUksS0FBSixtQkFBQSxFQUE4QjtBQUM1QixnQkFBSSxjQUFjLEtBQWxCLGdCQUFBO0FBQ0EsaUJBQUssSUFBTCxLQUFBLElBQUEsV0FBQSxFQUE4QjtBQUM1QixvQkFBSSxTQUFKLEtBQUEsRUFBbUI7QUFDakIsd0JBQUksU0FBUyxrQkFBQSxFQUFBLEVBQVcsWUFBeEIsS0FBd0IsQ0FBWCxDQUFiO0FBQ0EsMkJBQUEsS0FBQSxJQUFlLGtCQUFBLE1BQUEsRUFBZSxNQUE5QixLQUE4QixDQUFmLENBQWY7QUFDRDtBQUNGO0FBQ0Y7QUFoREwsS0FBQTs7QUFBQSxjQUFBLFNBQUEsQ0FBQSxjQUFBLEdBQUEsU0FBQSxjQUFBLENBQUEsS0FBQSxFQW1ENkI7QUFDekIsYUFBQSxZQUFBLENBQUEsSUFBQSxDQUFBLEtBQUE7QUFwREosS0FBQTs7QUFBQSxjQUFBLFNBQUEsQ0FBQSxRQUFBLEdBQUEsU0FBQSxRQUFBLENBQUEsS0FBQSxFQXVEdUI7QUFDbkIsYUFBQSxNQUFBLENBQUEsSUFBQSxDQUFBLEtBQUE7QUF4REosS0FBQTs7QUFBQSxjQUFBLFNBQUEsQ0FBQSxlQUFBLEdBQUEsU0FBQSxlQUFBLEdBMkRpQjtBQUNiLGVBQU8sS0FBUCxZQUFBO0FBNURKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsU0FBQSxHQUFBLFNBQUEsU0FBQSxHQStEVztBQUNQLGVBQU8sS0FBUCxNQUFBO0FBaEVKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsZUFBQSxHQUFBLFNBQUEsZUFBQSxDQUFBLEtBQUEsRUFtRThCO0FBQzFCLGFBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBO0FBcEVKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsZUFBQSxHQUFBLFNBQUEsZUFBQSxDQUFBLEtBQUEsRUF1RThCO0FBQzFCLGVBQU8sS0FBQSxhQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsTUFBc0MsQ0FBN0MsQ0FBQTtBQXhFSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLGdCQUFBLEdBQUEsU0FBQSxnQkFBQSxHQTJFa0I7QUFDZCxlQUFPLEtBQVAsYUFBQTtBQTVFSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLGNBQUEsR0FBQSxTQUFBLGNBQUEsQ0FBQSxLQUFBLEVBK0U2QjtBQUN6QixlQUFPLEtBQUEsWUFBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLE1BQXFDLENBQTVDLENBQUE7QUFoRkosS0FBQTs7QUFBQSxjQUFBLGNBQUEsR0FBQSxTQUFBLGNBQUEsQ0FBQSxRQUFBLEVBQUEsTUFBQSxFQW1GOEY7QUFDMUYsaUJBQUEsVUFBQSxFQUFBLFNBQUEsR0FBQSxPQUFBLENBQXlDLFVBQUEsQ0FBQSxFQUFBO0FBQUEsbUJBQWMsRUFBQSxtQkFBQSxDQUFBLFFBQUEsRUFBdkQsTUFBdUQsQ0FBZDtBQUF6QyxTQUFBO0FBQ0EsaUJBQUEsVUFBQSxFQUFBLGVBQUEsR0FBQSxPQUFBLENBQStDLFVBQUEsQ0FBQSxFQUFBO0FBQUEsbUJBQWMsRUFBQSxZQUFBLENBQTdELFFBQTZELENBQWQ7QUFBL0MsU0FBQTtBQUNBLGlCQUFBLFVBQUEsRUFBQSxJQUFBO0FBdEZKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsV0FBQSxHQUFBLFNBQUEsV0FBQSxDQUFBLFdBQUEsRUF5Rm9EO0FBQ2hELGFBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxXQUFBO0FBMUZKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsYUFBQSxHQUFBLFNBQUEsYUFBQSxHQTZGZTtBQUNYLGVBQU8sS0FBUCxVQUFBO0FBOUZKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsbUJBQUEsR0FBQSxTQUFBLG1CQUFBLENBQUEsUUFBQSxFQUFBLEtBQUEsRUFpR2tEO0FBQzlDLGFBQUEsZ0JBQUEsQ0FBQSxRQUFBLElBQUEsS0FBQTtBQWxHSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLG1CQUFBLEdBQUEsU0FBQSxtQkFBQSxDQUFBLFFBQUEsRUFxR3NDO0FBQ2xDLGVBQU8sS0FBQSxnQkFBQSxDQUFQLFFBQU8sQ0FBUDtBQXRHSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLG1CQUFBLEdBQUEsU0FBQSxtQkFBQSxDQUFBLFFBQUEsRUFBQSxJQUFBLEVBeUd3RTtBQUNwRSxhQUFBLGNBQUEsQ0FBQSxRQUFBLElBQUEsSUFBQTtBQTFHSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLFVBQUEsR0FBQSxTQUFBLFVBQUEsQ0FBQSxRQUFBLEVBNkc2QjtBQUN6QixhQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQTtBQTlHSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLHVCQUFBLEdBQUEsU0FBQSx1QkFBQSxDQUFBLFFBQUEsRUFpSDBDO0FBQ3RDLFlBQUksQ0FBQyxLQUFMLHlCQUFBLEVBQXFDLE9BQUEsS0FBQTtBQUNyQyxlQUFRLFlBQXVCLEtBQS9CLHNCQUFBO0FBbkhKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsdUJBQUEsR0FBQSxTQUFBLHVCQUFBLENBQUEsUUFBQSxFQXNIMEM7QUFDdEMsZUFBTyxLQUFBLHNCQUFBLENBQVAsUUFBTyxDQUFQO0FBdkhKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEseUJBQUEsR0FBQSxTQUFBLHlCQUFBLEdBMEgyQjtBQUN2QixlQUFPLE9BQUEsSUFBQSxDQUFZLEtBQW5CLHNCQUFPLENBQVA7QUEzSEosS0FBQTs7QUFBQSxjQUFBLFNBQUEsQ0FBQSx1QkFBQSxHQUFBLFNBQUEsdUJBQUEsQ0FBQSxRQUFBLEVBQUEsS0FBQSxFQThIc0Q7QUFDbEQsYUFBQSx5QkFBQSxHQUFBLElBQUE7QUFFQSxZQUFLLFlBQXVCLEtBQTVCLHNCQUFBLEVBQXlEO0FBQ3ZELGdCQUFJLE1BQU0sS0FBQSxzQkFBQSxDQUFBLFFBQUEsRUFBQSxNQUFBLENBQVYsS0FBVSxDQUFWO0FBQ0EsaUJBQUEsc0JBQUEsQ0FBQSxRQUFBLElBQUEsR0FBQTtBQUZGLFNBQUEsTUFHTztBQUNMLGlCQUFBLHNCQUFBLENBQUEsUUFBQSxJQUFBLEtBQUE7QUFDRDtBQXRJTCxLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLGlCQUFBLEdBQUEsU0FBQSxpQkFBQSxDQUFBLFFBQUEsRUF5SW9DO0FBQ2hDLFlBQUksQ0FBQyxLQUFMLG1CQUFBLEVBQStCLE9BQUEsS0FBQTtBQUMvQixlQUFRLFlBQXVCLEtBQS9CLGdCQUFBO0FBM0lKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsaUJBQUEsR0FBQSxTQUFBLGlCQUFBLENBQUEsUUFBQSxFQThJb0M7QUFDaEMsZUFBTyxLQUFBLGdCQUFBLENBQVAsUUFBTyxDQUFQO0FBL0lKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsbUJBQUEsR0FBQSxTQUFBLG1CQUFBLEdBa0pxQjtBQUNqQixlQUFPLE9BQUEsSUFBQSxDQUFZLEtBQW5CLGdCQUFPLENBQVA7QUFuSkosS0FBQTs7QUFBQSxjQUFBLFNBQUEsQ0FBQSxpQkFBQSxHQUFBLFNBQUEsaUJBQUEsQ0FBQSxRQUFBLEVBQUEsS0FBQSxFQXNKaUQ7QUFDN0MsYUFBQSxtQkFBQSxHQUFBLElBQUE7QUFFQSxZQUFJLFFBQUosS0FBSSxDQUFKLEVBQW9CO0FBQ2xCLGtCQUFNLElBQUEsS0FBQSxDQUFBLG9CQUNlLEtBQUEsU0FBQSxDQURyQixLQUNxQixDQURmLEdBQU4sdURBQU0sQ0FBTjtBQUtEO0FBRUQsWUFBSyxZQUF1QixLQUF2QixnQkFBQSxJQUFnRCxLQUFBLGdCQUFBLENBQWhELFFBQWdELENBQWhELElBQUwsS0FBQSxFQUErRjtBQUM3RixpQkFBQSxnQkFBQSxDQUFBLFFBQUEsSUFBa0Msc0JBQUEsS0FBQSxFQUVoQyxLQUFBLGdCQUFBLENBRkYsUUFFRSxDQUZnQyxDQUFsQztBQURGLFNBQUEsTUFLTztBQUNMLG9CQUFRLFVBQUEsSUFBQSxHQUFBLEtBQUEsR0FBeUIsU0FBakMsRUFBQTtBQUNBLGlCQUFBLGdCQUFBLENBQUEsUUFBQSxJQUFBLEtBQUE7QUFDRDtBQXpLTCxLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLGlCQUFBLEdBQUEsU0FBQSxpQkFBQSxHQTRLbUI7QUFDZixlQUFPLEtBQVAsY0FBQTtBQTdLSixLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLG1CQUFBLEdBQUEsU0FBQSxtQkFBQSxHQWdMcUI7QUFDakIsZUFBTyxLQUFQLGdCQUFBO0FBakxKLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsS0FBQSxHQUFBLFNBQUEsS0FBQSxDQUFBLE1BQUEsRUFvTGlDO0FBQzdCLGFBQUEsY0FBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxnQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxzQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxnQkFBQSxHQUFBLGlCQUFBO0FBRUEsWUFBQSxNQUFBLEVBQVk7QUFDVixpQkFBQSx5QkFBQSxHQUFpQyxPQUFqQyx5QkFBQTtBQUNBLGlCQUFLLElBQUwsSUFBQSxJQUFpQixPQUFqQixzQkFBQSxFQUFnRDtBQUM5QyxxQkFBQSxzQkFBQSxDQUFBLElBQUEsSUFBb0MsT0FBQSxzQkFBQSxDQUFBLElBQUEsRUFBcEMsS0FBb0MsRUFBcEM7QUFDRDtBQUVELGlCQUFBLG1CQUFBLEdBQTJCLE9BQTNCLG1CQUFBO0FBQ0EsaUJBQUssSUFBTCxNQUFBLElBQWlCLE9BQWpCLGdCQUFBLEVBQTBDO0FBQ3hDLHFCQUFBLGdCQUFBLENBQUEsTUFBQSxJQUE4QixrQkFBQSxFQUFBLEVBQVcsT0FBQSxnQkFBQSxDQUF6QyxNQUF5QyxDQUFYLENBQTlCO0FBQ0Q7QUFFRCw4QkFBTyxLQUFQLGNBQUEsRUFBNEIsT0FBNUIsY0FBQTtBQUNBLDhCQUFPLEtBQVAsZ0JBQUEsRUFBOEIsT0FBOUIsZ0JBQUE7QUFDRDtBQXZNTCxLQUFBOztBQUFBLGNBQUEsU0FBQSxDQUFBLE1BQUEsR0FBQSxTQUFBLE1BQUEsQ0FBQSxHQUFBLEVBME1vQjtBQUNoQixZQUFJLE9BQU8sc0JBQUEsR0FBQSxDQUFYLEdBQVcsQ0FBWDtBQUNBLFlBQUksUUFBUSxJQUFJLEtBQUosdUJBQUEsQ0FBQSxHQUFBLEVBQVosRUFBWSxDQUFaO0FBQ0EsWUFBSSxpQkFBaUIsS0FBckIsaUJBQXFCLEVBQXJCO0FBQ0EsWUFBSSxRQUFRLEtBQVosUUFBWSxFQUFaO0FBRUEsb0JBQVksa0JBQUEsY0FBQSxFQUF1QixLQUFuQyxjQUFZLENBQVo7QUFDQSxvQkFBWSxrQkFBQSxLQUFBLEVBQWMsTUFBMUIsUUFBMEIsRUFBZCxDQUFaO0FBak5KLEtBQUE7O0FBQUEsY0FBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsSUFBQSxHQW9OTTtBQUNGLFlBQUksaUJBQW1ELFlBQ3JELGtCQUFBLEVBQUEsRUFBVyxLQURiLGNBQ0UsQ0FEcUQsQ0FBdkQ7QUFHQSxvQkFBWSxLQUFaLHNCQUFBO0FBQ0Esb0JBQVksS0FBWixnQkFBQTtBQUVBLFlBQUksQ0FBQyxLQUFELG1CQUFBLElBQTZCLENBQUMsS0FBbEMseUJBQUEsRUFBa0U7QUFDaEUsaUJBQUEsSUFBQSxHQUFZLFlBQVosQ0FBQSxDQUFBO0FBQ0Q7QUFFRCxZQUFJLFFBQVEsS0FBWixLQUFBOztBQVhFLFlBQUEsUUFnQkEsU0FBQSxLQUFBLEdBQUE7QUFBQSxnQkFBQSxTQUFBLElBQUE7O0FBQUEsNEJBQUEsSUFBQSxFQUFBLEtBQUE7O0FBQ0Usa0JBQUEsT0FBQSxDQUFjLFVBQUEsSUFBQSxFQUFPO0FBQ25CLHVCQUFBLElBQUEsSUFBQSxXQUFBO0FBREYsYUFBQTtBQWpCRixTQUFBOztBQXVCRixhQUFBLHVCQUFBLEdBQUEsVUFBQSxXQUFBLEVBQUE7QUFBQSxzQkFBQSxNQUFBLEVBQUEsV0FBQTs7QUFBK0IscUJBQUEsTUFBQSxHQUFBO0FBQUEsZ0NBQUEsSUFBQSxFQUFBLE1BQUE7O0FBQUEsb0JBQUEsU0FBQSwyQkFBQSxJQUFBLEUsd0JBQUEsUyxDQUFBLENBQUE7O0FBQ25CLHVCQUFBLEtBQUEsR0FBZSxJQUFmLEtBQWUsRUFBZjtBQUNILHVCQUFBLGNBQUEsR0FBQSxjQUFBO0FBRnNCLHVCQUFBLE1BQUE7QUFlOUI7O0FBZkQsbUJBQUEsU0FBQSxDQUFBLGlCQUFBLEdBQUEsU0FBQSxpQkFBQSxHQUltQjtBQUNmLHVCQUFPLEtBQVAsY0FBQTtBQUxKLGFBQUE7O0FBQUEsbUJBQUEsU0FBQSxDQUFBLGdCQUFBLEdBQUEsU0FBQSxnQkFBQSxDQUFBLFFBQUEsRUFRbUM7QUFDL0IsdUJBQU8sS0FBQSxjQUFBLENBQUEsUUFBQSxLQUFQLGtDQUFBO0FBVEosYUFBQTs7QUFBQSxtQkFBQSxTQUFBLENBQUEsUUFBQSxHQUFBLFNBQUEsUUFBQSxHQVlVO0FBQ04sdUJBQU8sS0FBUCxLQUFBO0FBYkosYUFBQTs7QUFBQSxtQkFBQSxNQUFBO0FBQUEsU0FBQSxDQUFBLFVBQUEsQ0FBQTtBQWlCQSxvQkFBQSxJQUFBO0FBNVBKLEtBQUE7O0FBQUEsV0FBQSxTQUFBO0FBQUEsQ0FBQSxFQUFBO0FBZ1FBLFNBQUEscUJBQUEsQ0FBQSxLQUFBLEVBQUEsTUFBQSxFQUF3RDtBQUN0RCxRQUFJLFNBQVMsa0JBQUEsRUFBQSxFQUFiLE1BQWEsQ0FBYjtBQUVBLFNBQUssSUFBTCxJQUFBLElBQUEsS0FBQSxFQUF3QjtBQUN0QixZQUFJLFFBQUEsTUFBQSxJQUFrQixPQUFPLE9BQVAsSUFBTyxDQUFQLEtBQWxCLFVBQUEsSUFBd0QsT0FBTyxNQUFQLElBQU8sQ0FBUCxLQUE1RCxVQUFBLEVBQStGO0FBQzdGLGdCQUFJLFVBQVUsdUJBQUEsTUFBQSxFQUFBLElBQUEsRUFBeUIsTUFBdkMsSUFBdUMsQ0FBekIsQ0FBZDtBQUNBLG1CQUFBLElBQUEsSUFBQSxPQUFBO0FBRkYsU0FBQSxNQUdPO0FBQ0wsbUJBQUEsSUFBQSxJQUFlLE1BQWYsSUFBZSxDQUFmO0FBQ0Q7QUFDRjtBQUVELFdBQUEsTUFBQTtBQUNEO0FBRUQsSUFBQSxzQ0FBQSxVQUFBLFVBQUEsRUFBQTtBQUFBLGNBQUEsWUFBQSxFQUFBLFVBQUE7O0FBQUEsYUFBQSxZQUFBLEdBQUE7QUFBQSx3QkFBQSxJQUFBLEVBQUEsWUFBQTs7QUFBQSxZQUFBLFNBQUEsMkJBQUEsSUFBQSxFLHVCQUFBLFMsQ0FBQSxDQUFBOztBQUNTLGVBQUEsc0NBQUEsSUFBb0QsVUFBQSxVQUFBLENBQXBELElBQW9ELENBQXBEO0FBRFQsZUFBQSxNQUFBO0FBZ0JDOztBQWhCRCxpQkFBQSxVQUFBLEdBQUEsU0FBQSxVQUFBLENBQUEsTUFBQSxFQUdnRDtBQUM1QyxlQUFPLFdBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQVAsTUFBTyxDQUFQO0FBSkosS0FBQTs7QUFBQSxpQkFBQSxTQUFBLENBQUEsS0FBQSxHQUFBLFNBQUEsS0FBQSxDQUFBLE1BQUEsRUFPNEI7QUFDeEIsbUJBQUEsU0FBQSxDQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUE7QUFDQSxZQUFBLE1BQUEsRUFBWSxLQUFBLFVBQUEsRUFBQSxLQUFBLENBQXVCLE9BQXZCLFVBQXVCLENBQXZCO0FBVGhCLEtBQUE7O0FBQUEsaUJBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLElBQUEsR0FZTTtBQUNGLG1CQUFBLFNBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxhQUFBLFVBQUEsRUFBQSxJQUFBO0FBZEosS0FBQTs7QUFBQSxXQUFBLFlBQUE7QUFBQSxDQUFBLENBQUEsU0FBQSxDQUFBOztJQWtCYyxnQjtBQXNEWixhQUFBLGFBQUEsQ0FBQSxLQUFBLEVBQWlDO0FBQUEsd0JBQUEsSUFBQSxFQUFBLGFBQUE7O0FBTmpDLGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFDQSxhQUFBLEtBQUEsR0FBQSxJQUFBO0FBTUUsWUFBQSxLQUFBLEVBQVcsa0JBQUEsSUFBQSxFQUFBLEtBQUE7QUFDVixhQUFBLFdBQUEsQ0FBQSxVQUFBLEVBQUEsSUFBQSxDQUFBLElBQUEsRUFBaUUsU0FBakUsSUFBQTtBQUNELGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFDQSxrQ0FBQSxJQUFBO0FBQ0EsYUFBQSxJQUFBO0FBQ0Q7O2tCQWxERCxNLHFCQUFtRTtBQUFBLGFBQUEsSUFBQSxPQUFBLFVBQUEsTUFBQSxFQUFuRSxhQUFtRSxNQUFBLElBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLE1BQUEsRUFBQTtBQUFuRSx1QkFBbUUsSUFBbkUsSUFBbUUsVUFBQSxJQUFBLENBQW5FO0FBQW1FOztBQUNqRSxlQUFPLGNBQUEsS0FBQSxDQUFBLFNBQUEsRUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQVAsVUFBTyxDQUFBLENBQVA7OztrQkFHRixNLG1CQUFBLEssRUFBbUM7QUFDakMsZUFBTyxJQUFBLElBQUEsQ0FBUCxLQUFPLENBQVA7OztrQkFHRixNLG1CQUFBLFUsRUFBOEI7QUFDNUIsNEJBQUEsVUFBQSxFQUFBLGVBQUEsQ0FBQSxJQUFBO0FBQ0EsYUFBQSxVQUFBLEVBQUEsSUFBQTtBQUVBLHFDQUFBLElBQUE7OztrQkFHRixXLHdCQUFBLFUsRUFBbUM7QUFDakMsNEJBQUEsVUFBQSxFQUFBLFlBQUEsQ0FBQSxJQUFBO0FBQ0EsYUFBQSxVQUFBLEVBQUEsSUFBQTs7O2tCQUdGLGUsNEJBQUEsUSxFQUF1QztBQUNyQyxZQUFJLFFBQVEsS0FBQSxVQUFBLEVBQUEsbUJBQUEsQ0FBWixRQUFZLENBQVo7QUFDQSxZQUFJLENBQUosS0FBQSxFQUNFLE1BQU0sSUFBQSxLQUFBLENBQUEscUVBQU4sUUFBTSxHQUFOLEtBQU0sQ0FBTjtBQUdGLGVBQUEsS0FBQTs7O2tCQUdGLG9CLGlDQUFBLFEsRUFBb0U7QUFDbEUsWUFBSSxXQUFXLEtBQUEsVUFBQSxFQUFmLG1CQUFlLEVBQWY7QUFDQSxZQUFJLENBQUosUUFBQSxFQUFlO0FBRWYsYUFBSyxJQUFMLElBQUEsSUFBQSxRQUFBLEVBQTJCO0FBQ3pCLHFCQUFBLElBQUEsRUFBZSxTQUFmLElBQWUsQ0FBZjtBQUNEOzs7NEJBT0gsSSxtQkFBSSxDOzs0QkFVSixHLGdCQUFBLEcsRUFBZTtBQUNiLGVBQU8sS0FBUCxHQUFPLENBQVA7Ozs0QkFHRixHLGdCQUFBLEcsRUFBQSxLLEVBQTJCO0FBQ3pCLGFBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQTs7OzRCQUdGLGEsMEJBQUEsSyxFQUEyQjtBQUN6QiwwQkFBQSxJQUFBLEVBQUEsS0FBQTtBQUNBOzs7NEJBR0YsTyxzQkFBTyxDOzs7OztrQkE1RUssYTs7O0FBR0wsY0FBQSxzQ0FBQSxJQUF1RCxhQUFBLFVBQUEsQ0FBdkQsSUFBdUQsQ0FBdkQ7QUFDQSxjQUFBLE9BQUEsR0FBQSxJQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWV0YSwgSW5uZXJSZWZlcmVuY2VGYWN0b3J5LCBQcm9wZXJ0eVJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5jb25zdCBDTEFTU19NRVRBID0gJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0V2l0aE1peGlucyB7XG4gICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBDbGFzc01ldGE7XG4gIF9tZXRhOiBNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlV2l0aE1peGlucyB7XG4gIGNvbnN0cnVjdG9yOiBPYmplY3RXaXRoTWl4aW5zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+IHtcbiAgbmV3IDxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD47XG4gIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGNyZWF0ZTxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0O1xuICBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZDtcbiAgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyAnZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3JzogQ2xhc3NNZXRhID0gQ2xhc3NNZXRhLmZyb21QYXJlbnQobnVsbCk7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248SW5zdGFuY2VNZXRhPik6IEluc3RhbmNlTWV0YSB7XG4gICAgcmV0dXJuIHN1cGVyLmZyb21QYXJlbnQocGFyZW50KSBhcyBJbnN0YW5jZU1ldGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IEluc3RhbmNlTWV0YSkge1xuICAgIHN1cGVyLnJlc2V0KHBhcmVudCk7XG4gICAgaWYgKHBhcmVudCkgdGhpc1tDTEFTU19NRVRBXS5yZXNldChwYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBzdXBlci5zZWFsKCk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xpbW1lck9iamVjdCB7XG4gIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICBzdGF0aWMgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IEluc3RhbmNlTWV0YSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuICBzdGF0aWMgaXNDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGljIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBzdGF0aWMgZXh0ZW5kKHRoaXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIC4uLmV4dGVuc2lvbnM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGV4dGVuZENsYXNzKHRoaXMsIC4uLmV4dGVuc2lvbnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShhdHRycz86IE9iamVjdCB8IG51bGwpOiBHbGltbWVyT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRQcm90b3R5cGUodGhpcyk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG5cbiAgICByZWxpbmtTdWJjbGFzc2VzKHRoaXMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFN0YXRpYyh0aGlzKTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgbGV0IHZhbHVlID0gdGhpc1tDTEFTU19NRVRBXS5tZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnJHtwcm9wZXJ0eX0nLmBcbiAgICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgbWV0YWRhdGEgPSB0aGlzW0NMQVNTX01FVEFdLmdldFByb3BlcnR5TWV0YWRhdGEoKTtcbiAgICBpZiAoIW1ldGFkYXRhKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBwcm9wIGluIG1ldGFkYXRhKSB7XG4gICAgICBjYWxsYmFjayhwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgX3N1cGVyID0gUk9PVDtcbiAgX21ldGEgPSBudWxsO1xuICBfZ3VpZCE6IG51bWJlcjsgLy8gU2V0IGJ5IGluaXRpYWxpemVHdWlkKHRoaXMpIGluIGNvbnN0cnVjdG9yXG5cbiAgaW5pdCgpIHt9XG5cbiAgY29uc3RydWN0b3IoYXR0cnM/OiBPYmplY3QgfCBudWxsKSB7XG4gICAgaWYgKGF0dHJzKSBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0KVtDTEFTU19NRVRBXS5pbml0KHRoaXMsIGF0dHJzIHx8IG51bGwpO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMoYXR0cnM6IE9iamVjdCkge1xuICAgIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHt9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztRQW9DTSxXLEdBQUEsVzs7QUFwQ047O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFKTSxVQUFOLE1BQU0sTzs7QUFNQyxJQUFNLG9DQUFjLFNBQUEsV0FBQSxHQUFwQixDQUFBLENBQUE7QUFFUCxJQUFNLGFBQU4sc0NBQUE7QUF3Qk0sU0FBQSxXQUFBLENBQUEsR0FBQSxFQUErQjtBQUNuQztBQUNBO0FBQ0EsV0FBQSxHQUFBO0FBQ0Q7O0lBRUQsYTs7Ozs7Ozs7O3lCQUNFLG1CLGtDQUFtQztBQUNqQyxjQUFNLElBQUEsS0FBQSxDQUFOLGdEQUFNLENBQU47Ozs7RUFGSixxQjs7QUFNQSxJQUFBLGdDQUFBLFlBQUE7QUFBQSxhQUFBLFNBQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxTQUFBOztBQUNVLGFBQUEsY0FBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxnQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSxzQkFBQSxHQUFBLGlCQUFBO0FBQ0EsYUFBQSx5QkFBQSxHQUFBLEtBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLG1CQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGFBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxZQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsVUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLEtBQUEsR0FBQSxFQUFBO0FBQ0QsYUFBQSx1QkFBQSxHQUFBLElBQUE7QUFrUFI7O0FBOVBELGNBQUEsVUFBQSxHQUFBLFNBQUEsVUFBQSxDQUFBLE1BQUEsRUFjNkM7QUFDekMsWUFBSSxPQUFPLElBQVgsSUFBVyxFQUFYO0FBQ0EsYUFBQSxLQUFBLENBQUEsTUFBQTtBQUNBLGVB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LEVBQUEsSUFBQTs7O2tCQUdGLGUsNEJBQUEsUSxFQUF1QztBQUNyQyxZQUFJLFFBQVEsS0FBQSxVQUFBLEVBQUEsbUJBQUEsQ0FBWixRQUFZLENBQVo7QUFDQSxZQUFJLENBQUosS0FBQSxFQUNFLE1BQU0sSUFBQSxLQUFBLENBQUEscUVBQU4sUUFBTSxHQUFOLEtBQU0sQ0FBTjtBQUdGLGVBQUEsS0FBQTs7O2tCQUdGLG9CLGlDQUFBLFEsRUFBb0U7QUFDbEUsWUFBSSxXQUFXLEtBQUEsVUFBQSxFQUFmLG1CQUFlLEVBQWY7QUFDQSxZQUFJLENBQUosUUFBQSxFQUFlO0FBRWYsYUFBSyxJQUFMLElBQUEsSUFBQSxRQUFBLEVBQTJCO0FBQ3pCLHFCQUFBLElBQUEsRUFBZSxTQUFmLElBQWUsQ0FBZjtBQUNEOzs7NEJBT0gsSSxtQkFBSSxDOzs0QkFVSixHLGdCQUFBLEcsRUFBZTtBQUNiLGVBQU8sS0FBUCxHQUFPLENBQVA7Ozs0QkFHRixHLGdCQUFBLEcsRUFBQSxLLEVBQTJCO0FBQ3pCLGFBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQTs7OzRCQUdGLGEsMEJBQUEsSyxFQUEyQjtBQUN6QiwwQkFBQSxJQUFBLEVBQUEsS0FBQTtBQUNBOzs7NEJBR0YsTyxzQkFBTyxDOzs7OztrQkE1RUssYTs7O0FBR0wsY0FBQSxzQ0FBQSxJQUF1RCxhQUFBLFVBQUEsQ0FBdkQsSUFBdUQsQ0FBdkQ7QUFDQSxjQUFBLE9BQUEsR0FBQSxJQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWV0YSwgSW5uZXJSZWZlcmVuY2VGYWN0b3J5LCBQcm9wZXJ0eVJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5jb25zdCBDTEFTU19NRVRBID0gJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0V2l0aE1peGlucyB7XG4gICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBDbGFzc01ldGE7XG4gIF9tZXRhOiBNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlV2l0aE1peGlucyB7XG4gIGNvbnN0cnVjdG9yOiBPYmplY3RXaXRoTWl4aW5zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+IHtcbiAgbmV3IDxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD47XG4gIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGNyZWF0ZTxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0O1xuICBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZDtcbiAgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodGhpcyBhcyBhbnkpLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyAnZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3JzogQ2xhc3NNZXRhID0gQ2xhc3NNZXRhLmZyb21QYXJlbnQobnVsbCk7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248SW5zdGFuY2VNZXRhPik6IEluc3RhbmNlTWV0YSB7XG4gICAgcmV0dXJuIHN1cGVyLmZyb21QYXJlbnQocGFyZW50KSBhcyBJbnN0YW5jZU1ldGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IEluc3RhbmNlTWV0YSkge1xuICAgIHN1cGVyLnJlc2V0KHBhcmVudCk7XG4gICAgaWYgKHBhcmVudCkgdGhpc1tDTEFTU19NRVRBXS5yZXNldChwYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBzdXBlci5zZWFsKCk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xpbW1lck9iamVjdCB7XG4gIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICBzdGF0aWMgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IEluc3RhbmNlTWV0YSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuICBzdGF0aWMgaXNDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGljIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBzdGF0aWMgZXh0ZW5kKHRoaXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIC4uLmV4dGVuc2lvbnM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGV4dGVuZENsYXNzKHRoaXMsIC4uLmV4dGVuc2lvbnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShhdHRycz86IERpY3QgfCBudWxsKTogR2xpbW1lck9iamVjdCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kUHJvdG90eXBlKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcblxuICAgIHJlbGlua1N1YmNsYXNzZXModGhpcyBhcyBhbnkpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFN0YXRpYyh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBzdGF0aWMgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIGxldCB2YWx1ZSA9IHRoaXNbQ0xBU1NfTUVUQV0ubWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1ldGFGb3JQcm9wZXJ0eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkgd2l0aCBrZXkgJyR7cHJvcGVydHl9Jy5gXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IG1ldGFkYXRhID0gdGhpc1tDTEFTU19NRVRBXS5nZXRQcm9wZXJ0eU1ldGFkYXRhKCk7XG4gICAgaWYgKCFtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgcHJvcCBpbiBtZXRhZGF0YSkge1xuICAgICAgY2FsbGJhY2socHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIF9zdXBlciA9IFJPT1Q7XG4gIF9tZXRhID0gbnVsbDtcbiAgX2d1aWQhOiBudW1iZXI7IC8vIFNldCBieSBpbml0aWFsaXplR3VpZCh0aGlzKSBpbiBjb25zdHJ1Y3RvclxuXG4gIGluaXQoKSB7fVxuXG4gIGNvbnN0cnVjdG9yKGF0dHJzPzogRGljdCB8IG51bGwpIHtcbiAgICBpZiAoYXR0cnMpIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3QpW0NMQVNTX01FVEFdLmluaXQodGhpcywgYXR0cnMgfHwgbnVsbCk7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpc1trZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyhhdHRyczogT2JqZWN0KSB7XG4gICAgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBkZXN0cm95KCkge31cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -258,2 +258,2 @@ import { CLASS_META } from '@glimmer/object-reference';

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxVQUFULFFBQTJCLDJCQUEzQjtBQUNBLFNBQVMsSUFBVCxFQUFlLE1BQWYsUUFBNkIsZUFBN0I7QUFDQSxTQUVFLFNBRkYsRUFHRSxZQUhGLEVBSUUsV0FKRixRQUtPLFVBTFA7QUFPQSxTQUFTLElBQVQsUUFBcUIsU0FBckI7QUFHQSxNQUFNLEVBQUUsT0FBRixLQUFjLEtBQXBCO0FBRUEsT0FBTyxNQUFNLGFBQWEsc0NBQW5CO0FBQ1AsT0FBTyxNQUFNLFlBQVksc0NBQWxCO0FBRVAsT0FBTSxNQUFnQixVQUFoQixDQUEwQjtBQUFoQyxrQkFBQTtBQUNFLGFBQUEsc0NBQUEsSUFBeUMsSUFBekM7QUFFRDtBQUgrQjtBQUtoQyxPQUFNLE1BQWdCLFNBQWhCLENBQXlCO0FBQS9CLGtCQUFBO0FBQ0UsYUFBQSxzQ0FBQSxJQUF5QyxJQUF6QztBQUVEO0FBSDhCO0FBWS9CLE9BQU0sTUFBTyxLQUFQLENBQVk7QUE0QmhCLGdCQUFZLFVBQVosRUFBb0MsTUFBcEMsRUFBbUQ7QUEzQjNDLGFBQUEsVUFBQSxHQUF3QixJQUF4QixDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFtQyxFQUFuQztBQUNBLGFBQUEsZ0JBQUEsR0FBNkIsRUFBN0I7QUFDQSxhQUFBLFlBQUEsR0FBd0IsRUFBeEI7QUF5Qk4sYUFBSyxNQUFMLENBQVksVUFBWjtBQUNBLGFBQUssWUFBTCxDQUFrQixJQUFsQixDQUF1QixHQUFHLE1BQTFCO0FBQ0Q7QUF6QkQsV0FBTyxNQUFQLENBQWMsR0FBRyxJQUFqQixFQUE2QztBQUMzQyxZQUFJLGFBQWEsS0FBSyxLQUFLLE1BQUwsR0FBYyxDQUFuQixDQUFqQjtBQUVBLFlBQUksS0FBSyxNQUFMLEtBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLG1CQUFPLElBQUksSUFBSixDQUFTLEVBQVQs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ZixFQUFxQixJQUFyQixDQUFQO0FBQ0QsU0FGRCxTQUVVO0FBQ1IsaUJBQUssTUFBTCxHQUFjLFNBQWQ7QUFDRDtBQUNGLEtBWEQ7QUFZRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMQVNTX01FVEEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IEdsaW1tZXJPYmplY3QsIHtcbiAgR2xpbW1lck9iamVjdEZhY3RvcnksXG4gIENsYXNzTWV0YSxcbiAgSW5zdGFuY2VNZXRhLFxuICB0dXJib2NoYXJnZSxcbn0gZnJvbSAnLi9vYmplY3QnO1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmV4cG9ydCBjb25zdCBERVNDUklQVE9SID0gJzVkOTBmODRmLTkwOGUtNGE0Mi05NzQ5LTNkMGY1MjNjMjYyYyc7XG5leHBvcnQgY29uc3QgQkxVRVBSSU5UID0gJzhkOTdjZjVmLWRiOWUtNDhkOC1hNmIyLTdhNzViNzE3MDgwNSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEZXNjcmlwdG9yIHtcbiAgJzVkOTBmODRmLTkwOGUtNGE0Mi05NzQ5LTNkMGY1MjNjMjYyYycgPSB0cnVlO1xuICBhYnN0cmFjdCBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmx1ZXByaW50IHtcbiAgJzhkOTdjZjVmLWRiOWUtNDhkOC1hNmIyLTdhNzViNzE3MDgwNScgPSB0cnVlO1xuICBhYnN0cmFjdCBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbnMge1xuICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsO1xuICBtZXJnZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmc7XG4gIF9zdXBlcj86IEZ1bmN0aW9uO1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1peGluIHtcbiAgcHJpdmF0ZSBleHRlbnNpb25zOiBEaWN0PGFueT4gPSBudWxsIGFzIGFueTsgLy8gYXNzaWduZWQgYmVmb3JlIHVzZWRcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBNaXhpbltdID0gW107XG5cbiAgc3RhdGljIGNyZWF0ZSguLi5hcmdzOiAoTWl4aW4gfCBFeHRlbnNpb25zKVtdKSB7XG4gICAgbGV0IGV4dGVuc2lvbnMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgW10pO1xuICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9ucyBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIGFyZ3MgYXMgTWl4aW5bXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZXBzID0gYXJncy5zbGljZSgwLCAtMSkubWFwKHRvTWl4aW4pO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGV4dGVuc2lvbnMgYXMgRXh0ZW5zaW9ucywgZGVwcyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1peGlucyhvYmo6IGFueSk6IE1peGluW10ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBbXTtcblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIGlmICghbWV0YSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIG1ldGEuZ2V0QXBwbGllZE1peGlucygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXh0ZW5zaW9uczogRXh0ZW5zaW9ucywgbWl4aW5zOiBNaXhpbltdKSB7XG4gICAgdGhpcy5yZW9wZW4oZXh0ZW5zaW9ucyk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCguLi5taXhpbnMpO1xuICB9XG5cbiAgZGV0ZWN0KG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gb2JqLmRlcGVuZGVuY2llcy5pbmRleE9mKHRoaXMpICE9PSAtMTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICByZXR1cm4gISFtZXRhICYmIG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpO1xuICB9XG5cbiAgcmVvcGVuKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMpIHtcbiAgICBpZiAodGhpcy5leHRlbnNpb25zKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKHRvTWl4aW4odGhpcy5leHRlbnNpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnY29uY2F0ZW5hdGVkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IGNvbmNhdDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3Q29uY2F0ID0gZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdDb25jYXQpKSB7XG4gICAgICAgIGNvbmNhdCA9IChyYXdDb25jYXQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd0NvbmNhdCA9PT0gbnVsbCB8fCByYXdDb25jYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25jYXQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmNhdCA9IFtyYXdDb25jYXQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGNvbmNhdDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdtZXJnZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgbWVyZ2VkOiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdNZXJnZWQgPSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd01lcmdlZCkpIHtcbiAgICAgICAgbWVyZ2VkID0gKHJhd01lcmdlZCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3TWVyZ2VkID09PSBudWxsIHx8IHJhd01lcmdlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lcmdlZCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkID0gW3Jhd01lcmdlZCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gbWVyZ2VkO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkOiBEaWN0PEJsdWVwcmludD4gPSBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBleHRlbnNpb25zW2tleV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBNZXRob2RCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBpZiAodmFsdWUgJiYgQkxVRVBSSU5UIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgRGF0YUJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIGRpY3Q8Qmx1ZXByaW50PigpKTtcblxuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGRpY3Q8YW55PigpO1xuICAgIGFzc2lnbih0aGlzLmV4dGVuc2lvbnMsIHR1cmJvY2hhcmdlKG5vcm1hbGl6ZWQpKTtcbiAgfVxuXG4gIGFwcGx5KHRhcmdldDogYW55KSB7XG4gICAgbGV0IG1ldGE6IENsYXNzTWV0YSA9ICh0YXJnZXRbQ0xBU1NfTUVUQV0gPSB0YXJnZXRbQ0xBU1NfTUVUQV0gfHwgbmV3IENsYXNzTWV0YSgpKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5hcHBseSh0YXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyh0YXJnZXQsIHRhcmdldCwgbWV0YSk7XG4gICAgbWV0YS5hZGRNaXhpbih0aGlzKTtcbiAgICBtZXRhLnNlYWwoKTtcbiAgICBtZXRhLnJlc2VhbCh0YXJnZXQpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZShPcmlnaW5hbDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIE9yaWdpbmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3JpZ2luYWwucHJvdG90eXBlKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGUoT3JpZ2luYWwpKTtcbiAgICB0aGlzLmV4dGVuZFByb3RvdHlwZU9udG8oT3JpZ2luYWwsIE9yaWdpbmFsKTtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFN1YmNsYXNzLnByb3RvdHlwZSwgUGFyZW50LnByb3RvdHlwZSwgU3ViY2xhc3NbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKHRoaXMpO1xuICB9XG5cbiAgZXh0ZW5kU3RhdGljKFRhcmdldDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFN0YXRpYyhUYXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhUYXJnZXQsIE9iamVjdC5nZXRQcm90b3R5cGVPZihUYXJnZXQpLCBUYXJnZXRbQ0xBU1NfTUVUQV1bQ0xBU1NfTUVUQV0pO1xuICAgIFRhcmdldFtDTEFTU19NRVRBXS5hZGRTdGF0aWNNaXhpbih0aGlzKTtcbiAgfVxuXG4gIG1lcmdlUHJvcGVydGllcyh0YXJnZXQ6IE9iamVjdCwgcGFyZW50OiBEaWN0PERpY3Q+LCBtZXRhOiBDbGFzc01ldGEpIHtcbiAgICBpZiAobWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcykpIHJldHVybjtcbiAgICBtZXRhLmFkZEFwcGxpZWRNaXhpbih0aGlzKTtcblxuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrLCBwYXJlbnRba10pKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoaywgW10pKTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKFxuICAgICAgdGFyZ2V0LFxuICAgICAgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnXG4gICAgKTtcbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0TWVyZ2VkUHJvcGVydGllcygpIH0pLmRlZmluZSh0YXJnZXQsICdtZXJnZWRQcm9wZXJ0aWVzJyk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCBleHRlbnNpb246IEJsdWVwcmludCA9IHRoaXMuZXh0ZW5zaW9ucyFba2V5XTtcbiAgICAgIGxldCBkZXNjID0gZXh0ZW5zaW9uLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBtZXRhKTtcbiAgICAgIGRlc2MuZGVmaW5lKHRhcmdldCwga2V5IGFzIHN0cmluZywgcGFyZW50KTtcbiAgICB9KTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogUk9PVCB9KS5kZWZpbmUodGFyZ2V0LCAnX3N1cGVyJyBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbiA9IE1peGluIHwgRXh0ZW5zaW9ucztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZDxUIGV4dGVuZHMgR2xpbW1lck9iamVjdD4oXG4gIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4sXG4gIC4uLmV4dGVuc2lvbnM6IEV4dGVuc2lvbltdXG4pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+IHtcbiAgbGV0IFN1cGVyID0gUGFyZW50IGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIGxldCBTdWJjbGFzcyA9IGNsYXNzIGV4dGVuZHMgU3VwZXIge307XG4gIFN1YmNsYXNzW0NMQVNTX01FVEFdID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQoUGFyZW50W0NMQVNTX01FVEFdKTtcblxuICBsZXQgbWl4aW5zID0gZXh0ZW5zaW9ucy5tYXAodG9NaXhpbik7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5hZGRTdWJjbGFzcyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KTtcbiAgbWl4aW5zLmZvckVhY2gobSA9PiBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbihtKSk7XG5cbiAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudCk7XG5cbiAgcmV0dXJuIFN1YmNsYXNzIGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGlua1N1YmNsYXNzZXMoUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5nZXRTdWJjbGFzc2VzKCkuZm9yRWFjaCgoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pID0+IHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5yZXNldChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyZW50LnByb3RvdHlwZSk7XG5cbiAgICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MsIFBhcmVudCk7XG5cbiAgICAvLyByZWN1cnNlIGludG8gc3ViLXN1YmNsYXNzZXNcbiAgICByZWxpbmtTdWJjbGFzc2VzKFN1YmNsYXNzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01peGluKGV4dGVuc2lvbjogRXh0ZW5zaW9uKTogTWl4aW4ge1xuICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgTWl4aW4pIHJldHVybiBleHRlbnNpb247XG4gIGVsc2UgcmV0dXJuIG5ldyBNaXhpbihleHRlbnNpb24gYXMgT2JqZWN0LCBbXSk7XG59XG5cbmNsYXNzIFZhbHVlRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgX2hvbWU/OiBhbnkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogdGhpcy53cml0YWJsZSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBsZXQgeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9ID0gdGhpcztcblxuICAgIGlmIChjbGFzc01ldGEuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTWV0YS5oYXNNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc29yQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIGdldDogKCkgPT4gYW55O1xuICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIGdldCxcbiAgICBzZXQsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvciAmIHsgZ2V0OiBhbnk7IHNldDogYW55IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy5nZXQgPSBnZXQ7XG4gICAgdGhpcy5zZXQgPSBzZXQ7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiB0aGlzLmdldCxcbiAgICAgIHNldDogdGhpcy5zZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIFZhbHVlRGVzY3JpcHRvciB7XG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB3cmFwTWV0aG9kKGhvbWUsIGtleSwgdGhpcy52YWx1ZSk7XG4gICAgc3VwZXIuZGVmaW5lKHRhcmdldCwga2V5LCBob21lKTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBEYXRhQmx1ZXByaW50IHtcbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogTWV0aG9kRGVzY3JpcHRvciB7XG4gICAgbGV0IGRlc2MgPSBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBjbGFzc01ldGEpO1xuICAgIHJldHVybiBuZXcgTWV0aG9kRGVzY3JpcHRvcihkZXNjIGFzIFByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXRob2QoaG9tZTogRGljdCwgbWV0aG9kTmFtZTogc3RyaW5nLCBvcmlnaW5hbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHtcbiAgaWYgKCEoKG1ldGhvZE5hbWUgYXMgc3RyaW5nKSBpbiBob21lKSkgcmV0dXJuIG1heWJlV3JhcChvcmlnaW5hbCk7XG5cbiAgbGV0IHN1cGVyTWV0aG9kID0gaG9tZVttZXRob2ROYW1lXTtcblxuICBsZXQgZnVuYyA9IGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBzdXBlck1ldGhvZCBhcyBhbnk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgKGZ1bmMgYXMgYW55KS5fX3dyYXBwZWQgPSB0cnVlO1xuXG4gIHJldHVybiBmdW5jO1xufVxuXG5mdW5jdGlvbiBtYXliZVdyYXAob3JpZ2luYWw6IEZ1bmN0aW9uKSB7XG4gIGlmICgnX193cmFwcGVkJyBpbiBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsO1xuXG4gIHJldHVybiBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxVQUFULFFBQTJCLDJCQUEzQjtBQUNBLFNBQVMsSUFBVCxFQUFlLE1BQWYsUUFBNkIsZUFBN0I7QUFDQSxTQUVFLFNBRkYsRUFHRSxZQUhGLEVBSUUsV0FKRixRQUtPLFVBTFA7QUFPQSxTQUFTLElBQVQsUUFBcUIsU0FBckI7QUFHQSxNQUFNLEVBQUUsT0FBRixLQUFjLEtBQXBCO0FBRUEsT0FBTyxNQUFNLGFBQWEsc0NBQW5CO0FBQ1AsT0FBTyxNQUFNLFlBQVksc0NBQWxCO0FBRVAsT0FBTSxNQUFnQixVQUFoQixDQUEwQjtBQUFoQyxrQkFBQTtBQUNFLGFBQUEsc0NBQUEsSUFBeUMsSUFBekM7QUFFRDtBQUgrQjtBQUtoQyxPQUFNLE1BQWdCLFNBQWhCLENBQXlCO0FBQS9CLGtCQUFBO0FBQ0UsYUFBQSxzQ0FBQSxJQUF5QyxJQUF6QztBQUVEO0FBSDhCO0FBWS9CLE9BQU0sTUFBTyxLQUFQLENBQVk7QUE0QmhCLGdCQUFZLFVBQVosRUFBb0MsTUFBcEMsRUFBbUQ7QUEzQjNDLGFBQUEsVUFBQSxHQUF3QixJQUF4QixDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFtQyxFQUFuQztBQUNBLGFBQUEsZ0JBQUEsR0FBNkIsRUFBN0I7QUFDQSxhQUFBLFlBQUEsR0FBd0IsRUFBeEI7QUF5Qk4sYUFBSyxNQUFMLENBQVksVUFBWjtBQUNBLGFBQUssWUFBTCxDQUFrQixJQUFsQixDQUF1QixHQUFHLE1BQTFCO0FBQ0Q7QUF6QkQsV0FBTyxNQUFQLENBQWMsR0FBRyxJQUFqQixFQUE2QztBQUMzQyxZQUFJLGFBQWEsS0FBSyxLQUFLLE1BQUwsR0FBYyxDQUFuQixDQUFqQjtBQUVBLFlBQUksS0FBSyxNQUFMLEtBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLG1CQUFPLElBQUksSUFBSixDQUFTLEVBQVQs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ZixFQUFxQixJQUFyQixDQUFQO0FBQ0QsU0FGRCxTQUVVO0FBQ1IsaUJBQUssTUFBTCxHQUFjLFNBQWQ7QUFDRDtBQUNGLEtBWEQ7QUFZRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMQVNTX01FVEEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IEdsaW1tZXJPYmplY3QsIHtcbiAgR2xpbW1lck9iamVjdEZhY3RvcnksXG4gIENsYXNzTWV0YSxcbiAgSW5zdGFuY2VNZXRhLFxuICB0dXJib2NoYXJnZSxcbn0gZnJvbSAnLi9vYmplY3QnO1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmV4cG9ydCBjb25zdCBERVNDUklQVE9SID0gJzVkOTBmODRmLTkwOGUtNGE0Mi05NzQ5LTNkMGY1MjNjMjYyYyc7XG5leHBvcnQgY29uc3QgQkxVRVBSSU5UID0gJzhkOTdjZjVmLWRiOWUtNDhkOC1hNmIyLTdhNzViNzE3MDgwNSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEZXNjcmlwdG9yIHtcbiAgJzVkOTBmODRmLTkwOGUtNGE0Mi05NzQ5LTNkMGY1MjNjMjYyYycgPSB0cnVlO1xuICBhYnN0cmFjdCBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmx1ZXByaW50IHtcbiAgJzhkOTdjZjVmLWRiOWUtNDhkOC1hNmIyLTdhNzViNzE3MDgwNScgPSB0cnVlO1xuICBhYnN0cmFjdCBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbnMge1xuICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsO1xuICBtZXJnZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmc7XG4gIF9zdXBlcj86IEZ1bmN0aW9uO1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1peGluIHtcbiAgcHJpdmF0ZSBleHRlbnNpb25zOiBEaWN0PGFueT4gPSBudWxsIGFzIGFueTsgLy8gYXNzaWduZWQgYmVmb3JlIHVzZWRcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBNaXhpbltdID0gW107XG5cbiAgc3RhdGljIGNyZWF0ZSguLi5hcmdzOiAoTWl4aW4gfCBFeHRlbnNpb25zKVtdKSB7XG4gICAgbGV0IGV4dGVuc2lvbnMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgW10pO1xuICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9ucyBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIGFyZ3MgYXMgTWl4aW5bXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZXBzID0gYXJncy5zbGljZSgwLCAtMSkubWFwKHRvTWl4aW4pO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGV4dGVuc2lvbnMgYXMgRXh0ZW5zaW9ucywgZGVwcyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1peGlucyhvYmo6IGFueSk6IE1peGluW10ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBbXTtcblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIGlmICghbWV0YSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIG1ldGEuZ2V0QXBwbGllZE1peGlucygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXh0ZW5zaW9uczogRXh0ZW5zaW9ucywgbWl4aW5zOiBNaXhpbltdKSB7XG4gICAgdGhpcy5yZW9wZW4oZXh0ZW5zaW9ucyk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCguLi5taXhpbnMpO1xuICB9XG5cbiAgZGV0ZWN0KG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gb2JqLmRlcGVuZGVuY2llcy5pbmRleE9mKHRoaXMpICE9PSAtMTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICByZXR1cm4gISFtZXRhICYmIG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpO1xuICB9XG5cbiAgcmVvcGVuKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMpIHtcbiAgICBpZiAodGhpcy5leHRlbnNpb25zKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKHRvTWl4aW4odGhpcy5leHRlbnNpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnY29uY2F0ZW5hdGVkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IGNvbmNhdDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3Q29uY2F0ID0gZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdDb25jYXQpKSB7XG4gICAgICAgIGNvbmNhdCA9IChyYXdDb25jYXQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd0NvbmNhdCA9PT0gbnVsbCB8fCByYXdDb25jYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25jYXQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmNhdCA9IFtyYXdDb25jYXQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGNvbmNhdDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdtZXJnZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgbWVyZ2VkOiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdNZXJnZWQgPSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd01lcmdlZCkpIHtcbiAgICAgICAgbWVyZ2VkID0gKHJhd01lcmdlZCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3TWVyZ2VkID09PSBudWxsIHx8IHJhd01lcmdlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lcmdlZCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkID0gW3Jhd01lcmdlZCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gbWVyZ2VkO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkOiBEaWN0PEJsdWVwcmludD4gPSBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBleHRlbnNpb25zW2tleV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBNZXRob2RCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBpZiAodmFsdWUgJiYgQkxVRVBSSU5UIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgRGF0YUJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIGRpY3Q8Qmx1ZXByaW50PigpKTtcblxuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGRpY3Q8YW55PigpO1xuICAgIGFzc2lnbih0aGlzLmV4dGVuc2lvbnMsIHR1cmJvY2hhcmdlKG5vcm1hbGl6ZWQpKTtcbiAgfVxuXG4gIGFwcGx5KHRhcmdldDogYW55KSB7XG4gICAgbGV0IG1ldGE6IENsYXNzTWV0YSA9ICh0YXJnZXRbQ0xBU1NfTUVUQV0gPSB0YXJnZXRbQ0xBU1NfTUVUQV0gfHwgbmV3IENsYXNzTWV0YSgpKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5hcHBseSh0YXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyh0YXJnZXQsIHRhcmdldCwgbWV0YSk7XG4gICAgbWV0YS5hZGRNaXhpbih0aGlzKTtcbiAgICBtZXRhLnNlYWwoKTtcbiAgICBtZXRhLnJlc2VhbCh0YXJnZXQpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZShPcmlnaW5hbDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIE9yaWdpbmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3JpZ2luYWwucHJvdG90eXBlKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGUoT3JpZ2luYWwpKTtcbiAgICB0aGlzLmV4dGVuZFByb3RvdHlwZU9udG8oT3JpZ2luYWwsIE9yaWdpbmFsKTtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFN1YmNsYXNzLnByb3RvdHlwZSwgUGFyZW50LnByb3RvdHlwZSwgU3ViY2xhc3NbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKHRoaXMpO1xuICB9XG5cbiAgZXh0ZW5kU3RhdGljKFRhcmdldDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFN0YXRpYyhUYXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhUYXJnZXQsIE9iamVjdC5nZXRQcm90b3R5cGVPZihUYXJnZXQpLCBUYXJnZXRbQ0xBU1NfTUVUQV1bQ0xBU1NfTUVUQV0pO1xuICAgIFRhcmdldFtDTEFTU19NRVRBXS5hZGRTdGF0aWNNaXhpbih0aGlzKTtcbiAgfVxuXG4gIG1lcmdlUHJvcGVydGllcyh0YXJnZXQ6IE9iamVjdCwgcGFyZW50OiBEaWN0PERpY3Q+LCBtZXRhOiBDbGFzc01ldGEpIHtcbiAgICBpZiAobWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcykpIHJldHVybjtcbiAgICBtZXRhLmFkZEFwcGxpZWRNaXhpbih0aGlzKTtcblxuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrLCBwYXJlbnRba10pKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoaywgW10pKTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKFxuICAgICAgdGFyZ2V0LFxuICAgICAgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnXG4gICAgKTtcbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0TWVyZ2VkUHJvcGVydGllcygpIH0pLmRlZmluZSh0YXJnZXQsICdtZXJnZWRQcm9wZXJ0aWVzJyk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCBleHRlbnNpb246IEJsdWVwcmludCA9IHRoaXMuZXh0ZW5zaW9ucyFba2V5XTtcbiAgICAgIGxldCBkZXNjID0gZXh0ZW5zaW9uLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBtZXRhKTtcbiAgICAgIGRlc2MuZGVmaW5lKHRhcmdldCwga2V5IGFzIHN0cmluZywgcGFyZW50KTtcbiAgICB9KTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogUk9PVCB9KS5kZWZpbmUodGFyZ2V0LCAnX3N1cGVyJyBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbiA9IE1peGluIHwgRXh0ZW5zaW9ucztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZDxUIGV4dGVuZHMgR2xpbW1lck9iamVjdD4oXG4gIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4sXG4gIC4uLmV4dGVuc2lvbnM6IEV4dGVuc2lvbltdXG4pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+IHtcbiAgbGV0IFN1cGVyID0gUGFyZW50IGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIGxldCBTdWJjbGFzcyA9IGNsYXNzIGV4dGVuZHMgU3VwZXIge307XG4gIFN1YmNsYXNzW0NMQVNTX01FVEFdID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQoUGFyZW50W0NMQVNTX01FVEFdKTtcblxuICBsZXQgbWl4aW5zID0gZXh0ZW5zaW9ucy5tYXAodG9NaXhpbik7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5hZGRTdWJjbGFzcyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KTtcbiAgbWl4aW5zLmZvckVhY2gobSA9PiBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbihtKSk7XG5cbiAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudCk7XG5cbiAgcmV0dXJuIFN1YmNsYXNzIGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGlua1N1YmNsYXNzZXMoUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5nZXRTdWJjbGFzc2VzKCkuZm9yRWFjaCgoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pID0+IHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5yZXNldChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyZW50LnByb3RvdHlwZSk7XG5cbiAgICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MsIFBhcmVudCk7XG5cbiAgICAvLyByZWN1cnNlIGludG8gc3ViLXN1YmNsYXNzZXNcbiAgICByZWxpbmtTdWJjbGFzc2VzKFN1YmNsYXNzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01peGluKGV4dGVuc2lvbjogRXh0ZW5zaW9uKTogTWl4aW4ge1xuICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgTWl4aW4pIHJldHVybiBleHRlbnNpb247XG4gIGVsc2UgcmV0dXJuIG5ldyBNaXhpbihleHRlbnNpb24gYXMgT2JqZWN0LCBbXSk7XG59XG5cbmNsYXNzIFZhbHVlRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgX2hvbWU/OiBhbnkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogdGhpcy53cml0YWJsZSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBsZXQgeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9ID0gdGhpcztcblxuICAgIGlmIChjbGFzc01ldGEuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTWV0YS5oYXNNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc29yQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIGdldDogKCkgPT4gYW55O1xuICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIGdldCxcbiAgICBzZXQsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvciAmIHsgZ2V0OiBhbnk7IHNldDogYW55IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy5nZXQgPSBnZXQ7XG4gICAgdGhpcy5zZXQgPSBzZXQ7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiB0aGlzLmdldCxcbiAgICAgIHNldDogdGhpcy5zZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIFZhbHVlRGVzY3JpcHRvciB7XG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IERpY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gd3JhcE1ldGhvZChob21lLCBrZXksIHRoaXMudmFsdWUpO1xuICAgIHN1cGVyLmRlZmluZSh0YXJnZXQsIGtleSwgaG9tZSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgRGF0YUJsdWVwcmludCB7XG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IE1ldGhvZERlc2NyaXB0b3Ige1xuICAgIGxldCBkZXNjID0gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgY2xhc3NNZXRhKTtcbiAgICByZXR1cm4gbmV3IE1ldGhvZERlc2NyaXB0b3IoZGVzYyBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWV0aG9kKGhvbWU6IERpY3QsIG1ldGhvZE5hbWU6IHN0cmluZywgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSB7XG4gIGlmICghKChtZXRob2ROYW1lIGFzIHN0cmluZykgaW4gaG9tZSkpIHJldHVybiBtYXliZVdyYXAob3JpZ2luYWwpO1xuXG4gIGxldCBzdXBlck1ldGhvZCA9IGhvbWVbbWV0aG9kTmFtZV07XG5cbiAgbGV0IGZ1bmMgPSBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gc3VwZXJNZXRob2QgYXMgYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIChmdW5jIGFzIGFueSkuX193cmFwcGVkID0gdHJ1ZTtcblxuICByZXR1cm4gZnVuYztcbn1cblxuZnVuY3Rpb24gbWF5YmVXcmFwKG9yaWdpbmFsOiBGdW5jdGlvbikge1xuICBpZiAoJ19fd3JhcHBlZCcgaW4gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDtcblxuICByZXR1cm4gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -299,2 +299,2 @@ import { Meta, PropertyReference } from '@glimmer/object-reference';

GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBVCxFQUFzQyxpQkFBdEMsUUFBK0QsMkJBQS9EO0FBQ0EsU0FBUyxJQUFULEVBQWUsTUFBZixFQUF1QixjQUF2QixRQUE2QyxlQUE3QztBQUNBLFNBQWdCLFVBQVUsV0FBMUIsRUFBdUMsT0FBdkMsRUFBZ0QsZ0JBQWhELEVBQWtFLFVBQWxFLFFBQW9GLFNBQXBGO0FBRUEsTUFBTSxFQUFFLE9BQUYsS0FBYyxLQUFwQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixTQUFyQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixvQkFBckI7QUFFQSxPQUFPLE1BQU0sY0FBYyxTQUFTLFdBQVQsR0FBb0IsQ0FBSyxDQUE3QztBQUVQLE1BQU0sYUFBYSxzQ0FBbkI7QUF3QkEsT0FBTSxTQUFVLFdBQVYsQ0FBeUIsR0FBekIsRUFBK0I7QUFDbkM7QUFDQTtBQUNBLFdBQU8sR0FBUDtBQUNEO0FBRUQsTUFBZSxVQUFmLFNBQWtDLElBQWxDLENBQXNDO0FBQ3BDLHdCQUFvQixHQUFHLEtBQXZCLEVBQW1DO0FBQ2pDLGNBQU0sSUFBSSxLQUFKLENBQVUsZ0RBQVYsQ0FBTjtBQUNEO0FBSG1DO0FBTXRDLE9BQU0sTUFBTyxTQUFQLENBQWdCO0FBQXRCLGtCQUFBO0FBQ1UsYUFBQSxjQUFBLEdBQWlCLE1BQWpCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsc0JBQUEsR0FBeUIsTUFBekI7QUFDQSxhQUFBLHlCQUFBLEdBQTRCLEtBQTVCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsbUJBQUEsR0FBc0IsS0FBdEI7QUFDQSxhQUFBLE1BQUEsR0FBa0IsRUFBbEI7QUFDQSxhQUFBLGFBQUEsR0FBeUIsRUFBekI7QUFDQSxhQUFBLFlBQUEsR0FBd0IsRUFBeEI7QUFDQSxhQUFBLFVBQUEsR0FBMEMsRUFBMUM7QUFDQSxhQUFBLEtBQUEsR0FBa0IsRUFBbEI7QUFDRCxhQUFBLHVCQUFBLEdBQStDLElBQS9DO0FBa1BSO0FBaFBDLFdBQU8sVUFBUCxDQUFrQixNQUFsQixFQUEyQztBQUN6QyxZQUFJLE9BQU8sSUFBSSxJQUFKLEVBQVg7QUFDQSxhQUFLLEtBQUwsQ0FBVyxNQUFYO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7QUFFRCxXQUFPLEdBQVAsQ0FBVyxNQUFYLEVBQXdEO0FBQ3RELFlBQUksY0FBYyxNQUFsQixFQUEwQixPQUFRLE9BQTRCLFVBQTVCLENBQVIsQ0FBMUIsS0FDSyxJQUFJLE9BQU8sV0FBWCxFQUNILE9BQVEsT0FBOEIsV0FBOUIsQ0FBMEMsVUFBMUMsS0FBeUQsSUFBakUsQ0FERyxLQUVBLE9BQU8sSUFBUDtBQUNOO0FBRUQsU0FBSyxNQUFMLEVBQTRCLEtBQTVCLEVBQStDO0FBQzdDLFlBQUksT0FBTyxLQUFQLEtBQWlCLFFBQWpCLElBQTZCLFVBQVUsSUFBM0MsRUFBaUQ7QUFFakQsWUFBSSxLQUFLLHlCQUFULEVBQW9DO0FBQ2xDLGdCQUFJLGNBQWMsS0FBSyxzQkFBdkI7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsV0FBakIsRUFBOEI7QUFDNUIsb0JBQUksUUFBUSxLQUFaLEVBQW1CO0FBQ2pCLHdCQUFJLFNBQVMsWUFBWSxJQUFaLEVBQWtCLEtBQWxCLEVBQWI7QUFDQSwyQkFBTyxJQUFQLElBQWUsT0FBTyxNQUFQLENBQWMsTUFBTSxJQUFOLENBQWQsQ0FBZjtBQUNEO0FBQ0Y7QUFDRjtBQUVELFlBQUksS0FBSyxtQkFBVCxFQUE4QjtBQUM1QixnQkFBSSxjQUFjLEtBQUssZ0JBQXZCO0FBQ0EsaUJBQUssSUFBSSxJQUFULElBQWlCLFdBQWpCLEVBQThCO0FBQzVCLG9CQUFJLFFBQVEsS0FBWixFQUFtQjtBQUNqQix3QkFBSSxTQUFTLE9BQU8sRUFBUCxFQUFXLFlBQVksSUFBWixDQUFYLENBQWI7QUFDQSwyQkFBTyxJQUFQLElBQWUsT0FBTyxNQUFQLEVBQWUsTUFBTSxJQUFOLENBQWYsQ0FBZjtBQUNEO0FBQ0Y7QUFDRjtBQUNGO0FBRUQsbUJBQWUsS0FBZixFQUEyQjtBQUN6QixhQUFLLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBdUIsS0FBdkI7QUFDRDtBQUVELGFBQVMsS0FBVCxFQUFxQjtBQUNuQixhQUFLLE1BQUwsQ0FBWSxJQUFaLENBQWlCLEtBQWpCO0FBQ0Q7QUFFRCxzQkFBZTtBQUNiLGVBQU8sS0FBSyxZQUFaO0FBQ0Q7QUFFRCxnQkFBUztBQUNQLGVBQU8sS0FBSyxNQUFaO0FBQ0Q7QUFFRCxvQkFBZ0IsS0FBaEIsRUFBNEI7QUFDMUIsYUFBSyxhQUFMLENBQW1CLElBQW5CLENBQXdCLEtBQXhCO0FBQ0Q7QUFFRCxvQkFBZ0IsS0FBaEIsRUFBNEI7QUFDMUIsZUFBTyxLQUFLLGFBQUwsQ0FBbUIsT0FBbkIsQ0FBMkIsS0FBM0IsTUFBc0MsQ0FBQyxDQUE5QztBQUNEO0FBRUQsdUJBQWdCO0FBQ2QsZUFBTyxLQUFLLGFBQVo7QUFDRDtBQUVELG1CQUFlLEtBQWYsRUFBMkI7QUFDekIsZUFBTyxLQUFLLFlBQUwsQ0FBa0IsT0FBbEIsQ0FBMEIsS0FBMUIsTUFBcUMsQ0FBQyxDQUE3QztBQUNEO0FBRUQsV0FBTyxjQUFQLENBQXNCLFFBQXRCLEVBQTJELE1BQTNELEVBQTRGO0FBQzFGLGlCQUFTLFVBQVQsRUFBcUIsU0FBckIsR0FBaUMsT0FBakMsQ0FBMEMsQ0FBRCxJQUFjLEVBQUUsbUJBQUYsQ0FBc0IsUUFBdEIsRUFBZ0MsTUFBaEMsQ0FBdkQ7QUFDQSxpQkFBUyxVQUFULEVBQXFCLGVBQXJCLEdBQXVDLE9BQXZDLENBQWdELENBQUQsSUFBYyxFQUFFLFlBQUYsQ0FBZSxRQUFmLENBQTdEO0FBQ0EsaUJBQVMsVUFBVCxFQUFxQixJQUFyQjtBQUNEO0FBRUQsZ0JBQVksV0FBWixFQUFrRDtBQUNoRCxhQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsQ0FBcUIsV0FBckI7QUFDRDtBQUVELG9CQUFhO0FBQ1gsZUFBTyxLQUFLLFVBQVo7QUFDRDtBQUVELHdCQUFvQixRQUFwQixFQUFzQyxLQUF0QyxFQUFnRDtBQUM5QyxhQUFLLGdCQUFMLENBQXNCLFFBQXRCLElBQWtDLEtBQWxDO0FBQ0Q7QUFFRCx3QkFBb0IsUUFBcEIsRUFBb0M7QUFDbEMsZUFBTyxLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBQVA7QUFDRDtBQUVELHdCQUFvQixRQUFwQixFQUFzQyxJQUF0QyxFQUFzRTtBQUNwRSxhQUFLLGNBQUwsQ0FBb0IsUUFBcEIsSUFBZ0MsSUFBaEM7QUFDRDtBQUVELGVBQVcsUUFBWCxFQUEyQjtBQUN6QixhQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLFFBQWhCO0FBQ0Q7QUFFRCw0QkFBd0IsUUFBeEIsRUFBd0M7QUFDdEMsWUFBSSxDQUFDLEtBQUsseUJBQVYsRUFBcUMsT0FBTyxLQUFQO0FBQ3JDLGVBQVEsWUFBdUIsS0FBSyxzQkFBcEM7QUFDRDtBQUVELDRCQUF3QixRQUF4QixFQUF3QztBQUN0QyxlQUFPLEtBQUssc0JBQUwsQ0FBNEIsUUFBNUIsQ0FBUDtBQUNEO0FBRUQsZ0NBQXlCO0FBQ3ZCLGVBQU8sT0FBTyxJQUFQLENBQVksS0FBSyxzQkFBakIsQ0FBUDtBQUNEO0FBRUQsNEJBQXdCLFFBQXhCLEVBQTBDLEtBQTFDLEVBQW9EO0FBQ2xELGFBQUsseUJBQUwsR0FBaUMsSUFBakM7QUFFQSxZQUFLLFlBQXVCLEtBQUssc0JBQWpDLEVBQXlEO0FBQ3ZELGdCQUFJLE1BQU0sS0FBSyxzQkFBTCxDQUE0QixRQUE1QixFQUFzQyxNQUF0QyxDQUE2QyxLQUE3QyxDQUFWO0FBQ0EsaUJBQUssc0JBQUwsQ0FBNEIsUUFBNUIsSUFBd0MsR0FBeEM7QUFDRCxTQUhELE1BR087QUFDTCxpQkFBSyxzQkFBTCxDQUE0QixRQUE1QixJQUF3QyxLQUF4QztBQUNEO0FBQ0Y7QUFFRCxzQkFBa0IsUUFBbEIsRUFBa0M7QUFDaEMsWUFBSSxDQUFDLEtBQUssbUJBQVYsRUFBK0IsT0FBTyxLQUFQO0FBQy9CLGVBQVEsWUFBdUIsS0FBSyxnQkFBcEM7QUFDRDtBQUVELHNCQUFrQixRQUFsQixFQUFrQztBQUNoQyxlQUFPLEtBQUssZ0JBQUwsQ0FBc0IsUUFBdEIsQ0FBUDtBQUNEO0FBRUQsMEJBQW1CO0FBQ2pCLGVBQU8sT0FBTyxJQUFQLENBQVksS0FBSyxnQkFBakIsQ0FBUDtBQUNEO0FBRUQsc0JBQWtCLFFBQWxCLEVBQW9DLEtBQXBDLEVBQStDO0FBQzdDLGFBQUssbUJBQUwsR0FBMkIsSUFBM0I7QUFFQSxZQUFJLFFBQVEsS0FBUixDQUFKLEVBQW9CO0FBQ2xCLGtCQUFNLElBQUksS0FBSixDQUNKLG1CQUFtQixLQUFLLFNBQUwsQ0FDakIsS0FEaUIsQ0FFbEIsNERBSEcsQ0FBTjtBQUtEO0FBRUQsWUFBSyxZQUF1QixLQUFLLGdCQUE1QixJQUFnRCxLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBQWhELElBQW1GLEtBQXhGLEVBQStGO0FBQzdGLGlCQUFLLGdCQUFMLENBQXNCLFFBQXRCLElBQWtDLHNCQUNoQyxLQURnQyxFQUVoQyxLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBRmdDLENBQWxDO0FBSUQsU0FMRCxNQUtPO0FBQ0wsb0JBQVEsVUFBVSxJQUFWLEdBQWlCLEtBQWpCLEdBQXlCLFNBQVMsRUFBMUM7QUFDQSxpQkFBSyxnQkFBTCxDQUFzQixRQUF0QixJQUFrQyxLQUFsQztBQUNEO0FBQ0Y7QUFFRCx3QkFBaUI7QUFDZixlQUFPLEtBQUssY0FBWjtBQUNEO0FBRUQsMEJBQW1CO0FBQ2pCLGVBQU8sS0FBSyxnQkFBWjtBQUNEO0FBRUQsVUFBTSxNQUFOLEVBQStCO0FBQzdCLGFBQUssY0FBTCxHQUFzQixNQUF0QjtBQUNBLGFBQUssZ0JBQUwsR0FBd0IsTUFBeEI7QUFDQSxhQUFLLHNCQUFMLEdBQThCLE1BQTlCO0FBQ0EsYUFBSyxnQkFBTCxHQUF3QixNQUF4QjtBQUVBLFlBQUksTUFBSixFQUFZO0FBQ1YsaUJBQUsseUJBQUwsR0FBaUMsT0FBTyx5QkFBeEM7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsT0FBTyxzQkFBeEIsRUFBZ0Q7QUFDOUMscUJBQUssc0JBQUwsQ0FBNEIsSUFBNUIsSUFBb0MsT0FBTyxzQkFBUCxDQUE4QixJQUE5QixFQUFvQyxLQUFwQyxFQUFwQztBQUNEO0FBRUQsaUJBQUssbUJBQUwsR0FBMkIsT0FBTyxtQkFBbEM7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsT0FBTyxnQkFBeEIsRUFBMEM7QUFDeEMscUJBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsSUFBOEIsT0FBTyxFQUFQLEVBQVcsT0FBTyxnQkFBUCxDQUF3QixJQUF4QixDQUFYLENBQTlCO0FBQ0Q7QUFFRCxtQkFBTyxLQUFLLGNBQVosRUFBNEIsT0FBTyxjQUFuQztBQUNBLG1CQUFPLEtBQUssZ0JBQVosRUFBOEIsT0FBTyxnQkFBckM7QUFDRDtBQUNGO0FBRUQsV0FBTyxHQUFQLEVBQWtCO0FBQ2hCLFlBQUksT0FBTyxLQUFLLEdBQUwsQ0FBUyxHQUFULENBQVg7QUFDQSxZQUFJLFFBQVEsSUFBSSxLQUFLLHVCQUFULENBQWtDLEdBQWxDLEVBQXVDLEVBQXZDLENBQVo7QUFDQSxZQUFJLGlCQUFpQixLQUFLLGlCQUFMLEVBQXJCO0FBQ0EsWUFBSSxRQUFRLEtBQUssUUFBTCxFQUFaO0FBRUEsb0JBQVksT0FBTyxjQUFQLEVBQXVCLEtBQUssY0FBNUIsQ0FBWjtBQUNBLG9CQUFZLE9BQU8sS0FBUCxFQUFjLE1BQU0sUUFBTixFQUFkLENBQVo7QUFDRDtBQUVELFdBQUk7QUFDRixZQUFJLGlCQUFtRCxZQUNyRCxPQUFPLEVBQVAsRUFBVyxLQUFLLGNBQWhCLENBRHFELENBQXZEO0FBR0Esb0JBQVksS0FBSyxzQkFBakI7QUFDQSxvQkFBWSxLQUFLLGdCQUFqQjtBQUVBLFlBQUksQ0FBQyxLQUFLLG1CQUFOLElBQTZCLENBQUMsS0FBSyx5QkFBdkMsRUFBa0U7QUFDaEUsaUJBQUssSUFBTCxHQUFZLFlBQUEsQ0FBYSxDQUF6QjtBQUNEO0FBRUQsWUFBSSxRQUFRLEtBQUssS0FBakI7QUFFQSxjQUFNLEtBQU4sQ0FBVztBQUdULDBCQUFBO0FBQ0Usc0JBQU0sT0FBTixDQUFjLFFBQU87QUFDbkIseUJBQUssSUFBTCxJQUFhLFdBQWI7QUFDRCxpQkFGRDtBQUdEO0FBUFE7QUFVWCxhQUFLLHVCQUFMLEdBQStCLGNBQWMsVUFBZCxDQUF3QjtBQUF4QiwwQkFBQTs7QUFDbkIscUJBQUEsS0FBQSxHQUFlLElBQUksS0FBSixFQUFmO0FBQ0gscUJBQUEsY0FBQSxHQUFtRCxjQUFuRDtBQWFSO0FBWEMsZ0NBQWlCO0FBQ2YsdUJBQU8sS0FBSyxjQUFaO0FBQ0Q7QUFFRCw2QkFBaUIsUUFBakIsRUFBaUM7QUFDL0IsdUJBQU8sS0FBSyxjQUFMLENBQW9CLFFBQXBCLEtBQWlDLGlCQUF4QztBQUNEO0FBRUQsdUJBQVE7QUFDTix1QkFBTyxLQUFLLEtBQVo7QUFDRDtBQWRvRCxTQUF2RDtBQWlCQSxvQkFBWSxJQUFaO0FBQ0Q7QUE3UG1CO0FBZ1F0QixTQUFTLHFCQUFULENBQStCLEtBQS9CLEVBQTRDLE1BQTVDLEVBQXdEO0FBQ3RELFFBQUksU0FBUyxPQUFPLEVBQVAsRUFBVyxNQUFYLENBQWI7QUFFQSxTQUFLLElBQUksSUFBVCxJQUFpQixLQUFqQixFQUF3QjtBQUN0QixZQUFJLFFBQVEsTUFBUixJQUFrQixPQUFPLE9BQU8sSUFBUCxDQUFQLEtBQXdCLFVBQTFDLElBQXdELE9BQU8sTUFBTSxJQUFOLENBQVAsS0FBdUIsVUFBbkYsRUFBK0Y7QUFDN0YsZ0JBQUksVUFBVSxXQUFXLE1BQVgsRUFBbUIsSUFBbkIsRUFBeUIsTUFBTSxJQUFOLENBQXpCLENBQWQ7QUFDQSxtQkFBTyxJQUFQLElBQWUsT0FBZjtBQUNELFNBSEQsTUFHTztBQUNMLG1CQUFPLElBQVAsSUFBZSxNQUFNLElBQU4sQ0FBZjtBQUNEO0FBQ0Y7QUFFRCxXQUFPLE1BQVA7QUFDRDtBQUVELE9BQU0sTUFBTyxZQUFQLFNBQTRCLFNBQTVCLENBQXFDO0FBQTNDLGtCQUFBOztBQUNTLGFBQUEsc0NBQUEsSUFBb0QsVUFBVSxVQUFWLENBQXFCLElBQXJCLENBQXBEO0FBZVI7QUFiQyxXQUFPLFVBQVAsQ0FBa0IsTUFBbEIsRUFBOEM7QUFDNUMsZUFBTyxNQUFNLFVBQU4sQ0FBaUIsTUFBakIsQ0FBUDtBQUNEO0FBRUQsVUFBTSxNQUFOLEVBQTBCO0FBQ3hCLGNBQU0sS0FBTixDQUFZLE1BQVo7QUFDQSxZQUFJLE1BQUosRUFBWSxLQUFLLFVBQUwsRUFBaUIsS0FBakIsQ0FBdUIsT0FBTyxVQUFQLENBQXZCO0FBQ2I7QUFFRCxXQUFJO0FBQ0YsY0FBTSxJQUFOO0FBQ0EsYUFBSyxVQUFMLEVBQWlCLElBQWpCO0FBQ0Q7QUFmd0M7QUFrQjNDLGVBQWMsTUFBTyxhQUFQLENBQW9CO0FBc0RoQyxnQkFBWSxLQUFaLEVBQWlDO0FBTmpDLGFBQUEsTUFBQSxHQUFTLElBQVQ7QUFDQSxhQUFBLEtBQUEsR0FBUSxJQUFSO0FBTUUsWUFBSSxLQUFKLEVBQVcsT0FBTyxJQUFQLEVBQWEsS0FBYjtBQUNWLGFBQUssV0FBTCxDQUEwQyxVQUExQyxFQUFzRCxJQUF0RCxDQUEyRCxJQUEzRCxFQUFpRSxTQUFTLElBQTFFO0FBQ0QsYUFBSyxNQUFMLEdBQWMsSUFBZDtBQUNBLHVCQUFlLElBQWY7QUFDQSxhQUFLLElBQUw7QUFDRDtBQWxERCxXQUFPLE1BQVAsQ0FBK0MsR0FBRyxVQUFsRCxFQUFtRTtBQUNqRSxlQUFPLFlBQVksSUFBWixFQUFrQixHQUFHLFVBQXJCLENBQVA7QUFDRDtBQUVELFdBQU8sTUFBUCxDQUFjLEtBQWQsRUFBbUM7QUFDakMsZUFBTyxJQUFJLElBQUosQ0FBUyxLQUFULENBQVA7QUFDRDtBQUVELFdBQU8sTUFBUCxDQUFpQixVQUFqQixFQUE4QjtBQUM1QixnQkFBUSxVQUFSLEVBQW9CLGVBQXBCLENBQW9DLElBQXBDO0FBQ0EsYUFBSyxVQUFMLEVBQWlCLElBQWpCO0FBRUEseUJBQWlCLElBQWpCO0FBQ0Q7QUFFRCxXQUFPLFdBQVAsQ0FBc0IsVUFBdEIsRUFBbUM7QUFDakMsZ0JBQVEsVUFBUixFQUFvQixZQUFwQixDQUFpQyxJQUFqQztBQUNBLGFBQUssVUFBTCxFQUFpQixJQUFqQjtBQUNEO0FBRUQsV0FBTyxlQUFQLENBQXVCLFFBQXZCLEVBQXVDO0FBQ3JDLFlBQUksUUFBUSxLQUFLLFVBQUwsRUFBaUIsbUJBQWpCLENBQXFDLFFBQXJDLENBQVo7QUFDQSxZQUFJLENBQUMsS0FBTCxFQUNFLE1BQU0sSUFBSSxLQUFKLENBQ0osa0VBQWtFLFFBQVEsSUFEdEUsQ0FBTjtBQUdGLGVBQU8sS0FBUDtBQUNEO0FBRUQsV0FBTyxvQkFBUCxDQUE0QixRQUE1QixFQUFvRTtBQUNsRSxZQUFJLFdBQVcsS0FBSyxVQUFMLEVBQWlCLG1CQUFqQixFQUFmO0FBQ0EsWUFBSSxDQUFDLFFBQUwsRUFBZTtBQUVmLGFBQUssSUFBSSxJQUFULElBQWlCLFFBQWpCLEVBQTJCO0FBQ3pCLHFCQUFTLElBQVQsRUFBZSxTQUFTLElBQVQsQ0FBZjtBQUNEO0FBQ0Y7QUFNRCxXQUFJLENBQUs7QUFVVCxRQUFJLEdBQUosRUFBZTtBQUNiLGVBQU8sS0FBSyxHQUFMLENBQVA7QUFDRDtBQUVELFFBQUksR0FBSixFQUFpQixLQUFqQixFQUEyQjtBQUN6QixhQUFLLEdBQUwsSUFBWSxLQUFaO0FBQ0E7QUFDRDtBQUVELGtCQUFjLEtBQWQsRUFBMkI7QUFDekIsZUFBTyxJQUFQLEVBQWEsS0FBYjtBQUNBO0FBQ0Q7QUFFRCxjQUFPLENBQUs7QUE1RW9CO0FBR3pCLGNBQUEsc0NBQUEsSUFBdUQsYUFBYSxVQUFiLENBQXdCLElBQXhCLENBQXZEO0FBQ0EsY0FBQSxPQUFBLEdBQVUsSUFBViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGEsIElubmVyUmVmZXJlbmNlRmFjdG9yeSwgUHJvcGVydHlSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IE1peGluLCBleHRlbmQgYXMgZXh0ZW5kQ2xhc3MsIHRvTWl4aW4sIHJlbGlua1N1YmNsYXNzZXMsIHdyYXBNZXRob2QgfSBmcm9tICcuL21peGluJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgT3B0aW9uLCBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidW1wIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0NBQ0hFID0gZnVuY3Rpb24gRU1QVFlfQ0FDSEUoKSB7fTtcblxuY29uc3QgQ0xBU1NfTUVUQSA9ICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICAnZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3JzogQ2xhc3NNZXRhO1xuICBfbWV0YTogTWV0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVdpdGhNaXhpbnMge1xuICBjb25zdHJ1Y3RvcjogT2JqZWN0V2l0aE1peGlucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiB7XG4gIG5ldyA8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+O1xuICBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBjcmVhdGU8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdDtcbiAgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQ7XG4gICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBJbnN0YW5jZU1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dXJib2NoYXJnZTxUPihvYmo6IFQpOiBUIHtcbiAgLy8gZnVuY3Rpb24gRHVtbXkoKSB7fVxuICAvLyBEdW1teS5wcm90b3R5cGUgPSBvYmo7XG4gIHJldHVybiBvYmo7XG59XG5cbmFic3RyYWN0IGNsYXNzIFNlYWxlZE1ldGEgZXh0ZW5kcyBNZXRhIHtcbiAgYWRkUmVmZXJlbmNlVHlwZUZvciguLi5fYXJnczogYW55W10pOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbW9kaWZ5IHJlZmVyZW5jZSB0eXBlcyBvbiBhIHNlYWxlZCBtZXRhJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzTWV0YSB7XG4gIHByaXZhdGUgcmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICBwcml2YXRlIHByb3BlcnR5TWV0YWRhdGEgPSBkaWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgcHJpdmF0ZSBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuICBwcml2YXRlIGhhc01lcmdlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBhcHBsaWVkTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3RhdGljTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3ViY2xhc3NlczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdID0gW107XG4gIHByaXZhdGUgc2xvdHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBJbnN0YW5jZU1ldGFDb25zdHJ1Y3RvcjogT3B0aW9uPHR5cGVvZiBNZXRhPiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIGxldCBtZXRhID0gbmV3IHRoaXMoKTtcbiAgICBtZXRhLnJlc2V0KHBhcmVudCk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBzdGF0aWMgZm9yKG9iamVjdDogT2JqZWN0V2l0aE1peGlucyB8IEluc3RhbmNlV2l0aE1peGlucyk6IE9wdGlvbjxDbGFzc01ldGE+IHtcbiAgICBpZiAoQ0xBU1NfTUVUQSBpbiBvYmplY3QpIHJldHVybiAob2JqZWN0IGFzIE9iamVjdFdpdGhNaXhpbnMpW0NMQVNTX01FVEFdO1xuICAgIGVsc2UgaWYgKG9iamVjdC5jb25zdHJ1Y3RvcilcbiAgICAgIHJldHVybiAob2JqZWN0IGFzIEluc3RhbmNlV2l0aE1peGlucykuY29uc3RydWN0b3JbQ0xBU1NfTUVUQV0gfHwgbnVsbDtcbiAgICBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgaW5pdChvYmplY3Q6IEdsaW1tZXJPYmplY3QsIGF0dHJzOiBPcHRpb248RGljdD4pIHtcbiAgICBpZiAodHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBhdHRycyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IGNvbmNhdFByb3BzID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBjb25jYXRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBjb25jYXQgPSBjb25jYXRQcm9wc1twcm9wXS5zbGljZSgpO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGNvbmNhdC5jb25jYXQoYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgbGV0IG1lcmdlZFByb3BzID0gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBtZXJnZWRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIG1lcmdlZFByb3BzW3Byb3BdKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBhc3NpZ24obWVyZ2VkLCBhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLnN0YXRpY01peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGFkZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMubWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgZ2V0U3RhdGljTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucztcbiAgfVxuXG4gIGdldE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5taXhpbnM7XG4gIH1cblxuICBhZGRBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5hcHBsaWVkTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgaGFzQXBwbGllZE1peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgZ2V0QXBwbGllZE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zO1xuICB9XG5cbiAgaGFzU3RhdGljTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUFsbE1peGlucyhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0TWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0U3RhdGljTWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kU3RhdGljKFN1YmNsYXNzKSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgYWRkU3ViY2xhc3MoY29uc3RydWN0b3I6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnN1YmNsYXNzZXMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBnZXRTdWJjbGFzc2VzKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViY2xhc3NlcztcbiAgfVxuXG4gIGFkZFByb3BlcnR5TWV0YWRhdGEocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgfVxuXG4gIG1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV07XG4gIH1cblxuICBhZGRSZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gPSB0eXBlO1xuICB9XG5cbiAgYWRkU2xvdEZvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5zbG90cy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIGhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCB2YWwgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaGFzTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWVyZ2VkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogRGljdCkge1xuICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBwYXNzZWQgaW4gXFxgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApfVxcYCBhcyB0aGUgdmFsdWUgZm9yIFxcYGZvb1xcYCBidXQgXFxgZm9vXFxgIGNhbm5vdCBiZSBhbiBBcnJheWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcyAmJiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWUgfHwge307XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlVHlwZXMoKTogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlNZXRhZGF0YSgpOiBEaWN0PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhID0gZGljdCgpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdID0gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0uc2xpY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc01lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wXSA9IGFzc2lnbih7fSwgcGFyZW50Lm1lcmdlZFByb3BlcnRpZXNbcHJvcF0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24odGhpcy5yZWZlcmVuY2VUeXBlcywgcGFyZW50LnJlZmVyZW5jZVR5cGVzKTtcbiAgICAgIGFzc2lnbih0aGlzLnByb3BlcnR5TWV0YWRhdGEsIHBhcmVudC5wcm9wZXJ0eU1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXNlYWwob2JqOiBPYmplY3QpIHtcbiAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKG9iaik7XG4gICAgbGV0IGZyZXNoID0gbmV3IHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IhKG9iaiwge30pO1xuICAgIGxldCByZWZlcmVuY2VUeXBlcyA9IG1ldGEuZ2V0UmVmZXJlbmNlVHlwZXMoKTtcbiAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICB0dXJib2NoYXJnZShhc3NpZ24ocmVmZXJlbmNlVHlwZXMsIHRoaXMucmVmZXJlbmNlVHlwZXMpKTtcbiAgICB0dXJib2NoYXJnZShhc3NpZ24oc2xvdHMsIGZyZXNoLmdldFNsb3RzKCkpKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHR1cmJvY2hhcmdlKFxuICAgICAgYXNzaWduKHt9LCB0aGlzLnJlZmVyZW5jZVR5cGVzKVxuICAgICk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLm1lcmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgJiYgIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG5cbiAgICBsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXG4gICAgY2xhc3MgU2xvdHMge1xuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2xvdHMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzW25hbWVdID0gRU1QVFlfQ0FDSEU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IgPSBjbGFzcyBleHRlbmRzIFNlYWxlZE1ldGEge1xuICAgICAgcHJvdGVjdGVkIHNsb3RzOiBTbG90cyA9IG5ldyBTbG90cygpO1xuICAgICAgcHVibGljIHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHJlZmVyZW5jZVR5cGVzO1xuXG4gICAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gICAgICB9XG5cbiAgICAgIHJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZyk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgICAgfVxuXG4gICAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHR1cmJvY2hhcmdlKHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWVyZ2VkUHJvcGVydGllcyhhdHRyczogRGljdCwgcGFyZW50OiBEaWN0KSB7XG4gIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIHBhcmVudCk7XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBhdHRycykge1xuICAgIGlmIChwcm9wIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50W3Byb3BdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhdHRyc1twcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwTWV0aG9kKHBhcmVudCwgcHJvcCwgYXR0cnNbcHJvcF0gYXMgYW55KTtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IHdyYXBwZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IGF0dHJzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZU1ldGEgZXh0ZW5kcyBDbGFzc01ldGEge1xuICBwdWJsaWMgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBJbnN0YW5jZU1ldGEgPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChudWxsKTtcbiAgc3RhdGljIGlzQ2xhc3MgPSB0cnVlO1xuXG4gIHN0YXRpYyBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgc3RhdGljIGV4dGVuZCh0aGlzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCAuLi5leHRlbnNpb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBleHRlbmRDbGFzcyh0aGlzLCAuLi5leHRlbnNpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUoYXR0cnM/OiBPYmplY3QgfCBudWxsKTogR2xpbW1lck9iamVjdCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kUHJvdG90eXBlKHRoaXMpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuXG4gICAgcmVsaW5rU3ViY2xhc3Nlcyh0aGlzKTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRTdGF0aWModGhpcyk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBzdGF0aWMgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIGxldCB2YWx1ZSA9IHRoaXNbQ0xBU1NfTUVUQV0ubWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1ldGFGb3JQcm9wZXJ0eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkgd2l0aCBrZXkgJyR7cHJvcGVydHl9Jy5gXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IG1ldGFkYXRhID0gdGhpc1tDTEFTU19NRVRBXS5nZXRQcm9wZXJ0eU1ldGFkYXRhKCk7XG4gICAgaWYgKCFtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgcHJvcCBpbiBtZXRhZGF0YSkge1xuICAgICAgY2FsbGJhY2socHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIF9zdXBlciA9IFJPT1Q7XG4gIF9tZXRhID0gbnVsbDtcbiAgX2d1aWQhOiBudW1iZXI7IC8vIFNldCBieSBpbml0aWFsaXplR3VpZCh0aGlzKSBpbiBjb25zdHJ1Y3RvclxuXG4gIGluaXQoKSB7fVxuXG4gIGNvbnN0cnVjdG9yKGF0dHJzPzogT2JqZWN0IHwgbnVsbCkge1xuICAgIGlmIChhdHRycykgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgR2xpbW1lck9iamVjdClbQ0xBU1NfTUVUQV0uaW5pdCh0aGlzLCBhdHRycyB8fCBudWxsKTtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzW2tleV07XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGF0dHJzOiBPYmplY3QpIHtcbiAgICBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsSUFBVCxFQUFzQyxpQkFBdEMsUUFBK0QsMkJBQS9EO0FBQ0EsU0FBUyxJQUFULEVBQWUsTUFBZixFQUF1QixjQUF2QixRQUE2QyxlQUE3QztBQUNBLFNBQWdCLFVBQVUsV0FBMUIsRUFBdUMsT0FBdkMsRUFBZ0QsZ0JBQWhELEVBQWtFLFVBQWxFLFFBQW9GLFNBQXBGO0FBRUEsTUFBTSxFQUFFLE9BQUYsS0FBYyxLQUFwQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixTQUFyQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixvQkFBckI7QUFFQSxPQUFPLE1BQU0sY0FBYyxTQUFTLFdBQVQsR0FBb0IsQ0FBSyxDQUE3QztBQUVQLE1BQU0sYUFBYSxzQ0FBbkI7QUF3QkEsT0FBTSxTQUFVLFdBQVYsQ0FBeUIsR0FBekIsRUFBK0I7QUFDbkM7QUFDQTtBQUNBLFdBQU8sR0FBUDtBQUNEO0FBRUQsTUFBZSxVQUFmLFNBQWtDLElBQWxDLENBQXNDO0FBQ3BDLHdCQUFvQixHQUFHLEtBQXZCLEVBQW1DO0FBQ2pDLGNBQU0sSUFBSSxLQUFKLENBQVUsZ0RBQVYsQ0FBTjtBQUNEO0FBSG1DO0FBTXRDLE9BQU0sTUFBTyxTQUFQLENBQWdCO0FBQXRCLGtCQUFBO0FBQ1UsYUFBQSxjQUFBLEdBQWlCLE1BQWpCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsc0JBQUEsR0FBeUIsTUFBekI7QUFDQSxhQUFBLHlCQUFBLEdBQTRCLEtBQTVCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsbUJBQUEsR0FBc0IsS0FBdEI7QUFDQSxhQUFBLE1BQUEsR0FBa0IsRUFBbEI7QUFDQSxhQUFBLGFBQUEsR0FBeUIsRUFBekI7QUFDQSxhQUFBLFlBQUEsR0FBd0IsRUFBeEI7QUFDQSxhQUFBLFVBQUEs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TyxlQUFQLENBQXVCLFFBQXZCLEVBQXVDO0FBQ3JDLFlBQUksUUFBUSxLQUFLLFVBQUwsRUFBaUIsbUJBQWpCLENBQXFDLFFBQXJDLENBQVo7QUFDQSxZQUFJLENBQUMsS0FBTCxFQUNFLE1BQU0sSUFBSSxLQUFKLENBQ0osa0VBQWtFLFFBQVEsSUFEdEUsQ0FBTjtBQUdGLGVBQU8sS0FBUDtBQUNEO0FBRUQsV0FBTyxvQkFBUCxDQUE0QixRQUE1QixFQUFvRTtBQUNsRSxZQUFJLFdBQVcsS0FBSyxVQUFMLEVBQWlCLG1CQUFqQixFQUFmO0FBQ0EsWUFBSSxDQUFDLFFBQUwsRUFBZTtBQUVmLGFBQUssSUFBSSxJQUFULElBQWlCLFFBQWpCLEVBQTJCO0FBQ3pCLHFCQUFTLElBQVQsRUFBZSxTQUFTLElBQVQsQ0FBZjtBQUNEO0FBQ0Y7QUFNRCxXQUFJLENBQUs7QUFVVCxRQUFJLEdBQUosRUFBZTtBQUNiLGVBQU8sS0FBSyxHQUFMLENBQVA7QUFDRDtBQUVELFFBQUksR0FBSixFQUFpQixLQUFqQixFQUEyQjtBQUN6QixhQUFLLEdBQUwsSUFBWSxLQUFaO0FBQ0E7QUFDRDtBQUVELGtCQUFjLEtBQWQsRUFBMkI7QUFDekIsZUFBTyxJQUFQLEVBQWEsS0FBYjtBQUNBO0FBQ0Q7QUFFRCxjQUFPLENBQUs7QUE1RW9CO0FBR3pCLGNBQUEsc0NBQUEsSUFBdUQsYUFBYSxVQUFiLENBQXdCLElBQXhCLENBQXZEO0FBQ0EsY0FBQSxPQUFBLEdBQVUsSUFBViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGEsIElubmVyUmVmZXJlbmNlRmFjdG9yeSwgUHJvcGVydHlSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IE1peGluLCBleHRlbmQgYXMgZXh0ZW5kQ2xhc3MsIHRvTWl4aW4sIHJlbGlua1N1YmNsYXNzZXMsIHdyYXBNZXRob2QgfSBmcm9tICcuL21peGluJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgT3B0aW9uLCBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidW1wIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0NBQ0hFID0gZnVuY3Rpb24gRU1QVFlfQ0FDSEUoKSB7fTtcblxuY29uc3QgQ0xBU1NfTUVUQSA9ICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICAnZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3JzogQ2xhc3NNZXRhO1xuICBfbWV0YTogTWV0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVdpdGhNaXhpbnMge1xuICBjb25zdHJ1Y3RvcjogT2JqZWN0V2l0aE1peGlucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiB7XG4gIG5ldyA8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+O1xuICBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBjcmVhdGU8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdDtcbiAgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQ7XG4gICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBJbnN0YW5jZU1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dXJib2NoYXJnZTxUPihvYmo6IFQpOiBUIHtcbiAgLy8gZnVuY3Rpb24gRHVtbXkoKSB7fVxuICAvLyBEdW1teS5wcm90b3R5cGUgPSBvYmo7XG4gIHJldHVybiBvYmo7XG59XG5cbmFic3RyYWN0IGNsYXNzIFNlYWxlZE1ldGEgZXh0ZW5kcyBNZXRhIHtcbiAgYWRkUmVmZXJlbmNlVHlwZUZvciguLi5fYXJnczogYW55W10pOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbW9kaWZ5IHJlZmVyZW5jZSB0eXBlcyBvbiBhIHNlYWxlZCBtZXRhJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzTWV0YSB7XG4gIHByaXZhdGUgcmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICBwcml2YXRlIHByb3BlcnR5TWV0YWRhdGEgPSBkaWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgcHJpdmF0ZSBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuICBwcml2YXRlIGhhc01lcmdlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBhcHBsaWVkTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3RhdGljTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3ViY2xhc3NlczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdID0gW107XG4gIHByaXZhdGUgc2xvdHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBJbnN0YW5jZU1ldGFDb25zdHJ1Y3RvcjogT3B0aW9uPHR5cGVvZiBNZXRhPiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIGxldCBtZXRhID0gbmV3IHRoaXMoKTtcbiAgICBtZXRhLnJlc2V0KHBhcmVudCk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBzdGF0aWMgZm9yKG9iamVjdDogT2JqZWN0V2l0aE1peGlucyB8IEluc3RhbmNlV2l0aE1peGlucyk6IE9wdGlvbjxDbGFzc01ldGE+IHtcbiAgICBpZiAoQ0xBU1NfTUVUQSBpbiBvYmplY3QpIHJldHVybiAob2JqZWN0IGFzIE9iamVjdFdpdGhNaXhpbnMpW0NMQVNTX01FVEFdO1xuICAgIGVsc2UgaWYgKG9iamVjdC5jb25zdHJ1Y3RvcilcbiAgICAgIHJldHVybiAob2JqZWN0IGFzIEluc3RhbmNlV2l0aE1peGlucykuY29uc3RydWN0b3JbQ0xBU1NfTUVUQV0gfHwgbnVsbDtcbiAgICBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgaW5pdChvYmplY3Q6IEdsaW1tZXJPYmplY3QsIGF0dHJzOiBPcHRpb248RGljdD4pIHtcbiAgICBpZiAodHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBhdHRycyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IGNvbmNhdFByb3BzID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBjb25jYXRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBjb25jYXQgPSBjb25jYXRQcm9wc1twcm9wXS5zbGljZSgpO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGNvbmNhdC5jb25jYXQoYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgbGV0IG1lcmdlZFByb3BzID0gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBtZXJnZWRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIG1lcmdlZFByb3BzW3Byb3BdKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBhc3NpZ24obWVyZ2VkLCBhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLnN0YXRpY01peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGFkZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMubWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgZ2V0U3RhdGljTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucztcbiAgfVxuXG4gIGdldE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5taXhpbnM7XG4gIH1cblxuICBhZGRBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5hcHBsaWVkTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgaGFzQXBwbGllZE1peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgZ2V0QXBwbGllZE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zO1xuICB9XG5cbiAgaGFzU3RhdGljTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUFsbE1peGlucyhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0TWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0U3RhdGljTWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kU3RhdGljKFN1YmNsYXNzKSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgYWRkU3ViY2xhc3MoY29uc3RydWN0b3I6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnN1YmNsYXNzZXMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBnZXRTdWJjbGFzc2VzKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViY2xhc3NlcztcbiAgfVxuXG4gIGFkZFByb3BlcnR5TWV0YWRhdGEocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgfVxuXG4gIG1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV07XG4gIH1cblxuICBhZGRSZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gPSB0eXBlO1xuICB9XG5cbiAgYWRkU2xvdEZvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5zbG90cy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIGhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCB2YWwgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaGFzTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWVyZ2VkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogRGljdCkge1xuICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBwYXNzZWQgaW4gXFxgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApfVxcYCBhcyB0aGUgdmFsdWUgZm9yIFxcYGZvb1xcYCBidXQgXFxgZm9vXFxgIGNhbm5vdCBiZSBhbiBBcnJheWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcyAmJiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHRoaXMgYXMgYW55KS5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWUgfHwge307XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlVHlwZXMoKTogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlNZXRhZGF0YSgpOiBEaWN0PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhID0gZGljdCgpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdID0gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0uc2xpY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc01lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wXSA9IGFzc2lnbih7fSwgcGFyZW50Lm1lcmdlZFByb3BlcnRpZXNbcHJvcF0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24odGhpcy5yZWZlcmVuY2VUeXBlcywgcGFyZW50LnJlZmVyZW5jZVR5cGVzKTtcbiAgICAgIGFzc2lnbih0aGlzLnByb3BlcnR5TWV0YWRhdGEsIHBhcmVudC5wcm9wZXJ0eU1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXNlYWwob2JqOiBPYmplY3QpIHtcbiAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKG9iaik7XG4gICAgbGV0IGZyZXNoID0gbmV3IHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IhKG9iaiwge30pO1xuICAgIGxldCByZWZlcmVuY2VUeXBlcyA9IG1ldGEuZ2V0UmVmZXJlbmNlVHlwZXMoKTtcbiAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICB0dXJib2NoYXJnZShhc3NpZ24ocmVmZXJlbmNlVHlwZXMsIHRoaXMucmVmZXJlbmNlVHlwZXMpKTtcbiAgICB0dXJib2NoYXJnZShhc3NpZ24oc2xvdHMsIGZyZXNoLmdldFNsb3RzKCkpKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHR1cmJvY2hhcmdlKFxuICAgICAgYXNzaWduKHt9LCB0aGlzLnJlZmVyZW5jZVR5cGVzKVxuICAgICk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLm1lcmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgJiYgIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG5cbiAgICBsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXG4gICAgY2xhc3MgU2xvdHMge1xuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2xvdHMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzW25hbWVdID0gRU1QVFlfQ0FDSEU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IgPSBjbGFzcyBleHRlbmRzIFNlYWxlZE1ldGEge1xuICAgICAgcHJvdGVjdGVkIHNsb3RzOiBTbG90cyA9IG5ldyBTbG90cygpO1xuICAgICAgcHVibGljIHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHJlZmVyZW5jZVR5cGVzO1xuXG4gICAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gICAgICB9XG5cbiAgICAgIHJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZyk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgICAgfVxuXG4gICAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHR1cmJvY2hhcmdlKHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWVyZ2VkUHJvcGVydGllcyhhdHRyczogRGljdCwgcGFyZW50OiBEaWN0KSB7XG4gIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIHBhcmVudCk7XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBhdHRycykge1xuICAgIGlmIChwcm9wIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50W3Byb3BdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhdHRyc1twcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwTWV0aG9kKHBhcmVudCwgcHJvcCwgYXR0cnNbcHJvcF0gYXMgYW55KTtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IHdyYXBwZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IGF0dHJzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZU1ldGEgZXh0ZW5kcyBDbGFzc01ldGEge1xuICBwdWJsaWMgJ2RmOGJlNGM4LTRlODktNDRlMi1hOGY5LTU1MGM4ZGFjZGNhNyc6IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljICdkZjhiZTRjOC00ZTg5LTQ0ZTItYThmOS01NTBjOGRhY2RjYTcnOiBJbnN0YW5jZU1ldGEgPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChudWxsKTtcbiAgc3RhdGljIGlzQ2xhc3MgPSB0cnVlO1xuXG4gIHN0YXRpYyBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgc3RhdGljIGV4dGVuZCh0aGlzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCAuLi5leHRlbnNpb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBleHRlbmRDbGFzcyh0aGlzLCAuLi5leHRlbnNpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUoYXR0cnM/OiBEaWN0IHwgbnVsbCk6IEdsaW1tZXJPYmplY3Qge1xuICAgIHJldHVybiBuZXcgdGhpcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFByb3RvdHlwZSh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG5cbiAgICByZWxpbmtTdWJjbGFzc2VzKHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRTdGF0aWModGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgc3RhdGljIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzW0NMQVNTX01FVEFdLm1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtZXRhRm9yUHJvcGVydHkoKSBjb3VsZCBub3QgZmluZCBhIGNvbXB1dGVkIHByb3BlcnR5IHdpdGgga2V5ICcke3Byb3BlcnR5fScuYFxuICAgICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBtZXRhZGF0YSA9IHRoaXNbQ0xBU1NfTUVUQV0uZ2V0UHJvcGVydHlNZXRhZGF0YSgpO1xuICAgIGlmICghbWV0YWRhdGEpIHJldHVybjtcblxuICAgIGZvciAobGV0IHByb3AgaW4gbWV0YWRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKHByb3AsIG1ldGFkYXRhW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICBfc3VwZXIgPSBST09UO1xuICBfbWV0YSA9IG51bGw7XG4gIF9ndWlkITogbnVtYmVyOyAvLyBTZXQgYnkgaW5pdGlhbGl6ZUd1aWQodGhpcykgaW4gY29uc3RydWN0b3JcblxuICBpbml0KCkge31cblxuICBjb25zdHJ1Y3RvcihhdHRycz86IERpY3QgfCBudWxsKSB7XG4gICAgaWYgKGF0dHJzKSBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0KVtDTEFTU19NRVRBXS5pbml0KHRoaXMsIGF0dHJzIHx8IG51bGwpO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMoYXR0cnM6IE9iamVjdCkge1xuICAgIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHt9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -84,3 +84,3 @@ import { Meta, InnerReferenceFactory } from '@glimmer/object-reference';

static extend(...extensions: Object[]): GlimmerObjectFactory<any> & typeof GlimmerObject;
static create(attrs?: Object | null): GlimmerObject;
static create(attrs?: Dict | null): GlimmerObject;
static reopen<U>(extensions: U): void;

@@ -94,3 +94,3 @@ static reopenClass<U>(extensions: U): void;

init(): void;
constructor(attrs?: Object | null);
constructor(attrs?: Dict | null);
get(key: string): any;

@@ -97,0 +97,0 @@ set(key: string, value: any): void;

{
"name": "@glimmer/object",
"version": "0.42.2",
"version": "0.43.0",
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/object",
"dependencies": {
"@glimmer/interfaces": "^0.42.2",
"@glimmer/object-reference": "^0.42.2",
"@glimmer/reference": "^0.42.2",
"@glimmer/util": "^0.42.2"
"@glimmer/interfaces": "^0.43.0",
"@glimmer/object-reference": "^0.43.0",
"@glimmer/reference": "^0.43.0",
"@glimmer/util": "^0.43.0"
},

@@ -11,0 +11,0 @@ "devDependencies": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc