barsa-novin-ray-core 2.0.132 → 2.0.134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -258,7 +258,7 @@ export class PortalService {
|
|
|
258
258
|
else {
|
|
259
259
|
_windoWSize = 'xl';
|
|
260
260
|
}
|
|
261
|
-
if (_ismobile) {
|
|
261
|
+
if (_ismobile && _windoWSize !== 'l' && _windoWSize !== 'xl' && _windoWSize !== 'm') {
|
|
262
262
|
return 's';
|
|
263
263
|
}
|
|
264
264
|
if (_isTablet && _windoWSize !== 'l' && _windoWSize !== 'xl') {
|
|
@@ -926,4 +926,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
926
926
|
type: Inject,
|
|
927
927
|
args: [DOCUMENT]
|
|
928
928
|
}] }] });
|
|
929
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxNQUFNLEVBQ04sVUFBVSxFQUVWLGVBQWUsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBYyxlQUFlLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUcsT0FBTyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQWN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVcxQyxNQUFNLE9BQU8sYUFBYTtJQTJDdEIsWUFDWSxHQUE0QixFQUM1QixVQUFzQixFQUN0QixVQUFzQixFQUN0QixhQUFpQyxFQUNqQyxRQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBbUIsRUFDbkIsYUFBa0MsRUFDaEIsU0FBbUI7UUFS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Q0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs4R0F2aUNRLGFBQWEsd1BBb0RWLFFBQVE7a0hBcERYLGFBQWEsY0FGVixNQUFNOzsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBcURRLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcGlsZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE5nTW9kdWxlRmFjdG9yeSxcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIG9mLCBmcm9tLCBmb3JrSm9pbiwgZnJvbUV2ZW50LCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIHRhcCxcbiAgICBtYXAsXG4gICAgY29uY2F0TWFwLFxuICAgIGZpbmFsaXplLFxuICAgIHB1Ymxpc2hSZXBsYXksXG4gICAgcmVmQ291bnQsXG4gICAgZXhoYXVzdE1hcCxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBzdGFydFdpdGgsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGZpbHRlclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIExvZ2luUmVzdWx0LFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBQYWdlRGF0YU1vZGVsLFxuICAgIFBvcnRhbERhdGFNb2RlbCxcbiAgICBSZXBvcnRNb2RlbCxcbiAgICBVbHZQYXJhbVR5cGVcbn0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XG5pbXBvcnQgeyBCYXJzYURpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2JhcnNhLWRpYWxvZy5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgICBFeGVjdXRlRHluYW1pY0NvbW1hbmQsXG4gICAgZ2V0Q29tcG9uZW50RGVmaW5lZCxcbiAgICBnZXREZXZpY2VJc01vYmlsZSxcbiAgICBnZXREZXZpY2VJc1RhYmxldCxcbiAgICBnZXRIZWFkZXJWYWx1ZSxcbiAgICBnZXRVbmlxdWVJZFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9ydGFsUGFnZVJlc29sdmVyIH0gZnJvbSAnLi4vcmVzb2x2ZXJzL3BvcnRhbC1wYWdlLnJlc29sdmVyJztcbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4uL2F1dGgtZ3VhcmQnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGxldCBBamF4SGVscGVyOiBhbnk7XG5kZWNsYXJlIGxldCBBamF4SGVscGVyMjogYW55O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbFNlcnZpY2Uge1xuICAgIHB1YmxpYyBvZmZzZXRUb3AgPSAwO1xuXG4gICAgbG9naW5Mb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBsb2FkZWQgPSBmYWxzZTtcbiAgICBmb3JtUGFuZWxzOiBhbnkgPSB7fTtcbiAgICBjYWNoZWRJbWFnZXM6IGFueSA9IHt9O1xuICAgIGRhdGVUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIGRlZmF1bHRSb3V0ZTogc3RyaW5nO1xuICAgIGNhY2hlZFBhZ2VEYXRhOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbD4gfSA9IHt9O1xuICAgIHBhZ2VzOiBQYWdlRGF0YU1vZGVsW10gPSBbXTtcbiAgICBydGxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHVzZXJMb2dnZWRJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZGljdGlvbmFyeTogeyBba2V5OiBzdHJpbmddOiBCZWhhdmlvclN1YmplY3Q8YW55PiB9ID0ge307XG4gICAgcG9ydGFsRGF0YVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UG9ydGFsRGF0YU1vZGVsIHwgbnVsbD4obnVsbCk7XG4gICAgcG9ydGFsU2V0dGluZ3MkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xuICAgIHBvcnRhbERhdGEkOiBPYnNlcnZhYmxlPFBvcnRhbERhdGFNb2RlbCB8IG51bGw+O1xuICAgIGRldmljZVNpemUkOiBPYnNlcnZhYmxlPEFiYnJldmF0aW9uRGV2aWNlU2l6ZT47XG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBkaXJWYWx1ZSQ6IE9ic2VydmFibGU8J3J0bCcgfCAnbHRyJz47XG4gICAgcm91dGVJbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgb3BlbkZvcm0kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBfaXNBbm9udW1vdXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIF9wdXNoQWN0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBub3RpZmljYXRpb25UYWc6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IG1vaWQ6IHN0cmluZzsgdHBpZDogc3RyaW5nIH0gfCBudWxsPihcbiAgICAgICAgbnVsbFxuICAgICk7XG4gICAgcHJpdmF0ZSBfZGV2aWNlU2l6ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWJicmV2YXRpb25EZXZpY2VTaXplPih0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCkpO1xuICAgIHByaXZhdGUgX2xvZ2dlZEluU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSByb3V0ZUluaXRpYWxpemVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBkYXRlVGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvblN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmF2aWdhdGlvblN0YXJ0IHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hdmlnYXRpb25FbmQgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF91c2VyUG9ydGFsU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPj4oe30pO1xuICAgIHByaXZhdGUgX2Nzc1VybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfY3NzVmFyaWFibGVVcmxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVSZXNvdXJjZVVybCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX2Nzc0N1c3RvbVVybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfc2VhcmNoVGVybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIHByaXZhdGUgX3dpbmRvd1Jlc2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2RldmljZUxhbmRzY2FwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KCF3aW5kb3cubWF0Y2hNZWRpYSgnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknKS5tYXRjaGVzKTtcbiAgICBwcml2YXRlIF9zdGFuZGFsb25lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4od2luZG93Lm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyk7XG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgRGVmYXVsdFBhZ2U6IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRjbTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEJhcnNhRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21waWxlcjogQ29tcGlsZXIsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgIHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLl9pbml0TGFuZHNjYXBlKCk7XG4gICAgICAgIHRoaXMuX2luaXRTdGFuZGFsb25lKCk7XG4gICAgICAgIHRoaXMuX2luaXRWaXNpYmlsaXR5Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuX2luaXRQdXNoQWN0aW9ucygpO1xuICAgIH1cblxuICAgIGdldCB1c2VyTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dnZWRJblNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgcHVzaEFjdGlvbiQoKTogT2JzZXJ2YWJsZTx7IG5vdGlmaWNhdGlvblRhZzogc3RyaW5nOyBtb2lkOiBzdHJpbmc7IHRwaWQ6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hBY3Rpb24kLmFzT2JzZXJ2YWJsZSgpLnBpcGUoKTtcbiAgICB9XG4gICAgZ2V0IGRvY3VtZW50VmlzaWJpbGl0eWNoYW5nZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgaXNTdGFuZGFsb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhbmRhbG9uZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHN0YW5kYWxvbmUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhbmRhbG9uZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBsYW5kc2NhcGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlTGFuZHNjYXBlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IHdpbmRvd1Jlc2l6ZSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dSZXNpemUkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpO1xuICAgIH1cbiAgICBnZXQgcG9ydGFsRGF0YSgpOiBQb3J0YWxEYXRhTW9kZWwgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgc2VhcmNoVGVybSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRlcm0kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY3NzVXJsJCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc1VybFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cbiAgICBnZXQgY3NzVmFyaWFibGVVcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3NzVmFyaWFibGVVcmxTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG4gICAgZ2V0IGNzc0N1c3RvbVVybCQoKTogT2JzZXJ2YWJsZTxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jc3NDdXN0b21VcmxTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCB1c2VyUG9ydGFsU2V0dGluZ3MoKTogUmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgdXNlclBvcnRhbFNldHRpbmdzJCgpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIE1ldGFvYmplY3REYXRhTW9kZWw+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgZGV2aWNlU2l6ZSgpOiBBYmJyZXZhdGlvbkRldmljZVNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgaXNBbm9ueW1vdXMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNBbm9udW1vdXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBuYXZpZ2F0aW9uRW5kJCgpOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25FbmQgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uRW5kJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IG5hdmlnYXRpb25TdGFydCQoKTogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uU3RhcnQgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU3RhcnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkTW8oaWQ6IHN0cmluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdHlwZWRlZklkKTtcbiAgICB9XG4gICAgcHVzaEFjdGlvbk5leHQocHVzaEFjdGlvbjogeyBub3RpZmljYXRpb25UYWc7IG1vaWQ7IHRwaWQ7IGFjdGlvbiB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdwdXNoQWN0aW9uJywgSlNPTi5zdHJpbmdpZnkocHVzaEFjdGlvbikpO1xuICAgICAgICB0aGlzLl9wdXNoQWN0aW9uJC5uZXh0KHB1c2hBY3Rpb24pO1xuICAgIH1cbiAgICBzZXRTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWFyY2hUZXJtJC5uZXh0KHRlcm0pO1xuICAgIH1cbiAgICB3aW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZSQubmV4dCgpO1xuICAgIH1cbiAgICBuYXZpYXRpb25FbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkVuZCQubmV4dChldmVudCk7XG4gICAgfVxuICAgIG5hdmlhdGlvblN0YXJ0KGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvblN0YXJ0JC5uZXh0KGV2ZW50KTtcbiAgICB9XG4gICAgc2V0VXNlclBvcnRhbFNldHRpbmdzKHVzZXJQb3J0YWxTZXR0aW5nczogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKHVzZXJQb3J0YWxTZXR0aW5ncy4kVHlwZURlZk5hbWUpIHtcbiAgICAgICAgICAgIHZhbHVlW3VzZXJQb3J0YWxTZXR0aW5ncy4kVHlwZURlZk5hbWVdID0gdXNlclBvcnRhbFNldHRpbmdzO1xuICAgICAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHsgLi4udmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q3NzVXJsVGhlbWUodGhlbWVVcmw6IFNhZmVSZXNvdXJjZVVybCwgY3NzVmFyaWFibGVVcmw/OiBTYWZlUmVzb3VyY2VVcmwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3NzVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xuICAgICAgICB0aGlzLl9jc3NDdXN0b21VcmxTb3VyY2UubmV4dCh0aGVtZVVybCk7XG4gICAgICAgIGlmIChjc3NWYXJpYWJsZVVybCkge1xuICAgICAgICAgICAgdGhpcy5fY3NzVmFyaWFibGVVcmxTb3VyY2UubmV4dChjc3NWYXJpYWJsZVVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREYXRhKGtleSwgZGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldLm5leHQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RGF0YShrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5W2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyeVtrZXldLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXREYXRhU3luYzxUPihrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0uZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5VbC5VbHZNYWluQ3RybHIuQ3JlYXRlRm9yUmVwb3J0KHt9LCBuYXZJdGVtLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJlbmRlclVsdk1haW5VaShcbiAgICAgICAgbmF2SXRlbSxcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGlzUmVwb3J0UGFnZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pLnBpcGUoXG4gICAgICAgICAgICBleGhhdXN0TWFwKCh1bHZNYWluQ3RybHIpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVbHZNYWluVWlDb21wb25lbnQodWx2TWFpbkN0cmxyLkFkYXB0ZXIuQ29udHJvbCwgaW5qZWN0b3IsIGlzUmVwb3J0UGFnZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCh1bHZNYW5pVWlDb21wb25lbnQpID0+IHZjci5pbnNlcnQodWx2TWFuaVVpQ29tcG9uZW50Lmhvc3RWaWV3KSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB1bHZNYWluQ3RybHIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRVbHZNYWluVWlDb21wb25lbnQoY3VzdG9tVWx2TWFpblVpLCBpbmplY3RvcjogSW5qZWN0b3IsIGlzUmVwb3J0UGFnZSk6IE9ic2VydmFibGU8Q29tcG9uZW50UmVmPGFueT4+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVWlTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY3VzdG9tVWx2TWFpblVpLlNldHRpbmcsICdDdXN0b21VaScsIG51bGwpO1xuICAgICAgICBjb25zdCB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH0gPSBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgICAgICAgICAgY3VzdG9tVWx2TWFpblVpLFxuICAgICAgICAgICAgY3VzdG9tVWlTZXR0aW5nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudChtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciwgaW5qZWN0b3IpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmlkID0gY3VzdG9tVWx2TWFpblVpLmlkO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNvbnRleHQgPSBjdXN0b21VbHZNYWluVWk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaXNSZXBvcnRQYWdlID0gaXNSZXBvcnRQYWdlO1xuICAgICAgICAgICAgICAgIGN1c3RvbVVsdk1haW5VaS5jb250cm9sVWkgPSBjb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXZpY2VTaXplJCA9IHRoaXMuX2RldmljZVNpemVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucG9ydGFsRGF0YSQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMucnRsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbiQgPSB0aGlzLl9sb2dnZWRJblNvdXJjZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShtYXAoKGlzTG9nZ2VkSW4pID0+IGlzTG9nZ2VkSW4gJiYgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5kaXJWYWx1ZSQgPSB0aGlzLnJ0bCQucGlwZShtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAncnRsJyA6ICdsdHInKSkpO1xuICAgICAgICB0aGlzLnJvdXRlSW5pdGlhbGl6ZWQkID0gdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3N0YW5kYWxvbmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdub1N0YW5kYWxvbmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbGFuZHNjYXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZXZpY2VTaXplU291cmNlLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMgPT09ICdzJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc21hbGxkZXZpY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0ZVRleHQkID0gdGhpcy5kYXRlVGV4dFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5wb3J0YWxTZXR0aW5ncyQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUobWFwKChwb3J0YWxEYXRhKSA9PiAocG9ydGFsRGF0YSA/IHBvcnRhbERhdGEuUG9ydGFsU2V0dGluZ3MgOiAoe30gYXMgYW55KSkpKTtcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgobnVsbCksIGRlYm91bmNlVGltZSgxMDAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREZXZpY2VTaXplKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NldERldmljZVNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRldmljZVNpemUgPSB0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCk7XG4gICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChkZXZpY2VTaXplKTtcbiAgICB9XG4gICAgX2luaXRhbGl6ZURldmljZVNpemUoKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcbiAgICAgICAgY29uc3QgX2lzbW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcbiAgICAgICAgaWYgKF9pc21vYmlsZSkge1xuICAgICAgICAgICAgQmFyc2FBcGkuQncuSXNNb2JpbGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9pc1RhYmxldCA9IGdldERldmljZUlzVGFibGV0KCk7XG4gICAgICAgIGxldCBfd2luZG9XU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplID0gJ3MnO1xuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNjAwKSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICdzJztcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDYwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA5OTIpIHtcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ20nO1xuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoIDw9IDEyMDApIHtcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ2wnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAneGwnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfaXNtb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiAncyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pc1RhYmxldCAmJiBfd2luZG9XU2l6ZSAhPT0gJ2wnICYmIF93aW5kb1dTaXplICE9PSAneGwnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ20nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfd2luZG9XU2l6ZTtcbiAgICB9XG4gICAgY29tcGlsZU1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPE5nTW9kdWxlRmFjdG9yeTxhbnk+PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSQgPSB0aGlzLmdldE1vZHVsZShkZXBlbmRlbmN5KTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZSQucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgobW9kdWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUZhY3RvcnkgPSB0aGlzLmdldE5nTW9kdWxlRmFjdG9yeShtb2R1bGVzLCBkZXBlbmRlbmN5Lm5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihtb2R1bGVGYWN0b3J5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGdldE1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGtlYmFiTmFtZSwgdW1kLCBleHBvcnRBcyB9ID0gZGVwZW5kZW5jeTtcbiAgICAgICAgY29uc3QgYmFzZSA9IGAvYXNzZXRzL21vZHVsZXMvJHtrZWJhYk5hbWV9L2J1bmRsZXNgO1xuICAgICAgICBjb25zdCBkYXRlID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5hYmM7XG4gICAgICAgIGNvbnN0IHBhdGggPSBgJHtiYXNlfS8ke2tlYmFiTmFtZX0udW1kLmpzP3Q9JHtkYXRlfWA7XG4gICAgICAgIHJldHVybiBvZih0cnVlKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVzID0gdGhpcy5nZXRSZWdpc3RlcmVkTW9kdWxlcyh1bWQsIGV4cG9ydEFzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRKcyQocGF0aCkucGlwZShtYXAoKCkgPT4gdGhpcy5nZXRSZWdpc3RlcmVkTW9kdWxlcyh1bWQsIGV4cG9ydEFzLCBuYW1lKSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZU9uT2JqZWN0KHBhdGgsIGluZGV4LCBtb2R1bGVzLCBvYmplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3BsaXRlZCA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgcHJvcCA9IHNwbGl0ZWRbaW5kZXhdO1xuICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gdHlwZW9mIHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqZWN0W3Byb3BdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSBzcGxpdGVkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG9iamVjdFtwcm9wXSA9IG1vZHVsZXM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWYWx1ZU9uT2JqZWN0KHBhdGgsIGluZGV4ICsgMSwgbW9kdWxlcywgb2JqZWN0W3Byb3BdKTtcbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnQoXG4gICAgICAgIG1vZHVsZU5hbWU6IHN0cmluZyxcbiAgICAgICAgbW9kdWxlUGF0aDogc3RyaW5nLFxuICAgICAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgICAgIHBhcmVudEluamVjdG9yOiBJbmplY3RvclxuICAgICk6IE9ic2VydmFibGU8Q29tcG9uZW50UmVmPGFueT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGNtLmdldENvbXBvbmVudEJ5U2VsZWN0b3Ioc2VsZWN0b3IsIG1vZHVsZU5hbWUsIHBhcmVudEluamVjdG9yKTtcbiAgICB9XG4gICAgbG9hZEpzJChwYXRoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHBhdGgpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGF0aCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgUmVwb3J0RXhlY3V0ZUJ5SWQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TW9Gb3JSZXBvcnRNb2RlbD4ge1xuICAgICAgICBjb25zdCB1bHZQYXJhbXMgPSB0aGlzLl9nZXRVbHZQYXJhbXNCeSgnJywgcmVwb3J0SWQpO1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLl9yZXBvcnRFeGVjdXRlUHJvbWlzZSh1bHZQYXJhbXMpKTtcbiAgICB9XG4gICAgUmVwb3J0RXhlY3V0ZShyZXBvcnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1vRm9yUmVwb3J0TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5SZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lKSk7XG4gICAgfVxuICAgIFJlcG9ydEV4ZWN1dGVQcm9taXNlKHJlcG9ydE5hbWU6IHN0cmluZyk6IFByb21pc2U8TW9Gb3JSZXBvcnRNb2RlbD4ge1xuICAgICAgICBjb25zdCB1bHZQYXJhbXMgPSB0aGlzLl9nZXRVbHZQYXJhbXNCeShyZXBvcnROYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcG9ydEV4ZWN1dGVQcm9taXNlKHVsdlBhcmFtcyk7XG4gICAgfVxuICAgIHByaXZhdGUgX2dldFVsdlBhcmFtc0J5KHJlcG9ydE5hbWU6IHN0cmluZywgcmVwb3J0SWQ/OiBzdHJpbmcpOiBVbHZQYXJhbVR5cGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgRmxhZ3M6IHtcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXG4gICAgICAgICAgICAgICAgRXh0cmE6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgU2VhcmNoOiAnRmFsc2UnLFxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmFsOlwiRmFsc2VcIiwgLy8gdWx2bWFpbmN0cmwgZG9lcyBub3QgY3JhZXRlIHVpIGNvbnRyb2wgcmFpc2UgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXBvcnROYW1lOiByZXBvcnROYW1lLFxuICAgICAgICAgICAgUmVwb3J0SWQ6IHJlcG9ydElkLFxuICAgICAgICAgICAgVXNhZ2VFbnVtOiAnU3lzdGVtQ29udGFpbmVyJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcG9ydEV4ZWN1dGVQcm9taXNlKHVsdlBhcmFtczogVWx2UGFyYW1UeXBlKTogUHJvbWlzZTxNb0ZvclJlcG9ydE1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNb0ZvclJlcG9ydE1vZGVsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5FeGVjdXRlUmVwb3J0KFxuICAgICAgICAgICAgICAgIHsgdWx2UGFyYW1zIH0sXG4gICAgICAgICAgICAgICAgKHJlc3VsdDogUmVwb3J0TW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuRGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZEZvcm1QYW5lbEN0cmxyKGlkLCBmb3JtcGFuZWxDdHJscjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVBhbmVsc1tpZF0gPSBmb3JtcGFuZWxDdHJscjtcbiAgICB9XG4gICAgc2V0VXNlckxvZ2luU3RhdHVzKHN0YXR1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2dnZWRJblNvdXJjZS5uZXh0KHN0YXR1cyk7XG4gICAgfVxuICAgIGV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhOiBQb3J0YWxEYXRhTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghcG9ydGFsRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKHBhZ2VEYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXh0cmFjdEFsbFBhZ2VzX09sZChwb3J0YWxEYXRhOiBQb3J0YWxEYXRhTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghcG9ydGFsRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fcm91dGVyLmNvbmZpZztcbiAgICAgICAgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgocGFnZURhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwYWdlRGF0YS5Sb3V0ZS5yZXBsYWNlKCcvJywgJycpO1xuICAgICAgICAgICAgY29uZmlnLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3V0ZShwYWdlRGF0YSwgcGF0aCwgcGFnZURhdGEuSGFzQXV0aG9yaXplLCBwYWdlRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgbnVsbCwgbnVsbClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocGFnZURhdGEuSXNEZWZhdWx0Um91dGUgfHwgcGFnZURhdGEuSXNEZWZhdWx0Um91dGUgPT09ICdUcnVlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFJvdXRlID0gcGF0aDtcbiAgICAgICAgICAgICAgICBjb25maWcucHVzaCh0aGlzLmNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCAnJywgZmFsc2UsIHBvcnRhbERhdGEuUGFnZU1vZHVsZT8uJENhcHRpb24sIHBhdGgsIG51bGwpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JvdXRlci5yZXNldENvbmZpZyhjb25maWcpO1xuICAgICAgICBpZiAodGhpcy5fbG9jYXRpb24ucGF0aCgpID09PSAnJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLmRlZmF1bHRSb3V0ZV0pO1xuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMucm91dGVJbml0aWFsaXplZCgpO1xuICAgIH1cbiAgICBzc29Mb2dpbigpOiB2b2lkIHtcbiAgICAgICAgQWpheEhlbHBlci5BamF4UmVxdWVzdChcbiAgICAgICAgICAgICcvYXBpL2Jhc2Uvc3NvbG9naW4nLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIHNzbyBsb2dpbi4nKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHNzb0xvZ291dCgpOiB2b2lkIHtcbiAgICAgICAgQWpheEhlbHBlci5BamF4UmVxdWVzdChcbiAgICAgICAgICAgICcvYXBpL2Jhc2Uvc3NvbG9nb3V0JyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJvciBpbiBzc28gbG9nb3V0LicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgYWRkQ2hpbGRQYWdlcyhwYWdlRGF0YTogUGFnZURhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZURhdGEpO1xuICAgICAgICBpZiAoIXBhZ2VEYXRhLkNoaWxkUGFnZUxpc3Q/Lk1vRGF0YUxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhZ2VEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChjaGlsZFBhZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhjaGlsZFBhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBjcmVhdGVSb3V0ZShwYWdlRGF0YSwgcGF0aCwgaGFzQXV0aG9yaXplZCwgbW9kdWxlTmFtZSwgcmVkaXJlY3RUbywgaXNEeW5hbWljUm91dGUpOiBSb3V0ZSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY3JlYXRlUm91dGUyKFxuICAgICAgICBwYWdlRGF0YSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgaGFzQXV0aG9yaXplZCxcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICAgcmVkaXJlY3RUbzogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGlzRHluYW1pY1JvdXRlOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBSb3V0ZSB7XG4gICAgICAgIGxldCBtb2R1bGVQYXRoOiBzdHJpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XG4gICAgICAgIGNvbnN0IHVtZCA9IG1vZHVsZU5hbWU7XG4gICAgICAgIG1vZHVsZVBhdGggPSBtb2R1bGVQYXRoLnN1YnN0cmluZygxLCBtb2R1bGVQYXRoLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNSb3V0ZTogUm91dGUgPSB7fTtcbiAgICAgICAgZHluYW1pY1JvdXRlLnBhdGggPSBwYXRoO1xuICAgICAgICBkeW5hbWljUm91dGUuZGF0YSA9IHsgcGFnZURhdGEgfTtcbiAgICAgICAgaWYgKCFpc0R5bmFtaWNSb3V0ZSkge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlc29sdmUgPSB7XG4gICAgICAgICAgICAgICAgcGFnZURhdGE6IFBvcnRhbFBhZ2VSZXNvbHZlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5wYXRoTWF0Y2ggPSAnZnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZGlyZWN0VG8pIHtcbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5yZWRpcmVjdFRvID0gcmVkaXJlY3RUbztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoYXNBdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY1JvdXRlLmNhbkFjdGl2YXRlID0gW0F1dGhHdWFyZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkeW5hbWljUm91dGUubG9hZENoaWxkcmVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llczogTGlicmFyeURlcGVuZWN5W10gPSBKU09OLnBhcnNlKHBhZ2VEYXRhLkRlcGVuZGVuY2llcyk7IC8vIGV2YWwocGFnZURhdGEuRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlTGlicmFyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAga2ViYWJOYW1lOiBtb2R1bGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICB1bWQsXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydEFzOiBbbW9kdWxlTmFtZV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyQgPSBmcm9tKGRlcGVuZGVuY2llcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpID0+IHRoaXMuY29tcGlsZU1vZHVsZShkZXBlbmRlbmN5KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihbZGVwZW5kZW5jaWVzJF0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmdldE1vZHVsZShwYWdlTGlicmFyeSkpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKG1vZHVsZXMpID0+IG1vZHVsZXNbbW9kdWxlTmFtZSArICdNb2R1bGUnXSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJvdXRlSW5pdGlhbGl6ZWQoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkeW5hbWljUm91dGU7XG4gICAgfVxuICAgIHJvdXRlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVJbml0aWFsaXplZFNvdXJjZS5uZXh0KHRydWUpO1xuICAgIH1cbiAgICBwdWJsaWMgbG9naW5CeUFub255bW91cygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5sb2dpbkxvYWRpbmcubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5sb2dpblBvcnRhbCgpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3VsdDogTG9naW5SZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5kZWJ1ZyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQmFyc2FBcGkuTG9naW5BY3Rpb24udG9rZW4yU3RvcmFnZUtleSwgcmVzdWx0LmRhdGEuc3RoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naW5Mb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIGdldFBhZ2VEYXRhKHVybDogc3RyaW5nLCBpc1Jvb3Q6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWwgfCBudWxsPiB7XG4gICAgICAgIGlmIChpc1Jvb3QgfHwgdXJsID09PSAnJyB8fCB1cmwgPT09ICcvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsRGF0YSQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIHVybC5pbmRleE9mKCc/JykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZURhdGEgPSB0aGlzLmZpbmRQYWdlQnlSb3V0ZSh1cmwpO1xuXG4gICAgICAgIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSA9IHRoaXMuYXBpU2VydmljZVxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShwYWdlRGF0YT8uSWQsIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5nZXRWYWx1ZSgpPy5DaGlsZFBhZ2VMaXN0LlR5cGVEZWZJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocGFnZU1vKSA9PiBwYWdlTW8uRGF0YS5NbyksXG4gICAgICAgICAgICAgICAgdGFwKChwYWdlTW8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFJvdXRlKHBhZ2VNbywgcGFnZU1vLkNoaWxkUGFnZUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZU1vKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxuICAgICAgICAgICAgICAgIHJlZkNvdW50KClcbiAgICAgICAgICAgICk7XG4gICAgICAgIC8vIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSA9IHRoaXMucG9ydGFsRGF0YSQucGlwZShcbiAgICAgICAgLy8gICBmaWx0ZXIoKHBvcnRhbERhdGEpID0+IHBvcnRhbERhdGEgIT0gbnVsbCksXG4gICAgICAgIC8vICAgbWFwKChwb3J0YWxEYXRhKSA9PiApLFxuICAgICAgICAvLyAgIGNvbmNhdE1hcCgocGFnZURhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyAgIH0pLFxuXG4gICAgICAgIC8vICAgdGFwKHBhZ2VEYXRhPT57fSlcbiAgICAgICAgLy8gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXTtcbiAgICB9XG4gICAgcHVibGljIHJlc29sdmVEYXRhKHJvdXRlUGFnZURhdGEpOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWwgfCBudWxsPiB7XG4gICAgICAgIC8vIGNvbnN0IHBhZ2VEYXRhID0gdGhpcy5wYWdlcy5maW5kKChjKSA9PiBjLlJvdXRlID09PSByb3V0ZVBhZ2VEYXRhLlJvdXRlICYmIGMuTW9kdWxlID09PSByb3V0ZVBhZ2VEYXRhLk1vZHVsZSk7XG4gICAgICAgIGNvbnN0IHBhZ2VEYXRhID0gdGhpcy5wYWdlcy5maW5kKChjKSA9PiBjLlJvdXRlID09PSByb3V0ZVBhZ2VEYXRhLlJvdXRlKTtcbiAgICAgICAgaWYgKCFwYWdlRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gcGFnZURhdGEuSWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUGFnZURhdGFbaWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF0gPSB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgICAgIC5sb2FkUG9ydGFsUGFnZURhdGEoaWQsIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5nZXRWYWx1ZSgpPy5DaGlsZFBhZ2VMaXN0LlR5cGVEZWZJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocGFnZU1vKSA9PiBwYWdlTW8uRGF0YS5NbyksXG4gICAgICAgICAgICAgICAgdGFwKChwYWdlTW8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFJvdXRlKHBhZ2VNbywgcGFnZU1vLkNoaWxkUGFnZUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZU1vKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxuICAgICAgICAgICAgICAgIHJlZkNvdW50KClcbiAgICAgICAgICAgICk7XG4gICAgICAgIC8vIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSA9IHRoaXMucG9ydGFsRGF0YSQucGlwZShcbiAgICAgICAgLy8gICBmaWx0ZXIoKHBvcnRhbERhdGEpID0+IHBvcnRhbERhdGEgIT0gbnVsbCksXG4gICAgICAgIC8vICAgbWFwKChwb3J0YWxEYXRhKSA9PiApLFxuICAgICAgICAvLyAgIGNvbmNhdE1hcCgocGFnZURhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyAgIH0pLFxuXG4gICAgICAgIC8vICAgdGFwKHBhZ2VEYXRhPT57fSlcbiAgICAgICAgLy8gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbaWRdO1xuICAgIH1cblxuICAgIGFkZENoaWxkUm91dGUocGFnZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBDaGlsZFBhZ2VMaXN0OiBNb0ZvclJlcG9ydE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWRkQ2hpbGRSb3V0ZV9PbGQocGFnZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBDaGlsZFBhZ2VMaXN0OiBNb0ZvclJlcG9ydE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICghQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFnZU1vLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJvdXRlID0gY29uZmlnLmZpbmQoKGMpID0+IChjLnBhdGggPSBwYXJlbnRQYXRoKSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBSb3V0ZVtdID0gW107XG4gICAgICAgIGlmIChwYXJlbnRSb3V0ZSkge1xuICAgICAgICAgICAgQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGNoaWxkLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyb3V0ZSA9IHRoaXMuY3JlYXRlUm91dGUoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5IYXNBdXRob3JpemUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLlBhZ2VNb2R1bGU/LiRDYXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkcm91dGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgICAgICAgKHBhcmVudFJvdXRlIGFzIGFueSkuX2xvYWRlZENvbmZpZy5yb3V0ZXNbMF0uY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFfT2xkMSgpOiBPYnNlcnZhYmxlPFBvcnRhbERhdGFNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWwoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZCwgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHBvcnRhbFNldHRpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0YWxEYXRhID0gcG9ydGFsU2V0dGluZy5EYXRhLk1vO1xuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5uZXh0KHBvcnRhbERhdGEpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gZnJvbSh0aGlzLmxvYWRTeXN0ZW0oKSkpLFxuICAgICAgICAgICAgdGFwKChhbGwpID0+IHRoaXMuZGF0ZVRleHRTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRhdGVUZXh0KSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIGxvYWRQb3J0YWxEYXRhU3luY19PbGQyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nID0gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWxTeW5jKFxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZCxcbiAgICAgICAgICAgIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsVHlwZURlZklkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nLkRhdGEuTW87XG5cbiAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XG5cbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XG5cbiAgICAgICAgdGhpcy5sb2FkU3lzdGVtKCk7XG5cbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xuICAgIH1cbiAgICBwcml2YXRlIF9nZXREZWZhdWx0UGFnZShjOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghYyB8fCAhYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCB4ID0gYy5maW5kKChjKSA9PiBjLklzRGVmYXVsdFJvdXRlID09PSAnVHJ1ZScpO1xuICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHgyOiBhbnkgPSBudWxsO1xuICAgICAgICBjLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh4Mikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHgyID0gdGhpcy5fZ2V0RGVmYXVsdFBhZ2UoZWxlbWVudC5DaGlsZFBhZ2VMaXN0Py5Nb0RhdGFMaXN0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB4MjtcbiAgICB9XG4gICAgcHVibGljIGxvYWRQb3J0YWxEYXRhU3luYygpOiB2b2lkIHtcbiAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmdTdHIgPSBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZCgnR2V0UG9ydGFsJywgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZCk7XG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmcgPSBCYXJzYUFwaS5FeHQuZGVjb2RlKHBvcnRhbFNldHRpbmdTdHIpO1xuICAgICAgICBjb25zdCBwb3J0YWxEYXRhOiBQYWdlRGF0YU1vZGVsID0gcG9ydGFsU2V0dGluZztcbiAgICAgICAgaWYgKHBvcnRhbERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRQYWdlID0gdGhpcy5fZ2V0RGVmYXVsdFBhZ2UocG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5EZWZhdWx0UGFnZSA9IGRlZmF1bHRQYWdlO1xuICAgICAgICAgICAgbGV0IGNvbmZpZ1JvdXRlID0gdGhpcy5fcm91dGVyLmNvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZVBhZ2VkOiBSb3V0ZVtdID0gW107XG4gICAgICAgICAgICBjb25maWdSb3V0ZS5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gJy8nICsgYy5wYXRoO1xuICAgICAgICAgICAgICAgIGlmIChjLnBhdGggIT09ICcnICYmIHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZpbmRJbmRleCgoZCkgPT4gZC5Sb3V0ZSA9PT0gcm91dGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVQYWdlZC5wdXNoKGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcGF0aFRvUmVtb3ZlID0gcmVtb3ZlUGFnZWQubWFwKChkKSA9PiBkLnBhdGgpO1xuICAgICAgICAgICAgY29uZmlnUm91dGUgPSBjb25maWdSb3V0ZS5maWx0ZXIoKGMpID0+IHBhdGhUb1JlbW92ZS5pbmRleE9mKGMucGF0aCkgPT09IC0xKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UGFnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhZ2VSb3V0ZSA9IGRlZmF1bHRQYWdlLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhdGggPSBjb25maWdSb3V0ZS5maW5kKChjKSA9PiBjLnBhdGggPT09ICcnKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGF0aCAmJiAoZGVmYXVsdFBhdGgucmVkaXJlY3RUbyA9IGRlZmF1bHRQYWdlUm91dGUpO1xuICAgICAgICAgICAgICAgIGNvbmZpZ1JvdXRlLnB1c2goeyBwYXRoOiAnKionLCByZWRpcmVjdFRvOiBkZWZhdWx0UGFnZVJvdXRlIH0pO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IG5vdEZvdW5kUGF0aCA9IGNvbmZpZ1JvdXRlLmZpbmQoKGMpID0+IGMucGF0aCA9PT0gJyoqJyk7XG4gICAgICAgICAgICAgICAgLy8gbm90Rm91bmRQYXRoICYmIChub3RGb3VuZFBhdGgucmVkaXJlY3RUbyA9IGRlZmF1bHRQYWdlLlJvdXRlLnJlcGxhY2UoJy8nLCAnJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZ1JvdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhIGFzIFBvcnRhbERhdGFNb2RlbCk7XG5cbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSBhcyBQb3J0YWxEYXRhTW9kZWwpO1xuXG4gICAgICAgIHRoaXMuZGF0ZVRleHRTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRhdGVUZXh0KTtcbiAgICB9XG4gICAgcHVibGljIFNob3dGb3JtKGU6IHsgbW86IE1ldGFvYmplY3REYXRhTW9kZWw7IG5hbWE6IHN0cmluZzsgYWZ0ZXJSZWFkeT86IChlOiBhbnkpID0+IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5Gb3JtLlNob3coe1xuICAgICAgICAgICAgTW86IGUubW8sXG4gICAgICAgICAgICBNb0NvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBWaWV3TmFtZTogZS5uYW1hXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRXZlbnRIYW5kbGVyczoge1xuICAgICAgICAgICAgICAgIEFmdGVyUmVhZHk6IGZ1bmN0aW9uIChzZW5kZXIsIGVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZG8gc29tZXRoaW5nIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgZS5hZnRlclJlYWR5Py4oZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbG9naW5Sb3V0ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsRGF0YSQucGlwZShcbiAgICAgICAgICAgIG1hcCgocG9ydGFsRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luUGFnZSA9IHBvcnRhbERhdGE/LkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLklzTG9naW5Sb3V0ZSA9PT0gJ1RydWUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9naW5QYWdlPy5Sb3V0ZSB8fCAnbG9naW4nO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIEV4ZWN1dGVOb3RpZmljYXRpb25BY3Rpb24oaWQ6IHN0cmluZywgYWN0aW9uVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtpZCwgYWN0aW9uVGl0bGVdLFxuICAgICAgICAgICAgTWV0aG9kOiAnRXhlY3V0ZU5vdGlmaWNhdGlvbkFjdGlvbicsXG4gICAgICAgICAgICBTdWNjZXNzRm46IChlOiB7XG4gICAgICAgICAgICAgICAgTW86IE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgICAgICAgICAgICAgRHluYW1pY0NvbW1hbmRJZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIFNob3dGb3JtU2V0dGluZzogeyBNb0lkOiBzdHJpbmc7IFZpZXdOYW1lOiBzdHJpbmcgfTtcbiAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVQdXNoQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGUuRHluYW1pY0NvbW1hbmRJZCkge1xuICAgICAgICAgICAgICAgICAgICBFeGVjdXRlRHluYW1pY0NvbW1hbmQoeyBJZDogZS5EeW5hbWljQ29tbWFuZElkIH0sIGUuTW8pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5TaG93Rm9ybVNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBNb0lkLCBWaWV3TmFtZSB9ID0gZS5TaG93Rm9ybVNldHRpbmc7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gQmFyc2FBcGkuQncuRm9ybS5TaG93KHsgTW9JZCwgTW9Db250ZXh0OiB7IFZpZXdOYW1lIH0gfSksIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVQdXNoQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIGxvYWRVc2VyUG9ydGFsU2V0dGluZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVsdlBhcmFtcyA9IHtcbiAgICAgICAgICAgIEZsYWdzOiB7XG4gICAgICAgICAgICAgICAgRGF0YTogJ1RydWUnLFxuICAgICAgICAgICAgICAgIEV4dHJhOiAnRmFsc2UnLFxuICAgICAgICAgICAgICAgIFNlYXJjaDogJ0ZhbHNlJyxcbiAgICAgICAgICAgICAgICBWaWV3OiAnRmFsc2UnXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhbDpcIkZhbHNlXCIsIC8vIHVsdm1haW5jdHJsIGRvZXMgbm90IGNyYWV0ZSB1aSBjb250cm9sIHJhaXNlIGVycm9yXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmVwb3J0TmFtZTogJ1/YqtmG2LjZitmF2KfYql/Zvtin2YrZh1/ZvtmI2LHYqtin2YQnLFxuICAgICAgICAgICAgVXNhZ2VFbnVtOiAnU3lzdGVtQ29udGFpbmVyJ1xuICAgICAgICB9O1xuICAgICAgICBCYXJzYUFwaS5Cdy5FeGVjdXRlUmVwb3J0KFxuICAgICAgICAgICAgeyB1bHZQYXJhbXMgfSxcbiAgICAgICAgICAgIChyZXN1bHQ6IFJlcG9ydE1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9saXN0ID0gcmVzdWx0LkRhdGEuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyUG9ydGFsU2V0dGluZzogUmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4gPSB7fTtcbiAgICAgICAgICAgICAgICBtb2xpc3QuZm9yRWFjaCgobW8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vLkluaGVyaXRhbmNlICYmIG1vLkluaGVyaXRhbmNlLiRUeXBlRGVmTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBvcnRhbFNldHRpbmdbbW8uSW5oZXJpdGFuY2UuJFR5cGVEZWZOYW1lXSA9IG1vLkluaGVyaXRhbmNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5nKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC8vIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAvLyAgICAgUGFyYW1ldGVyczogW10sXG4gICAgICAgIC8vICAgICBNZXRob2Q6ICdHZXRVc2VyUG9ydGFsU2V0dGluZ3MnLFxuICAgICAgICAvLyAgICAgU3VjY2Vzc0ZuOiAodXNlclBvcnRhbFNldHRpbmc6IE1ldGFvYmplY3REYXRhTW9kZWwpID0+IHtcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICBGYWlsRm46IChlKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9KTtcbiAgICB9XG4gICAgbG9hZFNlcnZlclN0YXJ0dXBEYXRhKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFCYXJzYUFwaS5PZmZsaW5lLmhhc0luaXQpIHtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5PZmZsaW5lLmFmdGVySW5pdENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkU2VydmVyU3RhcnR1cERhdGEocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMuX2xvYWRTZXJ2ZXJTdGFydHVwRGF0YShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2xvYWRTZXJ2ZXJTdGFydHVwRGF0YShyZXNvbHZlLCByZWplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWpheEhlbHBlciA9IHR5cGVvZiBBamF4SGVscGVyMiA9PT0gJ3VuZGVmaW5lZCcgPyBBamF4SGVscGVyIDogQWpheEhlbHBlcjI7XG4gICAgICAgIGFqYXhIZWxwZXIuQWpheFJlcXVlc3QoXG4gICAgICAgICAgICAnL2FwaS9iYXNlL1NlcnZlclN0YXJ0dXBEYXRhJyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVRleHQgPSByZXNwb25zZS5yZXNwb25zZVRleHQ7XG4gICAgICAgICAgICAgICAgZGF0YVRleHQgPSBkYXRhVGV4dC5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgICAgICAgIGRhdGFUZXh0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuUmVwbGFjZUFyYWJpY0NoYXJjaHRlcihkYXRhVGV4dCk7XG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtLlBvcnRhbEluaXRpYWxpemUoZGF0YVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuTXNnLkVycm9yKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuRXJyb3IoJ9in2YXaqdin2YYg2YjYsdmI2K8g2KjYpyDaqdin2LHYqNixINm+2YjYsdiq2KfZhCDZiNis2YjYryDZhtiv2KfYsdivLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNTZXJ2aWNlRGVzaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBjb25maWdbMF0ucmVkaXJlY3RUbyA9ICdzZXJ2aWNlZGVzayc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRBZnRlckxvZ2luRm9ybURhdGEoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKEJhcnNhQXBpLkxvZ2luRm9ybURhdGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gZ2V0IHNlcnZlciBzdGFydHVwIGRhdGEuJyk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvciBpbiBnZXQgc2VydmVyIHN0YXJ0dXAgZGF0YS4nKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgU2hvd0Zvcm1QYW5lbENvbnRyb2woXG4gICAgICAgIGZvcm1wYW5lbEN0cmxyOiBhbnksXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIGRpYWxvZ0NvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgICAgICBpc1BhZ2U6IGJvb2xlYW4sXG4gICAgICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgaXNSZWxvYWQ6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIWZvcm1wYW5lbEN0cmxyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2Zvcm0gcGFuZWwgY29udHJvbGVyIGlzIHVuZGVmaW5lZCEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtbyA9IGZvcm1wYW5lbEN0cmxyLk1vO1xuICAgICAgICBjb25zdCBoZWFkZXJMYXlvdXQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5IZWFkZXJMYXlvdXQnLCBudWxsKTtcbiAgICAgICAgbGV0IGlzTW9kYWwgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5FeHRyYUpzb25Qcm9wLk1vZGFsJywgZmFsc2UpO1xuICAgICAgICBpc01vZGFsID1cbiAgICAgICAgICAgIGlzTW9kYWwgfHxcbiAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkN1c3RvbVVpLlBhcmFtZXRlcnMuSXNNb2RhbCcsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgbW9kYWxTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICBmb3JtcGFuZWxDdHJscixcbiAgICAgICAgICAgICdTZXR0aW5nLlZpZXcuQ3VzdG9tVWkuUGFyYW1ldGVycy5Nb2RhbFNldHRpbmcnLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBpZiAobW9kYWxTZXR0aW5nKSB7XG4gICAgICAgICAgICBpc01vZGFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtcGFuZWxDdHJsci5TZXR0aW5nLklzTW9kYWwgPSBpc01vZGFsO1xuICAgICAgICBmb3JtcGFuZWxDdHJsci5Jc01vZGFsID0gaXNNb2RhbDtcbiAgICAgICAgY29uc3QgYnJlYWRDcnVtYiA9IGdldEhlYWRlclZhbHVlKGhlYWRlckxheW91dD8uQnJlYWRDcnVtYik7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgaWQ6IG1vLiRTdGF0ZSA9PT0gJ05ldycgPyAnMCcgOiBtby5JZCxcbiAgICAgICAgICAgIHR5aWQ6IG1vLiRUeXBlRGVmSWQsXG4gICAgICAgICAgICB0eWNwOiBtby4kQ2FwdGlvbiA/IG1vLiRDYXB0aW9uIDogbnVsbCxcbiAgICAgICAgICAgIHJlcGlkOiBtby4kUmVwb3J0SWQsXG4gICAgICAgICAgICB2aWQ6IGZvcm1wYW5lbEN0cmxyPy5TZXR0aW5nPy5WaWV3Py5UeXBlVmlld0lkLFxuICAgICAgICAgICAgYmM6IGJyZWFkQ3J1bWIgPyBicmVhZENydW1iIDogbW8uJFN0YXRlID09PSAnTmV3JyA/IG1vLiRUeXBlRGVmTmFtZSA6IG1vLiRDYXB0aW9uXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0VW5pcXVlSWQoNCk7XG4gICAgICAgIHRoaXMuYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyKTtcbiAgICAgICAgdGhpcy5vcGVuRm9ybSQubmV4dCgpOyAvLyBldmVudCBlbWl0IGZvciBvdGhlciBjb21wb25lbnRzIHRvIGtub3cgZm9ybSBvcGVuXG4gICAgICAgIGlmIChpc01vZGFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Zvcm0oXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2Y3JcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHsgZm9ybVBhbmVsQ3RybHJJZDogaWQgfTtcbiAgICAgICAgICAgIGlmIChpc1BhZ2UpIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46IFsnc2hvdycsIHsgLi4ucXVlcnlQYXJhbXMsIGZvcm1QYW5lbEN0cmxySWQ6IGlkLCBpc0ZpcnN0OiB0cnVlIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IGFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBpc1JlbG9hZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogWydzaG93JywgeyAuLi5xdWVyeVBhcmFtcywgZm9ybVBhbmVsQ3RybHJJZDogaWQgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IGFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBpc1JlbG9hZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgbG9hZFN5c3RlbShpZDogbnVtYmVyID0gMCk6IFByb21pc2U8UG9ydGFsRGF0YU1vZGVsPiB7XG4gICAgICAgIGlmIChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhPy5lcnJvcj8udXNlck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhPy5lcnJvcj8udXNlck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5EZWZhdWx0U3lzdGVtSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLl9sb2FkU3lzdGVtKFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZVB1c2hBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHB1c2hBY3Rpb25TdHIgPSB0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVzaEFjdGlvbicpO1xuICAgICAgICBpZiAocHVzaEFjdGlvblN0cikge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZSgncHVzaEFjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgcHVzaEFjdGlvbiA9IEpTT04ucGFyc2UocHVzaEFjdGlvblN0cik7XG4gICAgICAgICAgICB0aGlzLl9wdXNoQWN0aW9uJC5uZXh0KHB1c2hBY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrTG9jYWxTdG9yYWdlUHVzaEFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHVzaEFjdGlvblN0ciA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdXNoQWN0aW9uJyk7XG4gICAgICAgIGlmIChwdXNoQWN0aW9uU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlKCdwdXNoQWN0aW9uJyk7XG4gICAgICAgICAgICBjb25zdCBwdXNoQWN0aW9uID0gSlNPTi5wYXJzZShwdXNoQWN0aW9uU3RyKTtcbiAgICAgICAgICAgIHRoaXMuX3B1c2hBY3Rpb24kLm5leHQocHVzaEFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdEFmdGVyTG9naW5Gb3JtRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ydGxTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzUnRsKTtcbiAgICAgICAgdGhpcy5faXNBbm9udW1vdXNTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzKTtcbiAgICAgICAgdGhpcy5zZXRVc2VyTG9naW5TdGF0dXMoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1VzZXJMb2dnZWRJbik7XG4gICAgICAgIHRoaXMuX2xvZ2dlZEluU291cmNlLm5leHQodGhpcy5fbG9nZ2VkSW5Tb3VyY2UuZ2V0VmFsdWUoKSAmJiBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzID09PSBmYWxzZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luaXRWaXNpYmlsaXR5Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdFN0YW5kYWxvbmUoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoID0gZS5tYXRjaGVzO1xuXG4gICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdFB1c2hBY3Rpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGVja0xvY2FsU3RvcmFnZVB1c2hBY3Rpb24oKTtcbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy51c2VyTG9nZ2VkSW4kLCB0aGlzLnB1c2hBY3Rpb24kXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIHdpdGhMYXRlc3RGcm9tKHRoaXMuX3BvcnRhbFNlcnZpY2UucHVzaEFjdGlvbiQpLFxuICAgICAgICAgICAgICAgIC8vIGZpbHRlcigoW3VzZXJMb2dnZWRpbiwgYWN0aW9uXSkgPT4gdXNlckxvZ2dlZGluKVxuICAgICAgICAgICAgICAgIGZpbHRlcigoW3VzZXJMb2dnZWRpbiwgcHVzaEFjdGlvbl0pID0+IHVzZXJMb2dnZWRpbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt1c2VyTG9nZ2VkaW4sIHB1c2hBY3Rpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHB1c2hBY3Rpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXB1c2hBY3Rpb24ubm90aWZpY2F0aW9uVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVzaEFjdGlvbi5tb2lkICYmIHB1c2hBY3Rpb24udHBpZCAmJiBwdXNoQWN0aW9uLmFjdGlvbiA9PSAnc2hvdycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IEJhcnNhQXBpLkJ3LkZvcm0uU2hvdyh7IE1vSWQ6IHB1c2hBY3Rpb24ubW9pZCB9KSwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuRXhlY3V0ZU5vdGlmaWNhdGlvbkFjdGlvbihwdXNoQWN0aW9uLm5vdGlmaWNhdGlvblRhZywgcHVzaEFjdGlvbi5hY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luaXRMYW5kc2NhcGUoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcob3JpZW50YXRpb246IHBvcnRyYWl0KScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoID0gZS5tYXRjaGVzO1xuXG4gICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQubmV4dChmYWxzZSk7IC8vIHBvcnRyYWl0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQubmV4dCh0cnVlKTsgLy8gbGFuZHNjYXBlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIGZpbmRQYWdlQnlSb3V0ZSh1cmw6IHN0cmluZyk6IFBhZ2VEYXRhTW9kZWwgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmluZGVkUGFnZSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gdXJsKTtcbiAgICAgICAgcmV0dXJuIGZpbmRlZFBhZ2UgfHwgbnVsbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXROZ01vZHVsZUZhY3RvcnkobW9kdWxlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbW9kdWxlTmFtZTogc3RyaW5nKTogTmdNb2R1bGVGYWN0b3J5PGFueT4ge1xuICAgICAgICBjb25zdCBtb2R1bGVDbGFzcyA9IG1vZHVsZXNbbW9kdWxlTmFtZSArICdNb2R1bGUnXTtcbiAgICAgICAgbGV0IG1vZHVsZUZhY3Rvcnk6IE5nTW9kdWxlRmFjdG9yeTxhbnk+O1xuICAgICAgICBpZiAobW9kdWxlQ2xhc3MgaW5zdGFuY2VvZiBOZ01vZHVsZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIG1vZHVsZUZhY3RvcnkgPSBtb2R1bGVDbGFzcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMobW9kdWxlQ2xhc3MpO1xuICAgICAgICAgICAgbW9kdWxlRmFjdG9yeSA9IGNvbXBpbGVkLm5nTW9kdWxlRmFjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlRmFjdG9yeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZDogc3RyaW5nLCBleHBvcnRBczogc3RyaW5nW10sIG1vZHVsZU5hbWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBsZXQgbW9kdWxlcztcbiAgICAgICAgaWYgKHVtZCAhPT0gJycpIHtcbiAgICAgICAgICAgIG1vZHVsZXMgPSB3aW5kb3c7XG4gICAgICAgICAgICB1bWQuc3BsaXQoJy4nKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVzICE9PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgPSBtb2R1bGVzW2NdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlcyA9IHdpbmRvd1ttb2R1bGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwb3J0QXMubGVuZ3RoID4gMCAmJiBtb2R1bGVzKSB7XG4gICAgICAgICAgICBleHBvcnRBcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZU9uT2JqZWN0KGMsIDAsIG1vZHVsZXMsIHdpbmRvdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlcztcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIExpYnJhcnlEZXBlbmVjeSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGtlYmFiTmFtZTogc3RyaW5nO1xuICAgIHVtZDogc3RyaW5nO1xuICAgIGV4cG9ydEFzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRDcnVtYkluZm8ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlO1xufVxuIl19
|
|
929
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxNQUFNLEVBQ04sVUFBVSxFQUVWLGVBQWUsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBYyxlQUFlLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUcsT0FBTyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQWN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVcxQyxNQUFNLE9BQU8sYUFBYTtJQTJDdEIsWUFDWSxHQUE0QixFQUM1QixVQUFzQixFQUN0QixVQUFzQixFQUN0QixhQUFpQyxFQUNqQyxRQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBbUIsRUFDbkIsYUFBa0MsRUFDaEIsU0FBbUI7UUFSckMsUUFBRyxHQUFILEdBQUcsQ0FBeUI7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBbkQxQyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFbkQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFHdkIsbUJBQWMsR0FBaUQsRUFBRSxDQUFDO1FBQ2xFLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQTRDLEVBQUUsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFPckUsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDeEQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FDOUIsSUFBSSxDQUNQLENBQUM7UUFDTSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUM1RixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RELDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzdELG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDakQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQXlCLElBQUksQ0FBQyxDQUFDO1FBQ3RFLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQXVCLElBQUksQ0FBQyxDQUFDO1FBQ2xFLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFzQyxFQUFFLENBQUMsQ0FBQztRQUNwRixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUNsRSwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFDMUUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQXlCLElBQUksQ0FBQyxDQUFDO1FBQ3hFLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hHLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsTUFBTSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JHLCtCQUEwQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFheEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLHlCQUF5QjtRQUN6QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFDRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLG1CQUFtQjtRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNELElBQUksZ0JBQWdCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTSxNQUFNLENBQUMsRUFBVSxFQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELGNBQWMsQ0FBQyxVQUFtRDtRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBWTtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsWUFBWTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQXNCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELHFCQUFxQixDQUFDLGtCQUF1QztRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7WUFDNUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUNELGNBQWMsQ0FBQyxRQUF5QixFQUFFLGNBQWdDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxlQUFvQixJQUFJO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxZQUFZLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFDRCxXQUFXLENBQUksR0FBRyxFQUFFLGVBQW9CLElBQUk7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLFlBQVksQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDRCxlQUFlLENBQUMsT0FBTztRQUNuQixPQUFPLElBQUksQ0FDUCxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1QixRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDbEUsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBQ0QsZUFBZSxDQUNYLE9BQU8sRUFDUCxHQUFxQixFQUNyQixRQUFrQixFQUNsQixlQUF3QixLQUFLO1FBRTdCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JDLFVBQVUsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUNqRixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNwRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQzFCLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUNELHFCQUFxQixDQUFDLGVBQWUsRUFBRSxRQUFrQixFQUFFLFlBQVk7UUFDbkUsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsR0FBRyxtQkFBbUIsQ0FDM0UsZUFBZSxFQUNmLGVBQWUsQ0FDbEIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNwRixHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNkLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM3QyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1lBQzVDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDOUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztZQUM5QyxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELFVBQVU7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZTthQUNwQyxZQUFZLEVBQUU7YUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7YUFDdkMsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFFLEVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELGNBQWM7UUFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxvQkFBb0I7UUFDaEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RDLElBQUksV0FBVyxHQUEwQixHQUFHLENBQUM7UUFDN0MsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNCLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDdEIsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUM3RCxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUQsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNKLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksU0FBUyxJQUFJLFdBQVcsS0FBSyxHQUFHLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEYsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksV0FBVyxLQUFLLEdBQUcsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0QsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUNELGFBQWEsQ0FBQyxVQUEyQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDZixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELFNBQVMsQ0FBQyxVQUEyQjtRQUNqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLG1CQUFtQixTQUFTLFVBQVUsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxTQUFTLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sU0FBUyxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxDQUNSLFVBQWtCLEVBQ2xCLFVBQWtCLEVBQ2xCLGFBQXFCLEVBQ3JCLFFBQWdCLEVBQ2hCLGNBQXdCO1FBRXhCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxPQUFPLENBQUMsSUFBSTtRQUNSLE9BQU8sSUFBSSxDQUNQLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQztZQUNGLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBZ0I7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELGFBQWEsQ0FBQyxVQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsVUFBa0I7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ08sZUFBZSxDQUFDLFVBQWtCLEVBQUUsUUFBaUI7UUFDekQsT0FBTztZQUNILEtBQUssRUFBRTtnQkFDSCxJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsT0FBTztnQkFDZixJQUFJLEVBQUUsT0FBTztnQkFDYix5RUFBeUU7YUFDNUU7WUFDRCxVQUFVLEVBQUUsVUFBVTtZQUN0QixRQUFRLEVBQUUsUUFBUTtZQUNsQixTQUFTLEVBQUUsaUJBQWlCO1NBQy9CLENBQUM7SUFDTixDQUFDO0lBRU8scUJBQXFCLENBQUMsU0FBdUI7UUFDakQsT0FBTyxJQUFJLE9BQU8sQ0FBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQ3JCLEVBQUUsU0FBUyxFQUFFLEVBQ2IsQ0FBQyxNQUFtQixFQUFFLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBRSxFQUFFLGNBQW1CO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxNQUFlO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxlQUFlLENBQUMsVUFBa0M7UUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNYLENBQUM7UUFDRCxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELG1CQUFtQixDQUFDLFVBQWtDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbkMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUNyRyxDQUFDO1lBQ0YsSUFBSSxRQUFRLENBQUMsY0FBYyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEcsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDL0IsOENBQThDO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsMkJBQTJCO0lBQy9CLENBQUM7SUFDRCxRQUFRO1FBQ0osVUFBVSxDQUFDLFdBQVcsQ0FDbEIsb0JBQW9CLEVBQ3BCLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUFFO1lBQ0QseUJBQXlCO1FBQzdCLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDRCxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNqQyxDQUFDLEVBQ0QsSUFBSSxDQUNQLENBQUM7SUFDTixDQUFDO0lBQ0QsU0FBUztRQUNMLFVBQVUsQ0FBQyxXQUFXLENBQ2xCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFBRTtZQUNELHlCQUF5QjtRQUM3QixDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0QsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUNELElBQUksQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUNELGFBQWEsQ0FBQyxRQUF1QjtRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDOUMsT0FBTztRQUNYLENBQUM7UUFDRCxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELG9CQUFvQjtJQUNwQixXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjO1FBQzdFLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELFlBQVksQ0FDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFDYixVQUFVLEVBQ1YsYUFBNEIsSUFBSSxFQUNoQyxpQkFBMEIsS0FBSztRQUUvQixJQUFJLFVBQVUsR0FBVyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkUsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDO1FBQ3ZCLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQy9CLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEIsWUFBWSxDQUFDLE9BQU8sR0FBRztnQkFDbkIsUUFBUSxFQUFFLGtCQUFrQjthQUMvQixDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2QsWUFBWSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsWUFBWSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUU7Z0JBQzdCLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtnQkFDMUcsTUFBTSxXQUFXLEdBQUc7b0JBQ2hCLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUUsVUFBVTtvQkFDckIsR0FBRztvQkFDSCxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7aUJBQ3pCLENBQUM7Z0JBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsVUFBMkIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUM3RSxDQUFDO2dCQUNGLE9BQU8sUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQzVDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FDckMsQ0FBQztZQUNOLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBQ0QsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ00sZ0JBQWdCO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUN4QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBQ00sV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFlO1FBQzNDLElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDckMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUMzRixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUMvQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxFQUNGLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDaEIsUUFBUSxFQUFFLENBQ2IsQ0FBQztRQUNOLG9EQUFvRDtRQUNwRCxnREFBZ0Q7UUFDaEQsMkJBQTJCO1FBQzNCLDhCQUE4QjtRQUM5QixhQUFhO1FBQ2IsUUFBUTtRQUVSLHNCQUFzQjtRQUN0QixLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDTSxXQUFXLENBQUMsYUFBYTtRQUM1QixpSEFBaUg7UUFDakgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVTthQUNwQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUM7YUFDakYsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsRUFDRixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLFFBQVEsRUFBRSxDQUNiLENBQUM7UUFDTixvREFBb0Q7UUFDcEQsZ0RBQWdEO1FBQ2hELDJCQUEyQjtRQUMzQiw4QkFBOEI7UUFDOUIsYUFBYTtRQUNiLFFBQVE7UUFFUixzQkFBc0I7UUFDdEIsS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQTJCLEVBQUUsYUFBK0I7UUFDdEUsT0FBTztJQUNYLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxNQUEyQixFQUFFLGFBQStCO1FBQzFFLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFZLEVBQUUsQ0FBQztRQUM3QixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUMvQixLQUFLLEVBQ0wsSUFBSSxFQUNKLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUMxQixJQUFJLEVBQ0osSUFBSSxDQUNQLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUNILFlBQVk7WUFFWCxXQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUVqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUMzRyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNsQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNOLENBQUM7SUFDTSx1QkFBdUI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQ2hELFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUMvQixRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDekMsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ08sZUFBZSxDQUFDLENBQXdCO1FBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNKLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksRUFBRSxHQUFRLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPO1lBQ1gsQ0FBQztZQUNELEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDTSxrQkFBa0I7UUFDckIsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0YsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBa0IsYUFBYSxDQUFDO1FBQ2hELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDL0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQVksRUFBRSxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNELFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELGlFQUFpRTtnQkFDakUsa0ZBQWtGO2dCQUVsRixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBNkIsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBNkIsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNNLFFBQVEsQ0FBQyxDQUEyRTtRQUN2RixRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSTthQUNuQjtZQUNELGFBQWEsRUFBRTtnQkFDWCxVQUFVLEVBQUUsVUFBVSxNQUFNLEVBQUUsRUFBRTtvQkFDNUIsbUJBQW1CO29CQUNuQixDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLENBQUM7YUFDSjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDeEIsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBRyxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDOUYsT0FBTyxTQUFTLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNNLHlCQUF5QixDQUFDLEVBQVUsRUFBRSxXQUFtQjtRQUM1RCxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7WUFDN0IsTUFBTSxFQUFFLDJCQUEyQjtZQUNuQyxTQUFTLEVBQUUsQ0FBQyxDQUlYLEVBQUUsRUFBRTtnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIscUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO3FCQUFNLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMzQixNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUM7b0JBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNWLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNNLHFCQUFxQjtRQUN4QixJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzdDLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUc7WUFDZCxLQUFLLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsSUFBSSxFQUFFLE9BQU87Z0JBQ2IseUVBQXlFO2FBQzVFO1lBQ0QsVUFBVSxFQUFFLHNCQUFzQjtZQUNsQyxTQUFTLEVBQUUsaUJBQWlCO1NBQy9CLENBQUM7UUFDRixRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FDckIsRUFBRSxTQUFTLEVBQUUsRUFDYixDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN0QyxNQUFNLGlCQUFpQixHQUF3QyxFQUFFLENBQUM7WUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNsQixJQUFJLEVBQUUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDaEQsaUJBQWlCLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUNwRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQ0osQ0FBQztRQUNGLGlDQUFpQztRQUNqQyxzQkFBc0I7UUFDdEIsdUNBQXVDO1FBQ3ZDLCtEQUErRDtRQUMvRCxTQUFTO1FBQ1QsdUJBQXVCO1FBQ3ZCLG9DQUFvQztRQUNwQyxRQUFRO1FBQ1IsTUFBTTtJQUNWLENBQUM7SUFDRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLE9BQU8sQ0FBc0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVCLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO29CQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUM7WUFDTixDQUFDOztnQkFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELHNCQUFzQixDQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLE9BQU8sV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDakYsVUFBVSxDQUFDLFdBQVcsQ0FDbEIsNkJBQTZCLEVBQzdCLEVBQUUsRUFDRixLQUFLLEVBQ0wsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNULElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDckMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRSxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO3FCQUFNLENBQUM7b0JBQ0osUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7Z0JBRXJDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDRCxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNoRCxDQUFDLEVBQ0QsSUFBSSxDQUNQLENBQUM7SUFDTixDQUFDO0lBRUQsb0JBQW9CLENBQ2hCLGNBQW1CLEVBQ25CLE1BQWMsRUFDZCxjQUE4QixFQUM5QixlQUEwQixFQUMxQixNQUFlLEVBQ2YsR0FBcUIsRUFDckIsV0FBb0IsS0FBSztRQUV6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ25ELE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pHLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUcsT0FBTztZQUNILE9BQU87Z0JBQ1AsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQ2pELGNBQWMsRUFDZCwrQ0FBK0MsRUFDL0MsSUFBSSxDQUNQLENBQUM7UUFDRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUc7WUFDaEIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVTtZQUNuQixJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUN0QyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVM7WUFDbkIsR0FBRyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVU7WUFDOUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVE7U0FDcEYsQ0FBQztRQUNGLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxvREFBb0Q7UUFDM0UsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUN2QixlQUFlLEVBQ2Y7Z0JBQ0ksR0FBRyxXQUFXO2dCQUNkLGNBQWM7YUFDakIsRUFDRCxHQUFHLENBQ04sQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxLQUFLLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxRQUFRLENBQ1g7b0JBQ0ksTUFBTTtvQkFDTjt3QkFDSSxPQUFPLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzt5QkFDMUU7cUJBQ0o7aUJBQ0osRUFDRDtvQkFDSSxLQUFLO29CQUNMLFVBQVUsRUFBRSxjQUFjO29CQUMxQixrQkFBa0IsRUFBRSxRQUFRO2lCQUMvQixDQUNKLENBQUM7WUFDTixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxDQUFDLFFBQVEsQ0FDWDtvQkFDSSxPQUFPO29CQUNQO3dCQUNJLE9BQU8sRUFBRTs0QkFDTCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQzt5QkFDM0Q7cUJBQ0o7aUJBQ0osRUFDRDtvQkFDSSxVQUFVLEVBQUUsY0FBYztvQkFDMUIsS0FBSztvQkFDTCxtQkFBbUIsRUFBRSxVQUFVO29CQUMvQixrQkFBa0IsRUFBRSxRQUFRO2lCQUMvQixDQUNKLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTSxVQUFVLENBQUMsS0FBYSxDQUFDO1FBQzVCLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDN0MsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNYLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDcEMsRUFBRSxFQUNGLElBQUksRUFDSixDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDSixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDTyxpQkFBaUI7UUFDckIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBQ08sNEJBQTRCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUNPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFDTyxxQkFBcUI7UUFDekIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtZQUMvQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLGVBQWU7UUFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFFMUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNoRCxJQUFJO1FBQ0QsbURBQW1EO1FBQ25ELG1EQUFtRDtRQUNuRCxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQ3ZEO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDcEUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDNUUsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNPLGNBQWM7UUFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFFMUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNuRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDbkQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLGVBQWUsQ0FBQyxHQUFXO1FBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE9BQU8sVUFBVSxJQUFJLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ08sa0JBQWtCLENBQUMsT0FBK0IsRUFBRSxVQUFrQjtRQUMxRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksYUFBbUMsQ0FBQztRQUN4QyxJQUFJLFdBQVcsWUFBWSxlQUFlLEVBQUUsQ0FBQztZQUN6QyxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5RSxhQUFhLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxRQUFrQixFQUFFLFVBQWtCO1FBQzVFLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksT0FBTyxPQUFPLEtBQUssT0FBTyxTQUFTLEVBQUUsQ0FBQztvQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7OEdBdmlDUSxhQUFhLHdQQW9EVixRQUFRO2tIQXBEWCxhQUFhLGNBRlYsTUFBTTs7MkZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXFEUSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBpbGVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBOZ01vZHVsZUZhY3RvcnksXG4gICAgVHlwZSxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZnJvbSwgZm9ya0pvaW4sIGZyb21FdmVudCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICB0YXAsXG4gICAgbWFwLFxuICAgIGNvbmNhdE1hcCxcbiAgICBmaW5hbGl6ZSxcbiAgICBwdWJsaXNoUmVwbGF5LFxuICAgIHJlZkNvdW50LFxuICAgIGV4aGF1c3RNYXAsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgc3RhcnRXaXRoLFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBmaWx0ZXJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcbiAgICBMb2dpblJlc3VsdCxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIE1vRm9yUmVwb3J0TW9kZWwsXG4gICAgUGFnZURhdGFNb2RlbCxcbiAgICBQb3J0YWxEYXRhTW9kZWwsXG4gICAgUmVwb3J0TW9kZWwsXG4gICAgVWx2UGFyYW1UeXBlXG59IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL2xvZy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHsgQmFyc2FEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9iYXJzYS1kaWFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7XG4gICAgRXhlY3V0ZUR5bmFtaWNDb21tYW5kLFxuICAgIGdldENvbXBvbmVudERlZmluZWQsXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXG4gICAgZ2V0RGV2aWNlSXNUYWJsZXQsXG4gICAgZ2V0SGVhZGVyVmFsdWUsXG4gICAgZ2V0VW5pcXVlSWRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBvcnRhbFBhZ2VSZXNvbHZlciB9IGZyb20gJy4uL3Jlc29sdmVycy9wb3J0YWwtcGFnZS5yZXNvbHZlcic7XG5pbXBvcnQgeyBBdXRoR3VhcmQgfSBmcm9tICcuLi9hdXRoLWd1YXJkJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcblxuZGVjbGFyZSBsZXQgQWpheEhlbHBlcjogYW55O1xuZGVjbGFyZSBsZXQgQWpheEhlbHBlcjI6IGFueTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQb3J0YWxTZXJ2aWNlIHtcbiAgICBwdWJsaWMgb2Zmc2V0VG9wID0gMDtcblxuICAgIGxvZ2luTG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgbG9hZGVkID0gZmFsc2U7XG4gICAgZm9ybVBhbmVsczogYW55ID0ge307XG4gICAgY2FjaGVkSW1hZ2VzOiBhbnkgPSB7fTtcbiAgICBkYXRlVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBkZWZhdWx0Um91dGU6IHN0cmluZztcbiAgICBjYWNoZWRQYWdlRGF0YTogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWw+IH0gPSB7fTtcbiAgICBwYWdlczogUGFnZURhdGFNb2RlbFtdID0gW107XG4gICAgcnRsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB1c2VyTG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGRpY3Rpb25hcnk6IHsgW2tleTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PGFueT4gfSA9IHt9O1xuICAgIHBvcnRhbERhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBvcnRhbERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xuICAgIHBvcnRhbFNldHRpbmdzJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcbiAgICBwb3J0YWxEYXRhJDogT2JzZXJ2YWJsZTxQb3J0YWxEYXRhTW9kZWwgfCBudWxsPjtcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTxBYmJyZXZhdGlvbkRldmljZVNpemU+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZGlyVmFsdWUkOiBPYnNlcnZhYmxlPCdydGwnIHwgJ2x0cic+O1xuICAgIHJvdXRlSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIG9wZW5Gb3JtJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgX2lzQW5vbnVtb3VzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBfcHVzaEFjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbm90aWZpY2F0aW9uVGFnOiBzdHJpbmc7IGFjdGlvbjogc3RyaW5nOyBtb2lkOiBzdHJpbmc7IHRwaWQ6IHN0cmluZyB9IHwgbnVsbD4oXG4gICAgICAgIG51bGxcbiAgICApO1xuICAgIHByaXZhdGUgX2RldmljZVNpemVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFiYnJldmF0aW9uRGV2aWNlU2l6ZT4odGhpcy5faW5pdGFsaXplRGV2aWNlU2l6ZSgpKTtcbiAgICBwcml2YXRlIF9sb2dnZWRJblNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcm91dGVJbml0aWFsaXplZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgZGF0ZVRleHRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25TdGFydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hdmlnYXRpb25TdGFydCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25FbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uRW5kIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfdXNlclBvcnRhbFNldHRpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4+KHt9KTtcbiAgICBwcml2YXRlIF9jc3NVcmxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVSZXNvdXJjZVVybCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX2Nzc1ZhcmlhYmxlVXJsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF9jc3NDdXN0b21VcmxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVSZXNvdXJjZVVybCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX3NlYXJjaFRlcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgICBwcml2YXRlIF93aW5kb3dSZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9kZXZpY2VMYW5kc2NhcGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPighd2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykubWF0Y2hlcyk7XG4gICAgcHJpdmF0ZSBfc3RhbmRhbG9uZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHdpbmRvdy5tYXRjaE1lZGlhKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLm1hdGNoZXMpO1xuICAgIHByaXZhdGUgX2RvY3VtZW50VmlzaWJpbGl0eWNoYW5nZSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIERlZmF1bHRQYWdlOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkY206IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBCYXJzYURpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tcGlsZXI6IENvbXBpbGVyLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgICAgICBwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5faW5pdExhbmRzY2FwZSgpO1xuICAgICAgICB0aGlzLl9pbml0U3RhbmRhbG9uZSgpO1xuICAgICAgICB0aGlzLl9pbml0VmlzaWJpbGl0eUNoYW5nZSgpO1xuICAgICAgICB0aGlzLl9pbml0UHVzaEFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICBnZXQgdXNlckxvZ2dlZEluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9nZ2VkSW5Tb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHB1c2hBY3Rpb24kKCk6IE9ic2VydmFibGU8eyBub3RpZmljYXRpb25UYWc6IHN0cmluZzsgbW9pZDogc3RyaW5nOyB0cGlkOiBzdHJpbmc7IGFjdGlvbjogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoQWN0aW9uJC5hc09ic2VydmFibGUoKS5waXBlKCk7XG4gICAgfVxuICAgIGdldCBkb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGlzU3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YW5kYWxvbmUkLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBzdGFuZGFsb25lJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YW5kYWxvbmUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgbGFuZHNjYXBlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZUxhbmRzY2FwZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCB3aW5kb3dSZXNpemUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93UmVzaXplJC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgzMDApKTtcbiAgICB9XG4gICAgZ2V0IHBvcnRhbERhdGEoKTogUG9ydGFsRGF0YU1vZGVsIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcnRhbERhdGFTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaFRlcm0kKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXJtJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGNzc1VybCQoKTogT2JzZXJ2YWJsZTxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jc3NVcmxTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG4gICAgZ2V0IGNzc1ZhcmlhYmxlVXJsJCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc1ZhcmlhYmxlVXJsU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIGdldCBjc3NDdXN0b21VcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3NzQ3VzdG9tVXJsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgdXNlclBvcnRhbFNldHRpbmdzKCk6IFJlY29yZDxzdHJpbmcsIE1ldGFvYmplY3REYXRhTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJQb3J0YWxTZXR0aW5ncyQoKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGRldmljZVNpemUoKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZVNpemVTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGlzQW5vbnltb3VzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQW5vbnVtb3VzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgbmF2aWdhdGlvbkVuZCQoKTogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbkVuZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBuYXZpZ2F0aW9uU3RhcnQkKCk6IE9ic2VydmFibGU8TmF2aWdhdGlvblN0YXJ0IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXJ0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE1vKGlkOiBzdHJpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5sb2FkUG9ydGFsUGFnZURhdGEoaWQsIHR5cGVkZWZJZCk7XG4gICAgfVxuICAgIHB1c2hBY3Rpb25OZXh0KHB1c2hBY3Rpb246IHsgbm90aWZpY2F0aW9uVGFnOyBtb2lkOyB0cGlkOyBhY3Rpb24gfSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHVzaEFjdGlvbicsIEpTT04uc3RyaW5naWZ5KHB1c2hBY3Rpb24pKTtcbiAgICAgICAgdGhpcy5fcHVzaEFjdGlvbiQubmV4dChwdXNoQWN0aW9uKTtcbiAgICB9XG4gICAgc2V0U2VhcmNoVGVybSh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybSQubmV4dCh0ZXJtKTtcbiAgICB9XG4gICAgd2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcbiAgICB9XG4gICAgbmF2aWF0aW9uRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25FbmQkLm5leHQoZXZlbnQpO1xuICAgIH1cbiAgICBuYXZpYXRpb25TdGFydChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25TdGFydCQubmV4dChldmVudCk7XG4gICAgfVxuICAgIHNldFVzZXJQb3J0YWxTZXR0aW5ncyh1c2VyUG9ydGFsU2V0dGluZ3M6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICh1c2VyUG9ydGFsU2V0dGluZ3MuJFR5cGVEZWZOYW1lKSB7XG4gICAgICAgICAgICB2YWx1ZVt1c2VyUG9ydGFsU2V0dGluZ3MuJFR5cGVEZWZOYW1lXSA9IHVzZXJQb3J0YWxTZXR0aW5ncztcbiAgICAgICAgICAgIHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQubmV4dCh7IC4uLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENzc1VybFRoZW1lKHRoZW1lVXJsOiBTYWZlUmVzb3VyY2VVcmwsIGNzc1ZhcmlhYmxlVXJsPzogU2FmZVJlc291cmNlVXJsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nzc1VybFNvdXJjZS5uZXh0KHRoZW1lVXJsKTtcbiAgICAgICAgdGhpcy5fY3NzQ3VzdG9tVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xuICAgICAgICBpZiAoY3NzVmFyaWFibGVVcmwpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nzc1ZhcmlhYmxlVXJsU291cmNlLm5leHQoY3NzVmFyaWFibGVVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGF0YShrZXksIGRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XS5uZXh0KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy5kaWN0aW9uYXJ5W2tleV0uZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XS5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldERhdGEoa2V5LCBkZWZhdWx0VmFsdWU6IGFueSA9IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnlba2V5XS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0RGF0YVN5bmM8VD4oa2V5LCBkZWZhdWx0VmFsdWU6IGFueSA9IG51bGwpOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5W2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyeVtrZXldLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGNyZWF0ZUZvclJlcG9ydChuYXZJdGVtKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuVWwuVWx2TWFpbkN0cmxyLkNyZWF0ZUZvclJlcG9ydCh7fSwgbmF2SXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICByZW5kZXJVbHZNYWluVWkoXG4gICAgICAgIG5hdkl0ZW0sXG4gICAgICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBpc1JlcG9ydFBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvclJlcG9ydChuYXZJdGVtKS5waXBlKFxuICAgICAgICAgICAgZXhoYXVzdE1hcCgodWx2TWFpbkN0cmxyKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VWx2TWFpblVpQ29tcG9uZW50KHVsdk1haW5DdHJsci5BZGFwdGVyLkNvbnRyb2wsIGluamVjdG9yLCBpc1JlcG9ydFBhZ2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgodWx2TWFuaVVpQ29tcG9uZW50KSA9PiB2Y3IuaW5zZXJ0KHVsdk1hbmlVaUNvbXBvbmVudC5ob3N0VmlldykpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdWx2TWFpbkN0cmxyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0VWx2TWFpblVpQ29tcG9uZW50KGN1c3RvbVVsdk1haW5VaSwgaW5qZWN0b3I6IEluamVjdG9yLCBpc1JlcG9ydFBhZ2UpOiBPYnNlcnZhYmxlPENvbXBvbmVudFJlZjxhbnk+PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVVpU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGN1c3RvbVVsdk1haW5VaS5TZXR0aW5nLCAnQ3VzdG9tVWknLCBudWxsKTtcbiAgICAgICAgY29uc3QgeyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9ID0gZ2V0Q29tcG9uZW50RGVmaW5lZChcbiAgICAgICAgICAgIGN1c3RvbVVsdk1haW5VaSxcbiAgICAgICAgICAgIGN1c3RvbVVpU2V0dGluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnQobW9kdWxlTmFtZSwgbW9kdWxlUGF0aCwgY29tcG9uZW50TmFtZSwgc2VsZWN0b3IsIGluamVjdG9yKS5waXBlKFxuICAgICAgICAgICAgbWFwKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5pZCA9IGN1c3RvbVVsdk1haW5VaS5pZDtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jb250ZXh0ID0gY3VzdG9tVWx2TWFpblVpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmlzUmVwb3J0UGFnZSA9IGlzUmVwb3J0UGFnZTtcbiAgICAgICAgICAgICAgICBjdXN0b21VbHZNYWluVWkuY29udHJvbFVpID0gY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV2aWNlU2l6ZSQgPSB0aGlzLl9kZXZpY2VTaXplU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnBvcnRhbERhdGEkID0gdGhpcy5wb3J0YWxEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLnJ0bFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4kID0gdGhpcy5fbG9nZ2VkSW5Tb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUobWFwKChpc0xvZ2dlZEluKSA9PiBpc0xvZ2dlZEluICYmIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMgPT09IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuZGlyVmFsdWUkID0gdGhpcy5ydGwkLnBpcGUobWFwKChpc1J0bCkgPT4gKGlzUnRsID8gJ3J0bCcgOiAnbHRyJykpKTtcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkJCA9IHRoaXMucm91dGVJbml0aWFsaXplZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLl9zdGFuZGFsb25lJC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzdGFuZGFsb25lJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbm9TdGFuZGFsb25lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZXZpY2VMYW5kc2NhcGUkLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2xhbmRzY2FwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjID09PSAncycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NtYWxsZGV2aWNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGVUZXh0JCA9IHRoaXMuZGF0ZVRleHRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucG9ydGFsU2V0dGluZ3MkID0gdGhpcy5wb3J0YWxEYXRhU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcCgocG9ydGFsRGF0YSkgPT4gKHBvcnRhbERhdGEgPyBwb3J0YWxEYXRhLlBvcnRhbFNldHRpbmdzIDogKHt9IGFzIGFueSkpKSk7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCBkZWJvdW5jZVRpbWUoMTAwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2luZG93UmVzaXplJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGV2aWNlU2l6ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zZXREZXZpY2VTaXplKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZXZpY2VTaXplID0gdGhpcy5faW5pdGFsaXplRGV2aWNlU2l6ZSgpO1xuICAgICAgICB0aGlzLl9kZXZpY2VTaXplU291cmNlLm5leHQoZGV2aWNlU2l6ZSk7XG4gICAgfVxuICAgIF9pbml0YWxpemVEZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgICAgIGNvbnN0IF9pc21vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XG4gICAgICAgIGlmIChfaXNtb2JpbGUpIHtcbiAgICAgICAgICAgIEJhcnNhQXBpLkJ3LklzTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfaXNUYWJsZXQgPSBnZXREZXZpY2VJc1RhYmxldCgpO1xuICAgICAgICBsZXQgX3dpbmRvV1NpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSA9ICdzJztcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDYwMCkge1xuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAncyc7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPiA2MDAgJiYgd2luZG93LmlubmVyV2lkdGggPD0gOTkyKSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICdtJztcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMjAwKSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICdsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ3hsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lzbW9iaWxlICYmIF93aW5kb1dTaXplICE9PSAnbCcgJiYgX3dpbmRvV1NpemUgIT09ICd4bCcgJiYgX3dpbmRvV1NpemUgIT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuICdzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lzVGFibGV0ICYmIF93aW5kb1dTaXplICE9PSAnbCcgJiYgX3dpbmRvV1NpemUgIT09ICd4bCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnbSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF93aW5kb1dTaXplO1xuICAgIH1cbiAgICBjb21waWxlTW9kdWxlKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSk6IE9ic2VydmFibGU8TmdNb2R1bGVGYWN0b3J5PGFueT4+IHtcbiAgICAgICAgY29uc3QgbW9kdWxlJCA9IHRoaXMuZ2V0TW9kdWxlKGRlcGVuZGVuY3kpO1xuICAgICAgICByZXR1cm4gbW9kdWxlJC5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKChtb2R1bGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlRmFjdG9yeSA9IHRoaXMuZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXMsIGRlcGVuZGVuY3kubmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG1vZHVsZUZhY3RvcnkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0TW9kdWxlKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwga2ViYWJOYW1lLCB1bWQsIGV4cG9ydEFzIH0gPSBkZXBlbmRlbmN5O1xuICAgICAgICBjb25zdCBiYXNlID0gYC9hc3NldHMvbW9kdWxlcy8ke2tlYmFiTmFtZX0vYnVuZGxlc2A7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLmFiYztcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke2Jhc2V9LyR7a2ViYWJOYW1lfS51bWQuanM/dD0ke2RhdGV9YDtcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihtb2R1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEpzJChwYXRoKS5waXBlKG1hcCgoKSA9PiB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXgsIG1vZHVsZXMsIG9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGxpdGVkID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBwcm9wID0gc3BsaXRlZFtpbmRleF07XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvYmplY3RbcHJvcF0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IHNwbGl0ZWQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgb2JqZWN0W3Byb3BdID0gbW9kdWxlcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXggKyAxLCBtb2R1bGVzLCBvYmplY3RbcHJvcF0pO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudChcbiAgICAgICAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICAgICAgICBtb2R1bGVQYXRoOiBzdHJpbmcsXG4gICAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICAgICAgcGFyZW50SW5qZWN0b3I6IEluamVjdG9yXG4gICAgKTogT2JzZXJ2YWJsZTxDb21wb25lbnRSZWY8YW55Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kY20uZ2V0Q29tcG9uZW50QnlTZWxlY3RvcihzZWxlY3RvciwgbW9kdWxlTmFtZSwgcGFyZW50SW5qZWN0b3IpO1xuICAgIH1cbiAgICBsb2FkSnMkKHBhdGgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgcGF0aCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwYXRoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBSZXBvcnRFeGVjdXRlQnlJZChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNb0ZvclJlcG9ydE1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHVsdlBhcmFtcyA9IHRoaXMuX2dldFVsdlBhcmFtc0J5KCcnLCByZXBvcnRJZCk7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuX3JlcG9ydEV4ZWN1dGVQcm9taXNlKHVsdlBhcmFtcykpO1xuICAgIH1cbiAgICBSZXBvcnRFeGVjdXRlKHJlcG9ydE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8TW9Gb3JSZXBvcnRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLlJlcG9ydEV4ZWN1dGVQcm9taXNlKHJlcG9ydE5hbWUpKTtcbiAgICB9XG4gICAgUmVwb3J0RXhlY3V0ZVByb21pc2UocmVwb3J0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxNb0ZvclJlcG9ydE1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHVsdlBhcmFtcyA9IHRoaXMuX2dldFVsdlBhcmFtc0J5KHJlcG9ydE5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0RXhlY3V0ZVByb21pc2UodWx2UGFyYW1zKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0VWx2UGFyYW1zQnkocmVwb3J0TmFtZTogc3RyaW5nLCByZXBvcnRJZD86IHN0cmluZyk6IFVsdlBhcmFtVHlwZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBGbGFnczoge1xuICAgICAgICAgICAgICAgIERhdGE6ICdUcnVlJyxcbiAgICAgICAgICAgICAgICBFeHRyYTogJ0ZhbHNlJyxcbiAgICAgICAgICAgICAgICBTZWFyY2g6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgVmlldzogJ0ZhbHNlJ1xuICAgICAgICAgICAgICAgIC8vIEdlbmVyYWw6XCJGYWxzZVwiLCAvLyB1bHZtYWluY3RybCBkb2VzIG5vdCBjcmFldGUgdWkgY29udHJvbCByYWlzZSBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXG4gICAgICAgICAgICBSZXBvcnRJZDogcmVwb3J0SWQsXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVwb3J0RXhlY3V0ZVByb21pc2UodWx2UGFyYW1zOiBVbHZQYXJhbVR5cGUpOiBQcm9taXNlPE1vRm9yUmVwb3J0TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPE1vRm9yUmVwb3J0TW9kZWw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLkJ3LkV4ZWN1dGVSZXBvcnQoXG4gICAgICAgICAgICAgICAgeyB1bHZQYXJhbXMgfSxcbiAgICAgICAgICAgICAgICAocmVzdWx0OiBSZXBvcnRNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5EYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtUGFuZWxzW2lkXSA9IGZvcm1wYW5lbEN0cmxyO1xuICAgIH1cbiAgICBzZXRVc2VyTG9naW5TdGF0dXMoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xvZ2dlZEluU291cmNlLm5leHQoc3RhdHVzKTtcbiAgICB9XG4gICAgZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgocGFnZURhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHRyYWN0QWxsUGFnZXNfT2xkKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICBwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHBhZ2VEYXRhLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgICAgICBjb25maWcucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCBwYXRoLCBwYWdlRGF0YS5IYXNBdXRob3JpemUsIHBhZ2VEYXRhLlBhZ2VNb2R1bGU/LiRDYXB0aW9uLCBudWxsLCBudWxsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChwYWdlRGF0YS5Jc0RlZmF1bHRSb3V0ZSB8fCBwYWdlRGF0YS5Jc0RlZmF1bHRSb3V0ZSA9PT0gJ1RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Um91dGUgPSBwYXRoO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wdXNoKHRoaXMuY3JlYXRlUm91dGUocGFnZURhdGEsICcnLCBmYWxzZSwgcG9ydGFsRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgcGF0aCwgbnVsbCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGlmICh0aGlzLl9sb2NhdGlvbi5wYXRoKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGVmYXVsdFJvdXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5yb3V0ZUluaXRpYWxpemVkKCk7XG4gICAgfVxuICAgIHNzb0xvZ2luKCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dpbicsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gc3NvIGxvZ2luLicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgc3NvTG9nb3V0KCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dvdXQnLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIHNzbyBsb2dvdXQuJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cbiAgICBhZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhOiBQYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlRGF0YSk7XG4gICAgICAgIGlmICghcGFnZURhdGEuQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGFnZURhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkUGFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKGNoaWxkUGFnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCBwYXRoLCBoYXNBdXRob3JpemVkLCBtb2R1bGVOYW1lLCByZWRpcmVjdFRvLCBpc0R5bmFtaWNSb3V0ZSk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjcmVhdGVSb3V0ZTIoXG4gICAgICAgIHBhZ2VEYXRhLFxuICAgICAgICBwYXRoLFxuICAgICAgICBoYXNBdXRob3JpemVkLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgICByZWRpcmVjdFRvOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgICAgaXNEeW5hbWljUm91dGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IFJvdXRlIHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGg6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29uc3QgdW1kID0gbW9kdWxlTmFtZTtcbiAgICAgICAgbW9kdWxlUGF0aCA9IG1vZHVsZVBhdGguc3Vic3RyaW5nKDEsIG1vZHVsZVBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZHluYW1pY1JvdXRlOiBSb3V0ZSA9IHt9O1xuICAgICAgICBkeW5hbWljUm91dGUucGF0aCA9IHBhdGg7XG4gICAgICAgIGR5bmFtaWNSb3V0ZS5kYXRhID0geyBwYWdlRGF0YSB9O1xuICAgICAgICBpZiAoIWlzRHluYW1pY1JvdXRlKSB7XG4gICAgICAgICAgICBkeW5hbWljUm91dGUucmVzb2x2ZSA9IHtcbiAgICAgICAgICAgICAgICBwYWdlRGF0YTogUG9ydGFsUGFnZVJlc29sdmVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoID09PSAnJykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnBhdGhNYXRjaCA9ICdmdWxsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhhc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljUm91dGUuY2FuQWN0aXZhdGUgPSBbQXV0aEd1YXJkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5sb2FkQ2hpbGRyZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzOiBMaWJyYXJ5RGVwZW5lY3lbXSA9IEpTT04ucGFyc2UocGFnZURhdGEuRGVwZW5kZW5jaWVzKTsgLy8gZXZhbChwYWdlRGF0YS5EZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VMaWJyYXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZWJhYk5hbWU6IG1vZHVsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHVtZCxcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0QXM6IFttb2R1bGVOYW1lXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzJCA9IGZyb20oZGVwZW5kZW5jaWVzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSkgPT4gdGhpcy5jb21waWxlTW9kdWxlKGRlcGVuZGVuY3kpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtkZXBlbmRlbmNpZXMkXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0TW9kdWxlKHBhZ2VMaWJyYXJ5KSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgobW9kdWxlcykgPT4gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucm91dGVJbml0aWFsaXplZCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGR5bmFtaWNSb3V0ZTtcbiAgICB9XG4gICAgcm91dGVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2dpbkJ5QW5vbnltb3VzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmxvZ2luTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvZ2luUG9ydGFsKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzdWx0OiBMb2dpblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmRlYnVnKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCYXJzYUFwaS5Mb2dpbkFjdGlvbi50b2tlbjJTdG9yYWdlS2V5LCByZXN1bHQuZGF0YS5zdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbkxvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0UGFnZURhdGEodXJsOiBzdHJpbmcsIGlzUm9vdDogYm9vbGVhbik6IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKGlzUm9vdCB8fCB1cmwgPT09ICcnIHx8IHVybCA9PT0gJy8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmluZGV4T2YoJz8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZmluZFBhZ2VCeVJvdXRlKHVybCk7XG5cbiAgICAgICAgdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgICAgICAubG9hZFBvcnRhbFBhZ2VEYXRhKHBhZ2VEYXRhPy5JZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfSksXG5cbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdO1xuICAgIH1cbiAgICBwdWJsaWMgcmVzb2x2ZURhdGEocm91dGVQYWdlRGF0YSk6IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgLy8gY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUgJiYgYy5Nb2R1bGUgPT09IHJvdXRlUGFnZURhdGEuTW9kdWxlKTtcbiAgICAgICAgY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUpO1xuICAgICAgICBpZiAoIXBhZ2VEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBwYWdlRGF0YS5JZDtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZWRQYWdlRGF0YVtpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSA9IHRoaXMuYXBpU2VydmljZVxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfSksXG5cbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF07XG4gICAgfVxuXG4gICAgYWRkQ2hpbGRSb3V0ZShwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRDaGlsZFJvdXRlX09sZChwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFDaGlsZFBhZ2VMaXN0Py5Nb0RhdGFMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYWdlTW8uUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgY29uc3QgcGFyZW50Um91dGUgPSBjb25maWcuZmluZCgoYykgPT4gKGMucGF0aCA9IHBhcmVudFBhdGgpKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IFJvdXRlW10gPSBbXTtcbiAgICAgICAgaWYgKHBhcmVudFJvdXRlKSB7XG4gICAgICAgICAgICBDaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY2hpbGQuUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJvdXRlID0gdGhpcy5jcmVhdGVSb3V0ZShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLkhhc0F1dGhvcml6ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuUGFnZU1vZHVsZT8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGRyb3V0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgICAgICAgICAocGFyZW50Um91dGUgYXMgYW55KS5fbG9hZGVkQ29uZmlnLnJvdXRlc1swXS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUG9ydGFsRGF0YV9PbGQxKCk6IE9ic2VydmFibGU8UG9ydGFsRGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbFR5cGVEZWZJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCgocG9ydGFsU2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nLkRhdGEuTW87XG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBmcm9tKHRoaXMubG9hZFN5c3RlbSgpKSksXG4gICAgICAgICAgICB0YXAoKGFsbCkgPT4gdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jX09sZDIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmcgPSB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbFN5bmMoXG4gICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLFxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmcuRGF0YS5NbztcblxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLmxvYWRTeXN0ZW0oKTtcblxuICAgICAgICB0aGlzLmRhdGVUZXh0U291cmNlLm5leHQoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EYXRlVGV4dCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2dldERlZmF1bHRQYWdlKGM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFjIHx8ICFjLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHggPSBjLmZpbmQoKGMpID0+IGMuSXNEZWZhdWx0Um91dGUgPT09ICdUcnVlJyk7XG4gICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeDI6IGFueSA9IG51bGw7XG4gICAgICAgIGMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHgyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeDIgPSB0aGlzLl9nZXREZWZhdWx0UGFnZShlbGVtZW50LkNoaWxkUGFnZUxpc3Q/Lk1vRGF0YUxpc3QpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHgyO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jKCk6IHZvaWQge1xuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9ydGFsU2V0dGluZ1N0ciA9IEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kKCdHZXRQb3J0YWwnLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkKTtcbiAgICAgICAgY29uc3QgcG9ydGFsU2V0dGluZyA9IEJhcnNhQXBpLkV4dC5kZWNvZGUocG9ydGFsU2V0dGluZ1N0cik7XG4gICAgICAgIGNvbnN0IHBvcnRhbERhdGE6IFBhZ2VEYXRhTW9kZWwgPSBwb3J0YWxTZXR0aW5nO1xuICAgICAgICBpZiAocG9ydGFsRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhZ2UgPSB0aGlzLl9nZXREZWZhdWx0UGFnZShwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdCk7XG4gICAgICAgICAgICB0aGlzLkRlZmF1bHRQYWdlID0gZGVmYXVsdFBhZ2U7XG4gICAgICAgICAgICBsZXQgY29uZmlnUm91dGUgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlUGFnZWQ6IFJvdXRlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbmZpZ1JvdXRlLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSAnLycgKyBjLnBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKGMucGF0aCAhPT0gJycgJiYgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZmluZEluZGV4KChkKSA9PiBkLlJvdXRlID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVBhZ2VkLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoVG9SZW1vdmUgPSByZW1vdmVQYWdlZC5tYXAoKGQpID0+IGQucGF0aCk7XG4gICAgICAgICAgICBjb25maWdSb3V0ZSA9IGNvbmZpZ1JvdXRlLmZpbHRlcigoYykgPT4gcGF0aFRvUmVtb3ZlLmluZGV4T2YoYy5wYXRoKSA9PT0gLTEpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRQYWdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0UGFnZVJvdXRlID0gZGVmYXVsdFBhZ2UuUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGNvbmZpZ1JvdXRlLmZpbmQoKGMpID0+IGMucGF0aCA9PT0gJycpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRQYXRoICYmIChkZWZhdWx0UGF0aC5yZWRpcmVjdFRvID0gZGVmYXVsdFBhZ2VSb3V0ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnUm91dGUucHVzaCh7IHBhdGg6ICcqKicsIHJlZGlyZWN0VG86IGRlZmF1bHRQYWdlUm91dGUgfSk7XG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgbm90Rm91bmRQYXRoID0gY29uZmlnUm91dGUuZmluZCgoYykgPT4gYy5wYXRoID09PSAnKionKTtcbiAgICAgICAgICAgICAgICAvLyBub3RGb3VuZFBhdGggJiYgKG5vdEZvdW5kUGF0aC5yZWRpcmVjdFRvID0gZGVmYXVsdFBhZ2UuUm91dGUucmVwbGFjZSgnLycsICcnKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnUm91dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGEgYXMgUG9ydGFsRGF0YU1vZGVsKTtcblxuICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhIGFzIFBvcnRhbERhdGFNb2RlbCk7XG5cbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xuICAgIH1cbiAgICBwdWJsaWMgU2hvd0Zvcm0oZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgbmFtYTogc3RyaW5nOyBhZnRlclJlYWR5PzogKGU6IGFueSkgPT4gdm9pZCB9KTogdm9pZCB7XG4gICAgICAgIEJhcnNhQXBpLkJ3LkZvcm0uU2hvdyh7XG4gICAgICAgICAgICBNbzogZS5tbyxcbiAgICAgICAgICAgIE1vQ29udGV4dDoge1xuICAgICAgICAgICAgICAgIFZpZXdOYW1lOiBlLm5hbWFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBFdmVudEhhbmRsZXJzOiB7XG4gICAgICAgICAgICAgICAgQWZ0ZXJSZWFkeTogZnVuY3Rpb24gKHNlbmRlciwgZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9kbyBzb21ldGhpbmcgaGVyZVxuICAgICAgICAgICAgICAgICAgICBlLmFmdGVyUmVhZHk/LihlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIGdldCBsb2dpblJvdXRlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAgICAgbWFwKChwb3J0YWxEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9naW5QYWdlID0gcG9ydGFsRGF0YT8uQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuSXNMb2dpblJvdXRlID09PSAnVHJ1ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dpblBhZ2U/LlJvdXRlIHx8ICdsb2dpbic7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgRXhlY3V0ZU5vdGlmaWNhdGlvbkFjdGlvbihpZDogc3RyaW5nLCBhY3Rpb25UaXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAgICAgUGFyYW1ldGVyczogW2lkLCBhY3Rpb25UaXRsZV0sXG4gICAgICAgICAgICBNZXRob2Q6ICdFeGVjdXRlTm90aWZpY2F0aW9uQWN0aW9uJyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGU6IHtcbiAgICAgICAgICAgICAgICBNbzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICAgICAgICAgICAgICBEeW5hbWljQ29tbWFuZElkOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgU2hvd0Zvcm1TZXR0aW5nOiB7IE1vSWQ6IHN0cmluZzsgVmlld05hbWU6IHN0cmluZyB9O1xuICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVB1c2hBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoZS5EeW5hbWljQ29tbWFuZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVEeW5hbWljQ29tbWFuZCh7IElkOiBlLkR5bmFtaWNDb21tYW5kSWQgfSwgZS5Nbyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLlNob3dGb3JtU2V0dGluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IE1vSWQsIFZpZXdOYW1lIH0gPSBlLlNob3dGb3JtU2V0dGluZztcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBCYXJzYUFwaS5Cdy5Gb3JtLlNob3coeyBNb0lkLCBNb0NvbnRleHQ6IHsgVmlld05hbWUgfSB9KSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVB1c2hBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFVzZXJQb3J0YWxTZXR0aW5nKCk6IHZvaWQge1xuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdWx2UGFyYW1zID0ge1xuICAgICAgICAgICAgRmxhZ3M6IHtcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXG4gICAgICAgICAgICAgICAgRXh0cmE6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgU2VhcmNoOiAnRmFsc2UnLFxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmFsOlwiRmFsc2VcIiwgLy8gdWx2bWFpbmN0cmwgZG9lcyBub3QgY3JhZXRlIHVpIGNvbnRyb2wgcmFpc2UgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXBvcnROYW1lOiAnX9iq2YbYuNmK2YXYp9iqX9m+2KfZitmHX9m+2YjYsdiq2KfZhCcsXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXG4gICAgICAgIH07XG4gICAgICAgIEJhcnNhQXBpLkJ3LkV4ZWN1dGVSZXBvcnQoXG4gICAgICAgICAgICB7IHVsdlBhcmFtcyB9LFxuICAgICAgICAgICAgKHJlc3VsdDogUmVwb3J0TW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2xpc3QgPSByZXN1bHQuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJQb3J0YWxTZXR0aW5nOiBSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPiA9IHt9O1xuICAgICAgICAgICAgICAgIG1vbGlzdC5mb3JFYWNoKChtbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW8uSW5oZXJpdGFuY2UgJiYgbW8uSW5oZXJpdGFuY2UuJFR5cGVEZWZOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyUG9ydGFsU2V0dGluZ1ttby5Jbmhlcml0YW5jZS4kVHlwZURlZk5hbWVdID0gbW8uSW5oZXJpdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLm5leHQodXNlclBvcnRhbFNldHRpbmcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XG4gICAgICAgIC8vICAgICBQYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgLy8gICAgIE1ldGhvZDogJ0dldFVzZXJQb3J0YWxTZXR0aW5ncycsXG4gICAgICAgIC8vICAgICBTdWNjZXNzRm46ICh1c2VyUG9ydGFsU2V0dGluZzogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIEZhaWxGbjogKGUpID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgIH1cbiAgICBsb2FkU2VydmVyU3RhcnR1cERhdGEoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIUJhcnNhQXBpLk9mZmxpbmUuaGFzSW5pdCkge1xuICAgICAgICAgICAgICAgIEJhcnNhQXBpLk9mZmxpbmUuYWZ0ZXJJbml0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTdGFydHVwRGF0YShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgdGhpcy5fbG9hZFNlcnZlclN0YXJ0dXBEYXRhKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbG9hZFNlcnZlclN0YXJ0dXBEYXRhKHJlc29sdmUsIHJlamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhamF4SGVscGVyID0gdHlwZW9mIEFqYXhIZWxwZXIyID09PSAndW5kZWZpbmVkJyA/IEFqYXhIZWxwZXIgOiBBamF4SGVscGVyMjtcbiAgICAgICAgYWpheEhlbHBlci5BamF4UmVxdWVzdChcbiAgICAgICAgICAgICcvYXBpL2Jhc2UvU2VydmVyU3RhcnR1cERhdGEnLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICBkYXRhVGV4dCA9IGRhdGFUZXh0LnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgICAgICAgICAgZGF0YVRleHQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5SZXBsYWNlQXJhYmljQ2hhcmNodGVyKGRhdGFUZXh0KTtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm0uUG9ydGFsSW5pdGlhbGl6ZShkYXRhVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuRXJyb3IoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJhcnNhQXBpLkJ3Lk1zZy5FcnJvcign2KfZhdqp2KfZhiDZiNix2YjYryDYqNinINqp2KfYsdio2LEg2b7ZiNix2KrYp9mEINmI2KzZiNivINmG2K/Yp9ix2K8uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1NlcnZpY2VEZXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1swXS5yZWRpcmVjdFRvID0gJ3NlcnZpY2VkZXNrJztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdEFmdGVyTG9naW5Gb3JtRGF0YSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJvciBpbiBnZXQgc2VydmVyIHN0YXJ0dXAgZGF0YS4nKTtcbiAgICAgICAgICAgICAgICByZWplY3QoJ2Vycm9yIGluIGdldCBzZXJ2ZXIgc3RhcnR1cCBkYXRhLicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBTaG93Rm9ybVBhbmVsQ29udHJvbChcbiAgICAgICAgZm9ybXBhbmVsQ3RybHI6IGFueSxcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgICAgIGlzUGFnZTogYm9vbGVhbixcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpc1JlbG9hZDogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghZm9ybXBhbmVsQ3RybHIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9ybSBwYW5lbCBjb250cm9sZXIgaXMgdW5kZWZpbmVkIScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vID0gZm9ybXBhbmVsQ3RybHIuTW87XG4gICAgICAgIGNvbnN0IGhlYWRlckxheW91dCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkhlYWRlckxheW91dCcsIG51bGwpO1xuICAgICAgICBsZXQgaXNNb2RhbCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkV4dHJhSnNvblByb3AuTW9kYWwnLCBmYWxzZSk7XG4gICAgICAgIGlzTW9kYWwgPVxuICAgICAgICAgICAgaXNNb2RhbCB8fFxuICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoZm9ybXBhbmVsQ3RybHIsICdTZXR0aW5nLlZpZXcuQ3VzdG9tVWkuUGFyYW1ldGVycy5Jc01vZGFsJywgZmFsc2UpO1xuICAgICAgICBjb25zdCBtb2RhbFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyLFxuICAgICAgICAgICAgJ1NldHRpbmcuVmlldy5DdXN0b21VaS5QYXJhbWV0ZXJzLk1vZGFsU2V0dGluZycsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtb2RhbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGlzTW9kYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLlNldHRpbmcuSXNNb2RhbCA9IGlzTW9kYWw7XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLklzTW9kYWwgPSBpc01vZGFsO1xuICAgICAgICBjb25zdCBicmVhZENydW1iID0gZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5CcmVhZENydW1iKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogbW8uJFN0YXRlID09PSAnTmV3JyA/ICcwJyA6IG1vLklkLFxuICAgICAgICAgICAgdHlpZDogbW8uJFR5cGVEZWZJZCxcbiAgICAgICAgICAgIHR5Y3A6IG1vLiRDYXB0aW9uID8gbW8uJENhcHRpb24gOiBudWxsLFxuICAgICAgICAgICAgcmVwaWQ6IG1vLiRSZXBvcnRJZCxcbiAgICAgICAgICAgIHZpZDogZm9ybXBhbmVsQ3RybHI/LlNldHRpbmc/LlZpZXc/LlR5cGVWaWV3SWQsXG4gICAgICAgICAgICBiYzogYnJlYWRDcnVtYiA/IGJyZWFkQ3J1bWIgOiBtby4kU3RhdGUgPT09ICdOZXcnID8gbW8uJFR5cGVEZWZOYW1lIDogbW8uJENhcHRpb25cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRVbmlxdWVJZCg0KTtcbiAgICAgICAgdGhpcy5hZGRGb3JtUGFuZWxDdHJscihpZCwgZm9ybXBhbmVsQ3RybHIpO1xuICAgICAgICB0aGlzLm9wZW5Gb3JtJC5uZXh0KCk7IC8vIGV2ZW50IGVtaXQgZm9yIG90aGVyIGNvbXBvbmVudHMgdG8ga25vdyBmb3JtIG9wZW5cbiAgICAgICAgaWYgKGlzTW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Rm9ybShcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAuLi5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybXBhbmVsQ3RybHJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZjclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBmb3JtUGFuZWxDdHJscklkOiBpZCB9O1xuICAgICAgICAgICAgaWYgKGlzUGFnZSkge1xuICAgICAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogWydzaG93JywgeyAuLi5xdWVyeVBhcmFtcywgZm9ybVBhbmVsQ3RybHJJZDogaWQsIGlzRmlyc3Q6IHRydWUgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiBbJ3Nob3cnLCB7IC4uLnF1ZXJ5UGFyYW1zLCBmb3JtUGFuZWxDdHJscklkOiBpZCB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkU3lzdGVtKGlkOiBudW1iZXIgPSAwKTogUHJvbWlzZTxQb3J0YWxEYXRhTW9kZWw+IHtcbiAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSAwKSB7XG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkRlZmF1bHRTeXN0ZW1JZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuX2xvYWRTeXN0ZW0oXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlUHVzaEFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHVzaEFjdGlvblN0ciA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdXNoQWN0aW9uJyk7XG4gICAgICAgIGlmIChwdXNoQWN0aW9uU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlKCdwdXNoQWN0aW9uJyk7XG4gICAgICAgICAgICBjb25zdCBwdXNoQWN0aW9uID0gSlNPTi5wYXJzZShwdXNoQWN0aW9uU3RyKTtcbiAgICAgICAgICAgIHRoaXMuX3B1c2hBY3Rpb24kLm5leHQocHVzaEFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hlY2tMb2NhbFN0b3JhZ2VQdXNoQWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwdXNoQWN0aW9uU3RyID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1c2hBY3Rpb24nKTtcbiAgICAgICAgaWYgKHB1c2hBY3Rpb25TdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmUoJ3B1c2hBY3Rpb24nKTtcbiAgICAgICAgICAgIGNvbnN0IHB1c2hBY3Rpb24gPSBKU09OLnBhcnNlKHB1c2hBY3Rpb25TdHIpO1xuICAgICAgICAgICAgdGhpcy5fcHVzaEFjdGlvbiQubmV4dChwdXNoQWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9pbml0QWZ0ZXJMb2dpbkZvcm1EYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJ0bFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNSdGwpO1xuICAgICAgICB0aGlzLl9pc0Fub251bW91c1NvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMpO1xuICAgICAgICB0aGlzLnNldFVzZXJMb2dpblN0YXR1cyhCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5Tb3VyY2UubmV4dCh0aGlzLl9sb2dnZWRJblNvdXJjZS5nZXRWYWx1ZSgpICYmIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMgPT09IGZhbHNlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdFZpc2liaWxpdHlDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbml0U3RhbmRhbG9uZSgpOiB2b2lkIHtcbiAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2ggPSBlLm1hdGNoZXM7XG5cbiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhbmRhbG9uZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhbmRhbG9uZSQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbml0UHVzaEFjdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9jYWxTdG9yYWdlUHVzaEFjdGlvbigpO1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnVzZXJMb2dnZWRJbiQsIHRoaXMucHVzaEFjdGlvbiRdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gd2l0aExhdGVzdEZyb20odGhpcy5fcG9ydGFsU2VydmljZS5wdXNoQWN0aW9uJCksXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyKChbdXNlckxvZ2dlZGluLCBhY3Rpb25dKSA9PiB1c2VyTG9nZ2VkaW4pXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbdXNlckxvZ2dlZGluLCBwdXNoQWN0aW9uXSkgPT4gdXNlckxvZ2dlZGluKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3VzZXJMb2dnZWRpbiwgcHVzaEFjdGlvbl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHVzaEFjdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHVzaEFjdGlvbi5ub3RpZmljYXRpb25UYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXNoQWN0aW9uLm1vaWQgJiYgcHVzaEFjdGlvbi50cGlkICYmIHB1c2hBY3Rpb24uYWN0aW9uID09ICdzaG93Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gQmFyc2FBcGkuQncuRm9ybS5TaG93KHsgTW9JZDogcHVzaEFjdGlvbi5tb2lkIH0pLCA1MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5FeGVjdXRlTm90aWZpY2F0aW9uQWN0aW9uKHB1c2hBY3Rpb24ubm90aWZpY2F0aW9uVGFnLCBwdXNoQWN0aW9uLmFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdExhbmRzY2FwZSgpOiB2b2lkIHtcbiAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2ggPSBlLm1hdGNoZXM7XG5cbiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlTGFuZHNjYXBlJC5uZXh0KGZhbHNlKTsgLy8gcG9ydHJhaXRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlTGFuZHNjYXBlJC5uZXh0KHRydWUpOyAvLyBsYW5kc2NhcGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgZmluZFBhZ2VCeVJvdXRlKHVybDogc3RyaW5nKTogUGFnZURhdGFNb2RlbCB8IG51bGwge1xuICAgICAgICBjb25zdCBmaW5kZWRQYWdlID0gdGhpcy5wYWdlcy5maW5kKChjKSA9PiBjLlJvdXRlID09PSB1cmwpO1xuICAgICAgICByZXR1cm4gZmluZGVkUGFnZSB8fCBudWxsO1xuICAgIH1cbiAgICBwcml2YXRlIGdldE5nTW9kdWxlRmFjdG9yeShtb2R1bGVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBtb2R1bGVOYW1lOiBzdHJpbmcpOiBOZ01vZHVsZUZhY3Rvcnk8YW55PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNsYXNzID0gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddO1xuICAgICAgICBsZXQgbW9kdWxlRmFjdG9yeTogTmdNb2R1bGVGYWN0b3J5PGFueT47XG4gICAgICAgIGlmIChtb2R1bGVDbGFzcyBpbnN0YW5jZW9mIE5nTW9kdWxlRmFjdG9yeSkge1xuICAgICAgICAgICAgbW9kdWxlRmFjdG9yeSA9IG1vZHVsZUNsYXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcGlsZWQgPSB0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhtb2R1bGVDbGFzcyk7XG4gICAgICAgICAgICBtb2R1bGVGYWN0b3J5ID0gY29tcGlsZWQubmdNb2R1bGVGYWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVGYWN0b3J5O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVnaXN0ZXJlZE1vZHVsZXModW1kOiBzdHJpbmcsIGV4cG9ydEFzOiBzdHJpbmdbXSwgbW9kdWxlTmFtZTogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIGxldCBtb2R1bGVzO1xuICAgICAgICBpZiAodW1kICE9PSAnJykge1xuICAgICAgICAgICAgbW9kdWxlcyA9IHdpbmRvdztcbiAgICAgICAgICAgIHVtZC5zcGxpdCgnLicpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZXMgIT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyA9IG1vZHVsZXNbY107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGVzID0gd2luZG93W21vZHVsZU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBvcnRBcy5sZW5ndGggPiAwICYmIG1vZHVsZXMpIHtcbiAgICAgICAgICAgIGV4cG9ydEFzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlT25PYmplY3QoYywgMCwgbW9kdWxlcywgd2luZG93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGlicmFyeURlcGVuZWN5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2ViYWJOYW1lOiBzdHJpbmc7XG4gICAgdW1kOiBzdHJpbmc7XG4gICAgZXhwb3J0QXM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBCcmVhZENydW1iSW5mbyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG59XG4iXX0=
|
|
@@ -2740,7 +2740,7 @@ class FormPanelService extends BaseComponent {
|
|
|
2740
2740
|
const isMobile = getDeviceIsMobile();
|
|
2741
2741
|
const isTablet = getDeviceIsTablet();
|
|
2742
2742
|
let newItems = items.filter((c) => !c.hidden &&
|
|
2743
|
-
!((isMobile || isTablet) &&
|
|
2743
|
+
!((isMobile || isTablet || BarsaApi.LoginFormData.IsServiceDesk) &&
|
|
2744
2744
|
(c.itemId === 'Next' ||
|
|
2745
2745
|
c.itemId === 'Previous' ||
|
|
2746
2746
|
c.itemId === 'MoveNext' ||
|
|
@@ -3423,7 +3423,7 @@ class PortalService {
|
|
|
3423
3423
|
else {
|
|
3424
3424
|
_windoWSize = 'xl';
|
|
3425
3425
|
}
|
|
3426
|
-
if (_ismobile) {
|
|
3426
|
+
if (_ismobile && _windoWSize !== 'l' && _windoWSize !== 'xl' && _windoWSize !== 'm') {
|
|
3427
3427
|
return 's';
|
|
3428
3428
|
}
|
|
3429
3429
|
if (_isTablet && _windoWSize !== 'l' && _windoWSize !== 'xl') {
|